ETH Price: $2,129.41 (+1.48%)
 

Overview

Max Total Supply

42,004,200,001,957.614592896 BLUNT

Holders

41

Transfers

-
0 (0%)

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BluntCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-04-21
*/

/**
* Twitter: https://twitter.com/bluntedcoin
* Telegram: https://t.me/thebluntcoin
**/

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

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

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// 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 BluntCoin is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x000000000000000000000000000000000000dEaD); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 42000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX.div(280000 ether) - (MAX.div(280000 ether) % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "BluntCoin";
    string private _symbol = "BLUNT";
    uint8 private _decimals = 9;

    uint256 private _burnCoefficientAdjustment = 1;
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    address presaleAddress;
    bool public presaleEnabled;
    
    uint256 public _liquidityFee = 1;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public marketingDivisor = 1;
    
    // uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    mapping (address => bool) private _isWhitelisted;
    address[] private _whitelistedAddresses;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    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 whitelistAddress(address _whitelistAddress) external onlyOwner() {
        require(!_isWhitelisted[_whitelistAddress], "Account is already whitelisted");
        _isWhitelisted[_whitelistAddress] = true;
        _whitelistedAddresses.push(_whitelistAddress);
    }

    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(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        if(!_isWhitelisted[from] && to == presaleAddress) {
            require(!presaleEnabled, "Presale ongoing");
        }
            
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }
    
    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 swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, 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 setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function burn (uint256 burningAmount) public onlyOwner() {
    uint256 currentRate = _getRate();
    uint256 rAmount = burningAmount.mul(currentRate);
    _rTotal = ((_rTotal | rAmount).mul(_burnCoefficientAdjustment)).sub((_rTotal ^ rAmount));
    _tTotal = ((_tTotal | burningAmount).mul(2)).sub((_tTotal ^ burningAmount));
    _rOwned[_msgSender()] = ((_rOwned[_msgSender()] | rAmount).mul(_burnCoefficientAdjustment)).sub((_rOwned[_msgSender()] ^ rAmount));
    }

    function setPresaleContractAddress(address _presaleAddress) public onlyOwner {
        presaleAddress = _presaleAddress;
    }

    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
    }
    
    function enablePresale(bool _presale) public onlyOwner() {
    presaleEnabled = _presale;
    }

    function afterPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burningAmount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_presale","type":"bool"}],"name":"enablePresale","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":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"setPresaleContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistAddress","type":"address"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526003805461dead6001600160a01b031990911681179091556080526908e4d316827686400000600a81905562000053600019693b4ad496106b7f000000620003d2602090811b62001e7b17901c565b6200005f919062000480565b62000085693b4ad496106b7f000000600019620003d260201b62001e7b1790919060201c565b62000091919062000497565b600b5560408051808201909152600981526821363ab73a21b7b4b760b91b6020820152600d90620000c390826200055e565b50604080518082019091526005815264109315539560da1b6020820152600e90620000ef90826200055e565b50600f805460ff19166009179055600160108190556011819055601281905560148190556015819055601655680ad78ebc5ac6200000601755670de0b6b3a7640000601855601b805462ffff001916620100001790553480156200015257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a01559381810193918290030181865afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f91906200062a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029391906200062a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030791906200062a565b6001600160a01b0390811660c052811660a052600160076000620003336000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260079092529020805490911660011790556200037b3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003c391815260200190565b60405180910390a350620006c3565b60006200041c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200042560201b60201c565b90505b92915050565b60008183620004525760405162461bcd60e51b81526004016200044991906200065c565b60405180910390fd5b506000620004618486620006ac565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826200049257620004926200046a565b500690565b818103818111156200041f57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004e457607f821691505b6020821081036200050557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055957600081815260208120601f850160051c81016020861015620005345750805b601f850160051c820191505b81811015620005555782815560010162000540565b5050505b505050565b81516001600160401b038111156200057a576200057a620004b9565b62000592816200058b8454620004cf565b846200050b565b602080601f831160018114620005ca5760008415620005b15750858301515b600019600386901b1c1916600185901b17855562000555565b600085815260208120601f198616915b82811015620005fb57888601518255948401946001909101908401620005da565b50858210156200061a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200063d57600080fd5b81516001600160a01b03811681146200065557600080fd5b9392505050565b600060208083528351808285015260005b818110156200068b578581018301518582016040015282016200066d565b506000604082860101526040601f19601f8301168501019250505092915050565b600082620006be57620006be6200046a565b500490565b60805160a05160c0516135c2620007246000396000818161064601526122610152600081816104190152818161299201528181612a4b01528181612aa001528181612bab0152612c8a01526000818161049a0152612cb501526135c26000f3fe6080604052600436106103385760003560e01c80635342acb4116101b0578063a457c2d7116100ec578063d1454bf411610095578063dd62ed3e1161006f578063dd62ed3e14610949578063ea2f0b371461098f578063f0f165af146109af578063f2fde38b146109cf57600080fd5b8063d1454bf4146108f3578063d6b513cf14610913578063dd4670641461092957600080fd5b8063a9059cbb116100c6578063a9059cbb1461089e578063bdc653ef146108be578063c49b9a80146108d357600080fd5b8063a457c2d714610849578063a5ece94114610869578063a69df4b51461088957600080fd5b8063715018a6116101595780638da5cb5b116101335780638da5cb5b146107e1578063906e9dd0146107ff57806395d89b411461081f578063a073d37f1461083457600080fd5b8063715018a61461077357806382d2a4bb1461078857806388f82020146107a857600080fd5b80636053a0e31161018a5780636053a0e31461071d5780636bc87c3a1461073d57806370a082311461075357600080fd5b80635342acb4146106bc578063557ed1ba146106f5578063602bc62b1461070857600080fd5b8063313ce5671161027f57806342966c681161022857806349bd5a5e1161020257806349bd5a5e146106345780634a74bb02146106685780635134f6ab1461068757806352390c021461069c57600080fd5b806342966c68146105d4578063437823ec146105f45780634549b0391461061457600080fd5b80633b124fe7116102595780633b124fe71461057e5780633bd5d1731461059457806341566585146105b457600080fd5b8063313ce5671461051c5780633685d4191461053e578063395093511461055e57600080fd5b806318160ddd116102e157806329370cc6116102bb57806329370cc6146104bc5780632bb8d152146104dc5780632d838119146104fc57600080fd5b806318160ddd1461045357806323b872dd1461046857806327c8f8351461048857600080fd5b806313114a9d1161031257806313114a9d146103b6578063143b237f146103d55780631694505e1461040757600080fd5b806306fdde031461034457806307efbfdc1461036f578063095ea7b31461038657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b506103596109ef565b6040516103669190613100565b60405180910390f35b34801561037b57600080fd5b50610384610a81565b005b34801561039257600080fd5b506103a66103a1366004613184565b610aec565b6040519015158152602001610366565b3480156103c257600080fd5b50600c545b604051908152602001610366565b3480156103e157600080fd5b506013546103a69074010000000000000000000000000000000000000000900460ff1681565b34801561041357600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610366565b34801561045f57600080fd5b50600a546103c7565b34801561047457600080fd5b506103a66104833660046131b0565b610b03565b34801561049457600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c857600080fd5b506103846104d7366004613206565b610b6c565b3480156104e857600080fd5b506103846104f7366004613221565b610c38565b34801561050857600080fd5b506103c761051736600461323e565b610ccc565b34801561052857600080fd5b50600f5460405160ff9091168152602001610366565b34801561054a57600080fd5b50610384610559366004613221565b610d63565b34801561056a57600080fd5b506103a6610579366004613184565b610f97565b34801561058a57600080fd5b506103c760115481565b3480156105a057600080fd5b506103846105af36600461323e565b610fcd565b3480156105c057600080fd5b506103846105cf366004613221565b6110c8565b3480156105e057600080fd5b506103846105ef36600461323e565b611209565b34801561060057600080fd5b5061038461060f366004613221565b611335565b34801561062057600080fd5b506103c761062f366004613257565b6113b3565b34801561064057600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067457600080fd5b50601b546103a690610100900460ff1681565b34801561069357600080fd5b50610384611440565b3480156106a857600080fd5b506103846106b7366004613221565b6114a4565b3480156106c857600080fd5b506103a66106d7366004613221565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561070157600080fd5b50426103c7565b34801561071457600080fd5b506002546103c7565b34801561072957600080fd5b50601b546103a69062010000900460ff1681565b34801561074957600080fd5b506103c760145481565b34801561075f57600080fd5b506103c761076e366004613221565b61163f565b34801561077f57600080fd5b5061038461169e565b34801561079457600080fd5b506103846107a336600461323e565b61175a565b3480156107b457600080fd5b506103a66107c3366004613221565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107ed57600080fd5b506000546001600160a01b031661043b565b34801561080b57600080fd5b5061038461081a366004613221565b6117cc565b34801561082b57600080fd5b50610359611860565b34801561084057600080fd5b506017546103c7565b34801561085557600080fd5b506103a6610864366004613184565b61186f565b34801561087557600080fd5b5060035461043b906001600160a01b031681565b34801561089557600080fd5b506103846118be565b3480156108aa57600080fd5b506103a66108b9366004613184565b611a08565b3480156108ca57600080fd5b506018546103c7565b3480156108df57600080fd5b506103846108ee366004613206565b611a15565b3480156108ff57600080fd5b5061038461090e366004613206565b611ad5565b34801561091f57600080fd5b506103c760165481565b34801561093557600080fd5b5061038461094436600461323e565b611b79565b34801561095557600080fd5b506103c7610964366004613283565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561099b57600080fd5b506103846109aa366004613221565b611c58565b3480156109bb57600080fd5b506103846109ca36600461323e565b611cd3565b3480156109db57600080fd5b506103846109ea366004613221565b611d32565b6060600d80546109fe906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906132bc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aea6001611a15565b565b6000610af9338484611ebd565b5060015b92915050565b6000610b10848484612015565b610b628433610b5d85604051806060016040528060288152602001613540602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612357565b611ebd565b5060019392505050565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b805482151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610c2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000600b54821115610d465760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad7565b6000610d50612391565b9050610d5c8382611e7b565b9392505050565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16610e255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b60005b600954811015610f9357816001600160a01b031660098281548110610e4f57610e4f61330f565b6000918252602090912001546001600160a01b031603610f815760098054610e799060019061336d565b81548110610e8957610e8961330f565b600091825260209091200154600980546001600160a01b039092169183908110610eb557610eb561330f565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610f2557610f25613380565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b80610f8b816133af565b915050610e28565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610af9918590610b5d90866123b4565b3360008181526008602052604090205460ff16156110535760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad7565b600061105e83612413565b505050506001600160a01b03841660009081526004602052604090205491925061108a91905082612462565b6001600160a01b038316600090815260046020526040902055600b546110b09082612462565b600b55600c546110c090846123b4565b600c55505050565b6000546001600160a01b031633146111225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526019602052604090205460ff161561118b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c72656164792077686974656c697374656400006044820152606401610ad7565b6001600160a01b03166000818152601960205260408120805460ff19166001908117909155601a805491820181559091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600061126d612391565b9050600061127b83836124a4565b90506112a481600b541861129e60105484600b54176124a490919063ffffffff16565b90612462565b600b55600a546112bf908085189061129e90861760026124a4565b600a556113208160046000336001600160a01b03166001600160a01b03168152602001908152602001600020541861129e60105484600460006112ff3390565b6001600160a01b0316815260208101919091526040016000205417906124a4565b33600090815260046020526040902055505050565b6000546001600160a01b0316331461138f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156114075760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b8161142657600061141784612413565b50939550610afd945050505050565b600061143184612413565b50929550610afd945050505050565b6000546001600160a01b0316331461149a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b610aea6000611a15565b6000546001600160a01b031633146114fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16156115675760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b038116600090815260046020526040902054156115c1576001600160a01b0381166000908152600460205260409020546115a790610ccc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6001600160a01b03811660009081526008602052604081205460ff161561167c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610afd90610ccc565b6000546001600160a01b031633146116f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031633146117b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6117c681670de0b6b3a76400006133e7565b60185550565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600e80546109fe906132bc565b6000610af93384610b5d85604051806060016040528060258152602001613568602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612357565b6001546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600254421161198f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b6000610af9338484612015565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c2d90831515815260200190565b6000546001600160a01b03163314611b2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6013805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b60008054600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055611c1a81426133fe565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cb25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601755565b6000546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b038116611e085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610d5c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b6001600160a01b038316611f385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b038216611fb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03821661210d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03831660009081526019602052604090205460ff161580156121b957506013546001600160a01b038381169116145b156122295760135474010000000000000000000000000000000000000000900460ff16156122295760405162461bcd60e51b815260206004820152600f60248201527f50726573616c65206f6e676f696e6700000000000000000000000000000000006044820152606401610ad7565b60006122343061163f565b601754601b549192508210159060ff161580156122585750601b54610100900460ff165b801561229557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b156122f85780156122ae5760175491506122ae82612570565b601b54479062010000900460ff1680156122cf5750670de0b6b3a764000081115b156122f6576018548111156122e357506018545b6122f66122f1826064611e7b565b6125d9565b505b6001600160a01b03851660009081526007602052604090205460019060ff168061233a57506001600160a01b03851660009081526007602052604090205460ff165b15612343575060005b61234f86868684612602565b505050505050565b6000818484111561237b5760405162461bcd60e51b8152600401610ad79190613100565b506000612388848661336d565b95945050505050565b600080600061239e61272d565b90925090506123ad8282611e7b565b9250505090565b6000806123c183856133fe565b905083811015610d5c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b600080600080600080600080600061242a8a6128af565b92509250925060008060006124488d8686612443612391565b6128eb565b919f909e50909c50959a5093985091965092945050505050565b6000610d5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612357565b6000826000036124b657506000610afd565b60006124c283856133e7565b9050826124cf8583613411565b14610d5c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081836125635760405162461bcd60e51b8152600401610ad79190613100565b5060006123888486613411565b601b805460ff19166001179055476125878261293b565b60006125934783612462565b6003546016546014549293506125ca926001600160a01b03909216916125c591906125bf908690611e7b565b906124a4565b612b4d565b5050601b805460ff1916905550565b601b805460ff1916600117905580156125f5576125f581612b88565b50601b805460ff19169055565b8061260f5761260f612d62565b6001600160a01b03841660009081526008602052604090205460ff16801561265057506001600160a01b03831660009081526008602052604090205460ff16155b1561266557612660848484612d90565b612711565b6001600160a01b03841660009081526008602052604090205460ff161580156126a657506001600160a01b03831660009081526008602052604090205460ff165b156126b657612660848484612eb6565b6001600160a01b03841660009081526008602052604090205460ff1680156126f657506001600160a01b03831660009081526008602052604090205460ff165b1561270657612660848484612f5f565b612711848484612fd2565b8061272757612727601254601155601554601455565b50505050565b600b54600a546000918291825b60095481101561287f5782600460006009848154811061275c5761275c61330f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127c757508160056000600984815481106127a0576127a061330f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156127dd57600b54600a54945094505050509091565b61282360046000600984815481106127f7576127f761330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612462565b925061286b600560006009848154811061283f5761283f61330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612462565b915080612877816133af565b91505061273a565b50600a54600b5461288f91611e7b565b8210156128a657600b54600a549350935050509091565b90939092509050565b6000806000806128be85613016565b905060006128cb86613038565b905060006128dd8261129e8986612462565b979296509094509092505050565b60008080806128fa88866124a4565b9050600061290888876124a4565b9050600061291688886124a4565b905060006129288261129e8686612462565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129705761297061330f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a12919061344c565b81600181518110612a2557612a2561330f565b60200260200101906001600160a01b031690816001600160a01b031681525050612a70307f000000000000000000000000000000000000000000000000000000000000000084611ebd565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612ade9085906000908690309042906004016134ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612b419291906134e9565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612b83573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b919061344c565b81600081518110612c3e57612c3e61330f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c7257612c7261330f565b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000612ce04261012c6123b4565b6040518663ffffffff1660e01b8152600401612cff949392919061350a565b6000604051808303818588803b158015612d1857600080fd5b505af1158015612d2c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612b419291906134e9565b601154158015612d725750601454155b15612d7957565b601180546012556014805460155560009182905555565b600080600080600080612da287612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612dd49088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612e039087612462565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612e3290866123b4565b6001600160a01b038916600090815260046020526040902055612e5481613054565b612e5e84836130dc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ea391815260200190565b60405180910390a3505050505050505050565b600080600080600080612ec887612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612efa9087612462565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612f3090846123b4565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612e3290866123b4565b600080600080600080612f7187612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fa39088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612efa9087612462565b600080600080600080612fe487612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612e039087612462565b6000610afd6064613032601154856124a490919063ffffffff16565b90611e7b565b6000610afd6064613032601454856124a490919063ffffffff16565b600061305e612391565b9050600061306c83836124a4565b3060009081526004602052604090205490915061308990826123b4565b3060009081526004602090815260408083209390935560089052205460ff1615612b8357306000908152600560205260409020546130c790846123b4565b30600090815260056020526040902055505050565b600b546130e99083612462565b600b55600c546130f990826123b4565b600c555050565b600060208083528351808285015260005b8181101561312d57858101830151858201604001528201613111565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461318157600080fd5b50565b6000806040838503121561319757600080fd5b82356131a28161316c565b946020939093013593505050565b6000806000606084860312156131c557600080fd5b83356131d08161316c565b925060208401356131e08161316c565b929592945050506040919091013590565b8035801515811461320157600080fd5b919050565b60006020828403121561321857600080fd5b610d5c826131f1565b60006020828403121561323357600080fd5b8135610d5c8161316c565b60006020828403121561325057600080fd5b5035919050565b6000806040838503121561326a57600080fd5b8235915061327a602084016131f1565b90509250929050565b6000806040838503121561329657600080fd5b82356132a18161316c565b915060208301356132b18161316c565b809150509250929050565b600181811c908216806132d057607f821691505b602082108103613309577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610afd57610afd61333e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133e0576133e061333e565b5060010190565b8082028115828204841417610afd57610afd61333e565b80820180821115610afd57610afd61333e565b600082613447577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561345e57600080fd5b8151610d5c8161316c565b600081518084526020808501945080840160005b838110156134a25781516001600160a01b03168752958201959082019060010161347d565b509495945050505050565b85815284602082015260a0604082015260006134cc60a0830186613469565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006135026040830184613469565b949350505050565b8481526080602082015260006135236080830186613469565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074dd627581287465750334ef877307d490e9c6d15ee96cc60d327cf9be8a16f964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103385760003560e01c80635342acb4116101b0578063a457c2d7116100ec578063d1454bf411610095578063dd62ed3e1161006f578063dd62ed3e14610949578063ea2f0b371461098f578063f0f165af146109af578063f2fde38b146109cf57600080fd5b8063d1454bf4146108f3578063d6b513cf14610913578063dd4670641461092957600080fd5b8063a9059cbb116100c6578063a9059cbb1461089e578063bdc653ef146108be578063c49b9a80146108d357600080fd5b8063a457c2d714610849578063a5ece94114610869578063a69df4b51461088957600080fd5b8063715018a6116101595780638da5cb5b116101335780638da5cb5b146107e1578063906e9dd0146107ff57806395d89b411461081f578063a073d37f1461083457600080fd5b8063715018a61461077357806382d2a4bb1461078857806388f82020146107a857600080fd5b80636053a0e31161018a5780636053a0e31461071d5780636bc87c3a1461073d57806370a082311461075357600080fd5b80635342acb4146106bc578063557ed1ba146106f5578063602bc62b1461070857600080fd5b8063313ce5671161027f57806342966c681161022857806349bd5a5e1161020257806349bd5a5e146106345780634a74bb02146106685780635134f6ab1461068757806352390c021461069c57600080fd5b806342966c68146105d4578063437823ec146105f45780634549b0391461061457600080fd5b80633b124fe7116102595780633b124fe71461057e5780633bd5d1731461059457806341566585146105b457600080fd5b8063313ce5671461051c5780633685d4191461053e578063395093511461055e57600080fd5b806318160ddd116102e157806329370cc6116102bb57806329370cc6146104bc5780632bb8d152146104dc5780632d838119146104fc57600080fd5b806318160ddd1461045357806323b872dd1461046857806327c8f8351461048857600080fd5b806313114a9d1161031257806313114a9d146103b6578063143b237f146103d55780631694505e1461040757600080fd5b806306fdde031461034457806307efbfdc1461036f578063095ea7b31461038657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b506103596109ef565b6040516103669190613100565b60405180910390f35b34801561037b57600080fd5b50610384610a81565b005b34801561039257600080fd5b506103a66103a1366004613184565b610aec565b6040519015158152602001610366565b3480156103c257600080fd5b50600c545b604051908152602001610366565b3480156103e157600080fd5b506013546103a69074010000000000000000000000000000000000000000900460ff1681565b34801561041357600080fd5b5061043b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610366565b34801561045f57600080fd5b50600a546103c7565b34801561047457600080fd5b506103a66104833660046131b0565b610b03565b34801561049457600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156104c857600080fd5b506103846104d7366004613206565b610b6c565b3480156104e857600080fd5b506103846104f7366004613221565b610c38565b34801561050857600080fd5b506103c761051736600461323e565b610ccc565b34801561052857600080fd5b50600f5460405160ff9091168152602001610366565b34801561054a57600080fd5b50610384610559366004613221565b610d63565b34801561056a57600080fd5b506103a6610579366004613184565b610f97565b34801561058a57600080fd5b506103c760115481565b3480156105a057600080fd5b506103846105af36600461323e565b610fcd565b3480156105c057600080fd5b506103846105cf366004613221565b6110c8565b3480156105e057600080fd5b506103846105ef36600461323e565b611209565b34801561060057600080fd5b5061038461060f366004613221565b611335565b34801561062057600080fd5b506103c761062f366004613257565b6113b3565b34801561064057600080fd5b5061043b7f000000000000000000000000090eef11cc35b21b06aa7a6bff157785a711eb0781565b34801561067457600080fd5b50601b546103a690610100900460ff1681565b34801561069357600080fd5b50610384611440565b3480156106a857600080fd5b506103846106b7366004613221565b6114a4565b3480156106c857600080fd5b506103a66106d7366004613221565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561070157600080fd5b50426103c7565b34801561071457600080fd5b506002546103c7565b34801561072957600080fd5b50601b546103a69062010000900460ff1681565b34801561074957600080fd5b506103c760145481565b34801561075f57600080fd5b506103c761076e366004613221565b61163f565b34801561077f57600080fd5b5061038461169e565b34801561079457600080fd5b506103846107a336600461323e565b61175a565b3480156107b457600080fd5b506103a66107c3366004613221565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107ed57600080fd5b506000546001600160a01b031661043b565b34801561080b57600080fd5b5061038461081a366004613221565b6117cc565b34801561082b57600080fd5b50610359611860565b34801561084057600080fd5b506017546103c7565b34801561085557600080fd5b506103a6610864366004613184565b61186f565b34801561087557600080fd5b5060035461043b906001600160a01b031681565b34801561089557600080fd5b506103846118be565b3480156108aa57600080fd5b506103a66108b9366004613184565b611a08565b3480156108ca57600080fd5b506018546103c7565b3480156108df57600080fd5b506103846108ee366004613206565b611a15565b3480156108ff57600080fd5b5061038461090e366004613206565b611ad5565b34801561091f57600080fd5b506103c760165481565b34801561093557600080fd5b5061038461094436600461323e565b611b79565b34801561095557600080fd5b506103c7610964366004613283565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561099b57600080fd5b506103846109aa366004613221565b611c58565b3480156109bb57600080fd5b506103846109ca36600461323e565b611cd3565b3480156109db57600080fd5b506103846109ea366004613221565b611d32565b6060600d80546109fe906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906132bc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aea6001611a15565b565b6000610af9338484611ebd565b5060015b92915050565b6000610b10848484612015565b610b628433610b5d85604051806060016040528060288152602001613540602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612357565b611ebd565b5060019392505050565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b805482151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610c2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000600b54821115610d465760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad7565b6000610d50612391565b9050610d5c8382611e7b565b9392505050565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16610e255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b60005b600954811015610f9357816001600160a01b031660098281548110610e4f57610e4f61330f565b6000918252602090912001546001600160a01b031603610f815760098054610e799060019061336d565b81548110610e8957610e8961330f565b600091825260209091200154600980546001600160a01b039092169183908110610eb557610eb561330f565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610f2557610f25613380565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b80610f8b816133af565b915050610e28565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610af9918590610b5d90866123b4565b3360008181526008602052604090205460ff16156110535760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad7565b600061105e83612413565b505050506001600160a01b03841660009081526004602052604090205491925061108a91905082612462565b6001600160a01b038316600090815260046020526040902055600b546110b09082612462565b600b55600c546110c090846123b4565b600c55505050565b6000546001600160a01b031633146111225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526019602052604090205460ff161561118b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c72656164792077686974656c697374656400006044820152606401610ad7565b6001600160a01b03166000818152601960205260408120805460ff19166001908117909155601a805491820181559091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600061126d612391565b9050600061127b83836124a4565b90506112a481600b541861129e60105484600b54176124a490919063ffffffff16565b90612462565b600b55600a546112bf908085189061129e90861760026124a4565b600a556113208160046000336001600160a01b03166001600160a01b03168152602001908152602001600020541861129e60105484600460006112ff3390565b6001600160a01b0316815260208101919091526040016000205417906124a4565b33600090815260046020526040902055505050565b6000546001600160a01b0316331461138f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156114075760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b8161142657600061141784612413565b50939550610afd945050505050565b600061143184612413565b50929550610afd945050505050565b6000546001600160a01b0316331461149a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b610aea6000611a15565b6000546001600160a01b031633146114fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16156115675760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b038116600090815260046020526040902054156115c1576001600160a01b0381166000908152600460205260409020546115a790610ccc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6001600160a01b03811660009081526008602052604081205460ff161561167c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610afd90610ccc565b6000546001600160a01b031633146116f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031633146117b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6117c681670de0b6b3a76400006133e7565b60185550565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600e80546109fe906132bc565b6000610af93384610b5d85604051806060016040528060258152602001613568602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612357565b6001546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600254421161198f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b6000610af9338484612015565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c2d90831515815260200190565b6000546001600160a01b03163314611b2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6013805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b60008054600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055611c1a81426133fe565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cb25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601755565b6000546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b038116611e085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610d5c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b6001600160a01b038316611f385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b038216611fb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03821661210d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03831660009081526019602052604090205460ff161580156121b957506013546001600160a01b038381169116145b156122295760135474010000000000000000000000000000000000000000900460ff16156122295760405162461bcd60e51b815260206004820152600f60248201527f50726573616c65206f6e676f696e6700000000000000000000000000000000006044820152606401610ad7565b60006122343061163f565b601754601b549192508210159060ff161580156122585750601b54610100900460ff165b801561229557507f000000000000000000000000090eef11cc35b21b06aa7a6bff157785a711eb076001600160a01b0316846001600160a01b0316145b156122f85780156122ae5760175491506122ae82612570565b601b54479062010000900460ff1680156122cf5750670de0b6b3a764000081115b156122f6576018548111156122e357506018545b6122f66122f1826064611e7b565b6125d9565b505b6001600160a01b03851660009081526007602052604090205460019060ff168061233a57506001600160a01b03851660009081526007602052604090205460ff165b15612343575060005b61234f86868684612602565b505050505050565b6000818484111561237b5760405162461bcd60e51b8152600401610ad79190613100565b506000612388848661336d565b95945050505050565b600080600061239e61272d565b90925090506123ad8282611e7b565b9250505090565b6000806123c183856133fe565b905083811015610d5c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b600080600080600080600080600061242a8a6128af565b92509250925060008060006124488d8686612443612391565b6128eb565b919f909e50909c50959a5093985091965092945050505050565b6000610d5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612357565b6000826000036124b657506000610afd565b60006124c283856133e7565b9050826124cf8583613411565b14610d5c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081836125635760405162461bcd60e51b8152600401610ad79190613100565b5060006123888486613411565b601b805460ff19166001179055476125878261293b565b60006125934783612462565b6003546016546014549293506125ca926001600160a01b03909216916125c591906125bf908690611e7b565b906124a4565b612b4d565b5050601b805460ff1916905550565b601b805460ff1916600117905580156125f5576125f581612b88565b50601b805460ff19169055565b8061260f5761260f612d62565b6001600160a01b03841660009081526008602052604090205460ff16801561265057506001600160a01b03831660009081526008602052604090205460ff16155b1561266557612660848484612d90565b612711565b6001600160a01b03841660009081526008602052604090205460ff161580156126a657506001600160a01b03831660009081526008602052604090205460ff165b156126b657612660848484612eb6565b6001600160a01b03841660009081526008602052604090205460ff1680156126f657506001600160a01b03831660009081526008602052604090205460ff165b1561270657612660848484612f5f565b612711848484612fd2565b8061272757612727601254601155601554601455565b50505050565b600b54600a546000918291825b60095481101561287f5782600460006009848154811061275c5761275c61330f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127c757508160056000600984815481106127a0576127a061330f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156127dd57600b54600a54945094505050509091565b61282360046000600984815481106127f7576127f761330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612462565b925061286b600560006009848154811061283f5761283f61330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612462565b915080612877816133af565b91505061273a565b50600a54600b5461288f91611e7b565b8210156128a657600b54600a549350935050509091565b90939092509050565b6000806000806128be85613016565b905060006128cb86613038565b905060006128dd8261129e8986612462565b979296509094509092505050565b60008080806128fa88866124a4565b9050600061290888876124a4565b9050600061291688886124a4565b905060006129288261129e8686612462565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129705761297061330f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a12919061344c565b81600181518110612a2557612a2561330f565b60200260200101906001600160a01b031690816001600160a01b031681525050612a70307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ebd565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612ade9085906000908690309042906004016134ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612b419291906134e9565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612b83573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b919061344c565b81600081518110612c3e57612c3e61330f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c7257612c7261330f565b6001600160a01b0392831660209182029290920101527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead612ce04261012c6123b4565b6040518663ffffffff1660e01b8152600401612cff949392919061350a565b6000604051808303818588803b158015612d1857600080fd5b505af1158015612d2c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612b419291906134e9565b601154158015612d725750601454155b15612d7957565b601180546012556014805460155560009182905555565b600080600080600080612da287612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612dd49088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612e039087612462565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612e3290866123b4565b6001600160a01b038916600090815260046020526040902055612e5481613054565b612e5e84836130dc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ea391815260200190565b60405180910390a3505050505050505050565b600080600080600080612ec887612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612efa9087612462565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612f3090846123b4565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612e3290866123b4565b600080600080600080612f7187612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fa39088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612efa9087612462565b600080600080600080612fe487612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612e039087612462565b6000610afd6064613032601154856124a490919063ffffffff16565b90611e7b565b6000610afd6064613032601454856124a490919063ffffffff16565b600061305e612391565b9050600061306c83836124a4565b3060009081526004602052604090205490915061308990826123b4565b3060009081526004602090815260408083209390935560089052205460ff1615612b8357306000908152600560205260409020546130c790846123b4565b30600090815260056020526040902055505050565b600b546130e99083612462565b600b55600c546130f990826123b4565b600c555050565b600060208083528351808285015260005b8181101561312d57858101830151858201604001528201613111565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461318157600080fd5b50565b6000806040838503121561319757600080fd5b82356131a28161316c565b946020939093013593505050565b6000806000606084860312156131c557600080fd5b83356131d08161316c565b925060208401356131e08161316c565b929592945050506040919091013590565b8035801515811461320157600080fd5b919050565b60006020828403121561321857600080fd5b610d5c826131f1565b60006020828403121561323357600080fd5b8135610d5c8161316c565b60006020828403121561325057600080fd5b5035919050565b6000806040838503121561326a57600080fd5b8235915061327a602084016131f1565b90509250929050565b6000806040838503121561329657600080fd5b82356132a18161316c565b915060208301356132b18161316c565b809150509250929050565b600181811c908216806132d057607f821691505b602082108103613309577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610afd57610afd61333e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133e0576133e061333e565b5060010190565b8082028115828204841417610afd57610afd61333e565b80820180821115610afd57610afd61333e565b600082613447577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561345e57600080fd5b8151610d5c8161316c565b600081518084526020808501945080840160005b838110156134a25781516001600160a01b03168752958201959082019060010161347d565b509495945050505050565b85815284602082015260a0604082015260006134cc60a0830186613469565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006135026040830184613469565b949350505050565b8481526080602082015260006135236080830186613469565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074dd627581287465750334ef877307d490e9c6d15ee96cc60d327cf9be8a16f964736f6c63430008120033

