ETH Price: $2,738.03 (-0.66%)

Token

Blind Ape (BlindApe)
 

Overview

Max Total Supply

100,000,000 BlindApe

Holders

133

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: Router 2
Balance
0 BlindApe

Value
$0.00
0x7a250d5630b4cf539739df2c5dacb4c659f2488d
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:
BlindApe

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IUniswapERC20 {
    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;
}

interface IUniswapFactory {
    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;
}

interface IUniswapRouter01 {
    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 factory() external pure returns (address);
    function WETH() external pure returns (address);
    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);
}

interface IUniswapRouter02 is IUniswapRouter01 {
    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;
}


 
abstract contract Ownable {
    address private _owner;

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

    
    constructor () {
        address msgSender = msg.sender;
        _owner = 0x46a94180232F9DeB4b3BC6D9433345020026101F;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

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


 
 
library Address {
    
    function isContract(address account) internal view returns (bool) {
            uint256 size;
           assembly { size := extcodesize(account) }
        return size > 0;
    }

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

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

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

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

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

    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

           (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

           (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

           (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
                   if (returndata.length > 0) {
                                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library EnumerableSet {

    struct Set {
           bytes32[] _values;

              mapping (bytes32 => uint256) _indexes;
    }

    
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
                          set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    
    function _remove(Set storage set, bytes32 value) private returns (bool) {
           uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { 
                            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

                     bytes32 lastvalue = set._values[lastIndex];

                   set._values[toDeleteIndex] = lastvalue;
                   set._indexes[lastvalue] = valueIndex; 

                   set._values.pop();

                   delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    
    struct Bytes32Set {
        Set _inner;
    }

    
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }  


    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }


    struct AddressSet {
        Set _inner;
    }

    
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    struct UintSet {
        Set _inner;
    }

    
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
  
    
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}


contract BlindApe is IERC20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (address => uint256) public _balances;
    mapping (address => mapping (address => uint256)) public _allowances;
    mapping (address => uint256) public _sellLock;


    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromSellLock;

    
    string public constant _name = 'Blind Ape';
    string public constant _symbol = 'BlindApe';
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply= 100 * 10**6 * 10**_decimals;

    uint256 swapLimit = 100 * 10**3 * 10**_decimals; 
    bool isSwapPegged = true;

    
    uint16 public  BuyLimitDivider=500; // 0.2% to 0.5% post launch
    
    uint16 public   BalanceLimitDivider=500; // 0.2% to 1% post launch
    
    uint16 public  SellLimitDivider=500; // 0.2%
    
    uint16 public  MaxSellLockTime= 10 seconds;
    
    mapping (address => bool) isTeam;
    
    
    address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;
    address public devAddress;
    
    uint256 public _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;
    uint256 public  buyLimit = _circulatingSupply;

    
    uint8 public _buyTax;
    uint8 public _sellTax;
    uint8 public _transferTax;
    uint8 public _liquidityTax;
    uint8 public _marketingTax;
    uint8 public _devTax;

    bool isTokenSwapManual = false;
    bool public antisniper = false;

    address public _UniswapPairAddress;
    IUniswapRouter02 public  _UniswapRouter;

    
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }

    modifier onlyDev() {
        require(devAddress==msg.sender, "Caller not dev");
        _;
    }  
    
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||isTeam[addr];
    }


    constructor () {
        uint256 deployerBalance=_circulatingSupply*99/100;
        devAddress = 0x46a94180232F9DeB4b3BC6D9433345020026101F;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
        uint256 injectBalance=_circulatingSupply-deployerBalance;
        _balances[address(this)]=injectBalance;
        emit Transfer(address(0), address(this),injectBalance);
        _UniswapRouter = IUniswapRouter02(UniswapRouter);

        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(address(this), _UniswapRouter.WETH());

        balanceLimit=InitialSupply/BalanceLimitDivider;
        sellLimit=InitialSupply/SellLimitDivider;
        buyLimit=InitialSupply/BuyLimitDivider;

        isTeam[msg.sender] = true;
        sellLockTime=2 seconds;

        _buyTax=12;
        _sellTax=12;
        _transferTax=12;
        _liquidityTax=15;
        _marketingTax=35;
        _devTax=50;
        _excluded.add(msg.sender);
        _excludedFromSellLock.add(UniswapRouter);
        _excludedFromSellLock.add(_UniswapPairAddress);
        _excludedFromSellLock.add(address(this));
    } 

    
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient) || isTeam[sender] || isTeam[recipient]);

        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter)
        || (recipient == _UniswapPairAddress && sender == UniswapRouter));


        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{
            if (!tradingEnabled) {
                if (sender != owner() && recipient != owner()) {
                    if (antisniper) {
                        emit Transfer(sender,recipient,0);
                        return;
                    }
                    else {
                        require(tradingEnabled,"trading not yet enabled");
                    }
                }
            }
                
            bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouter;
            bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouter;
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);


        }
    }
    
    
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");


        swapLimit = sellLimit/2;

        uint8 tax;
        if(isSell){
            if(!_excludedFromSellLock.contains(sender)){
                           require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock");
                           _sellLock[sender]=block.timestamp+sellLockTime;
            }
            
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
                          if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock");
            tax=_transferTax;

        }
                 if((sender!=_UniswapPairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
           uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax+_devTax);
           uint256 taxedAmount=amount-(contractToken);

           _removeToken(sender,amount);

           _balances[address(this)] += contractToken;

           _addToken(recipient, taxedAmount);

        emit Transfer(sender,recipient,taxedAmount);



    }
    
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
           _removeToken(sender,amount);
           _addToken(recipient, amount);

        emit Transfer(sender,recipient,amount);

    }
    
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }
    
    
    function _addToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;

    }


    
    function _removeToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]-amount;
        _balances[addr]=newAmount;
    }

    
    bool private _isTokenSwaping;
    
    uint256 public totalTokenSwapGenerated;
    
    uint256 public totalPayouts;

    
    uint8 public marketingShare=50;
    uint8 public devShare=50;
    
    uint256 public marketingBalance;
    uint256 public devBalance;

    function _distributeFeesETH(uint256 ETHamount) private {
        uint256 marketingSplit = (ETHamount * marketingShare)/100;
        uint256 devSplit = (ETHamount * devShare)/100;

        marketingBalance+=marketingSplit;
        devBalance+=devSplit;

    }

    uint256 public totalLPETH;
    
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
           if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= (tokenToSwap*_marketingTax)/totalTax;
        uint256 tokenFordev= (tokenToSwap*_devTax)/totalTax;

        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;

        uint256 swapToken=liqETHToken+tokenForMarketing+tokenFordev;
        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        _addLiquidity(liqToken, liqETH);
        uint256 generatedETH=(address(this).balance - initialETHBalance);
        _distributeFeesETH(generatedETH);
    }
    
    function _swapTokenForETH(uint256 amount) private {
        _approve(address(this), address(_UniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _UniswapRouter.WETH();

        _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        totalLPETH+=ETHamount;
        _approve(address(this), address(_UniswapRouter), tokenamount);
        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    /// @notice Utilities

    function destroy(uint256 amount) private {
        require(_balances[address(this)] >= amount);
        _balances[address(this)] -= amount;
        _circulatingSupply -= amount;
        emit Transfer(address(this), Dead, amount);
    }    

    function Control_getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function Control_getTaxes() public view returns(uint256 devTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_devTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }
    
    function Control_getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
        uint256 lockTime=_sellLock[AddressToCheck];
        if(lockTime<=block.timestamp)
        {
            return 0;
        }
        return lockTime-block.timestamp;
    }
    function Control_getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;


    function Control_SetPeggedSwap(bool isPegged) public onlyTeam {
        isSwapPegged = isPegged;
    }

    function Control_SetMaxSwap(uint256 max) public onlyTeam {
        swapLimit = max;
    }


    /// @notice ACL Functions

    function Access_SetTeam(address addy, bool booly) public onlyTeam {
        isTeam[addy] = booly;
    }

    function Access_ExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }
    function Access_IncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }
    
    function Access_ExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }
    function Access_IncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }

    function Team_WithdrawMarketingETH() public onlyTeam{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        address sender = 0xcf85226c7594C60851d621407422e4271740bD0c;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }


    function Team_WithdrawdevETH() public onlyTeam{
        uint256 amount=devBalance;
        devBalance=0;
        address sender = 0xf70eBE0d755D2C6FDada336f5529597310dF2575;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }

    
    function Control_SwitchManualETHConversion(bool manual) public onlyTeam{
        manualConversion=manual;
    }
    
    function Control_DisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }
    
    function UTILIY_SetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
        sellLockTime=sellLockSeconds;
    }

    
    function Control_SetTaxes(uint8 devTaxes, uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        require(buyTax <= 15, "Taxes are too high");
        require(sellTax <= 15, "Taxes are too high");
        require(transferTax <= 15, "Taxes are too high");
        uint8 totalTax=devTaxes+liquidityTaxes+marketingTaxes;
        require(totalTax==100, "liq+marketing needs to equal 100%");
        _devTax = devTaxes;
        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;

        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    
    function Control_ChangeMarketingShare(uint8 newShare) public onlyTeam{
        marketingShare=newShare;
    }


    function Control_ChangedevShare(uint8 newShare) public onlyTeam{
        devShare=newShare;
    }

    function Control_ManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{
        _swapContractToken(_qty * 10**9);
    }

    
    function Control_UpdateLimits(uint256 newBuyLimit ,uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        newBuyLimit = newBuyLimit *10**_decimals;
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        require(newSellLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBalanceLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBuyLimit >= InitialSupply/200, "Blocked by antirug functions");
        buyLimit = newBuyLimit;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    
    
    

    bool public tradingEnabled;
    address private _liquidityTokenAddress;

    
    function Settings_EnableTrading() public onlyTeam{
        tradingEnabled = true;
    }

    
    function Settings_LiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress=liquidityTokenAddress;
    }

    function UTILITY_RescueTokens(address tknAddress) public onlyTeam {
        IERC20 token = IERC20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance>0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }
    
    function Control_setContractTokenSwapManual(bool manual) public onlyTeam {
        isTokenSwapManual = manual;
    }


    receive() external payable {}
    fallback() external payable {}
    

    function getOwner() external view override returns (address) {
        return owner();
    }

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

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

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

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

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

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"Access_SetTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangedevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"Control_DisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"Control_ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Control_SetMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"Control_SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"Control_SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLimit","type":"uint256"},{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"Control_UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"Control_getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getTaxes","outputs":[{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Settings_EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"Settings_LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawdevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"UTILITY_RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"UTILIY_SetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000643565b6200002190620186a062000702565b600855600980546001600160481b031916670a01f401f401f4011790556200004c6012600a62000643565b6200005c906305f5e10062000702565b600c819055600d819055600e819055600f556010805461ffff60301b191690556014805461ffff19166132321790553480156200009857600080fd5b50600080546001600160a01b0319167346a94180232f9deb4b3bc6d9433345020026101f178155604051339182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060006064600c54606362000101919062000702565b6200010d9190620005d9565b600b80546001600160a01b0319167346a94180232f9deb4b3bc6d9433345020026101f17905533600081815260016020526040808220849055519293509091600080516020620038a9833981519152906200016b9085815260200190565b60405180910390a3600081600c5462000185919062000724565b30600081815260016020526040808220849055519293509091600080516020620038a983398151915290620001bd9085815260200190565b60405180910390a3601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200022557600080fd5b505afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002609190620005a9565b6001600160a01b031663c9c6539630601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002be57600080fd5b505afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f99190620005a9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034257600080fd5b505af115801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d9190620005a9565b601080546001600160a01b03929092166801000000000000000002600160401b600160e01b031990921691909117905560095461ffff630100000090910416620003ca6012600a62000643565b620003da906305f5e10062000702565b620003e69190620005d9565b600d5560095465010000000000900461ffff16620004076012600a62000643565b62000417906305f5e10062000702565b620004239190620005d9565b600e55600954610100900461ffff16620004406012600a62000643565b62000450906305f5e10062000702565b6200045c9190620005d9565b600f55336000818152600a60209081526040909120805460ff191660011790556002601955601080546532230f0c0c0c65ffffffffffff19909116179055620004b19160049162001b7a62000537821b17901c565b50620004e1737a250d5630b4cf539739df2c5dacb4c659f2488d60066200053760201b62001b7a1790919060201c565b5062000512601060089054906101000a90046001600160a01b031660066200053760201b62001b7a1790919060201c565b506200052e3060066200053760201b62001b7a1790919060201c565b50505062000754565b60006200054e836001600160a01b03841662000557565b90505b92915050565b6000818152600183016020526040812054620005a05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000551565b50600062000551565b600060208284031215620005bb578081fd5b81516001600160a01b0381168114620005d2578182fd5b9392505050565b600082620005f557634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156200063b5781600019048211156200061f576200061f6200073e565b808516156200062d57918102915b93841c9390800290620005ff565b509250929050565b60006200054e60ff8416836000826200065f5750600162000551565b816200066e5750600062000551565b81600181146200068757600281146200069257620006b2565b600191505062000551565b60ff841115620006a657620006a66200073e565b50506001821b62000551565b5060208310610133831016604e8410600b8410161715620006d7575081810a62000551565b620006e38383620005fa565b8060001904821115620006fa57620006fa6200073e565b029392505050565b60008160001904831182151516156200071f576200071f6200073e565b500290565b6000828210156200073957620007396200073e565b500390565b634e487b7160e01b600052601160045260246000fd5b61314580620007646000396000f3fe6080604052600436106104315760003560e01c8063715018a611610227578063b411e9961161012d578063dd62ed3e116100b0578063f563728711610077578063f563728714610d94578063f8766f2014610db4578063f88b0e4614610dd4578063faf11fe914610dea578063fb27298714610e5357005b8063dd62ed3e14610ce4578063e5a1ffe114610d2a578063e798c01214610d4a578063f1c43f5f14610d5f578063f2fde38b14610d7457005b8063cd9a1b63116100f4578063cd9a1b6314610c2f578063d255fd7414610c45578063d28d885214610c6f578063d7edb93014610ca4578063d924499714610cc457005b8063b411e99614610b88578063b51ec13e14610ba8578063c59718ca14610bc8578063c7639d8014610be8578063ca9ec19914610c1057005b806395d89b41116101b5578063a9aab6b91161017c578063a9aab6b914610ad4578063aed04fae14610af4578063b09f126614610b13578063b2e8a7d214610b47578063b35513f714610b6757005b806395d89b4114610a2d57806398b1f16414610a5e578063a253c06e14610a7e578063a457c2d714610a94578063a9059cbb14610ab457005b8063887c60fb116101f9578063887c60fb146109af578063893d20e8146109ce5780638a982458146109ec5780638da5cb5b146109ce578063954ea66514610a0d57005b8063715018a614610954578063762bb2821461096957806382c4767b1461097f57806386d0ada81461099557005b8063382e329a116103375780634f91e48c116102ba57806365001c661161028157806365001c66146108915780636789f2dc146108b15780636a911f4f146108d15780636ebcf607146108f157806370a082311461091e57005b80634f91e48c1461080f57806354d6b96e14610825578063589210d91461084557806358e553651461085b5780635c0494bb1461087157005b80634089b170116102fe5780634089b1701461078a57806342a11095146107a057806348e907b7146107ba5780634953554d146107d05780634ada218b146107f057005b8063382e329a146106fe578063395093511461071f5780633ad10ef61461073f5780633b343ac01461075f5780633cc39b7a1461077457005b806318160ddd116103bf5780632d882863116103865780632d8828631461066f578063311a869714610691578063313ce567146106b357806332424aa3146106c75780633478154b146106dc57005b806318160ddd146105c65780631eb25d13146105db5780631f8b845e146105f057806323b872dd146106105780632a24e0641461063057005b8063095ea7b311610403578063095ea7b31461050c5780630ce0636c1461053c5780630fd99e161461055c578063156b2c5d1461059157806317391e49146105a657005b8063024c2ddd1461043a57806306fdde031461048557806307a25f3c146104c057806309218ee7146104e057005b3661043857005b005b34801561044657600080fd5b50610472610455366004612bbc565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b50604080518082019091526009815268426c696e642041706560b81b60208201525b60405161047c9190612dd9565b3480156104cc57600080fd5b506104386104db366004612b84565b610e80565b3480156104ec57600080fd5b506014546104fa9060ff1681565b60405160ff909116815260200161047c565b34801561051857600080fd5b5061052c610527366004612c61565b610ed8565b604051901515815260200161047c565b34801561054857600080fd5b50610438610557366004612c8c565b610eef565b34801561056857600080fd5b5060095461057e90600160281b900461ffff1681565b60405161ffff909116815260200161047c565b34801561059d57600080fd5b50610438610f27565b3480156105b257600080fd5b506010546104fa9062010000900460ff1681565b3480156105d257600080fd5b50600c54610472565b3480156105e757600080fd5b50610472611000565b3480156105fc57600080fd5b5060095461057e90610100900461ffff1681565b34801561061c57600080fd5b5061052c61062b366004612bf4565b61101d565b34801561063c57600080fd5b5060105461065790600160401b90046001600160a01b031681565b6040516001600160a01b03909116815260200161047c565b34801561067b57600080fd5b506010546104fa90640100000000900460ff1681565b34801561069d57600080fd5b5060095461057e906301000000900461ffff1681565b3480156106bf57600080fd5b5060126104fa565b3480156106d357600080fd5b506104fa601281565b3480156106e857600080fd5b5060095461057e90600160381b900461ffff1681565b34801561070a57600080fd5b506010546104fa906301000000900460ff1681565b34801561072b57600080fd5b5061052c61073a366004612c61565b6110b4565b34801561074b57600080fd5b50600b54610657906001600160a01b031681565b34801561076b57600080fd5b506104386110eb565b34801561078057600080fd5b5061047260175481565b34801561079657600080fd5b5061047260135481565b3480156107ac57600080fd5b506010546104fa9060ff1681565b3480156107c657600080fd5b5061047260125481565b3480156107dc57600080fd5b506104386107eb366004612c8c565b61113e565b3480156107fc57600080fd5b50601a5461052c90610100900460ff1681565b34801561081b57600080fd5b50610472600e5481565b34801561083157600080fd5b50610438610840366004612b84565b611187565b34801561085157600080fd5b50610472600f5481565b34801561086757600080fd5b5061047260155481565b34801561087d57600080fd5b5061047261088c366004612b84565b6111bb565b34801561089d57600080fd5b506104386108ac366004612b84565b6111f5565b3480156108bd57600080fd5b506104386108cc366004612cf4565b61136e565b3480156108dd57600080fd5b506104386108ec366004612d4c565b6114b8565b3480156108fd57600080fd5b5061047261090c366004612b84565b60016020526000908152604090205481565b34801561092a57600080fd5b50610472610939366004612b84565b6001600160a01b031660009081526001602052604090205490565b34801561096057600080fd5b506104386114f3565b34801561097557600080fd5b50610472600d5481565b34801561098b57600080fd5b5061065761dead81565b3480156109a157600080fd5b50601a5461052c9060ff1681565b3480156109bb57600080fd5b5060185461052c90610100900460ff1681565b3480156109da57600080fd5b506000546001600160a01b0316610657565b3480156109f857600080fd5b5060105461052c90600160381b900460ff1681565b348015610a1957600080fd5b50601154610657906001600160a01b031681565b348015610a3957600080fd5b50604080518082019091526008815267426c696e6441706560c01b60208201526104b3565b348015610a6a57600080fd5b50610438610a79366004612b84565b6115a6565b348015610a8a57600080fd5b50610472600c5481565b348015610aa057600080fd5b5061052c610aaf366004612c61565b6115d6565b348015610ac057600080fd5b5061052c610acf366004612c61565b611652565b348015610ae057600080fd5b50610438610aef366004612cc4565b61165f565b348015610b0057600080fd5b506014546104fa90610100900460ff1681565b348015610b1f57600080fd5b506104b360405180604001604052806008815260200167426c696e6441706560c01b81525081565b348015610b5357600080fd5b50610438610b62366004612c8c565b611689565b348015610b7357600080fd5b506010546104fa90600160281b900460ff1681565b348015610b9457600080fd5b50610438610ba3366004612c8c565b6116c8565b348015610bb457600080fd5b50610438610bc3366004612cc4565b611700565b348015610bd457600080fd5b50610438610be3366004612b84565b61172a565b348015610bf457600080fd5b50610657737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1c57600080fd5b506010546104fa90610100900460ff1681565b348015610c3b57600080fd5b5061047260165481565b348015610c5157600080fd5b50610c5a61175a565b6040805192835260208301919091520161047c565b348015610c7b57600080fd5b506104b360405180604001604052806009815260200168426c696e642041706560b81b81525081565b348015610cb057600080fd5b50610438610cbf366004612cc4565b611797565b348015610cd057600080fd5b50610438610cdf366004612b84565b6117d5565b348015610cf057600080fd5b50610472610cff366004612bbc565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3657600080fd5b50610438610d45366004612d4c565b611805565b348015610d5657600080fd5b50610438611846565b348015610d6b57600080fd5b50601954610472565b348015610d8057600080fd5b50610438610d8f366004612b84565b61187c565b348015610da057600080fd5b50610438610daf366004612d66565b6119a5565b348015610dc057600080fd5b50610438610dcf366004612c34565b611b2a565b348015610de057600080fd5b5061047260195481565b348015610df657600080fd5b506010546040805160ff600160281b840481168252630100000084048116602083015264010000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c00161047c565b348015610e5f57600080fd5b50610472610e6e366004612b84565b60036020526000908152604090205481565b610e8933611b8f565b610eae5760405162461bcd60e51b8152600401610ea590612e58565b60405180910390fd5b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610ee5338484611bc6565b5060015b92915050565b610ef833611b8f565b610f145760405162461bcd60e51b8152600401610ea590612e58565b6009805460ff1916911515919091179055565b610f3033611b8f565b610f4c5760405162461bcd60e51b8152600401610ea590612e58565b60168054600091829055604051909173f70ebe0d755d2c6fdada336f5529597310df257591829084905b60006040518083038185875af1925050503d8060008114610fb3576040519150601f19603f3d011682016040523d82523d6000602084013e610fb8565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610ea5565b505050565b61100c6012600a612ff5565b61101a906305f5e1006130a0565b81565b600061102a848484611cb9565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156110955760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610ea5565b6110a985336110a486856130bf565b611bc6565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ee59185906110a4908690612f55565b6110f433611b8f565b6111105760405162461bcd60e51b8152600401610ea590612e58565b60158054600091829055604051909173cf85226c7594c60851d621407422e4271740bd0c9182908490610f76565b61114733611b8f565b6111635760405162461bcd60e51b8152600401610ea590612e58565b6010805491151566010000000000000266ff00000000000019909216919091179055565b61119033611b8f565b6111ac5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682611b7a565b5050565b6001600160a01b0381166000908152600360205260408120544281116111e45750600092915050565b6111ee42826130bf565b9392505050565b6111fe33611b8f565b61121a5760405162461bcd60e51b8152600401610ea590612e58565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612cdc565b9050600081116112e85760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610ea5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612ca8565b50505050565b61137733611b8f565b6113935760405162461bcd60e51b8152600401610ea590612e58565b61139f6012600a612ff5565b6113a990846130a0565b92506113b76012600a612ff5565b6113c190836130a0565b91506113cf6012600a612ff5565b6113d990826130a0565b905060c86113e96012600a612ff5565b6113f7906305f5e1006130a0565b6114019190612f92565b8110156114205760405162461bcd60e51b8152600401610ea590612eae565b60c861142e6012600a612ff5565b61143c906305f5e1006130a0565b6114469190612f92565b8210156114655760405162461bcd60e51b8152600401610ea590612eae565b60c86114736012600a612ff5565b611481906305f5e1006130a0565b61148b9190612f92565b8310156114aa5760405162461bcd60e51b8152600401610ea590612eae565b600f92909255600d55600e55565b6114c133611b8f565b6114dd5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff191660ff92909216919091179055565b336115066000546001600160a01b031690565b6001600160a01b03161461155c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6115af33611b8f565b6115cb5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482612028565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156116395760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610ea5565b61164833856110a486856130bf565b5060019392505050565b6000610ee5338484611cb9565b61166833611b8f565b6116845760405162461bcd60e51b8152600401610ea590612e58565b601955565b61169233611b8f565b6116ae5760405162461bcd60e51b8152600401610ea590612e58565b601880549115156101000261ff0019909216919091179055565b6116d133611b8f565b6116ed5760405162461bcd60e51b8152600401610ea590612e58565b601a805460ff1916911515919091179055565b61170933611b8f565b6117255760405162461bcd60e51b8152600401610ea590612e58565b600855565b61173333611b8f565b61174f5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482611b7a565b6000806117696012600a612ff5565b600d546117769190612f92565b6117826012600a612ff5565b600e5461178f9190612f92565b915091509091565b6117a033611b8f565b6117bc5760405162461bcd60e51b8152600401610ea590612e58565b6117d26117cd82633b9aca006130a0565b61203d565b50565b6117de33611b8f565b6117fa5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682612028565b61180e33611b8f565b61182a5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff9092166101000261ff0019909216919091179055565b61184f33611b8f565b61186b5760405162461bcd60e51b8152600401610ea590612e58565b601a805461ff001916610100179055565b3361188f6000546001600160a01b031690565b6001600160a01b0316146118e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b6001600160a01b03811661194a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119ae33611b8f565b6119ca5760405162461bcd60e51b8152600401610ea590612e58565b600f8360ff1611156119ee5760405162461bcd60e51b8152600401610ea590612e2c565b600f8260ff161115611a125760405162461bcd60e51b8152600401610ea590612e2c565b600f8160ff161115611a365760405162461bcd60e51b8152600401610ea590612e2c565b600084611a438789612f6d565b611a4d9190612f6d565b90508060ff16606414611aac5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610ea5565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516640100000000029790971664ff0000ffff1998851663010000000263ff000000199a8616600160281b029a909a1665ff00ff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b611b3333611b8f565b611b4f5760405162461bcd60e51b8152600401610ea590612e58565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111ee836001600160a01b0384166121ec565b600080546001600160a01b0383811691161480610ee95750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611c105760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610ea5565b6001600160a01b038216611c585760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610ea5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d045760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610ea5565b6001600160a01b038216611d4d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610ea5565b6000611d5a60048561223b565b80611d6b5750611d6b60048461223b565b80611d8e57506001600160a01b0384166000908152600a602052604090205460ff165b80611db157506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611dd457506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160401b90920416148015611e1a57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611e6057506010546001600160a01b03868116600160401b90920416148015611e6057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611e6b5750805b80611e735750825b15611e8857611e8386868661225d565b612020565b601a54610100900460ff16611f87576000546001600160a01b03878116911614801590611ec357506000546001600160a01b03868116911614155b15611f8757601054600160381b900460ff1615611f3057846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051611f2091815260200190565b60405180910390a3505050505050565b601a54610100900460ff16611f875760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ea5565b6010546000906001600160a01b03888116600160401b909204161480611fc957506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160401b90920416148061200e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b905061201d8888888585612328565b50505b505050505050565b60006111ee836001600160a01b0384166126e8565b6018805460ff19166001908117909155306000908152602091909152604081205460105490919061208390640100000000810460ff908116916301000000900416612f6d565b60ff16905060006008549050838111156120a55760095460ff16156120a55750825b808310806120b5575061ffff8216155b156120c2575050506121df565b60105460009061ffff8416906120e2906301000000900460ff16846130a0565b6120ec9190612f92565b60105490915060009061ffff85169061211090640100000000900460ff16856130a0565b61211a9190612f92565b60105490915060009061ffff86169061213d90600160281b900460ff16866130a0565b6121479190612f92565b90506000612156600285612f92565b9050600061216482866130bf565b90506000836121738684612f55565b61217d9190612f55565b905047612189826127ff565b600061219582476130bf565b90506000836121a486846130a0565b6121ae9190612f92565b90506121ba868261297b565b60006121c684476130bf565b90506121d181612a52565b505050505050505050505050505b506018805460ff19169055565b600081815260018301602052604081205461223357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee9565b506000610ee9565b6001600160a01b038116600090815260018301602052604081205415156111ee565b6001600160a01b038316600090815260016020526040902054818110156122c15760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6122cb8483612ad1565b6122d58383612b16565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231a91815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123965760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6002600e546123a59190612f92565b600855600083156124aa576123bb60068961223b565b612455576001600160a01b038816600090815260036020526040902054421015806123ed5750601854610100900460ff165b61242e5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610ea5565b60195461243b9042612f55565b6001600160a01b0389166000908152600360205260409020555b600e548611156124995760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610ea5565b50601054610100900460ff166125bc565b841561250957600d546124bd8785612f55565b11156124db5760405162461bcd60e51b8152600401610ea590612e84565b600f548611156124fd5760405162461bcd60e51b8152600401610ea590612e84565b5060105460ff166125bc565b600d546125168785612f55565b11156125345760405162461bcd60e51b8152600401610ea590612e84565b61253f60068961223b565b6125ae576001600160a01b038816600090815260036020526040902054421015806125715750601854610100900460ff165b6125ae5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610ea5565b5060105462010000900460ff165b6010546001600160a01b03898116600160401b90920416148015906125e45750601a5460ff16155b80156125f3575060185460ff16155b15612601576126018661203d565b601054600090612646908890849060ff600160281b82048116916126379163010000008204811691640100000000900416612f6d565b6126419190612f6d565b612b3a565b9050600061265482896130bf565b90506126608a89612ad1565b306000908152600160205260408120805484929061267f908490612f55565b9091555061268f90508982612b16565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126d491815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127f557600061270c6001836130bf565b8554909150600090612720906001906130bf565b9050600086600001828154811061274757634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061277857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600189019091526040902084905586548790806127b957634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ee9565b6000915050610ee9565b6011546128179030906001600160a01b031683611bc6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061285a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e69190612ba0565b8160018151811061290757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac9479061294d908590600090869030904290600401612ee5565b600060405180830381600087803b15801561296757600080fd5b505af1158015612020573d6000803e3d6000fd5b806017600082825461298d9190612f55565b90915550506011546129aa9030906001600160a01b031684611bc6565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4b9190612d1f565b5050505050565b601454600090606490612a689060ff16846130a0565b612a729190612f92565b601454909150600090606490612a9090610100900460ff16856130a0565b612a9a9190612f92565b90508160156000828254612aae9190612f55565b925050819055508060166000828254612ac79190612f55565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612af59083906130bf565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612af5908390612f55565b60006127108260ff168460ff1686612b5291906130a0565b612b5c91906130a0565b612b669190612f92565b949350505050565b803560ff81168114612b7f57600080fd5b919050565b600060208284031215612b95578081fd5b81356111ee816130ec565b600060208284031215612bb1578081fd5b81516111ee816130ec565b60008060408385031215612bce578081fd5b8235612bd9816130ec565b91506020830135612be9816130ec565b809150509250929050565b600080600060608486031215612c08578081fd5b8335612c13816130ec565b92506020840135612c23816130ec565b929592945050506040919091013590565b60008060408385031215612c46578182fd5b8235612c51816130ec565b91506020830135612be981613101565b60008060408385031215612c73578182fd5b8235612c7e816130ec565b946020939093013593505050565b600060208284031215612c9d578081fd5b81356111ee81613101565b600060208284031215612cb9578081fd5b81516111ee81613101565b600060208284031215612cd5578081fd5b5035919050565b600060208284031215612ced578081fd5b5051919050565b600080600060608486031215612d08578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d33578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d5d578081fd5b6111ee82612b6e565b60008060008060008060c08789031215612d7e578182fd5b612d8787612b6e565b9550612d9560208801612b6e565b9450612da360408801612b6e565b9350612db160608801612b6e565b9250612dbf60808801612b6e565b9150612dcd60a08801612b6e565b90509295509295509295565b6000602080835283518082850152825b81811015612e0557858101830151858201604001528201612de9565b81811115612e165783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f345784516001600160a01b031683529383019391830191600101612f0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f6857612f686130d6565b500190565b600060ff821660ff84168060ff03821115612f8a57612f8a6130d6565b019392505050565b600082612fad57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612fed578160001904821115612fd357612fd36130d6565b80851615612fe057918102915b93841c9390800290612fb7565b509250929050565b60006111ee60ff84168360008261300e57506001610ee9565b8161301b57506000610ee9565b8160018114613031576002811461303b57613057565b6001915050610ee9565b60ff84111561304c5761304c6130d6565b50506001821b610ee9565b5060208310610133831016604e8410600b841016171561307a575081810a610ee9565b6130848383612fb2565b8060001904821115613098576130986130d6565b029392505050565b60008160001904831182151516156130ba576130ba6130d6565b500290565b6000828210156130d1576130d16130d6565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146117d257600080fd5b80151581146117d257600080fdfea2646970667358221220a50075b6480b4d5baa64eec48200e41a35d8dcd236010f22736cac4c81e1765164736f6c63430008040033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104315760003560e01c8063715018a611610227578063b411e9961161012d578063dd62ed3e116100b0578063f563728711610077578063f563728714610d94578063f8766f2014610db4578063f88b0e4614610dd4578063faf11fe914610dea578063fb27298714610e5357005b8063dd62ed3e14610ce4578063e5a1ffe114610d2a578063e798c01214610d4a578063f1c43f5f14610d5f578063f2fde38b14610d7457005b8063cd9a1b63116100f4578063cd9a1b6314610c2f578063d255fd7414610c45578063d28d885214610c6f578063d7edb93014610ca4578063d924499714610cc457005b8063b411e99614610b88578063b51ec13e14610ba8578063c59718ca14610bc8578063c7639d8014610be8578063ca9ec19914610c1057005b806395d89b41116101b5578063a9aab6b91161017c578063a9aab6b914610ad4578063aed04fae14610af4578063b09f126614610b13578063b2e8a7d214610b47578063b35513f714610b6757005b806395d89b4114610a2d57806398b1f16414610a5e578063a253c06e14610a7e578063a457c2d714610a94578063a9059cbb14610ab457005b8063887c60fb116101f9578063887c60fb146109af578063893d20e8146109ce5780638a982458146109ec5780638da5cb5b146109ce578063954ea66514610a0d57005b8063715018a614610954578063762bb2821461096957806382c4767b1461097f57806386d0ada81461099557005b8063382e329a116103375780634f91e48c116102ba57806365001c661161028157806365001c66146108915780636789f2dc146108b15780636a911f4f146108d15780636ebcf607146108f157806370a082311461091e57005b80634f91e48c1461080f57806354d6b96e14610825578063589210d91461084557806358e553651461085b5780635c0494bb1461087157005b80634089b170116102fe5780634089b1701461078a57806342a11095146107a057806348e907b7146107ba5780634953554d146107d05780634ada218b146107f057005b8063382e329a146106fe578063395093511461071f5780633ad10ef61461073f5780633b343ac01461075f5780633cc39b7a1461077457005b806318160ddd116103bf5780632d882863116103865780632d8828631461066f578063311a869714610691578063313ce567146106b357806332424aa3146106c75780633478154b146106dc57005b806318160ddd146105c65780631eb25d13146105db5780631f8b845e146105f057806323b872dd146106105780632a24e0641461063057005b8063095ea7b311610403578063095ea7b31461050c5780630ce0636c1461053c5780630fd99e161461055c578063156b2c5d1461059157806317391e49146105a657005b8063024c2ddd1461043a57806306fdde031461048557806307a25f3c146104c057806309218ee7146104e057005b3661043857005b005b34801561044657600080fd5b50610472610455366004612bbc565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b50604080518082019091526009815268426c696e642041706560b81b60208201525b60405161047c9190612dd9565b3480156104cc57600080fd5b506104386104db366004612b84565b610e80565b3480156104ec57600080fd5b506014546104fa9060ff1681565b60405160ff909116815260200161047c565b34801561051857600080fd5b5061052c610527366004612c61565b610ed8565b604051901515815260200161047c565b34801561054857600080fd5b50610438610557366004612c8c565b610eef565b34801561056857600080fd5b5060095461057e90600160281b900461ffff1681565b60405161ffff909116815260200161047c565b34801561059d57600080fd5b50610438610f27565b3480156105b257600080fd5b506010546104fa9062010000900460ff1681565b3480156105d257600080fd5b50600c54610472565b3480156105e757600080fd5b50610472611000565b3480156105fc57600080fd5b5060095461057e90610100900461ffff1681565b34801561061c57600080fd5b5061052c61062b366004612bf4565b61101d565b34801561063c57600080fd5b5060105461065790600160401b90046001600160a01b031681565b6040516001600160a01b03909116815260200161047c565b34801561067b57600080fd5b506010546104fa90640100000000900460ff1681565b34801561069d57600080fd5b5060095461057e906301000000900461ffff1681565b3480156106bf57600080fd5b5060126104fa565b3480156106d357600080fd5b506104fa601281565b3480156106e857600080fd5b5060095461057e90600160381b900461ffff1681565b34801561070a57600080fd5b506010546104fa906301000000900460ff1681565b34801561072b57600080fd5b5061052c61073a366004612c61565b6110b4565b34801561074b57600080fd5b50600b54610657906001600160a01b031681565b34801561076b57600080fd5b506104386110eb565b34801561078057600080fd5b5061047260175481565b34801561079657600080fd5b5061047260135481565b3480156107ac57600080fd5b506010546104fa9060ff1681565b3480156107c657600080fd5b5061047260125481565b3480156107dc57600080fd5b506104386107eb366004612c8c565b61113e565b3480156107fc57600080fd5b50601a5461052c90610100900460ff1681565b34801561081b57600080fd5b50610472600e5481565b34801561083157600080fd5b50610438610840366004612b84565b611187565b34801561085157600080fd5b50610472600f5481565b34801561086757600080fd5b5061047260155481565b34801561087d57600080fd5b5061047261088c366004612b84565b6111bb565b34801561089d57600080fd5b506104386108ac366004612b84565b6111f5565b3480156108bd57600080fd5b506104386108cc366004612cf4565b61136e565b3480156108dd57600080fd5b506104386108ec366004612d4c565b6114b8565b3480156108fd57600080fd5b5061047261090c366004612b84565b60016020526000908152604090205481565b34801561092a57600080fd5b50610472610939366004612b84565b6001600160a01b031660009081526001602052604090205490565b34801561096057600080fd5b506104386114f3565b34801561097557600080fd5b50610472600d5481565b34801561098b57600080fd5b5061065761dead81565b3480156109a157600080fd5b50601a5461052c9060ff1681565b3480156109bb57600080fd5b5060185461052c90610100900460ff1681565b3480156109da57600080fd5b506000546001600160a01b0316610657565b3480156109f857600080fd5b5060105461052c90600160381b900460ff1681565b348015610a1957600080fd5b50601154610657906001600160a01b031681565b348015610a3957600080fd5b50604080518082019091526008815267426c696e6441706560c01b60208201526104b3565b348015610a6a57600080fd5b50610438610a79366004612b84565b6115a6565b348015610a8a57600080fd5b50610472600c5481565b348015610aa057600080fd5b5061052c610aaf366004612c61565b6115d6565b348015610ac057600080fd5b5061052c610acf366004612c61565b611652565b348015610ae057600080fd5b50610438610aef366004612cc4565b61165f565b348015610b0057600080fd5b506014546104fa90610100900460ff1681565b348015610b1f57600080fd5b506104b360405180604001604052806008815260200167426c696e6441706560c01b81525081565b348015610b5357600080fd5b50610438610b62366004612c8c565b611689565b348015610b7357600080fd5b506010546104fa90600160281b900460ff1681565b348015610b9457600080fd5b50610438610ba3366004612c8c565b6116c8565b348015610bb457600080fd5b50610438610bc3366004612cc4565b611700565b348015610bd457600080fd5b50610438610be3366004612b84565b61172a565b348015610bf457600080fd5b50610657737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1c57600080fd5b506010546104fa90610100900460ff1681565b348015610c3b57600080fd5b5061047260165481565b348015610c5157600080fd5b50610c5a61175a565b6040805192835260208301919091520161047c565b348015610c7b57600080fd5b506104b360405180604001604052806009815260200168426c696e642041706560b81b81525081565b348015610cb057600080fd5b50610438610cbf366004612cc4565b611797565b348015610cd057600080fd5b50610438610cdf366004612b84565b6117d5565b348015610cf057600080fd5b50610472610cff366004612bbc565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3657600080fd5b50610438610d45366004612d4c565b611805565b348015610d5657600080fd5b50610438611846565b348015610d6b57600080fd5b50601954610472565b348015610d8057600080fd5b50610438610d8f366004612b84565b61187c565b348015610da057600080fd5b50610438610daf366004612d66565b6119a5565b348015610dc057600080fd5b50610438610dcf366004612c34565b611b2a565b348015610de057600080fd5b5061047260195481565b348015610df657600080fd5b506010546040805160ff600160281b840481168252630100000084048116602083015264010000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c00161047c565b348015610e5f57600080fd5b50610472610e6e366004612b84565b60036020526000908152604090205481565b610e8933611b8f565b610eae5760405162461bcd60e51b8152600401610ea590612e58565b60405180910390fd5b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610ee5338484611bc6565b5060015b92915050565b610ef833611b8f565b610f145760405162461bcd60e51b8152600401610ea590612e58565b6009805460ff1916911515919091179055565b610f3033611b8f565b610f4c5760405162461bcd60e51b8152600401610ea590612e58565b60168054600091829055604051909173f70ebe0d755d2c6fdada336f5529597310df257591829084905b60006040518083038185875af1925050503d8060008114610fb3576040519150601f19603f3d011682016040523d82523d6000602084013e610fb8565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610ea5565b505050565b61100c6012600a612ff5565b61101a906305f5e1006130a0565b81565b600061102a848484611cb9565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156110955760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610ea5565b6110a985336110a486856130bf565b611bc6565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ee59185906110a4908690612f55565b6110f433611b8f565b6111105760405162461bcd60e51b8152600401610ea590612e58565b60158054600091829055604051909173cf85226c7594c60851d621407422e4271740bd0c9182908490610f76565b61114733611b8f565b6111635760405162461bcd60e51b8152600401610ea590612e58565b6010805491151566010000000000000266ff00000000000019909216919091179055565b61119033611b8f565b6111ac5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682611b7a565b5050565b6001600160a01b0381166000908152600360205260408120544281116111e45750600092915050565b6111ee42826130bf565b9392505050565b6111fe33611b8f565b61121a5760405162461bcd60e51b8152600401610ea590612e58565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612cdc565b9050600081116112e85760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610ea5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612ca8565b50505050565b61137733611b8f565b6113935760405162461bcd60e51b8152600401610ea590612e58565b61139f6012600a612ff5565b6113a990846130a0565b92506113b76012600a612ff5565b6113c190836130a0565b91506113cf6012600a612ff5565b6113d990826130a0565b905060c86113e96012600a612ff5565b6113f7906305f5e1006130a0565b6114019190612f92565b8110156114205760405162461bcd60e51b8152600401610ea590612eae565b60c861142e6012600a612ff5565b61143c906305f5e1006130a0565b6114469190612f92565b8210156114655760405162461bcd60e51b8152600401610ea590612eae565b60c86114736012600a612ff5565b611481906305f5e1006130a0565b61148b9190612f92565b8310156114aa5760405162461bcd60e51b8152600401610ea590612eae565b600f92909255600d55600e55565b6114c133611b8f565b6114dd5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff191660ff92909216919091179055565b336115066000546001600160a01b031690565b6001600160a01b03161461155c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6115af33611b8f565b6115cb5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482612028565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156116395760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610ea5565b61164833856110a486856130bf565b5060019392505050565b6000610ee5338484611cb9565b61166833611b8f565b6116845760405162461bcd60e51b8152600401610ea590612e58565b601955565b61169233611b8f565b6116ae5760405162461bcd60e51b8152600401610ea590612e58565b601880549115156101000261ff0019909216919091179055565b6116d133611b8f565b6116ed5760405162461bcd60e51b8152600401610ea590612e58565b601a805460ff1916911515919091179055565b61170933611b8f565b6117255760405162461bcd60e51b8152600401610ea590612e58565b600855565b61173333611b8f565b61174f5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482611b7a565b6000806117696012600a612ff5565b600d546117769190612f92565b6117826012600a612ff5565b600e5461178f9190612f92565b915091509091565b6117a033611b8f565b6117bc5760405162461bcd60e51b8152600401610ea590612e58565b6117d26117cd82633b9aca006130a0565b61203d565b50565b6117de33611b8f565b6117fa5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682612028565b61180e33611b8f565b61182a5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff9092166101000261ff0019909216919091179055565b61184f33611b8f565b61186b5760405162461bcd60e51b8152600401610ea590612e58565b601a805461ff001916610100179055565b3361188f6000546001600160a01b031690565b6001600160a01b0316146118e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b6001600160a01b03811661194a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119ae33611b8f565b6119ca5760405162461bcd60e51b8152600401610ea590612e58565b600f8360ff1611156119ee5760405162461bcd60e51b8152600401610ea590612e2c565b600f8260ff161115611a125760405162461bcd60e51b8152600401610ea590612e2c565b600f8160ff161115611a365760405162461bcd60e51b8152600401610ea590612e2c565b600084611a438789612f6d565b611a4d9190612f6d565b90508060ff16606414611aac5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610ea5565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516640100000000029790971664ff0000ffff1998851663010000000263ff000000199a8616600160281b029a909a1665ff00ff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b611b3333611b8f565b611b4f5760405162461bcd60e51b8152600401610ea590612e58565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111ee836001600160a01b0384166121ec565b600080546001600160a01b0383811691161480610ee95750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611c105760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610ea5565b6001600160a01b038216611c585760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610ea5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d045760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610ea5565b6001600160a01b038216611d4d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610ea5565b6000611d5a60048561223b565b80611d6b5750611d6b60048461223b565b80611d8e57506001600160a01b0384166000908152600a602052604090205460ff165b80611db157506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611dd457506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160401b90920416148015611e1a57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611e6057506010546001600160a01b03868116600160401b90920416148015611e6057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611e6b5750805b80611e735750825b15611e8857611e8386868661225d565b612020565b601a54610100900460ff16611f87576000546001600160a01b03878116911614801590611ec357506000546001600160a01b03868116911614155b15611f8757601054600160381b900460ff1615611f3057846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051611f2091815260200190565b60405180910390a3505050505050565b601a54610100900460ff16611f875760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ea5565b6010546000906001600160a01b03888116600160401b909204161480611fc957506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160401b90920416148061200e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b905061201d8888888585612328565b50505b505050505050565b60006111ee836001600160a01b0384166126e8565b6018805460ff19166001908117909155306000908152602091909152604081205460105490919061208390640100000000810460ff908116916301000000900416612f6d565b60ff16905060006008549050838111156120a55760095460ff16156120a55750825b808310806120b5575061ffff8216155b156120c2575050506121df565b60105460009061ffff8416906120e2906301000000900460ff16846130a0565b6120ec9190612f92565b60105490915060009061ffff85169061211090640100000000900460ff16856130a0565b61211a9190612f92565b60105490915060009061ffff86169061213d90600160281b900460ff16866130a0565b6121479190612f92565b90506000612156600285612f92565b9050600061216482866130bf565b90506000836121738684612f55565b61217d9190612f55565b905047612189826127ff565b600061219582476130bf565b90506000836121a486846130a0565b6121ae9190612f92565b90506121ba868261297b565b60006121c684476130bf565b90506121d181612a52565b505050505050505050505050505b506018805460ff19169055565b600081815260018301602052604081205461223357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee9565b506000610ee9565b6001600160a01b038116600090815260018301602052604081205415156111ee565b6001600160a01b038316600090815260016020526040902054818110156122c15760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6122cb8483612ad1565b6122d58383612b16565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231a91815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123965760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6002600e546123a59190612f92565b600855600083156124aa576123bb60068961223b565b612455576001600160a01b038816600090815260036020526040902054421015806123ed5750601854610100900460ff165b61242e5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610ea5565b60195461243b9042612f55565b6001600160a01b0389166000908152600360205260409020555b600e548611156124995760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610ea5565b50601054610100900460ff166125bc565b841561250957600d546124bd8785612f55565b11156124db5760405162461bcd60e51b8152600401610ea590612e84565b600f548611156124fd5760405162461bcd60e51b8152600401610ea590612e84565b5060105460ff166125bc565b600d546125168785612f55565b11156125345760405162461bcd60e51b8152600401610ea590612e84565b61253f60068961223b565b6125ae576001600160a01b038816600090815260036020526040902054421015806125715750601854610100900460ff165b6125ae5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610ea5565b5060105462010000900460ff165b6010546001600160a01b03898116600160401b90920416148015906125e45750601a5460ff16155b80156125f3575060185460ff16155b15612601576126018661203d565b601054600090612646908890849060ff600160281b82048116916126379163010000008204811691640100000000900416612f6d565b6126419190612f6d565b612b3a565b9050600061265482896130bf565b90506126608a89612ad1565b306000908152600160205260408120805484929061267f908490612f55565b9091555061268f90508982612b16565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126d491815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127f557600061270c6001836130bf565b8554909150600090612720906001906130bf565b9050600086600001828154811061274757634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061277857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600189019091526040902084905586548790806127b957634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ee9565b6000915050610ee9565b6011546128179030906001600160a01b031683611bc6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061285a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e69190612ba0565b8160018151811061290757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac9479061294d908590600090869030904290600401612ee5565b600060405180830381600087803b15801561296757600080fd5b505af1158015612020573d6000803e3d6000fd5b806017600082825461298d9190612f55565b90915550506011546129aa9030906001600160a01b031684611bc6565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4b9190612d1f565b5050505050565b601454600090606490612a689060ff16846130a0565b612a729190612f92565b601454909150600090606490612a9090610100900460ff16856130a0565b612a9a9190612f92565b90508160156000828254612aae9190612f55565b925050819055508060166000828254612ac79190612f55565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612af59083906130bf565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612af5908390612f55565b60006127108260ff168460ff1686612b5291906130a0565b612b5c91906130a0565b612b669190612f92565b949350505050565b803560ff81168114612b7f57600080fd5b919050565b600060208284031215612b95578081fd5b81356111ee816130ec565b600060208284031215612bb1578081fd5b81516111ee816130ec565b60008060408385031215612bce578081fd5b8235612bd9816130ec565b91506020830135612be9816130ec565b809150509250929050565b600080600060608486031215612c08578081fd5b8335612c13816130ec565b92506020840135612c23816130ec565b929592945050506040919091013590565b60008060408385031215612c46578182fd5b8235612c51816130ec565b91506020830135612be981613101565b60008060408385031215612c73578182fd5b8235612c7e816130ec565b946020939093013593505050565b600060208284031215612c9d578081fd5b81356111ee81613101565b600060208284031215612cb9578081fd5b81516111ee81613101565b600060208284031215612cd5578081fd5b5035919050565b600060208284031215612ced578081fd5b5051919050565b600080600060608486031215612d08578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d33578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d5d578081fd5b6111ee82612b6e565b60008060008060008060c08789031215612d7e578182fd5b612d8787612b6e565b9550612d9560208801612b6e565b9450612da360408801612b6e565b9350612db160608801612b6e565b9250612dbf60808801612b6e565b9150612dcd60a08801612b6e565b90509295509295509295565b6000602080835283518082850152825b81811015612e0557858101830151858201604001528201612de9565b81811115612e165783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f345784516001600160a01b031683529383019391830191600101612f0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f6857612f686130d6565b500190565b600060ff821660ff84168060ff03821115612f8a57612f8a6130d6565b019392505050565b600082612fad57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612fed578160001904821115612fd357612fd36130d6565b80851615612fe057918102915b93841c9390800290612fb7565b509250929050565b60006111ee60ff84168360008261300e57506001610ee9565b8161301b57506000610ee9565b8160018114613031576002811461303b57613057565b6001915050610ee9565b60ff84111561304c5761304c6130d6565b50506001821b610ee9565b5060208310610133831016604e8410600b841016171561307a575081810a610ee9565b6130848383612fb2565b8060001904821115613098576130986130d6565b029392505050565b60008160001904831182151516156130ba576130ba6130d6565b500290565b6000828210156130d1576130d16130d6565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146117d257600080fd5b80151581146117d257600080fdfea2646970667358221220a50075b6480b4d5baa64eec48200e41a35d8dcd236010f22736cac4c81e1765164736f6c63430008040033

Deployed Bytecode Sourcemap

16042:18497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16228:68;;;;;;;;;;-1:-1:-1;16228:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6500:25:1;;;6488:2;6473:18;16228:68:0;;;;;;;;32212:94;;;;;;;;;;-1:-1:-1;32293:5:0;;;;;;;;;;;;-1:-1:-1;;;32293:5:0;;;;32212:94;;;;;;;:::i;31445:149::-;;;;;;;;;;-1:-1:-1;31445:149:0;;;;;:::i;:::-;;:::i;23705:30::-;;;;;;;;;;-1:-1:-1;23705:30:0;;;;;;;;;;;16546:4:1;16534:17;;;16516:36;;16504:2;16489:18;23705:30:0;16471:87:1;33097:161:0;;;;;;;;;;-1:-1:-1;33097:161:0;;;;;:::i;:::-;;:::i;:::-;;;6087:14:1;;6080:22;6062:41;;6050:2;6035:18;33097:161:0;6017:92:1;27689:104:0;;;;;;;;;;-1:-1:-1;27689:104:0;;;;;:::i;:::-;;:::i;16941:35::-;;;;;;;;;;-1:-1:-1;16941:35:0;;;;-1:-1:-1;;;16941:35:0;;;;;;;;;14392:6:1;14380:19;;;14362:38;;14350:2;14335:18;16941:35:0;14317:89:1;28876:282:0;;;;;;;;;;;;;:::i;17587:25::-;;;;;;;;;;-1:-1:-1;17587:25:0;;;;;;;;;;;32522:108;;;;;;;;;;-1:-1:-1;32604:18:0;;32522:108;;16619:66;;;;;;;;;;;;;:::i;16788:34::-;;;;;;;;;;-1:-1:-1;16788:34:0;;;;;;;;;;;33571:392;;;;;;;;;;-1:-1:-1;33571:392:0;;;;;:::i;:::-;;:::i;17790:34::-;;;;;;;;;;-1:-1:-1;17790:34:0;;;;-1:-1:-1;;;17790:34:0;;-1:-1:-1;;;;;17790:34:0;;;;;;-1:-1:-1;;;;;4987:32:1;;;4969:51;;4957:2;4942:18;17790:34:0;4924:102:1;17652:26:0;;;;;;;;;;-1:-1:-1;17652:26:0;;;;;;;;;;;16863:39;;;;;;;;;;-1:-1:-1;16863:39:0;;;;;;;;;;;32420:94;;;;;;;;;;-1:-1:-1;16610:2:0;32420:94;;16576:36;;;;;;;;;;;;16610:2;16576:36;;16997:42;;;;;;;;;;-1:-1:-1;16997:42:0;;;;-1:-1:-1;;;16997:42:0;;;;;;17619:26;;;;;;;;;;-1:-1:-1;17619:26:0;;;;;;;;;;;33979:205;;;;;;;;;;-1:-1:-1;33979:205:0;;;;;:::i;:::-;;:::i;17270:25::-;;;;;;;;;;-1:-1:-1;17270:25:0;;;;-1:-1:-1;;;;;17270:25:0;;;28566:300;;;;;;;;;;;;;:::i;24124:25::-;;;;;;;;;;;;;;;;23663:27;;;;;;;;;;;;;;;;17532:20;;;;;;;;;;-1:-1:-1;17532:20:0;;;;;;;;23612:38;;;;;;;;;;;;;;;;31903:118;;;;;;;;;;-1:-1:-1;31903:118:0;;;;;:::i;:::-;;:::i;31256:26::-;;;;;;;;;;-1:-1:-1;31256:26:0;;;;;;;;;;;17419:46;;;;;;;;;;;;;;;;28293:129;;;;;;;;;;-1:-1:-1;28293:129:0;;;;;:::i;:::-;;:::i;17472:45::-;;;;;;;;;;;;;;;;23779:31;;;;;;;;;;;;;;;;27168:289;;;;;;;;;;-1:-1:-1;27168:289:0;;;;;:::i;:::-;;:::i;31602:::-;;;;;;;;;;-1:-1:-1;31602:289:0;;;;;:::i;:::-;;:::i;30584:644::-;;;;;;;;;;-1:-1:-1;30584:644:0;;;;;:::i;:::-;;:::i;30214:111::-;;;;;;;;;;-1:-1:-1;30214:111:0;;;;;:::i;:::-;;:::i;16176:45::-;;;;;;;;;;-1:-1:-1;16176:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32638:121;;;;;;;;;;-1:-1:-1;32638:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32733:18:0;32706:7;32733:18;;;:9;:18;;;;;;;32638:121;8161:140;;;;;;;;;;;;;:::i;17363:49::-;;;;;;;;;;;;;;;;17190:73;;;;;;;;;;;;17221:42;17190:73;;27650:28;;;;;;;;;;-1:-1:-1;27650:28:0;;;;;;;;27581;;;;;;;;;;-1:-1:-1;27581:28:0;;;;;;;;;;;32110:94;;;;;;;;;;-1:-1:-1;32162:7:0;8001:6;-1:-1:-1;;;;;8001:6:0;32110:94;;17751:30;;;;;;;;;;-1:-1:-1;17751:30:0;;;;-1:-1:-1;;;17751:30:0;;;;;;17831:39;;;;;;;;;;-1:-1:-1;17831:39:0;;;;-1:-1:-1;;;;;17831:39:0;;;32314:98;;;;;;;;;;-1:-1:-1;32397:7:0;;;;;;;;;;;;-1:-1:-1;;;32397:7:0;;;;32314:98;;28167:114;;;;;;;;;;-1:-1:-1;28167:114:0;;;;;:::i;:::-;;:::i;17308:48::-;;;;;;;;;;;;;;;;34192:342;;;;;;;;;;-1:-1:-1;34192:342:0;;;;;:::i;:::-;;:::i;32767:167::-;;;;;;;;;;-1:-1:-1;32767:167:0;;;;;:::i;:::-;;:::i;29416:118::-;;;;;;;;;;-1:-1:-1;29416:118:0;;;;;:::i;:::-;;:::i;23742:24::-;;;;;;;;;;-1:-1:-1;23742:24:0;;;;;;;;;;;16526:43;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16526:43:0;;;;;29297:107;;;;;;;;;;-1:-1:-1;29297:107:0;;;;;:::i;:::-;;:::i;17685:20::-;;;;;;;;;;-1:-1:-1;17685:20:0;;;;-1:-1:-1;;;17685:20:0;;;;;;29172:113;;;;;;;;;;-1:-1:-1;29172:113:0;;;;;:::i;:::-;;:::i;27801:91::-;;;;;;;;;;-1:-1:-1;27801:91:0;;;;;:::i;:::-;;:::i;28048:113::-;;;;;;;;;;-1:-1:-1;28048:113:0;;;;;:::i;:::-;;:::i;17103:80::-;;;;;;;;;;;;17141:42;17103:80;;17559:21;;;;;;;;;;-1:-1:-1;17559:21:0;;;;;;;;;;;23817:25;;;;;;;;;;;;;;;;26739:157;;;;;;;;;;;;;:::i;:::-;;;;15755:25:1;;;15811:2;15796:18;;15789:34;;;;15728:18;26739:157:0;15710:119:1;16477:42:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16477:42:0;;;;;30442:128;;;;;;;;;;-1:-1:-1;30442:128:0;;;;;:::i;:::-;;:::i;28428:130::-;;;;;;;;;;-1:-1:-1;28428:130:0;;;;;:::i;:::-;;:::i;32942:147::-;;;;;;;;;;-1:-1:-1;32942:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;33053:19:0;;;33026:7;33053:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;32942:147;30335:99;;;;;;;;;;-1:-1:-1;30335:99:0;;;;;:::i;:::-;;:::i;31342:89::-;;;;;;;;;;;;;:::i;27463:110::-;;;;;;;;;;-1:-1:-1;27553:12:0;;27463:110;;8315:236;;;;;;;;;;-1:-1:-1;8315:236:0;;;;;:::i;:::-;;:::i;29548:654::-;;;;;;;;;;-1:-1:-1;29548:654:0;;;;;:::i;:::-;;:::i;27935:105::-;;;;;;;;;;-1:-1:-1;27935:105:0;;;;;:::i;:::-;;:::i;27616:27::-;;;;;;;;;;;;;;;;26904:252;;;;;;;;;;-1:-1:-1;27082:7:0;;26904:252;;;27082:7;-1:-1:-1;;;27082:7:0;;;;16121:25:1;;27090:13:0;;;;;16177:2:1;16162:18;;16155:34;27104:13:0;;;;;16205:18:1;;;16198:34;;;;27118:7:0;;;16263:2:1;16248:18;;16241:34;27082:7:0;27126:8;;;;16306:3:1;16291:19;;16284:35;27135:12:0;;;;;16350:3:1;16335:19;;16328:35;16108:3;16093:19;26904:252:0;16075:294:1;16303:45:0;;;;;;;;;;-1:-1:-1;16303:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;31445:149;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;;;;;;;;;31542:22:::1;:44:::0;;-1:-1:-1;;;;;31542:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;31542:44:0;;::::1;::::0;;;::::1;::::0;;31445:149::o;33097:161::-;33174:4;33191:37;33200:10;33212:7;33221:6;33191:8;:37::i;:::-;-1:-1:-1;33246:4:0;33097:161;;;;;:::o;27689:104::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;27762:12:::1;:23:::0;;-1:-1:-1;;27762:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27689:104::o;28876:282::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28948:10:::1;::::0;;28933:14:::1;28969:12:::0;;;;29076:32:::1;::::0;28948:10;;29009:42:::1;::::0;;;28948:10;;29076:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29062:46;;;29127:4;29119:31;;;::::0;-1:-1:-1;;;29119:31:0;;13388:2:1;29119:31:0::1;::::0;::::1;13370:21:1::0;13427:2;13407:18;;;13400:30;-1:-1:-1;;;13446:18:1;;;13439:45;13501:18;;29119:31:0::1;13360:165:1::0;29119:31:0::1;17977:1;;;28876:282::o:0;16619:66::-;16672:13;16610:2;16672;:13;:::i;:::-;16658:27;;:11;:27;:::i;:::-;16619:66;:::o;33571:392::-;33671:4;33688:36;33698:6;33706:9;33717:6;33688:9;:36::i;:::-;-1:-1:-1;;;;;33764:19:0;;33737:24;33764:19;;;:11;:19;;;;;;;;33784:10;33764:31;;;;;;;;33814:26;;;;33806:59;;;;-1:-1:-1;;;33806:59:0;;9144:2:1;33806:59:0;;;9126:21:1;9183:2;9163:18;;;9156:30;-1:-1:-1;;;9202:18:1;;;9195:50;9262:18;;33806:59:0;9116:170:1;33806:59:0;33878:55;33887:6;33895:10;33907:25;33926:6;33907:16;:25;:::i;:::-;33878:8;:55::i;:::-;-1:-1:-1;33951:4:0;;33571:392;-1:-1:-1;;;;33571:392:0:o;33979:205::-;34087:10;34061:4;34108:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34108:32:0;;;;;;;;;;34061:4;;34078:76;;34099:7;;34108:45;;34143:10;;34108:45;:::i;28566:300::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28644:16:::1;::::0;;28629:14:::1;28671:18:::0;;;;28784:32:::1;::::0;28644:16;;28717:42:::1;::::0;;;28644:16;;28784:32:::1;4804:14:1::0;31903:118:0;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;31987:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31987:26:0;;::::1;::::0;;;::::1;::::0;;31903:118::o;28293:129::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28380:34:::1;:21;28406:7:::0;28380:25:::1;:34::i;:::-;;28293:129:::0;:::o;27168:289::-;-1:-1:-1;;;;;27298:25:0;;27262:7;27298:25;;;:9;:25;;;;;;27347:15;27337:25;;27334:74;;-1:-1:-1;27395:1:0;;27168:289;-1:-1:-1;;27168:289:0:o;27334:74::-;27425:24;27434:15;27425:8;:24;:::i;:::-;27418:31;27168:289;-1:-1:-1;;;27168:289:0:o;31602:::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;31744:30:::1;::::0;-1:-1:-1;;;31744:30:0;;31768:4:::1;31744:30;::::0;::::1;4969:51:1::0;31701:10:0;;31679:12:::1;::::0;-1:-1:-1;;;;;31744:15:0;::::1;::::0;::::1;::::0;4942:18:1;;31744:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31723:51;;31804:1;31793:10;:12;31785:49;;;::::0;-1:-1:-1;;;31785:49:0;;11990:2:1;31785:49:0::1;::::0;::::1;11972:21:1::0;12029:2;12009:18;;;12002:30;12068:26;12048:18;;;12041:54;12112:18;;31785:49:0::1;11962:174:1::0;31785:49:0::1;31845:38;::::0;-1:-1:-1;;;31845:38:0;;31860:10:::1;31845:38;::::0;::::1;5205:51:1::0;5272:18;;;5265:34;;;-1:-1:-1;;;;;31845:14:0;::::1;::::0;::::1;::::0;5178:18:1;;31845:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17977:1;;31602:289:::0;:::o;30584:644::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;30735:13:::1;16610:2;30735;:13;:::i;:::-;30722:26;::::0;:11;:26:::1;:::i;:::-;30708:40:::0;-1:-1:-1;30791:13:0::1;16610:2;30791;:13;:::i;:::-;30775:29;::::0;:15;:29:::1;:::i;:::-;30759:45:::0;-1:-1:-1;30841:13:0::1;16610:2;30841;:13;:::i;:::-;30828:26;::::0;:12;:26:::1;:::i;:::-;30815:39:::0;-1:-1:-1;30903:3:0::1;16672:13;16610:2;16672;:13;:::i;:::-;16658:27;::::0;:11:::1;:27;:::i;:::-;30889:17;;;;:::i;:::-;30873:12;:33;;30865:74;;;;-1:-1:-1::0;;;30865:74:0::1;;;;;;;:::i;:::-;30991:3;16672:13;16610:2;16672;:13;:::i;:::-;16658:27;::::0;:11:::1;:27;:::i;:::-;30977:17;;;;:::i;:::-;30958:15;:36;;30950:77;;;;-1:-1:-1::0;;;30950:77:0::1;;;;;;;:::i;:::-;31075:3;16672:13;16610:2;16672;:13;:::i;:::-;16658:27;::::0;:11:::1;:27;:::i;:::-;31061:17;;;;:::i;:::-;31046:11;:32;;31038:73;;;;-1:-1:-1::0;;;31038:73:0::1;;;;;;;:::i;:::-;31122:8;:22:::0;;;;31155:12:::1;:30:::0;31196:9:::1;:24:::0;30584:644::o;30214:111::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;30294:14:::1;:23:::0;;-1:-1:-1;;30294:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30214:111::o;8161:140::-;8080:10;8069:7;7974;8001:6;-1:-1:-1;;;;;8001:6:0;;7936:79;8069:7;-1:-1:-1;;;;;8069:21:0;;8061:66;;;;-1:-1:-1;;;8061:66:0;;10528:2:1;8061:66:0;;;10510:21:1;;;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;10658:18;;8061:66:0;10500:182:1;8061:66:0;8260:1:::1;8244:6:::0;;8223:40:::1;::::0;-1:-1:-1;;;;;8244:6:0;;::::1;::::0;8223:40:::1;::::0;8260:1;;8223:40:::1;8291:1;8274:19:::0;;-1:-1:-1;;;;;;8274:19:0::1;::::0;;8161:140::o;28167:114::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28248:25:::1;:9;28265:7:::0;28248:16:::1;:25::i;34192:342::-:0;34335:10;34279:4;34323:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34323:32:0;;;;;;;;;;34374:35;;;;34366:60;;;;-1:-1:-1;;;34366:60:0;;13732:2:1;34366:60:0;;;13714:21:1;13771:2;13751:18;;;13744:30;-1:-1:-1;;;13790:18:1;;;13783:42;13842:18;;34366:60:0;13704:162:1;34366:60:0;34439:65;34448:10;34460:7;34469:34;34488:15;34469:16;:34;:::i;34439:65::-;-1:-1:-1;34522:4:0;;34192:342;-1:-1:-1;;;34192:342:0:o;32767:167::-;32847:4;32864:40;32874:10;32886:9;32897:6;32864:9;:40::i;29416:118::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;29498:12:::1;:28:::0;29416:118::o;29297:107::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;29371:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;29371:25:0;;::::1;::::0;;;::::1;::::0;;29297:107::o;29172:113::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;29254:16:::1;:23:::0;;-1:-1:-1;;29254:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29172:113::o;27801:91::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;27869:9:::1;:15:::0;27801:91::o;28048:113::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28131:22:::1;:9;28145:7:::0;28131:13:::1;:22::i;26739:157::-:0;26788:15;;26849:13;16610:2;26849;:13;:::i;:::-;26836:12;;:26;;;;:::i;:::-;26874:13;16610:2;26874;:13;:::i;:::-;26864:9;;:23;;;;:::i;:::-;26829:59;;;;26739:157;;:::o;30442:128::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;30530:32:::1;30549:12;:4:::0;30556:5:::1;30549:12;:::i;:::-;30530:18;:32::i;:::-;30442:128:::0;:::o;28428:130::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;28513:37:::1;:21;28542:7:::0;28513:28:::1;:37::i;30335:99::-:0;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;30409:8:::1;:17:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;30409:17:0;;::::1;::::0;;;::::1;::::0;;30335:99::o;31342:89::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;31402:14:::1;:21:::0;;-1:-1:-1;;31402:21:0::1;;;::::0;;31342:89::o;8315:236::-;8080:10;8069:7;7974;8001:6;-1:-1:-1;;;;;8001:6:0;;7936:79;8069:7;-1:-1:-1;;;;;8069:21:0;;8061:66;;;;-1:-1:-1;;;8061:66:0;;10528:2:1;8061:66:0;;;10510:21:1;;;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;10658:18;;8061:66:0;10500:182:1;8061:66:0;-1:-1:-1;;;;;8396:22:0;::::1;8388:73;;;::::0;-1:-1:-1;;;8388:73:0;;8046:2:1;8388:73:0::1;::::0;::::1;8028:21:1::0;8085:2;8065:18;;;8058:30;8124:34;8104:18;;;8097:62;-1:-1:-1;;;8175:18:1;;;8168:36;8221:19;;8388:73:0::1;8018:228:1::0;8388:73:0::1;8498:6;::::0;;8477:38:::1;::::0;-1:-1:-1;;;;;8477:38:0;;::::1;::::0;8498:6;::::1;::::0;8477:38:::1;::::0;::::1;8526:6;:17:::0;;-1:-1:-1;;;;;;8526:17:0::1;-1:-1:-1::0;;;;;8526:17:0;;;::::1;::::0;;;::::1;::::0;;8315:236::o;29548:654::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;29725:2:::1;29715:6;:12;;;;29707:43;;;;-1:-1:-1::0;;;29707:43:0::1;;;;;;;:::i;:::-;29780:2;29769:7;:13;;;;29761:44;;;;-1:-1:-1::0;;;29761:44:0::1;;;;;;;:::i;:::-;29839:2;29824:11;:17;;;;29816:48;;;;-1:-1:-1::0;;;29816:48:0::1;;;;;;;:::i;:::-;29875:14;29914::::0;29890:23:::1;29899:14:::0;29890:8;:23:::1;:::i;:::-;:38;;;;:::i;:::-;29875:53;;29947:8;:13;;29957:3;29947:13;29939:59;;;::::0;-1:-1:-1;;;29939:59:0;;10889:2:1;29939:59:0::1;::::0;::::1;10871:21:1::0;10928:2;10908:18;;;10901:30;10967:34;10947:18;;;10940:62;-1:-1:-1;;;11018:18:1;;;11011:31;11059:19;;29939:59:0::1;10861:223:1::0;29939:59:0::1;-1:-1:-1::0;30009:7:0::1;:18:::0;;::::1;30170:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;30143:16:0;;::::1;30009:18;30143:16;-1:-1:-1::0;;30077:28:0;;::::1;::::0;::::1;30143:16:::0;;;;-1:-1:-1;;30038:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;30009:18:0;;::::1;-1:-1:-1::0;;;30009:18:0::1;30038:28:::0;;;;-1:-1:-1;;30038:28:0;;;;;;;;;;::::1;30143:16:::0;;;;;;;;30118:14;::::1;30143:16:::0;;;;;;;::::1;30170:24;::::0;;;::::1;::::0;;29548:654::o;27935:105::-;17924:19;17932:10;17924:7;:19::i;:::-;17916:50;;;;-1:-1:-1;;;17916:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28012:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;28012:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27935:105::o;14434:152::-;14504:4;14528:50;14533:3;-1:-1:-1;;;;;14553:23:0;;14528:4;:50::i;18107:111::-;18160:4;8001:6;;-1:-1:-1;;;;;18183:13:0;;;8001:6;;18183:13;;:27;;-1:-1:-1;;;;;;;18198:12:0;;;;;:6;:12;;;;;;;;;18107:111::o;33264:299::-;-1:-1:-1;;;;;33357:19:0;;33349:49;;;;-1:-1:-1;;;33349:49:0;;8453:2:1;33349:49:0;;;8435:21:1;8492:2;8472:18;;;8465:30;-1:-1:-1;;;8511:18:1;;;8504:47;8568:18;;33349:49:0;8425:167:1;33349:49:0;-1:-1:-1;;;;;33417:21:0;;33409:49;;;;-1:-1:-1;;;33409:49:0;;10184:2:1;33409:49:0;;;10166:21:1;10223:2;10203:18;;;10196:30;-1:-1:-1;;;10242:18:1;;;10235:45;10297:18;;33409:49:0;10156:165:1;33409:49:0;-1:-1:-1;;;;;33471:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33523:32;;6500:25:1;;;33523:32:0;;6473:18:1;33523:32:0;;;;;;;33264:299;;;:::o;19443:1447::-;-1:-1:-1;;;;;19539:20:0;;19531:51;;;;-1:-1:-1;;;19531:51:0;;7346:2:1;19531:51:0;;;7328:21:1;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:48;7462:18;;19531:51:0;7318:168:1;19531:51:0;-1:-1:-1;;;;;19601:23:0;;19593:52;;;;-1:-1:-1;;;19593:52:0;;8799:2:1;19593:52:0;;;8781:21:1;8838:2;8818:18;;;8811:30;-1:-1:-1;;;8857:18:1;;;8850:46;8913:18;;19593:52:0;8771:166:1;19593:52:0;19658:15;19677:26;:9;19696:6;19677:18;:26::i;:::-;:59;;;-1:-1:-1;19707:29:0;:9;19726;19707:18;:29::i;:::-;19677:77;;;-1:-1:-1;;;;;;19740:14:0;;;;;;:6;:14;;;;;;;;19677:77;:98;;;-1:-1:-1;;;;;;19758:17:0;;;;;;:6;:17;;;;;;;;19677:98;19658:118;-1:-1:-1;19789:23:0;-1:-1:-1;;;;;19814:21:0;;19830:4;19814:21;;:49;;-1:-1:-1;;;;;;19839:24:0;;19858:4;19839:24;19814:49;19916:19;;19789:75;;-1:-1:-1;19877:24:0;;-1:-1:-1;;;;;19906:29:0;;;-1:-1:-1;;;19916:19:0;;;;19906:29;:59;;;;-1:-1:-1;;;;;;19939:26:0;;17141:42;19939:26;19906:59;19905:135;;;-1:-1:-1;19993:19:0;;-1:-1:-1;;;;;19980:32:0;;;-1:-1:-1;;;19993:19:0;;;;19980:32;:59;;;;-1:-1:-1;;;;;;20016:23:0;;17141:42;20016:23;19980:59;19877:164;;20059:18;:41;;;;20081:19;20059:41;:55;;;;20104:10;20059:55;20056:827;;;20130:43;20147:6;20155:9;20166:6;20130:16;:43::i;:::-;20056:827;;;20219:14;;;;;;;20214:404;;7974:7;8001:6;-1:-1:-1;;;;;20258:17:0;;;8001:6;;20258:17;;;;:41;;-1:-1:-1;7974:7:0;8001:6;-1:-1:-1;;;;;20279:20:0;;;8001:6;;20279:20;;20258:41;20254:349;;;20328:10;;-1:-1:-1;;;20328:10:0;;;;20324:260;;;20388:9;-1:-1:-1;;;;;20372:28:0;20381:6;-1:-1:-1;;;;;20372:28:0;;20398:1;20372:28;;;;6500:25:1;;6488:2;6473:18;;6455:76;20372:28:0;;;;;;;;20427:7;;;19443:1447;;;:::o;20324:260::-;20519:14;;;;;;;20511:49;;;;-1:-1:-1;;;20511:49:0;;11291:2:1;20511:49:0;;;11273:21:1;11330:2;11310:18;;;11303:30;11369:25;11349:18;;;11342:53;11412:18;;20511:49:0;11263:173:1;20511:49:0;20669:19;;20650:10;;-1:-1:-1;;;;;20661:27:0;;;-1:-1:-1;;;20669:19:0;;;;20661:27;;:53;;-1:-1:-1;;;;;;20691:23:0;;17141:42;20691:23;20661:53;20752:19;;20650:64;;-1:-1:-1;20729:11:0;;-1:-1:-1;;;;;20741:30:0;;;-1:-1:-1;;;20752:19:0;;;;20741:30;;:59;;-1:-1:-1;;;;;;20774:26:0;;17141:42;20774:26;20741:59;20729:71;;20815:52;20830:6;20837:9;20847:6;20854:5;20860:6;20815:14;:52::i;:::-;20056:827;;;19443:1447;;;;;;:::o;14600:158::-;14673:4;14697:53;14705:3;-1:-1:-1;;;;;14725:23:0;;14697:7;:53::i;24349:1225::-;24241:27;:34;;-1:-1:-1;;24241:34:0;24271:4;24241:34;;;;;;24467:4:::1;24241:27:::0;24449:24;;;::::1;::::0;;;;;;;;24514:13:::1;::::0;24449:24;;24241:27;24500::::1;::::0;24514:13;;::::1;24241:34:::0;24514:13;;::::1;::::0;24500;;::::1;;:27;:::i;:::-;24484:43;;;;24538:19;24558:9;;24538:29;;24595:8;24581:11;:22;24578:127;;;24623:12;::::0;::::1;;24620:74;;;-1:-1:-1::0;24670:8:0;24620:74:::1;24737:11;24721:15;:27;:40;;;-1:-1:-1::0;24750:11:0::1;::::0;::::1;::::0;24721:40:::1;24718:77;;;24777:7;;;;;24718:77;24844:13;::::0;24805:25:::1;::::0;24831:36:::1;::::0;::::1;::::0;24832:25:::1;::::0;24844:13;;::::1;;;24832:11:::0;:25:::1;:::i;:::-;24831:36;;;;:::i;:::-;24918:13;::::0;24805:62;;-1:-1:-1;24878:25:0::1;::::0;24905:36:::1;::::0;::::1;::::0;24906:25:::1;::::0;24918:13;;::::1;;;24906:11:::0;:25:::1;:::i;:::-;24905:36;;;;:::i;:::-;24986:7;::::0;24878:63;;-1:-1:-1;24952:19:0::1;::::0;24973:30:::1;::::0;::::1;::::0;24974:19:::1;::::0;-1:-1:-1;;;24986:7:0;::::1;;;24974:11:::0;:19:::1;:::i;:::-;24973:30;;;;:::i;:::-;24952:51:::0;-1:-1:-1;25016:16:0::1;25033:19;25051:1;25033:17:::0;:19:::1;:::i;:::-;25016:36:::0;-1:-1:-1;25063:19:0::1;25083:26;25016:36:::0;25083:17;:26:::1;:::i;:::-;25063:46:::0;-1:-1:-1;25122:17:0::1;25170:11:::0;25140:29:::1;25152:17:::0;25063:46;25140:29:::1;:::i;:::-;:41;;;;:::i;:::-;25122:59:::0;-1:-1:-1;25220:21:0::1;25252:27;25122:59:::0;25252:16:::1;:27::i;:::-;25290:14;25306:41;25330:17:::0;25306:21:::1;:41;:::i;:::-;25290:58:::0;-1:-1:-1;25359:14:0::1;25397:9:::0;25377:18:::1;25384:11:::0;25290:58;25377:18:::1;:::i;:::-;25376:30;;;;:::i;:::-;25359:47;;25417:31;25431:8;25441:6;25417:13;:31::i;:::-;25459:20;25481:41;25505:17:::0;25481:21:::1;:41;:::i;:::-;25459:64;;25534:32;25553:12;25534:18;:32::i;:::-;24286:1;;;;;;;;;;;;;;-1:-1:-1::0;24298:27:0;:35;;-1:-1:-1;;24298:35:0;;;24349:1225::o;12128:305::-;12191:4;13217:19;;;:12;;;:19;;;;;;12208:218;;-1:-1:-1;12251:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12325:18;;12303:19;;;:12;;;:19;;;;;;:40;;;;12358:11;;12208:218;-1:-1:-1;12409:5:0;12402:12;;14772:167;-1:-1:-1;;;;;14906:23:0;;14852:4;13217:19;;;:12;;;:19;;;;;;:24;;14876:55;13120:129;22689:351;-1:-1:-1;;;;;22808:17:0;;22784:21;22808:17;;;:9;:17;;;;;;22844:23;;;;22836:60;;;;-1:-1:-1;;;22836:60:0;;7693:2:1;22836:60:0;;;7675:21:1;7732:2;7712:18;;;7705:30;-1:-1:-1;;;7751:18:1;;;7744:54;7815:18;;22836:60:0;7665:174:1;22836:60:0;22910:27;22923:6;22930;22910:12;:27::i;:::-;22951:28;22961:9;22972:6;22951:9;:28::i;:::-;23013:9;-1:-1:-1;;;;;22997:33:0;23006:6;-1:-1:-1;;;;;22997:33:0;;23023:6;22997:33;;;;6500:25:1;;6488:2;6473:18;;6455:76;22997:33:0;;;;;;;;22689:351;;;;:::o;20908:1769::-;-1:-1:-1;;;;;21051:20:0;;;21024:24;21051:20;;;:9;:20;;;;;;;21106:17;;;;;;;;21142:23;;;;21134:60;;;;-1:-1:-1;;;21134:60:0;;7693:2:1;21134:60:0;;;7675:21:1;7732:2;7712:18;;;7705:30;-1:-1:-1;;;7751:18:1;;;7744:54;7815:18;;21134:60:0;7665:174:1;21134:60:0;21231:1;21221:9;;:11;;;;:::i;:::-;21209:9;:23;21245:9;21265:893;;;;21294:38;:21;21325:6;21294:30;:38::i;:::-;21290:247;;-1:-1:-1;;;;;21371:17:0;;;;;;:9;:17;;;;;;21390:15;-1:-1:-1;21371:34:0;;:52;;-1:-1:-1;21407:16:0;;;;;;;21371:52;21363:82;;;;-1:-1:-1;;;21363:82:0;;14073:2:1;21363:82:0;;;14055:21:1;14112:2;14092:18;;;14085:30;-1:-1:-1;;;14131:18:1;;;14124:48;14189:18;;21363:82:0;14045:168:1;21363:82:0;21509:12;;21493:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;21475:17:0;;;;;;:9;:17;;;;;:46;21290:247;21581:9;;21573:6;:17;;21565:44;;;;-1:-1:-1;;;21565:44:0;;9840:2:1;21565:44:0;;;9822:21:1;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9898:18:1;;;9891:45;9953:18;;21565:44:0;9812:165:1;21565:44:0;-1:-1:-1;21628:8:0;;;;;;;21265:893;;;21659:5;21656:502;;;21720:12;;21695:23;21712:6;21695:16;:23;:::i;:::-;:37;;21687:65;;;;-1:-1:-1;;;21687:65:0;;;;;;;:::i;:::-;21783:8;;21775:6;:16;;21767:45;;;;-1:-1:-1;;;21767:45:0;;;;;;;:::i;:::-;-1:-1:-1;21831:7:0;;;;21656:502;;;21913:12;;21888:23;21905:6;21888:16;:23;:::i;:::-;:37;;21880:65;;;;-1:-1:-1;;;21880:65:0;;;;;;;:::i;:::-;21978:38;:21;22009:6;21978:30;:38::i;:::-;21974:139;;-1:-1:-1;;;;;22043:17:0;;;;;;:9;:17;;;;;;22062:15;-1:-1:-1;22043:34:0;;:52;;-1:-1:-1;22079:16:0;;;;;;;22043:52;22035:78;;;;-1:-1:-1;;;22035:78:0;;12688:2:1;22035:78:0;;;12670:21:1;12727:2;12707:18;;;12700:30;-1:-1:-1;;;12746:18:1;;;12739:44;12800:18;;22035:78:0;12660:164:1;22035:78:0;-1:-1:-1;22132:12:0;;;;;;;21656:502;22189:19;;-1:-1:-1;;;;;22181:27:0;;;-1:-1:-1;;;22189:19:0;;;;22181:27;;;;22180:50;;-1:-1:-1;22213:16:0;;;;22212:17;22180:50;:82;;;;-1:-1:-1;22234:27:0;;;;22233:28;22180:82;22177:126;;;22277:26;22296:6;22277:18;:26::i;:::-;22394:7;;22317:21;;22339:63;;22353:6;;22361:3;;22394:7;-1:-1:-1;;;22394:7:0;;;;;22366:27;;22380:13;;;;;;22366;;;;:27;:::i;:::-;:35;;;;:::i;:::-;22339:13;:63::i;:::-;22317:85;-1:-1:-1;22416:19:0;22436:22;22317:85;22436:6;:22;:::i;:::-;22416:42;;22474:27;22487:6;22494;22474:12;:27::i;:::-;22535:4;22517:24;;;;:9;:24;;;;;:41;;22545:13;;22517:24;:41;;22545:13;;22517:41;:::i;:::-;;;;-1:-1:-1;22574:33:0;;-1:-1:-1;22584:9:0;22595:11;22574:9;:33::i;:::-;22641:9;-1:-1:-1;;;;;22625:38:0;22634:6;-1:-1:-1;;;;;22625:38:0;;22651:11;22625:38;;;;6500:25:1;;6488:2;6473:18;;6455:76;22625:38:0;;;;;;;;20908:1769;;;;;;;;;;:::o;12447:659::-;12513:4;12554:19;;;:12;;;:19;;;;;;12590:15;;12586:513;;12639:21;12663:14;12676:1;12663:10;:14;:::i;:::-;12712:18;;12639:38;;-1:-1:-1;12692:17:0;;12712:22;;12733:1;;12712:22;:::i;:::-;12692:42;;12760:17;12780:3;:11;;12792:9;12780:22;;;;;;-1:-1:-1;;;12780:22:0;;;;;;;;;;;;;;;;;12760:42;;12855:9;12826:3;:11;;12838:13;12826:26;;;;;;-1:-1:-1;;;12826:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;12886:23;;;:12;;;:23;;;;;;:36;;;12947:17;;12886:3;;12947:17;;;-1:-1:-1;;;12947:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;12995:3;:12;;:19;13008:5;12995:19;;;;;;;;;;;12988:26;;;13038:4;13031:11;;;;;;;;12586:513;13082:5;13075:12;;;;;25586:455;25679:14;;25647:56;;25664:4;;-1:-1:-1;;;;;25679:14:0;25696:6;25647:8;:56::i;:::-;25738:16;;;25752:1;25738:16;;;;;;;;25714:21;;25738:16;;;;;;;;;;-1:-1:-1;25738:16:0;25714:40;;25783:4;25765;25770:1;25765:7;;;;;;-1:-1:-1;;;25765:7:0;;;;;;;;;-1:-1:-1;;;;;25765:23:0;;;:7;;;;;;;;;;:23;;;;25809:14;;:21;;;-1:-1:-1;;;25809:21:0;;;;:14;;;;;:19;;:21;;;;;25765:7;;25809:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25799:4;25804:1;25799:7;;;;;;-1:-1:-1;;;25799:7:0;;;;;;;;;-1:-1:-1;;;;;25799:31:0;;;:7;;;;;;;;;:31;25843:14;;:190;;-1:-1:-1;;;25843:190:0;;:14;;;:65;;:190;;25923:6;;25843:14;;25960:4;;25987;;26007:15;;25843:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26053:397;26147:9;26135:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;26199:14:0;;26167:61;;26184:4;;-1:-1:-1;;;;;26199:14:0;26216:11;26167:8;:61::i;:::-;26239:14;;:203;;-1:-1:-1;;;26239:203:0;;26310:4;26239:203;;;5651:34:1;;;5701:18;;;5694:34;;;26239:14:0;5744:18:1;;;5737:34;;;5787:18;;;5780:34;5830:19;;;5823:44;26416:15:0;5883:19:1;;;5876:35;-1:-1:-1;;;;;26239:14:0;;;;:30;;26277:9;;5585:19:1;;26239:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26053:397;;:::o;23851:265::-;23955:14;;23917:22;;23971:3;;23943:26;;23955:14;;23943:9;:26;:::i;:::-;23942:32;;;;:::i;:::-;24017:8;;23917:57;;-1:-1:-1;23985:16:0;;24027:3;;24005:20;;24017:8;;;;;24005:9;:20;:::i;:::-;24004:26;;;;:::i;:::-;23985:45;;24061:14;24043:16;;:32;;;;;;;:::i;:::-;;;;;;;;24098:8;24086:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23851:265:0:o;23399:158::-;-1:-1:-1;;;;;23491:15:0;;23473:17;23491:15;;;:9;:15;;;;;;:22;;23507:6;;23491:22;:::i;:::-;-1:-1:-1;;;;;23524:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;23399:158:0:o;23226:157::-;-1:-1:-1;;;;;23315:15:0;;23297:17;23315:15;;;:9;:15;;;;;;:22;;23331:6;;23315:22;:::i;23052:156::-;23142:7;23195:5;23181:10;23170:21;;23177:3;23170:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;23169:31;;;;:::i;:::-;23162:38;23052:156;-1:-1:-1;;;;23052:156:0:o;14::1:-;80:20;;140:4;129:16;;119:27;;109:2;;160:1;157;150:12;109:2;61:109;;;:::o;175:257::-;234:6;287:2;275:9;266:7;262:23;258:32;255:2;;;308:6;300;293:22;255:2;352:9;339:23;371:31;396:5;371:31;:::i;437:261::-;507:6;560:2;548:9;539:7;535:23;531:32;528:2;;;581:6;573;566:22;528:2;618:9;612:16;637:31;662:5;637:31;:::i;703:398::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:2;;;853:6;845;838:22;800:2;897:9;884:23;916:31;941:5;916:31;:::i;:::-;966:5;-1:-1:-1;1023:2:1;1008:18;;995:32;1036:33;995:32;1036:33;:::i;:::-;1088:7;1078:17;;;790:311;;;;;:::o;1106:466::-;1183:6;1191;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:2;;;1273:6;1265;1258:22;1220:2;1317:9;1304:23;1336:31;1361:5;1336:31;:::i;:::-;1386:5;-1:-1:-1;1443:2:1;1428:18;;1415:32;1456:33;1415:32;1456:33;:::i;:::-;1210:362;;1508:7;;-1:-1:-1;;;1562:2:1;1547:18;;;;1534:32;;1210:362::o;1577:392::-;1642:6;1650;1703:2;1691:9;1682:7;1678:23;1674:32;1671:2;;;1724:6;1716;1709:22;1671:2;1768:9;1755:23;1787:31;1812:5;1787:31;:::i;:::-;1837:5;-1:-1:-1;1894:2:1;1879:18;;1866:32;1907:30;1866:32;1907:30;:::i;1974:325::-;2042:6;2050;2103:2;2091:9;2082:7;2078:23;2074:32;2071:2;;;2124:6;2116;2109:22;2071:2;2168:9;2155:23;2187:31;2212:5;2187:31;:::i;:::-;2237:5;2289:2;2274:18;;;;2261:32;;-1:-1:-1;;;2061:238:1:o;2304:251::-;2360:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2434:6;2426;2419:22;2381:2;2478:9;2465:23;2497:28;2519:5;2497:28;:::i;2560:255::-;2627:6;2680:2;2668:9;2659:7;2655:23;2651:32;2648:2;;;2701:6;2693;2686:22;2648:2;2738:9;2732:16;2757:28;2779:5;2757:28;:::i;2820:190::-;2879:6;2932:2;2920:9;2911:7;2907:23;2903:32;2900:2;;;2953:6;2945;2938:22;2900:2;-1:-1:-1;2981:23:1;;2890:120;-1:-1:-1;2890:120:1:o;3015:194::-;3085:6;3138:2;3126:9;3117:7;3113:23;3109:32;3106:2;;;3159:6;3151;3144:22;3106:2;-1:-1:-1;3187:16:1;;3096:113;-1:-1:-1;3096:113:1:o;3214:326::-;3291:6;3299;3307;3360:2;3348:9;3339:7;3335:23;3331:32;3328:2;;;3381:6;3373;3366:22;3328:2;-1:-1:-1;;3409:23:1;;;3479:2;3464:18;;3451:32;;-1:-1:-1;3530:2:1;3515:18;;;3502:32;;3318:222;-1:-1:-1;3318:222:1:o;3545:316::-;3633:6;3641;3649;3702:2;3690:9;3681:7;3677:23;3673:32;3670:2;;;3723:6;3715;3708:22;3670:2;3757:9;3751:16;3741:26;;3807:2;3796:9;3792:18;3786:25;3776:35;;3851:2;3840:9;3836:18;3830:25;3820:35;;3660:201;;;;;:::o;3866:192::-;3923:6;3976:2;3964:9;3955:7;3951:23;3947:32;3944:2;;;3997:6;3989;3982:22;3944:2;4025:27;4042:9;4025:27;:::i;4063:545::-;4155:6;4163;4171;4179;4187;4195;4248:3;4236:9;4227:7;4223:23;4219:33;4216:2;;;4270:6;4262;4255:22;4216:2;4298:27;4315:9;4298:27;:::i;:::-;4288:37;;4344:36;4376:2;4365:9;4361:18;4344:36;:::i;:::-;4334:46;;4399:36;4431:2;4420:9;4416:18;4399:36;:::i;:::-;4389:46;;4454:36;4486:2;4475:9;4471:18;4454:36;:::i;:::-;4444:46;;4509:37;4541:3;4530:9;4526:19;4509:37;:::i;:::-;4499:47;;4565:37;4597:3;4586:9;4582:19;4565:37;:::i;:::-;4555:47;;4206:402;;;;;;;;:::o;6536:603::-;6648:4;6677:2;6706;6695:9;6688:21;6738:6;6732:13;6781:6;6776:2;6765:9;6761:18;6754:34;6806:4;6819:140;6833:6;6830:1;6827:13;6819:140;;;6928:14;;;6924:23;;6918:30;6894:17;;;6913:2;6890:26;6883:66;6848:10;;6819:140;;;6977:6;6974:1;6971:13;6968:2;;;7047:4;7042:2;7033:6;7022:9;7018:22;7014:31;7007:45;6968:2;-1:-1:-1;7123:2:1;7102:15;-1:-1:-1;;7098:29:1;7083:45;;;;7130:2;7079:54;;6657:482;-1:-1:-1;;;6657:482:1:o;9291:342::-;9493:2;9475:21;;;9532:2;9512:18;;;9505:30;-1:-1:-1;;;9566:2:1;9551:18;;9544:48;9624:2;9609:18;;9465:168::o;11441:342::-;11643:2;11625:21;;;11682:2;11662:18;;;11655:30;-1:-1:-1;;;11716:2:1;11701:18;;11694:48;11774:2;11759:18;;11615:168::o;12141:340::-;12343:2;12325:21;;;12382:2;12362:18;;;12355:30;-1:-1:-1;;;12416:2:1;12401:18;;12394:46;12472:2;12457:18;;12315:166::o;12829:352::-;13031:2;13013:21;;;13070:2;13050:18;;;13043:30;13109;13104:2;13089:18;;13082:58;13172:2;13157:18;;13003:178::o;14593:983::-;14855:4;14903:3;14892:9;14888:19;14934:6;14923:9;14916:25;14960:2;14998:6;14993:2;14982:9;14978:18;14971:34;15041:3;15036:2;15025:9;15021:18;15014:31;15065:6;15100;15094:13;15131:6;15123;15116:22;15169:3;15158:9;15154:19;15147:26;;15208:2;15200:6;15196:15;15182:29;;15229:4;15242:195;15256:6;15253:1;15250:13;15242:195;;;15321:13;;-1:-1:-1;;;;;15317:39:1;15305:52;;15412:15;;;;15377:12;;;;15353:1;15271:9;15242:195;;;-1:-1:-1;;;;;;;15493:32:1;;;;15488:2;15473:18;;15466:60;-1:-1:-1;;;15557:3:1;15542:19;15535:35;15454:3;14864:712;-1:-1:-1;;;14864:712:1:o;16563:128::-;16603:3;16634:1;16630:6;16627:1;16624:13;16621:2;;;16640:18;;:::i;:::-;-1:-1:-1;16676:9:1;;16611:80::o;16696:204::-;16734:3;16770:4;16767:1;16763:12;16802:4;16799:1;16795:12;16837:3;16831:4;16827:14;16822:3;16819:23;16816:2;;;16845:18;;:::i;:::-;16881:13;;16742:158;-1:-1:-1;;;16742:158:1:o;16905:217::-;16945:1;16971;16961:2;;-1:-1:-1;;;16996:31:1;;17050:4;17047:1;17040:15;17078:4;17003:1;17068:15;16961:2;-1:-1:-1;17107:9:1;;16951:171::o;17127:422::-;17216:1;17259:5;17216:1;17273:270;17294:7;17284:8;17281:21;17273:270;;;17353:4;17349:1;17345:6;17341:17;17335:4;17332:27;17329:2;;;17362:18;;:::i;:::-;17412:7;17402:8;17398:22;17395:2;;;17432:16;;;;17395:2;17511:22;;;;17471:15;;;;17273:270;;;17277:3;17191:358;;;;;:::o;17554:140::-;17612:5;17641:47;17682:4;17672:8;17668:19;17662:4;17748:5;17778:8;17768:2;;-1:-1:-1;17819:1:1;17833:5;;17768:2;17867:4;17857:2;;-1:-1:-1;17904:1:1;17918:5;;17857:2;17949:4;17967:1;17962:59;;;;18035:1;18030:130;;;;17942:218;;17962:59;17992:1;17983:10;;18006:5;;;18030:130;18067:3;18057:8;18054:17;18051:2;;;18074:18;;:::i;:::-;-1:-1:-1;;18130:1:1;18116:16;;18145:5;;17942:218;;18244:2;18234:8;18231:16;18225:3;18219:4;18216:13;18212:36;18206:2;18196:8;18193:16;18188:2;18182:4;18179:12;18175:35;18172:77;18169:2;;;-1:-1:-1;18281:19:1;;;18313:5;;18169:2;18360:34;18385:8;18379:4;18360:34;:::i;:::-;18430:6;18426:1;18422:6;18418:19;18409:7;18406:32;18403:2;;;18441:18;;:::i;:::-;18479:20;;17758:747;-1:-1:-1;;;17758:747:1:o;18510:168::-;18550:7;18616:1;18612;18608:6;18604:14;18601:1;18598:21;18593:1;18586:9;18579:17;18575:45;18572:2;;;18623:18;;:::i;:::-;-1:-1:-1;18663:9:1;;18562:116::o;18683:125::-;18723:4;18751:1;18748;18745:8;18742:2;;;18756:18;;:::i;:::-;-1:-1:-1;18793:9:1;;18732:76::o;18813:127::-;18874:10;18869:3;18865:20;18862:1;18855:31;18905:4;18902:1;18895:15;18929:4;18926:1;18919:15;18945:131;-1:-1:-1;;;;;19020:31:1;;19010:42;;19000:2;;19066:1;19063;19056:12;19081:118;19167:5;19160:13;19153:21;19146:5;19143:32;19133:2;;19189:1;19186;19179:12

Swarm Source

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