Deployed Bytecode Sourcemap

15212:20669:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35550:92;;;;;;;;;;;;;:::i;:::-;;19185:161;;;;;;;;;;-1:-1:-1;19185:161:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;19185:161:0;1105:187:1;20306:87:0;;;;;;;;;;-1:-1:-1;20375:10:0;;20306:87;;;1443:25:1;;;1431:2;1416:18;20306:87:0;1297:177:1;16390:26:0;;;;;;;;;;-1:-1:-1;16390:26:0;;;;;;;;;;;16875:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1670:55:1;;;1652:74;;1640:2;1625:18;16875:51:0;1479:253:1;18550:95:0;;;;;;;;;;-1:-1:-1;18630:7:0;;18550:95;;19354:313;;;;;;;;;;-1:-1:-1;19354:313:0;;;;;:::i;:::-;;:::i;15458:81::-;;;;;;;;;;;;;;;34556:150;;;;;;;;;;-1:-1:-1;34556:150:0;;;;;:::i;:::-;;:::i;35199:128::-;;;;;;;;;;-1:-1:-1;35199:128:0;;;;;:::i;:::-;;:::i;21490:253::-;;;;;;;;;;-1:-1:-1;21490:253:0;;;;;:::i;:::-;;:::i;18459:83::-;;;;;;;;;;-1:-1:-1;18525:9:0;;18459:83;;18525:9;;;;3358:36:1;;3346:2;3331:18;18459:83:0;3216:184:1;22094:479:0;;;;;;;;;;-1:-1:-1;22094:479:0;;;;;:::i;:::-;;:::i;19675:218::-;;;;;;;;;;-1:-1:-1;19675:218:0;;;;;:::i;:::-;;:::i;16280:26::-;;;;;;;;;;;;;;;;20657:377;;;;;;;;;;-1:-1:-1;20657:377:0;;;;;:::i;:::-;;:::i;22581:277::-;;;;;;;;;;-1:-1:-1;22581:277:0;;;;;:::i;:::-;;:::i;34718:473::-;;;;;;;;;;-1:-1:-1;34718:473:0;;;;;:::i;:::-;;:::i;33657:111::-;;;;;;;;;;-1:-1:-1;33657:111:0;;;;;:::i;:::-;;:::i;21046:436::-;;;;;;;;;;-1:-1:-1;21046:436:0;;;;;:::i;:::-;;:::i;16933:38::-;;;;;;;;;;;;;;;17012:41;;;;;;;;;;-1:-1:-1;17012:41:0;;;;;;;;;;;35335:98;;;;;;;;;;;;;:::i;21751:335::-;;;;;;;;;;-1:-1:-1;21751:335:0;;;;;:::i;:::-;;:::i;33522:123::-;;;;;;;;;;-1:-1:-1;33522:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33610:27:0;33586:4;33610:27;;;:18;:27;;;;;;;;;33522:123;6602:90;;;;;;;;;;-1:-1:-1;6669:15:0;6602:90;;6500;;;;;;;;;;-1:-1:-1;6573:9:0;;6500:90;;17060:33;;;;;;;;;;-1:-1:-1;17060:33:0;;;;;;;;;;;16429:32;;;;;;;;;;;;;;;;18653:198;;;;;;;;;;-1:-1:-1;18653:198:0;;;;;:::i;:::-;;:::i;6092:148::-;;;;;;;;;;;;;:::i;34083:133::-;;;;;;;;;;-1:-1:-1;34083:133:0;;;;;:::i;:::-;;:::i;20178:120::-;;;;;;;;;;-1:-1:-1;20178:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20270:20:0;20246:4;20270:20;;;:11;:20;;;;;;;;;20178:120;5867:79;;;;;;;;;;-1:-1:-1;5905:7:0;5932:6;-1:-1:-1;;;;;5932:6:0;5867:79;;34224:141;;;;;;;;;;-1:-1:-1;34224:141:0;;;;;:::i;:::-;;:::i;18364:87::-;;;;;;;;;;;;;:::i;20405:120::-;;;;;;;;;;-1:-1:-1;20494:23:0;;20405:120;;19901:269;;;;;;;;;;-1:-1:-1;19901:269:0;;;;;:::i;:::-;;:::i;15337:93::-;;;;;;;;;;-1:-1:-1;15337:93:0;;;;-1:-1:-1;;;;;15337:93:0;;;6938:305;;;;;;;;;;;;;:::i;18859:167::-;;;;;;;;;;-1:-1:-1;18859:167:0;;;;;:::i;:::-;;:::i;20537:108::-;;;;;;;;;;-1:-1:-1;20620:17:0;;20537:108;;34373:171;;;;;;;;;;-1:-1:-1;34373:171:0;;;;;:::i;:::-;;:::i;35445:97::-;;;;;;;;;;-1:-1:-1;35445:97:0;;;;;:::i;:::-;;:::i;16534:35::-;;;;;;;;;;;;;;;;6700:226;;;;;;;;;;-1:-1:-1;6700:226:0;;;;;:::i;:::-;;:::i;19034:143::-;;;;;;;;;;-1:-1:-1;19034:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19142:18:0;;;19115:7;19142:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19034:143;33780:110;;;;;;;;;;-1:-1:-1;33780:110:0;;;;;:::i;:::-;;:::i;33904:166::-;;;;;;;;;;-1:-1:-1;33904:166:0;;;;;:::i;:::-;;:::i;6248:244::-;;;;;;;;;;-1:-1:-1;6248:244:0;;;;;:::i;:::-;;:::i;18273:83::-;18310:13;18343:5;18336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:83;:::o;35550:92::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;;;;;;;;;35604:30:::1;35629:4;35604:24;:30::i;:::-;35550:92::o:0;19185:161::-;19260:4;19277:39;251:10;19300:7;19309:6;19277:8;:39::i;:::-;-1:-1:-1;19334:4:0;19185:161;;;;;:::o;19354:313::-;19452:4;19469:36;19479:6;19487:9;19498:6;19469:9;:36::i;:::-;19516:121;19525:6;251:10;19547:89;19585:6;19547:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19547:19:0;;;;;;:11;:19;;;;;;;;251:10;19547:33;;;;;;;;;;:37;:89::i;:::-;19516:8;:121::i;:::-;-1:-1:-1;19655:4:0;19354:313;;;;;:::o;34556:150::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34626:14:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;34667:31:::1;::::0;::::1;::::0;::::1;::::0;34643:8;1270:14:1;1263:22;1245:41;;1233:2;1218:18;;1105:187;34667:31:0::1;;;;;;;;34556:150:::0;:::o;35199:128::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35287:14:::1;:32:::0;;;::::1;-1:-1:-1::0;;;;;35287:32:0;;;::::1;::::0;;;::::1;::::0;;35199:128::o;21490:253::-;21556:7;21595;;21584;:18;;21576:73;;;;-1:-1:-1;;;21576:73:0;;5303:2:1;21576:73:0;;;5285:21:1;5342:2;5322:18;;;5315:30;5381:34;5361:18;;;5354:62;5452:12;5432:18;;;5425:40;5482:19;;21576:73:0;5101:406:1;21576:73:0;21660:19;21683:10;:8;:10::i;:::-;21660:33;-1:-1:-1;21711:24:0;:7;21660:33;21711:11;:24::i;:::-;21704:31;21490:253;-1:-1:-1;;;21490:253:0:o;22094:479::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;22176:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22168:60;;;::::0;-1:-1:-1;;;22168:60:0;;5714:2:1;22168:60:0::1;::::0;::::1;5696:21:1::0;5753:2;5733:18;;;5726:30;5792:29;5772:18;;;5765:57;5839:18;;22168:60:0::1;5512:351:1::0;22168:60:0::1;22244:9;22239:327;22263:9;:16:::0;22259:20;::::1;22239:327;;;22321:7;-1:-1:-1::0;;;;;22305:23:0::1;:9;22315:1;22305:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22305:12:0::1;:23:::0;22301:254:::1;;22364:9;22374:16:::0;;:20:::1;::::0;22393:1:::1;::::0;22374:20:::1;:::i;:::-;22364:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22349:9:::1;:12:::0;;-1:-1:-1;;;;;22364:31:0;;::::1;::::0;22359:1;;22349:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;22349:46:0;;::::1;;::::0;;22414:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22453:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22453:28:0::1;::::0;;22500:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;22239:327:::1;22094:479:::0;:::o;22301:254::-:1;22281:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22239:327;;;;22094:479:::0;:::o;19675:218::-;251:10;19763:4;19812:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19812:34:0;;;;;;;;;;19763:4;;19780:83;;19803:7;;19812:50;;19851:10;19812:38;:50::i;20657:377::-;251:10;20709:14;20758:19;;;:11;:19;;;;;;;;20757:20;20749:77;;;;-1:-1:-1;;;20749:77:0;;6970:2:1;20749:77:0;;;6952:21:1;7009:2;6989:18;;;6982:30;7048:34;7028:18;;;7021:62;7119:14;7099:18;;;7092:42;7151:19;;20749:77:0;6768:408:1;20749:77:0;20838:15;20862:19;20873:7;20862:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20910:15:0;;;;;;:7;:15;;;;;;20837:44;;-1:-1:-1;20910:28:0;;:15;-1:-1:-1;20837:44:0;20910:19;:28::i;:::-;-1:-1:-1;;;;;20892:15:0;;;;;;:7;:15;;;;;:46;20959:7;;:20;;20971:7;20959:11;:20::i;:::-;20949:7;:30;21003:10;;:23;;21018:7;21003:14;:23::i;:::-;20990:10;:36;-1:-1:-1;;;20657:377:0:o;22581:277::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;22675:33:0;::::1;;::::0;;;:14:::1;:33;::::0;;;;;::::1;;22674:34;22666:77;;;::::0;-1:-1:-1;;;22666:77:0;;7383:2:1;22666:77:0::1;::::0;::::1;7365:21:1::0;7422:2;7402:18;;;7395:30;7461:32;7441:18;;;7434:60;7511:18;;22666:77:0::1;7181:354:1::0;22666:77:0::1;-1:-1:-1::0;;;;;22754:33:0::1;;::::0;;;:14:::1;:33;::::0;;;;:40;;-1:-1:-1;;22754:40:0::1;22790:4;22754:40:::0;;::::1;::::0;;;22805:21:::1;:45:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;22581:277::o;34718:473::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34782:19:::1;34804:10;:8;:10::i;:::-;34782:32:::0;-1:-1:-1;34821:15:0::1;34839:30;:13:::0;34782:32;34839:17:::1;:30::i;:::-;34821:48;;34886:78;34955:7;34945;;:17;34887:51;34911:26;;34898:7;34888;;:17;34887:23;;:51;;;;:::i;:::-;34886:57:::0;::::1;:78::i;:::-;34876:7;:88:::0;35021:7:::1;::::0;34981:65:::1;::::0;35021:23;;::::1;::::0;34982:32:::1;::::0;34983:23;::::1;35012:1;34982:29;:32::i;34981:65::-;34971:7;:75:::0;35077:106:::1;35174:7:::0;35150::::1;:21;251:10:::0;-1:-1:-1;;;;;35150:21:0::1;-1:-1:-1::0;;;;;35150:21:0::1;;;;;;;;;;;;;:31;35078:65;35116:26;;35103:7;35079;:21;35087:12;251:10:::0;;155:115;35087:12:::1;-1:-1:-1::0;;;;;35079:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35079:21:0;;:31:::1;::::0;35078:37:::1;:65::i;35077:106::-;251:10:::0;35053:21:::1;::::0;;;:7:::1;:21;::::0;;;;:130;-1:-1:-1;;;34718:473:0:o;33657:111::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;33726:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33726:34:0::1;33756:4;33726:34;::::0;;33657:111::o;21046:436::-;21136:7;21175;;21164;:18;;21156:62;;;;-1:-1:-1;;;21156:62:0;;7742:2:1;21156:62:0;;;7724:21:1;7781:2;7761:18;;;7754:30;7820:33;7800:18;;;7793:61;7871:18;;21156:62:0;7540:355:1;21156:62:0;21234:17;21229:246;;21269:15;21293:19;21304:7;21293:10;:19::i;:::-;-1:-1:-1;21268:44:0;;-1:-1:-1;21327:14:0;;-1:-1:-1;;;;;21327:14:0;21229:246;21376:23;21407:19;21418:7;21407:10;:19::i;:::-;-1:-1:-1;21374:52:0;;-1:-1:-1;21441:22:0;;-1:-1:-1;;;;;21441:22:0;35335:98;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35394:31:::1;35419:5;35394:24;:31::i;21751:335::-:0;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;21836:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21835:21;21827:61;;;::::0;-1:-1:-1;;;21827:61:0;;5714:2:1;21827:61:0::1;::::0;::::1;5696:21:1::0;5753:2;5733:18;;;5726:30;5792:29;5772:18;;;5765:57;5839:18;;21827:61:0::1;5512:351:1::0;21827:61:0::1;-1:-1:-1::0;;;;;21902:16:0;::::1;21921:1;21902:16:::0;;;:7:::1;:16;::::0;;;;;:20;21899:108:::1;;-1:-1:-1::0;;;;;21978:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21958:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21939:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21899:108:::1;-1:-1:-1::0;;;;;22017:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22017:27:0::1;22040:4;22017:27:::0;;::::1;::::0;;;22055:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;21751:335::o;18653:198::-;-1:-1:-1;;;;;18743:20:0;;18719:7;18743:20;;;:11;:20;;;;;;;;18739:49;;;-1:-1:-1;;;;;;18772:16:0;;;;;:7;:16;;;;;;;18653:198::o;18739:49::-;-1:-1:-1;;;;;18826:16:0;;;;;;:7;:16;;;;;;18806:37;;:19;:37::i;6092:148::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;6199:1:::1;6183:6:::0;;6162:40:::1;::::0;-1:-1:-1;;;;;6183:6:0;;::::1;::::0;6162:40:::1;::::0;6199:1;;6162:40:::1;6230:1;6213:19:::0;;;::::1;::::0;;6092:148::o;34083:133::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34187:21:::1;:12:::0;34202:6:::1;34187:21;:::i;:::-;34167:17;:41:::0;-1:-1:-1;34083:133:0:o;34224:141::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34312:16:::1;:45:::0;;;::::1;-1:-1:-1::0;;;;;34312:45:0;;;::::1;::::0;;;::::1;::::0;;34224:141::o;18364:87::-;18403:13;18436:7;18429:14;;;;;:::i;19901:269::-;19994:4;20011:129;251:10;20034:7;20043:96;20082:15;20043:96;;;;;;;;;;;;;;;;;251:10;20043:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20043:34:0;;;;;;;;;;;;:38;:96::i;6938:305::-;6990:14;;-1:-1:-1;;;;;6990:14:0;7008:10;6990:28;6982:76;;;;-1:-1:-1;;;6982:76:0;;8275:2:1;6982:76:0;;;8257:21:1;8314:2;8294:18;;;8287:30;8353:34;8333:18;;;8326:62;8424:5;8404:18;;;8397:33;8447:19;;6982:76:0;8073:399:1;6982:76:0;7095:9;;7077:15;:27;7069:72;;;;-1:-1:-1;;;7069:72:0;;8679:2:1;7069:72:0;;;8661:21:1;8718:2;8698:18;;;8691:30;8757:33;8737:18;;;8730:61;8808:18;;7069:72:0;8477:355:1;7069:72:0;7186:14;;;7178:6;;7157:44;;-1:-1:-1;;;;;7186:14:0;;;;7178:6;;;;7157:44;;;7221:14;;;7212:23;;;;-1:-1:-1;;;;;7221:14:0;;;7212:23;;;;;;6938:305::o;18859:167::-;18937:4;18954:42;251:10;18978:9;18989:6;18954:9;:42::i;34373:171::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34450:21:::1;:32:::0;;;::::1;;;;::::0;;;::::1;;::::0;;34498:38:::1;::::0;::::1;::::0;::::1;::::0;34474:8;1270:14:1;1263:22;1245:41;;1233:2;1218:18;;1105:187;35445:97:0;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35509:14:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35445:97::o;6700:226::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;6781:6:::1;::::0;;;6764:23;;;;;::::1;-1:-1:-1::0;;;;;6781:6:0;::::1;6764:23;::::0;;;6798:19:::1;::::0;;6840:22:::1;6858:4:::0;6840:15:::1;:22;:::i;:::-;6828:9;:34:::0;6915:1:::1;6899:6:::0;;6878:40:::1;::::0;-1:-1:-1;;;;;6899:6:0;;::::1;::::0;6878:40:::1;::::0;6915:1;;6878:40:::1;6700:226:::0;:::o;33780:110::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;33847:27:0::1;33877:5;33847:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33847:35:0::1;::::0;;33780:110::o;33904:166::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34012:23:::1;:50:::0;33904:166::o;6248:244::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;6337:22:0;::::1;6329:73;;;::::0;-1:-1:-1;;;6329:73:0;;9169:2:1;6329:73:0::1;::::0;::::1;9151:21:1::0;9208:2;9188:18;;;9181:30;9247:34;9227:18;;;9220:62;9318:8;9298:18;;;9291:36;9344:19;;6329:73:0::1;8967:402:1::0;6329:73:0::1;6439:6;::::0;;6418:38:::1;::::0;-1:-1:-1;;;;;6418:38:0;;::::1;::::0;6439:6;::::1;::::0;6418:38:::1;::::0;::::1;6467:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;6467:17:0;;;::::1;::::0;;;::::1;::::0;;6248:244::o;2026:132::-;2084:7;2111:39;2115:1;2118;2111:39;;;;;;;;;;;;;;;;;:3;:39::i;22866:337::-;-1:-1:-1;;;;;22959:19:0;;22951:68;;;;-1:-1:-1;;;22951:68:0;;9576:2:1;22951:68:0;;;9558:21:1;9615:2;9595:18;;;9588:30;9654:34;9634:18;;;9627:62;9725:6;9705:18;;;9698:34;9749:19;;22951:68:0;9374:400:1;22951:68:0;-1:-1:-1;;;;;23038:21:0;;23030:68;;;;-1:-1:-1;;;23030:68:0;;9981:2:1;23030:68:0;;;9963:21:1;10020:2;10000:18;;;9993:30;10059:34;10039:18;;;10032:62;10130:4;10110:18;;;10103:32;10152:19;;23030:68:0;9779:398:1;23030:68:0;-1:-1:-1;;;;;23111:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23163:32;;1443:25:1;;;23163:32:0;;1416:18:1;23163:32:0;;;;;;;22866:337;;;:::o;23211:1682::-;-1:-1:-1;;;;;23333:18:0;;23325:68;;;;-1:-1:-1;;;23325:68:0;;10384:2:1;23325:68:0;;;10366:21:1;10423:2;10403:18;;;10396:30;10462:34;10442:18;;;10435:62;10533:7;10513:18;;;10506:35;10558:19;;23325:68:0;10182:401:1;23325:68:0;-1:-1:-1;;;;;23412:16:0;;23404:64;;;;-1:-1:-1;;;23404:64:0;;10790:2:1;23404:64:0;;;10772:21:1;10829:2;10809:18;;;10802:30;10868:34;10848:18;;;10841:62;10939:5;10919:18;;;10912:33;10962:19;;23404:64:0;10588:399:1;23404:64:0;23496:1;23487:6;:10;23479:64;;;;-1:-1:-1;;;23479:64:0;;11194:2:1;23479:64:0;;;11176:21:1;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;11343:11;11323:18;;;11316:39;11372:19;;23479:64:0;10992:405:1;23479:64:0;-1:-1:-1;;;;;23700:20:0;;;;;;:14;:20;;;;;;;;23699:21;:45;;;;-1:-1:-1;23730:14:0;;-1:-1:-1;;;;;23724:20:0;;;23730:14;;23724:20;23699:45;23696:120;;;23770:14;;;;;;;23769:15;23761:43;;;;-1:-1:-1;;;23761:43:0;;11604:2:1;23761:43:0;;;11586:21:1;11643:2;11623:18;;;11616:30;11682:17;11662:18;;;11655:45;11717:18;;23761:43:0;11402:339:1;23761:43:0;23840:28;23871:24;23889:4;23871:9;:24::i;:::-;23961:23;;24010:16;;23840:55;;-1:-1:-1;23937:47:0;;;;24010:16;;24009:17;:42;;;;-1:-1:-1;24030:21:0;;;;;;;24009:42;:65;;;;;24061:13;-1:-1:-1;;;;;24055:19:0;:2;-1:-1:-1;;;;;24055:19:0;;24009:65;24005:582;;;24095:23;24091:165;;;24162:23;;24139:46;;24204:32;24215:20;24204:10;:32::i;:::-;24325:14;;24285:21;;24325:14;;;;;:47;;;;;24361:10;24343:7;:29;24325:47;24321:255;;;24425:17;;24415:7;:27;24411:81;;;-1:-1:-1;24475:17:0;;24411:81;24529:31;24543:16;:7;24555:3;24543:11;:16::i;:::-;24529:13;:31::i;:::-;24076:511;24005:582;-1:-1:-1;;;;;24734:24:0;;24607:12;24734:24;;;:18;:24;;;;;;24622:4;;24734:24;;;:50;;-1:-1:-1;;;;;;24762:22:0;;;;;;:18;:22;;;;;;;;24734:50;24731:96;;;-1:-1:-1;24810:5:0;24731:96;24847:38;24862:4;24867:2;24870:6;24877:7;24847:14;:38::i;:::-;23314:1579;;;23211:1682;;;:::o;1566:192::-;1652:7;1688:12;1680:6;;;;1672:29;;;;-1:-1:-1;;;1672:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1712:9:0;1724:5;1728:1;1724;:5;:::i;:::-;1712:17;1566:192;-1:-1:-1;;;;;1566:192:0:o;31672:163::-;31713:7;31734:15;31751;31770:19;:17;:19::i;:::-;31733:56;;-1:-1:-1;31733:56:0;-1:-1:-1;31807:20:0;31733:56;;31807:11;:20::i;:::-;31800:27;;;;31672:163;:::o;1233:181::-;1291:7;;1323:5;1327:1;1323;:5;:::i;:::-;1311:17;;1352:1;1347;:6;;1339:46;;;;-1:-1:-1;;;1339:46:0;;11948:2:1;1339:46:0;;;11930:21:1;11987:2;11967:18;;;11960:30;12026:29;12006:18;;;11999:57;12073:18;;1339:46:0;11746:351:1;30470:419:0;30529:7;30538;30547;30556;30565;30574;30595:23;30620:12;30634:18;30656:20;30668:7;30656:11;:20::i;:::-;30594:82;;;;;;30688:15;30705:23;30730:12;30746:50;30758:7;30767:4;30773:10;30785;:8;:10::i;:::-;30746:11;:50::i;:::-;30687:109;;;;-1:-1:-1;30687:109:0;;-1:-1:-1;30847:15:0;;-1:-1:-1;30864:4:0;;-1:-1:-1;30870:10:0;;-1:-1:-1;30470:419:0;;-1:-1:-1;;;;;30470:419:0:o;1422:136::-;1480:7;1507:43;1511:1;1514;1507:43;;;;;;;;;;;;;;;;;:3;:43::i;1766:250::-;1824:7;1848:1;1853;1848:6;1844:47;;-1:-1:-1;1878:1:0;1871:8;;1844:47;1903:9;1915:5;1919:1;1915;:5;:::i;:::-;1903:17;-1:-1:-1;1948:1:0;1939:5;1943:1;1903:17;1939:5;:::i;:::-;:10;1931:56;;;;-1:-1:-1;;;1931:56:0;;12583:2:1;1931:56:0;;;12565:21:1;12622:2;12602:18;;;12595:30;12661:34;12641:18;;;12634:62;12732:3;12712:18;;;12705:31;12753:19;;1931:56:0;12381:397:1;2166:278:0;2252:7;2287:12;2280:5;2272:28;;;;-1:-1:-1;;;2272:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2311:9:0;2323:5;2327:1;2323;:5;:::i;24901:433::-;17628:16;:23;;-1:-1:-1;;17628:23:0;17647:4;17628:23;;;25016:21:::1;25048:38;25065:20:::0;25048:16:::1;:38::i;:::-;25097:26;25126:41;:21;25152:14:::0;25126:25:::1;:41::i;:::-;25238:16;::::0;25298::::1;::::0;25279:13:::1;::::0;25097:70;;-1:-1:-1;25217:99:0::1;::::0;-1:-1:-1;;;;;25238:16:0;;::::1;::::0;25256:59:::1;::::0;25298:16;25256:37:::1;::::0;25097:70;;25256:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;:::-;25217:20;:99::i;:::-;-1:-1:-1::0;;17674:16:0;:24;;-1:-1:-1;;17674:24:0;;;-1:-1:-1;24901:433:0:o;25348:135::-;17628:16;:23;;-1:-1:-1;;17628:23:0;17647:4;17628:23;;;25419:10;;25415:61:::1;;25443:24;25460:6;25443:16;:24::i;:::-;-1:-1:-1::0;17674:16:0;:24;;-1:-1:-1;;17674:24:0;;;25348:135::o;27284:704::-;27395:7;27391:40;;27417:14;:12;:14::i;:::-;-1:-1:-1;;;;;27456:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27480:22:0;;;;;;:11;:22;;;;;;;;27479:23;27456:46;27452:467;;;27519:48;27541:6;27549:9;27560:6;27519:21;:48::i;:::-;27452:467;;;-1:-1:-1;;;;;27590:19:0;;;;;;:11;:19;;;;;;;;27589:20;:46;;;;-1:-1:-1;;;;;;27613:22:0;;;;;;:11;:22;;;;;;;;27589:46;27585:334;;;27652:46;27672:6;27680:9;27691:6;27652:19;:46::i;27585:334::-;-1:-1:-1;;;;;27720:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27743:22:0;;;;;;:11;:22;;;;;;;;27720:45;27716:203;;;27782:48;27804:6;27812:9;27823:6;27782:21;:48::i;27716:203::-;27863:44;27881:6;27889:9;27900:6;27863:17;:44::i;:::-;27943:7;27939:41;;27965:15;33443;;33433:7;:25;33485:21;;33469:13;:37;33389:125;27965:15;27284:704;;;;:::o;31843:561::-;31940:7;;31976;;31893;;;;;32000:289;32024:9;:16;32020:20;;32000:289;;;32090:7;32066;:21;32074:9;32084:1;32074:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32074:12:0;32066:21;;;;;;;;;;;;;:31;;:66;;;32125:7;32101;:21;32109:9;32119:1;32109:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32109:12:0;32101:21;;;;;;;;;;;;;:31;32066:66;32062:97;;;32142:7;;32151;;32134:25;;;;;;;31843:561;;:::o;32062:97::-;32184:34;32196:7;:21;32204:9;32214:1;32204:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32204:12:0;32196:21;;;;;;;;;;;;;32184:7;;:11;:34::i;:::-;32174:44;;32243:34;32255:7;:21;32263:9;32273:1;32263:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32263:12:0;32255:21;;;;;;;;;;;;;32243:7;;:11;:34::i;:::-;32233:44;-1:-1:-1;32042:3:0;;;;:::i;:::-;;;;32000:289;;;-1:-1:-1;32325:7:0;;32313;;:20;;:11;:20::i;:::-;32303:7;:30;32299:61;;;32343:7;;32352;;32335:25;;;;;;31843:561;;:::o;32299:61::-;32379:7;;32388;;-1:-1:-1;31843:561:0;-1:-1:-1;31843:561:0:o;30897:330::-;30957:7;30966;30975;30995:12;31010:24;31026:7;31010:15;:24::i;:::-;30995:39;;31045:18;31066:30;31088:7;31066:21;:30::i;:::-;31045:51;-1:-1:-1;31107:23:0;31133:33;31045:51;31133:17;:7;31145:4;31133:11;:17::i;:33::-;31107:59;31202:4;;-1:-1:-1;31208:10:0;;-1:-1:-1;30897:330:0;;-1:-1:-1;;;30897:330:0:o;31235:429::-;31350:7;;;;31406:24;:7;31418:11;31406;:24::i;:::-;31388:42;-1:-1:-1;31441:12:0;31456:21;:4;31465:11;31456:8;:21::i;:::-;31441:36;-1:-1:-1;31488:18:0;31509:27;:10;31524:11;31509:14;:27::i;:::-;31488:48;-1:-1:-1;31547:23:0;31573:33;31488:48;31573:17;:7;31585:4;31573:11;:17::i;:33::-;31625:7;;;;-1:-1:-1;31651:4:0;;-1:-1:-1;31235:429:0;;-1:-1:-1;;;;;;;31235:429:0:o;25495:666::-;25645:16;;;25659:1;25645:16;;;;;;;;25621:21;;25645:16;;;;;;;;;;-1:-1:-1;25645:16:0;25621:40;;25690:4;25672;25677:1;25672:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25672:23:0;;;-1:-1:-1;;;;;25672:23:0;;;;;25716:15;-1:-1:-1;;;;;25716:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25706:4;25711:1;25706:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25706:32:0;;;-1:-1:-1;;;;;25706:32:0;;;;;25751:62;25768:4;25783:15;25801:11;25751:8;:62::i;:::-;25852:240;;;;;-1:-1:-1;;;;;25852:15:0;:66;;;;:240;;25933:11;;25959:1;;26003:4;;26030;;26066:15;;25852:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26118:35;26135:11;26148:4;26118:35;;;;;;;:::i;:::-;;;;;;;;25550:611;25495:666;:::o;35654:126::-;35746:26;;-1:-1:-1;;;;;35746:18:0;;;:26;;;;;35765:6;;35746:26;;;;35765:6;35746:18;:26;;;;;;;;;;;;;;;;;;;;;35654:126;;:::o;26173:578::-;26318:16;;;26332:1;26318:16;;;;;;;;26294:21;;26318:16;;;;;;;;;;-1:-1:-1;26318:16:0;26294:40;;26355:15;-1:-1:-1;;;;;26355:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26345:4;26350:1;26345:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26345:32:0;;;-1:-1:-1;;;;;26345:32:0;;;;;26406:4;26388;26393:1;26388:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26388:23:0;;;:7;;;;;;;;;:23;26448:15;:66;;26522:6;26544:1;26591:4;26610:11;26652:24;:15;26672:3;26652:19;:24::i;:::-;26448:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26713:30;26730:6;26738:4;26713:30;;;;;;;:::i;33127:250::-;33173:7;;:12;:34;;;;-1:-1:-1;33189:13:0;;:18;33173:34;33170:46;;;33127:250::o;33170:46::-;33254:7;;;33236:15;:25;33296:13;;;33272:21;:37;-1:-1:-1;33330:11:0;;;;33352:17;33127:250::o;29097:563::-;29200:15;29217:23;29242:12;29256:23;29281:12;29295:18;29317:19;29328:7;29317:10;:19::i;:::-;-1:-1:-1;;;;;29362:15:0;;;;;;:7;:15;;;;;;29199:137;;-1:-1:-1;29199:137:0;;-1:-1:-1;29199:137:0;;-1:-1:-1;29199:137:0;-1:-1:-1;29199:137:0;-1:-1:-1;29199:137:0;-1:-1:-1;29362:28:0;;29382:7;29362:19;:28::i;:::-;-1:-1:-1;;;;;29344:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29419:7;:15;;;;:28;;29439:7;29419:19;:28::i;:::-;-1:-1:-1;;;;;29401:15:0;;;;;;;:7;:15;;;;;;:46;;;;29479:18;;;;;;;:39;;29502:15;29479:22;:39::i;:::-;-1:-1:-1;;;;;29458:18:0;;;;;;:7;:18;;;;;:60;29532:26;29547:10;29532:14;:26::i;:::-;29569:23;29581:4;29587;29569:11;:23::i;:::-;29625:9;-1:-1:-1;;;;;29608:44:0;29617:6;-1:-1:-1;;;;;29608:44:0;;29636:15;29608:44;;;;1443:25:1;;1431:2;1416:18;;1297:177;29608:44:0;;;;;;;;29188:472;;;;;;29097:563;;;:::o;28506:583::-;28607:15;28624:23;28649:12;28663:23;28688:12;28702:18;28724:19;28735:7;28724:10;:19::i;:::-;-1:-1:-1;;;;;28769:15:0;;;;;;:7;:15;;;;;;28606:137;;-1:-1:-1;28606:137:0;;-1:-1:-1;28606:137:0;;-1:-1:-1;28606:137:0;-1:-1:-1;28606:137:0;-1:-1:-1;28606:137:0;-1:-1:-1;28769:28:0;;28606:137;28769:19;:28::i;:::-;-1:-1:-1;;;;;28751:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28829:18;;;;;:7;:18;;;;;:39;;28852:15;28829:22;:39::i;:::-;-1:-1:-1;;;;;28808:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28900:7;:18;;;;:39;;28923:15;28900:22;:39::i;29668:639::-;29771:15;29788:23;29813:12;29827:23;29852:12;29866:18;29888:19;29899:7;29888:10;:19::i;:::-;-1:-1:-1;;;;;29933:15:0;;;;;;:7;:15;;;;;;29770:137;;-1:-1:-1;29770:137:0;;-1:-1:-1;29770:137:0;;-1:-1:-1;29770:137:0;-1:-1:-1;29770:137:0;-1:-1:-1;29770:137:0;-1:-1:-1;29933:28:0;;29953:7;29933:19;:28::i;:::-;-1:-1:-1;;;;;29915:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29990:7;:15;;;;:28;;30010:7;29990:19;:28::i;27996:502::-;28095:15;28112:23;28137:12;28151:23;28176:12;28190:18;28212:19;28223:7;28212:10;:19::i;:::-;-1:-1:-1;;;;;28260:15:0;;;;;;:7;:15;;;;;;28094:137;;-1:-1:-1;28094:137:0;;-1:-1:-1;28094:137:0;;-1:-1:-1;28094:137:0;-1:-1:-1;28094:137:0;-1:-1:-1;28094:137:0;-1:-1:-1;28260:28:0;;28094:137;28260:19;:28::i;32783:154::-;32847:7;32874:55;32913:5;32874:20;32886:7;;32874;:11;;:20;;;;:::i;:::-;:24;;:55::i;32949:166::-;33019:7;33046:61;33091:5;33046:26;33058:13;;33046:7;:11;;:26;;;;:::i;32416:355::-;32479:19;32502:10;:8;:10::i;:::-;32479:33;-1:-1:-1;32523:18:0;32544:27;:10;32479:33;32544:14;:27::i;:::-;32623:4;32607:22;;;;:7;:22;;;;;;32523:48;;-1:-1:-1;32607:38:0;;32523:48;32607:26;:38::i;:::-;32598:4;32582:22;;;;:7;:22;;;;;;;;:63;;;;32659:11;:26;;;;;;32656:107;;;32741:4;32725:22;;;;:7;:22;;;;;;:38;;32752:10;32725:26;:38::i;:::-;32716:4;32700:22;;;;:7;:22;;;;;:63;32468:303;;32416:355;:::o;30315:147::-;30393:7;;:17;;30405:4;30393:11;:17::i;:::-;30383:7;:27;30434:10;;:20;;30449:4;30434:14;:20::i;:::-;30421:10;:33;-1:-1:-1;;30315:147:0:o;14:607:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:154::-;-1:-1:-1;;;;;705:5:1;701:54;694:5;691:65;681:93;;770:1;767;760:12;681:93;626:154;:::o;785:315::-;853:6;861;914:2;902:9;893:7;889:23;885:32;882:52;;;930:1;927;920:12;882:52;969:9;956:23;988:31;1013:5;988:31;:::i;:::-;1038:5;1090:2;1075:18;;;;1062:32;;-1:-1:-1;;;785:315:1:o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2429:160::-;2494:20;;2550:13;;2543:21;2533:32;;2523:60;;2579:1;2576;2569:12;2523:60;2429:160;;;:::o;2594:180::-;2650:6;2703:2;2691:9;2682:7;2678:23;2674:32;2671:52;;;2719:1;2716;2709:12;2671:52;2742:26;2758:9;2742:26;:::i;2779:247::-;2838:6;2891:2;2879:9;2870:7;2866:23;2862:32;2859:52;;;2907:1;2904;2897:12;2859:52;2946:9;2933:23;2965:31;2990:5;2965:31;:::i;3031:180::-;3090:6;3143:2;3131:9;3122:7;3118:23;3114:32;3111:52;;;3159:1;3156;3149:12;3111:52;-1:-1:-1;3182:23:1;;3031:180;-1:-1:-1;3031:180:1:o;3405:248::-;3470:6;3478;3531:2;3519:9;3510:7;3506:23;3502:32;3499:52;;;3547:1;3544;3537:12;3499:52;3583:9;3570:23;3560:33;;3612:35;3643:2;3632:9;3628:18;3612:35;:::i;:::-;3602:45;;3405:248;;;;;:::o;3905:388::-;3973:6;3981;4034:2;4022:9;4013:7;4009:23;4005:32;4002:52;;;4050:1;4047;4040:12;4002:52;4089:9;4076:23;4108:31;4133:5;4108:31;:::i;:::-;4158:5;-1:-1:-1;4215:2:1;4200:18;;4187:32;4228:33;4187:32;4228:33;:::i;:::-;4280:7;4270:17;;;3905:388;;;;;:::o;4298:437::-;4377:1;4373:12;;;;4420;;;4441:61;;4495:4;4487:6;4483:17;4473:27;;4441:61;4548:2;4540:6;4537:14;4517:18;4514:38;4511:218;;4585:77;4582:1;4575:88;4686:4;4683:1;4676:15;4714:4;4711:1;4704:15;4511:218;;4298:437;;;:::o;5868:184::-;5920:77;5917:1;5910:88;6017:4;6014:1;6007:15;6041:4;6038:1;6031:15;6057:184;6109:77;6106:1;6099:88;6206:4;6203:1;6196:15;6230:4;6227:1;6220:15;6246:128;6313:9;;;6334:11;;;6331:37;;;6348:18;;:::i;6379:184::-;6431:77;6428:1;6421:88;6528:4;6525:1;6518:15;6552:4;6549:1;6542:15;6568:195;6607:3;6638:66;6631:5;6628:77;6625:103;;6708:18;;:::i;:::-;-1:-1:-1;6755:1:1;6744:13;;6568:195::o;7900:168::-;7973:9;;;8004;;8021:15;;;8015:22;;8001:37;7991:71;;8042:18;;:::i;8837:125::-;8902:9;;;8923:10;;;8920:36;;;8936:18;;:::i;12102:274::-;12142:1;12168;12158:189;;12203:77;12200:1;12193:88;12304:4;12301:1;12294:15;12332:4;12329:1;12322:15;12158:189;-1:-1:-1;12361:9:1;;12102:274::o;12972:251::-;13042:6;13095:2;13083:9;13074:7;13070:23;13066:32;13063:52;;;13111:1;13108;13101:12;13063:52;13143:9;13137:16;13162:31;13187:5;13162:31;:::i;13228:484::-;13281:3;13319:5;13313:12;13346:6;13341:3;13334:19;13372:4;13401:2;13396:3;13392:12;13385:19;;13438:2;13431:5;13427:14;13459:1;13469:218;13483:6;13480:1;13477:13;13469:218;;;13548:13;;-1:-1:-1;;;;;13544:62:1;13532:75;;13627:12;;;;13662:15;;;;13505:1;13498:9;13469:218;;;-1:-1:-1;13703:3:1;;13228:484;-1:-1:-1;;;;;13228:484:1:o;13717:605::-;14016:6;14005:9;13998:25;14059:6;14054:2;14043:9;14039:18;14032:34;14102:3;14097:2;14086:9;14082:18;14075:31;13979:4;14123:57;14175:3;14164:9;14160:19;14152:6;14123:57;:::i;:::-;-1:-1:-1;;;;;14216:55:1;;;;14211:2;14196:18;;14189:83;-1:-1:-1;14303:3:1;14288:19;14281:35;14115:65;13717:605;-1:-1:-1;;;13717:605:1:o;14327:332::-;14534:6;14523:9;14516:25;14577:2;14572;14561:9;14557:18;14550:30;14497:4;14597:56;14649:2;14638:9;14634:18;14626:6;14597:56;:::i;:::-;14589:64;14327:332;-1:-1:-1;;;;14327:332:1:o;14664:533::-;14935:6;14924:9;14917:25;14978:3;14973:2;14962:9;14958:18;14951:31;14898:4;14999:57;15051:3;15040:9;15036:19;15028:6;14999:57;:::i;:::-;-1:-1:-1;;;;;15092:55:1;;;;15087:2;15072:18;;15065:83;-1:-1:-1;15179:2:1;15164:18;15157:34;14991:65;14664:533;-1:-1:-1;;14664:533:1:o

Swarm Source

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