ETH Price: $3,593.92 (+3.66%)
 

Overview

Max Total Supply

1,000,000,000,000 BabyChain

Holders

4

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: BabyChain 2
Balance
0.000021924 BabyChain

Value
$0.00
0xcc93119bc8e7281a87f4b85be6947a844d5fa8dd
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:
BabyChain

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

//Telegram - https://t.me/BabyChainERC20

//SPDX-License-Identifier: UNLICENSED
 


pragma solidity ^0.8.17;

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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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

contract BabyChain is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingWallet = payable(0xEb9e048241C3574668dF2A0BAa391AcD2025b2F0); // Marketing Wallet
    address payable public charityWallet = payable (0xEb9e048241C3574668dF2A0BAa391AcD2025b2F0); // charity Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 9;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "BabyChain";
    string private _symbol = "BabyChain";
    

    uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //1%

    uint256 private reflectionFee=0; 

    uint256 public burnFee = 0;
    uint256 public marketingFee = 5;
    uint256 public charityFee = 0;
    uint256 public totalFee =
        burnFee.add(marketingFee).add(charityFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(1000).mul(1); //0.1%
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool tradingOpen = false;
    bool zeroBuyTaxmode = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }

    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {

        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "You have no power here!");
        require(!_isSniper[from], "You have no power here!");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        }

        currenttotalFee=totalFee;

         //antibot
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
             if(tradingOpen && to == uniswapV2Pair) { //sells
                    currenttotalFee=2*totalFee;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee;

        uint256 amountETHcharity = amountETH.mul(charityFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );
        //Send to marketing wallet and charity wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHMarketing,marketingWallet);
            sendETHToFee(amountETHcharity,charityWallet);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
    

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

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

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

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

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

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

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

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

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeBurn(uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[DEAD] = _rOwned[DEAD].add(rBurn);
        _tOwned[DEAD] = _tOwned[DEAD].add(tBurn);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**2
        );
    }
    
    function calculateburnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**2
        );
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallets(address _marketingWallet,address _charityWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
        charityWallet = payable(_charityWallet);
    }

    function setFees(
        uint256 _reflectionFee,
        uint256 _burnFee,
        uint256 _charityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        reflectionFee=_reflectionFee;
        burnFee = _burnFee;
        charityFee = _charityFee;
        marketingFee = _marketingFee;
        totalFee = burnFee.add(marketingFee).add(charityFee);
    }
   
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isSniper[addresses[i]] = status;
        }
    }

        
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function multiTransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**_decimals);
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens[i] * 10**_decimals));
        
        }
    }

    function multiTransfer_fixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(from,addresses[i],(tokens* 10**_decimals));
            }
    }


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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600480546001600160a01b031990811673eb9e048241c3574668df2a0baa391acd2025b2f09081179092556005805490911690911790556002600a9081556000600b55601080547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200008991600160a01b90910460ff1690620007b1565b6200009a9064e8d4a51000620007c2565b6011819055620000ad90600019620007f2565b620000bb9060001962000809565b6012556040805180820190915260098152682130b13ca1b430b4b760b91b6020820152601490620000ed9082620008c4565b506040805180820190915260098152682130b13ca1b430b4b760b91b60208201526015906200011d9082620008c4565b5062000156600a620001426103e86011546200051e60201b62001fc11790919060201c565b6200057160201b620020031790919060201c565b6016556000601755600060185560056019556000601a55620001a6601a5462000192601954601854620005ff60201b620020851790919060201c565b620005ff60201b620020851790919060201c565b601b55601b54601c55620001d36001620001426103e86011546200051e60201b62001fc11790919060201c565b601d55601f805461ffff60a81b19169055348015620001f157600080fd5b5060008054336001600160a01b031991821681178355600180549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506012543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620002a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cd919062000990565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062000990565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200038f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b5919062000990565b601f80546001600160a01b03199081166001600160a01b0393841617909155601e80549091169183169190911790556001600c6000620003fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004566000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155601f54821684528284208054861682179055601054909116835291208054909216179055620004c73390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6011546040516200050f91815260200190565b60405180910390a35062000a38565b60006200056883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066260201b60201c565b90505b92915050565b60008260000362000585575060006200056b565b6000620005938385620007c2565b905082620005a28583620009bb565b14620005685760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000806200060e8385620009d2565b905083811015620005685760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005f6565b60008183620006865760405162461bcd60e51b8152600401620005f69190620009e8565b506000620006958486620009bb565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f5578160001904821115620006d957620006d96200069e565b80851615620006e757918102915b93841c9390800290620006b9565b509250929050565b6000826200070e575060016200056b565b816200071d575060006200056b565b8160018114620007365760028114620007415762000761565b60019150506200056b565b60ff8411156200075557620007556200069e565b50506001821b6200056b565b5060208310610133831016604e8410600b841016171562000786575081810a6200056b565b620007928383620006b4565b8060001904821115620007a957620007a96200069e565b029392505050565b60006200056860ff841683620006fd565b80820281158282048414176200056b576200056b6200069e565b634e487b7160e01b600052601260045260246000fd5b600082620008045762000804620007dc565b500690565b818103818111156200056b576200056b6200069e565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084a57607f821691505b6020821081036200086b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bf57600081815260208120601f850160051c810160208610156200089a5750805b601f850160051c820191505b81811015620008bb57828155600101620008a6565b5050505b505050565b81516001600160401b03811115620008e057620008e06200081f565b620008f881620008f1845462000835565b8462000871565b602080601f831160018114620009305760008415620009175750858301515b600019600386901b1c1916600185901b178555620008bb565b600085815260208120601f198616915b82811015620009615788860151825594840194600190910190840162000940565b5085821015620009805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a357600080fd5b81516001600160a01b03811681146200056857600080fd5b600082620009cd57620009cd620007dc565b500490565b808201808211156200056b576200056b6200069e565b600060208083528351808285015260005b8181101562000a1757858101830151858201604001528201620009f9565b506000604082860101526040601f19601f8301168501019250505092915050565b6138b68062000a486000396000f3fe6080604052600436106102cd5760003560e01c80636b67c4df1161017557806395d89b41116100dc578063ea2f0b3711610095578063f259c57b1161006f578063f259c57b146108d2578063f2fde38b146108f2578063fabb0b4f14610912578063fce589d81461092857600080fd5b8063ea2f0b371461087c578063eafb5a3c1461089c578063ecfca899146108bc57600080fd5b806395d89b41146107ab578063a457c2d7146107c0578063a9059cbb146107e0578063bf56b37114610800578063d3f6a15714610816578063dd62ed3e1461083657600080fd5b806375f0a8741161012e57806375f0a874146106de57806378109e54146106fe5780637b2087691461071457806388f82020146107345780638da5cb5b1461076d5780638f4590d21461078b57600080fd5b80636b67c4df146106335780636fcba3771461064957806370a0823114610669578063715018a61461068957806371b9189c1461069e578063743942b6146106be57600080fd5b80632d4103d61161023457806339509351116101ed57806349bd5a5e116101c757806349bd5a5e146105b35780634b01547f146105d357806352390c02146105f35780635d54c0af1461061357600080fd5b806339509351146105535780633bd5d173146105735780634549b0391461059357600080fd5b80632d4103d6146104875780632d838119146104a75780632dd5efe7146104c7578063313ce567146104e7578063335f6a43146105135780633685d4191461053357600080fd5b80631694505e116102865780631694505e146103c457806318160ddd146103fc5780631ca0a28d146104115780631df4ccfc1461043157806323b872dd1461044757806325b86edf1461046757600080fd5b80630445b667146102d957806306fdde031461030257806309302dc614610324578063095ea7b3146103465780630f3a325f1461037657806313114a9d146103af57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef601d5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b5061031761093e565b6040516102f9919061315b565b34801561033057600080fd5b5061034461033f3660046131a9565b6109d0565b005b34801561035257600080fd5b506103666103613660046131da565b610a3f565b60405190151581526020016102f9565b34801561038257600080fd5b50610366610391366004613206565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156103bb57600080fd5b506013546102ef565b3480156103d057600080fd5b50601e546103e4906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b34801561040857600080fd5b506011546102ef565b34801561041d57600080fd5b5061034461042c36600461326f565b610a56565b34801561043d57600080fd5b506102ef601b5481565b34801561045357600080fd5b506103666104623660046132f2565b610cab565b34801561047357600080fd5b50610344610482366004613333565b610d14565b34801561049357600080fd5b506103446104a236600461337a565b610e3b565b3480156104b357600080fd5b506102ef6104c23660046131a9565b610edb565b3480156104d357600080fd5b506103446104e2366004613206565b610f5f565b3480156104f357600080fd5b50601054600160a01b900460ff1660405160ff90911681526020016102f9565b34801561051f57600080fd5b5061034461052e366004613398565b610fc2565b34801561053f57600080fd5b5061034461054e366004613206565b611166565b34801561055f57600080fd5b5061036661056e3660046131da565b61132d565b34801561057f57600080fd5b5061034461058e3660046131a9565b611363565b34801561059f57600080fd5b506102ef6105ae3660046133f4565b61144d565b3480156105bf57600080fd5b50601f546103e4906001600160a01b031681565b3480156105df57600080fd5b506103446105ee366004613419565b6114da565b3480156105ff57600080fd5b5061034461060e366004613206565b611537565b34801561061f57600080fd5b5061034461062e366004613436565b611636565b34801561063f57600080fd5b506102ef60195481565b34801561065557600080fd5b5061034461066436600461348d565b6116e4565b34801561067557600080fd5b506102ef610684366004613206565b611754565b34801561069557600080fd5b506103446117b3565b3480156106aa57600080fd5b506103446106b93660046134bf565b61185f565b3480156106ca57600080fd5b506103446106d9366004613206565b611913565b3480156106ea57600080fd5b506004546103e4906001600160a01b031681565b34801561070a57600080fd5b506102ef60165481565b34801561072057600080fd5b506005546103e4906001600160a01b031681565b34801561074057600080fd5b5061036661074f366004613206565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561077957600080fd5b506000546001600160a01b03166103e4565b34801561079757600080fd5b506103446107a6366004613501565b611987565b3480156107b757600080fd5b506103176119e6565b3480156107cc57600080fd5b506103666107db3660046131da565b6119f5565b3480156107ec57600080fd5b506103666107fb3660046131da565b611a44565b34801561080c57600080fd5b506102ef600b5481565b34801561082257600080fd5b50610344610831366004613333565b611a51565b34801561084257600080fd5b506102ef610851366004613333565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561088857600080fd5b50610344610897366004613206565b611abe565b3480156108a857600080fd5b506103446108b7366004613206565b611b1e565b3480156108c857600080fd5b506102ef601a5481565b3480156108de57600080fd5b506103446108ed366004613206565b611e5f565b3480156108fe57600080fd5b5061034461090d366004613206565b611ec2565b34801561091e57600080fd5b506102ef600a5481565b34801561093457600080fd5b506102ef60185481565b60606014805461094d90613523565b80601f016020809104026020016040519081016040528092919081815260200182805461097990613523565b80156109c65780601f1061099b576101008083540402835291602001916109c6565b820191906000526020600020905b8154815290600101906020018083116109a957829003601f168201915b5050505050905090565b6000546001600160a01b03163314806109f357506001546001600160a01b031633145b610a185760405162461bcd60e51b8152600401610a0f9061355d565b60405180910390fd5b610a3981610a336103e8601154611fc190919063ffffffff16565b90612003565b60165550565b6000610a4c3384846120e4565b5060015b92915050565b6000546001600160a01b0316331480610a7957506001546001600160a01b031633145b610a955760405162461bcd60e51b8152600401610a0f9061355d565b6103218310610afc5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610a0f565b828114610b5c5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610a0f565b6000805b84811015610bc157601054610b8090600160a01b900460ff16600a61368c565b848483818110610b9257610b9261369b565b90506020020135610ba391906136b1565b610bad90836136c8565b915080610bb9816136db565b915050610b60565b5080610bcc87611754565b1015610c1a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610a0f565b60005b84811015610ca257610c9087878784818110610c3b57610c3b61369b565b9050602002016020810190610c509190613206565b601054610c6890600160a01b900460ff16600a61368c565b878786818110610c7a57610c7a61369b565b90506020020135610c8b91906136b1565b612208565b80610c9a816136db565b915050610c1d565b50505050505050565b6000610cb8848484612208565b610d0a8433610d0585604051806060016040528060288152602001613834602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612710565b6120e4565b5060019392505050565b6000546001600160a01b0316331480610d3757506001546001600160a01b031633145b610d535760405162461bcd60e51b8152600401610a0f9061355d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbe91906136f4565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e35919061370d565b50505050565b6000546001600160a01b0316331480610e5e57506001546001600160a01b031633145b610e7a5760405162461bcd60e51b8152600401610a0f9061355d565b601f805460ff60a81b1916600160a81b84151502179055610e9a30611537565b601f54610eaf906001600160a01b0316611537565b601f54600160a81b900460ff168015610ec85750600b54155b15610ed75743600b55600a8190555b5050565b6000601254821115610f425760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a0f565b6000610f4c61274a565b9050610f588382611fc1565b9392505050565b6000546001600160a01b0316331480610f8257506001546001600160a01b031633145b610f9e5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331480610fe557506001546001600160a01b031633145b6110015760405162461bcd60e51b8152600401610a0f9061355d565b6107d182106110695760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610a0f565b601054600090839061108690600160a01b900460ff16600a61368c565b61109090846136b1565b61109a91906136b1565b9050806110a686611754565b10156110f45760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610a0f565b60005b8381101561115e5761114c868686848181106111155761111561369b565b905060200201602081019061112a9190613206565b60105461114290600160a01b900460ff16600a61368c565b610c8b90876136b1565b80611156816136db565b9150506110f7565b505050505050565b6000546001600160a01b031633148061118957506001546001600160a01b031633145b6111a55760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b0381166000908152600e602052604090205460ff1661120d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a0f565b60005b600f54811015610ed757816001600160a01b0316600f82815481106112375761123761369b565b6000918252602090912001546001600160a01b03160361131b57600f80546112619060019061372a565b815481106112715761127161369b565b600091825260209091200154600f80546001600160a01b03909216918390811061129d5761129d61369b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055600f8054806112f5576112f561373d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611325816136db565b915050611210565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610a4c918590610d059086612085565b336000818152600e602052604090205460ff16156113d85760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a0f565b60006113e38361276d565b505050506001600160a01b03841660009081526006602052604090205491925061140f919050826127bc565b6001600160a01b03831660009081526006602052604090205560125461143590826127bc565b6012556013546114459084612085565b601355505050565b60006011548311156114a15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a0f565b816114c05760006114b18461276d565b50939550610a50945050505050565b60006114cb8461276d565b50929550610a50945050505050565b6000546001600160a01b03163314806114fd57506001546001600160a01b031633145b6115195760405162461bcd60e51b8152600401610a0f9061355d565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633148061155a57506001546001600160a01b031633145b6115765760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b038116600090815260066020526040902054156115d0576001600160a01b0381166000908152600660205260409020546115b690610edb565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633148061165957506001546001600160a01b031633145b6116755760405162461bcd60e51b8152600401610a0f9061355d565b60005b82811015610e355781600960008686858181106116975761169761369b565b90506020020160208101906116ac9190613206565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116dd816136db565b9050611678565b6000546001600160a01b031633148061170757506001546001600160a01b031633145b6117235760405162461bcd60e51b8152600401610a0f9061355d565b60178490556018839055601a829055601981905561174b826117458584612085565b90612085565b601b5550505050565b6001600160a01b0381166000908152600e602052604081205460ff161561179157506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610a5090610edb565b6000546001600160a01b03163314806117d657506001546001600160a01b031633145b6117f25760405162461bcd60e51b8152600401610a0f9061355d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b03191690556001546001600160a01b0316330361185d57600180546001600160a01b03191690555b565b6000546001600160a01b031633148061188257506001546001600160a01b031633145b61189e5760405162461bcd60e51b8152600401610a0f9061355d565b60005b8181101561190e576001600c60008585858181106118c1576118c161369b565b90506020020160208101906118d69190613206565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611907816136db565b90506118a1565b505050565b6000546001600160a01b031633148061193657506001546001600160a01b031633145b6119525760405162461bcd60e51b8152600401610a0f9061355d565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ed7573d6000803e3d6000fd5b6000546001600160a01b03163314806119aa57506001546001600160a01b031633145b6119c65760405162461bcd60e51b8152600401610a0f9061355d565b80826011546119d591906136b1565b6119df9190613753565b601d555050565b60606015805461094d90613523565b6000610a4c3384610d058560405180606001604052806025815260200161385c602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612710565b6000610a4c338484612208565b6000546001600160a01b0316331480611a7457506001546001600160a01b031633145b611a905760405162461bcd60e51b8152600401610a0f9061355d565b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b0316331480611ae157506001546001600160a01b031633145b611afd5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331480611b4157506001546001600160a01b031633145b611b5d5760405162461bcd60e51b8152600401610a0f9061355d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc69190613775565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190613775565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca69190613775565b90506001600160a01b038116611e1f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d189190613775565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d899190613775565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfa9190613775565b601f80546001600160a01b0319166001600160a01b0392909216919091179055611e3b565b601f80546001600160a01b0319166001600160a01b0383161790555b50601e80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331480611e8257506001546001600160a01b031633145b611e9e5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b0316331480611ee557506001546001600160a01b031633145b611f015760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b038116611f665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f5883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127fe565b60008260000361201557506000610a50565b600061202183856136b1565b90508261202e8583613753565b14610f585760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0f565b60008061209283856136c8565b905083811015610f585760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a0f565b6001600160a01b0383166121465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0f565b6001600160a01b0382166121a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661226c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0f565b6001600160a01b0382166122ce5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0f565b600081116123305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a0f565b6001600160a01b03821660009081526009602052604090205460ff16156123935760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610a0f565b6001600160a01b03831660009081526009602052604090205460ff16156123f65760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610a0f565b6000546001600160a01b0384811691161480159061242257506000546001600160a01b03838116911614155b1561248057601f54600160a81b900460ff166124805760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a0f565b601f546000906001600160a01b03858116911614806124ac5750601f546001600160a01b038481169116145b80156124f457506001600160a01b0384166000908152600c602052604090205460ff16806124f257506001600160a01b0383166000908152600c602052604090205460ff165b155b156124fd575060015b6000600b5411801561254157506001600160a01b0383166000908152600d602052604090205460ff1615801561254157506000546001600160a01b03858116911614155b801561255c575043600a54600b5461255991906136c8565b11155b156125d05760165461256d84611754565b61257790846136c8565b11156125d05760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610a0f565b601b54601c55600b54158015906125f5575043600a54600b546125f391906136c8565b115b1561261e576001600160a01b0383166000908152600960205260409020805460ff191660011790555b601f54600160b01b900460ff161561269e57601f54600160a81b900460ff1680156126565750601f546001600160a01b038581169116145b15612661576000601c555b601f54600160a81b900460ff1680156126875750601f546001600160a01b038481169116145b1561269e57601b5461269a9060026136b1565b601c555b601f54600160a01b900460ff161580156126c15750601f54600160a81b900460ff165b80156126da5750601f546001600160a01b038481169116145b156127045760006126ea30611754565b9050601d5481106127025750601d546127028161282c565b505b610e35848484846128d4565b600081848411156127345760405162461bcd60e51b8152600401610a0f919061315b565b506000612741848661372a565b95945050505050565b6000806000612757612a00565b90925090506127668282611fc1565b9250505090565b60008060008060008060008060006127848a612b82565b92509250925060008060006127a28d868661279d61274a565b612bc4565b919f909e50909c50959a5093985091965092945050505050565b6000610f5883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612710565b6000818361281f5760405162461bcd60e51b8152600401610a0f919061315b565b5060006127418486613753565b601f805460ff60a01b1916600160a01b17905561284881612c14565b601b54601a5447919060009061286b908390612865908690612003565b90611fc1565b90506000612888836128656019548761200390919063ffffffff16565b90504780156128bf576004546128a89083906001600160a01b0316612da7565b6005546128bf9084906001600160a01b0316612da7565b5050601f805460ff60a01b1916905550505050565b601754601c54826128ea5760006017819055601c555b6001600160a01b0386166000908152600e602052604090205460ff16801561292b57506001600160a01b0385166000908152600e602052604090205460ff16155b156129405761293b868686612ddd565b6129ec565b6001600160a01b0386166000908152600e602052604090205460ff1615801561298157506001600160a01b0385166000908152600e602052604090205460ff165b156129915761293b868686612f03565b6001600160a01b0386166000908152600e602052604090205460ff1680156129d157506001600160a01b0385166000908152600e602052604090205460ff165b156129e15761293b868686612fac565b6129ec86868661301f565b8261115e57601791909155601c5550505050565b6012546011546000918291825b600f54811015612b52578260066000600f8481548110612a2f57612a2f61369b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a9a57508160076000600f8481548110612a7357612a7361369b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ab057601254601154945094505050509091565b612af660066000600f8481548110612aca57612aca61369b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127bc565b9250612b3e60076000600f8481548110612b1257612b1261369b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127bc565b915080612b4a816136db565b915050612a0d565b50601154601254612b6291611fc1565b821015612b79576012546011549350935050509091565b90939092509050565b600080600080612b9185613063565b90506000612b9e8661307f565b90506000612bb682612bb089866127bc565b906127bc565b979296509094509092505050565b6000808080612bd38886612003565b90506000612be18887612003565b90506000612bef8888612003565b90506000612c0182612bb086866127bc565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c4957612c4961369b565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc69190613775565b81600181518110612cd957612cd961369b565b6001600160a01b039283166020918202929092010152601e54612cff91309116846120e4565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d389085906000908690309042906004016137d6565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d9b929190613812565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561190e573d6000803e3d6000fd5b600080600080600080612def8761276d565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612e2190886127bc565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612e5090876127bc565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054612e7f9086612085565b6001600160a01b038916600090815260066020526040902055612ea18161309b565b612eab8483613137565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ef091815260200190565b60405180910390a3505050505050505050565b600080600080600080612f158761276d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612f4790876127bc565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054612f7d9084612085565b6001600160a01b038916600090815260076020908152604080832093909355600690522054612e7f9086612085565b600080600080600080612fbe8761276d565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612ff090886127bc565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612f4790876127bc565b6000806000806000806130318761276d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e5090876127bc565b6000610a5060646128656017548561200390919063ffffffff16565b6000610a506064612865601c548561200390919063ffffffff16565b60006130a561274a565b905060006130b38383612003565b6010546001600160a01b03166000908152600660205260409020549091506130db9082612085565b601080546001600160a01b0390811660009081526006602090815260408083209590955592549091168152600790915220546131179084612085565b6010546001600160a01b0316600090815260076020526040902055505050565b60125461314490836127bc565b6012556013546131549082612085565b6013555050565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156131bb57600080fd5b5035919050565b6001600160a01b03811681146131d757600080fd5b50565b600080604083850312156131ed57600080fd5b82356131f8816131c2565b946020939093013593505050565b60006020828403121561321857600080fd5b8135610f58816131c2565b60008083601f84011261323557600080fd5b50813567ffffffffffffffff81111561324d57600080fd5b6020830191508360208260051b850101111561326857600080fd5b9250929050565b60008060008060006060868803121561328757600080fd5b8535613292816131c2565b9450602086013567ffffffffffffffff808211156132af57600080fd5b6132bb89838a01613223565b909650945060408801359150808211156132d457600080fd5b506132e188828901613223565b969995985093965092949392505050565b60008060006060848603121561330757600080fd5b8335613312816131c2565b92506020840135613322816131c2565b929592945050506040919091013590565b6000806040838503121561334657600080fd5b8235613351816131c2565b91506020830135613361816131c2565b809150509250929050565b80151581146131d757600080fd5b6000806040838503121561338d57600080fd5b82356131f88161336c565b600080600080606085870312156133ae57600080fd5b84356133b9816131c2565b9350602085013567ffffffffffffffff8111156133d557600080fd5b6133e187828801613223565b9598909750949560400135949350505050565b6000806040838503121561340757600080fd5b8235915060208301356133618161336c565b60006020828403121561342b57600080fd5b8135610f588161336c565b60008060006040848603121561344b57600080fd5b833567ffffffffffffffff81111561346257600080fd5b61346e86828701613223565b90945092505060208401356134828161336c565b809150509250925092565b600080600080608085870312156134a357600080fd5b5050823594602084013594506040840135936060013592509050565b600080602083850312156134d257600080fd5b823567ffffffffffffffff8111156134e957600080fd5b6134f585828601613223565b90969095509350505050565b6000806040838503121561351457600080fd5b50508035926020909101359150565b600181811c9082168061353757607f821691505b60208210810361355757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135e35781600019048211156135c9576135c9613592565b808516156135d657918102915b93841c93908002906135ad565b509250929050565b6000826135fa57506001610a50565b8161360757506000610a50565b816001811461361d576002811461362757613643565b6001915050610a50565b60ff84111561363857613638613592565b50506001821b610a50565b5060208310610133831016604e8410600b8410161715613666575081810a610a50565b61367083836135a8565b806000190482111561368457613684613592565b029392505050565b6000610f5860ff8416836135eb565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610a5057610a50613592565b80820180821115610a5057610a50613592565b6000600182016136ed576136ed613592565b5060010190565b60006020828403121561370657600080fd5b5051919050565b60006020828403121561371f57600080fd5b8151610f588161336c565b81810381811115610a5057610a50613592565b634e487b7160e01b600052603160045260246000fd5b60008261377057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561378757600080fd5b8151610f58816131c2565b600081518084526020808501945080840160005b838110156137cb5781516001600160a01b0316875295820195908201906001016137a6565b509495945050505050565b85815284602082015260a0604082015260006137f560a0830186613792565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061382b6040830184613792565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e0cf3866297043ceb94ef573e9e75ed4282210e369ad9cacf5023e2834f0a8c64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80636b67c4df1161017557806395d89b41116100dc578063ea2f0b3711610095578063f259c57b1161006f578063f259c57b146108d2578063f2fde38b146108f2578063fabb0b4f14610912578063fce589d81461092857600080fd5b8063ea2f0b371461087c578063eafb5a3c1461089c578063ecfca899146108bc57600080fd5b806395d89b41146107ab578063a457c2d7146107c0578063a9059cbb146107e0578063bf56b37114610800578063d3f6a15714610816578063dd62ed3e1461083657600080fd5b806375f0a8741161012e57806375f0a874146106de57806378109e54146106fe5780637b2087691461071457806388f82020146107345780638da5cb5b1461076d5780638f4590d21461078b57600080fd5b80636b67c4df146106335780636fcba3771461064957806370a0823114610669578063715018a61461068957806371b9189c1461069e578063743942b6146106be57600080fd5b80632d4103d61161023457806339509351116101ed57806349bd5a5e116101c757806349bd5a5e146105b35780634b01547f146105d357806352390c02146105f35780635d54c0af1461061357600080fd5b806339509351146105535780633bd5d173146105735780634549b0391461059357600080fd5b80632d4103d6146104875780632d838119146104a75780632dd5efe7146104c7578063313ce567146104e7578063335f6a43146105135780633685d4191461053357600080fd5b80631694505e116102865780631694505e146103c457806318160ddd146103fc5780631ca0a28d146104115780631df4ccfc1461043157806323b872dd1461044757806325b86edf1461046757600080fd5b80630445b667146102d957806306fdde031461030257806309302dc614610324578063095ea7b3146103465780630f3a325f1461037657806313114a9d146103af57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ef601d5481565b6040519081526020015b60405180910390f35b34801561030e57600080fd5b5061031761093e565b6040516102f9919061315b565b34801561033057600080fd5b5061034461033f3660046131a9565b6109d0565b005b34801561035257600080fd5b506103666103613660046131da565b610a3f565b60405190151581526020016102f9565b34801561038257600080fd5b50610366610391366004613206565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156103bb57600080fd5b506013546102ef565b3480156103d057600080fd5b50601e546103e4906001600160a01b031681565b6040516001600160a01b0390911681526020016102f9565b34801561040857600080fd5b506011546102ef565b34801561041d57600080fd5b5061034461042c36600461326f565b610a56565b34801561043d57600080fd5b506102ef601b5481565b34801561045357600080fd5b506103666104623660046132f2565b610cab565b34801561047357600080fd5b50610344610482366004613333565b610d14565b34801561049357600080fd5b506103446104a236600461337a565b610e3b565b3480156104b357600080fd5b506102ef6104c23660046131a9565b610edb565b3480156104d357600080fd5b506103446104e2366004613206565b610f5f565b3480156104f357600080fd5b50601054600160a01b900460ff1660405160ff90911681526020016102f9565b34801561051f57600080fd5b5061034461052e366004613398565b610fc2565b34801561053f57600080fd5b5061034461054e366004613206565b611166565b34801561055f57600080fd5b5061036661056e3660046131da565b61132d565b34801561057f57600080fd5b5061034461058e3660046131a9565b611363565b34801561059f57600080fd5b506102ef6105ae3660046133f4565b61144d565b3480156105bf57600080fd5b50601f546103e4906001600160a01b031681565b3480156105df57600080fd5b506103446105ee366004613419565b6114da565b3480156105ff57600080fd5b5061034461060e366004613206565b611537565b34801561061f57600080fd5b5061034461062e366004613436565b611636565b34801561063f57600080fd5b506102ef60195481565b34801561065557600080fd5b5061034461066436600461348d565b6116e4565b34801561067557600080fd5b506102ef610684366004613206565b611754565b34801561069557600080fd5b506103446117b3565b3480156106aa57600080fd5b506103446106b93660046134bf565b61185f565b3480156106ca57600080fd5b506103446106d9366004613206565b611913565b3480156106ea57600080fd5b506004546103e4906001600160a01b031681565b34801561070a57600080fd5b506102ef60165481565b34801561072057600080fd5b506005546103e4906001600160a01b031681565b34801561074057600080fd5b5061036661074f366004613206565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561077957600080fd5b506000546001600160a01b03166103e4565b34801561079757600080fd5b506103446107a6366004613501565b611987565b3480156107b757600080fd5b506103176119e6565b3480156107cc57600080fd5b506103666107db3660046131da565b6119f5565b3480156107ec57600080fd5b506103666107fb3660046131da565b611a44565b34801561080c57600080fd5b506102ef600b5481565b34801561082257600080fd5b50610344610831366004613333565b611a51565b34801561084257600080fd5b506102ef610851366004613333565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561088857600080fd5b50610344610897366004613206565b611abe565b3480156108a857600080fd5b506103446108b7366004613206565b611b1e565b3480156108c857600080fd5b506102ef601a5481565b3480156108de57600080fd5b506103446108ed366004613206565b611e5f565b3480156108fe57600080fd5b5061034461090d366004613206565b611ec2565b34801561091e57600080fd5b506102ef600a5481565b34801561093457600080fd5b506102ef60185481565b60606014805461094d90613523565b80601f016020809104026020016040519081016040528092919081815260200182805461097990613523565b80156109c65780601f1061099b576101008083540402835291602001916109c6565b820191906000526020600020905b8154815290600101906020018083116109a957829003601f168201915b5050505050905090565b6000546001600160a01b03163314806109f357506001546001600160a01b031633145b610a185760405162461bcd60e51b8152600401610a0f9061355d565b60405180910390fd5b610a3981610a336103e8601154611fc190919063ffffffff16565b90612003565b60165550565b6000610a4c3384846120e4565b5060015b92915050565b6000546001600160a01b0316331480610a7957506001546001600160a01b031633145b610a955760405162461bcd60e51b8152600401610a0f9061355d565b6103218310610afc5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610a0f565b828114610b5c5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610a0f565b6000805b84811015610bc157601054610b8090600160a01b900460ff16600a61368c565b848483818110610b9257610b9261369b565b90506020020135610ba391906136b1565b610bad90836136c8565b915080610bb9816136db565b915050610b60565b5080610bcc87611754565b1015610c1a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610a0f565b60005b84811015610ca257610c9087878784818110610c3b57610c3b61369b565b9050602002016020810190610c509190613206565b601054610c6890600160a01b900460ff16600a61368c565b878786818110610c7a57610c7a61369b565b90506020020135610c8b91906136b1565b612208565b80610c9a816136db565b915050610c1d565b50505050505050565b6000610cb8848484612208565b610d0a8433610d0585604051806060016040528060288152602001613834602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612710565b6120e4565b5060019392505050565b6000546001600160a01b0316331480610d3757506001546001600160a01b031633145b610d535760405162461bcd60e51b8152600401610a0f9061355d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbe91906136f4565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e35919061370d565b50505050565b6000546001600160a01b0316331480610e5e57506001546001600160a01b031633145b610e7a5760405162461bcd60e51b8152600401610a0f9061355d565b601f805460ff60a81b1916600160a81b84151502179055610e9a30611537565b601f54610eaf906001600160a01b0316611537565b601f54600160a81b900460ff168015610ec85750600b54155b15610ed75743600b55600a8190555b5050565b6000601254821115610f425760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a0f565b6000610f4c61274a565b9050610f588382611fc1565b9392505050565b6000546001600160a01b0316331480610f8257506001546001600160a01b031633145b610f9e5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b0316331480610fe557506001546001600160a01b031633145b6110015760405162461bcd60e51b8152600401610a0f9061355d565b6107d182106110695760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610a0f565b601054600090839061108690600160a01b900460ff16600a61368c565b61109090846136b1565b61109a91906136b1565b9050806110a686611754565b10156110f45760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610a0f565b60005b8381101561115e5761114c868686848181106111155761111561369b565b905060200201602081019061112a9190613206565b60105461114290600160a01b900460ff16600a61368c565b610c8b90876136b1565b80611156816136db565b9150506110f7565b505050505050565b6000546001600160a01b031633148061118957506001546001600160a01b031633145b6111a55760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b0381166000908152600e602052604090205460ff1661120d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a0f565b60005b600f54811015610ed757816001600160a01b0316600f82815481106112375761123761369b565b6000918252602090912001546001600160a01b03160361131b57600f80546112619060019061372a565b815481106112715761127161369b565b600091825260209091200154600f80546001600160a01b03909216918390811061129d5761129d61369b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055600f8054806112f5576112f561373d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611325816136db565b915050611210565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610a4c918590610d059086612085565b336000818152600e602052604090205460ff16156113d85760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a0f565b60006113e38361276d565b505050506001600160a01b03841660009081526006602052604090205491925061140f919050826127bc565b6001600160a01b03831660009081526006602052604090205560125461143590826127bc565b6012556013546114459084612085565b601355505050565b60006011548311156114a15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a0f565b816114c05760006114b18461276d565b50939550610a50945050505050565b60006114cb8461276d565b50929550610a50945050505050565b6000546001600160a01b03163314806114fd57506001546001600160a01b031633145b6115195760405162461bcd60e51b8152600401610a0f9061355d565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633148061155a57506001546001600160a01b031633145b6115765760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b038116600090815260066020526040902054156115d0576001600160a01b0381166000908152600660205260409020546115b690610edb565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633148061165957506001546001600160a01b031633145b6116755760405162461bcd60e51b8152600401610a0f9061355d565b60005b82811015610e355781600960008686858181106116975761169761369b565b90506020020160208101906116ac9190613206565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116dd816136db565b9050611678565b6000546001600160a01b031633148061170757506001546001600160a01b031633145b6117235760405162461bcd60e51b8152600401610a0f9061355d565b60178490556018839055601a829055601981905561174b826117458584612085565b90612085565b601b5550505050565b6001600160a01b0381166000908152600e602052604081205460ff161561179157506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610a5090610edb565b6000546001600160a01b03163314806117d657506001546001600160a01b031633145b6117f25760405162461bcd60e51b8152600401610a0f9061355d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b03191690556001546001600160a01b0316330361185d57600180546001600160a01b03191690555b565b6000546001600160a01b031633148061188257506001546001600160a01b031633145b61189e5760405162461bcd60e51b8152600401610a0f9061355d565b60005b8181101561190e576001600c60008585858181106118c1576118c161369b565b90506020020160208101906118d69190613206565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611907816136db565b90506118a1565b505050565b6000546001600160a01b031633148061193657506001546001600160a01b031633145b6119525760405162461bcd60e51b8152600401610a0f9061355d565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ed7573d6000803e3d6000fd5b6000546001600160a01b03163314806119aa57506001546001600160a01b031633145b6119c65760405162461bcd60e51b8152600401610a0f9061355d565b80826011546119d591906136b1565b6119df9190613753565b601d555050565b60606015805461094d90613523565b6000610a4c3384610d058560405180606001604052806025815260200161385c602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612710565b6000610a4c338484612208565b6000546001600160a01b0316331480611a7457506001546001600160a01b031633145b611a905760405162461bcd60e51b8152600401610a0f9061355d565b600480546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b0316331480611ae157506001546001600160a01b031633145b611afd5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331480611b4157506001546001600160a01b031633145b611b5d5760405162461bcd60e51b8152600401610a0f9061355d565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc69190613775565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190613775565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca69190613775565b90506001600160a01b038116611e1f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d189190613775565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d899190613775565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfa9190613775565b601f80546001600160a01b0319166001600160a01b0392909216919091179055611e3b565b601f80546001600160a01b0319166001600160a01b0383161790555b50601e80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b0316331480611e8257506001546001600160a01b031633145b611e9e5760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b0316331480611ee557506001546001600160a01b031633145b611f015760405162461bcd60e51b8152600401610a0f9061355d565b6001600160a01b038116611f665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f5883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127fe565b60008260000361201557506000610a50565b600061202183856136b1565b90508261202e8583613753565b14610f585760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0f565b60008061209283856136c8565b905083811015610f585760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a0f565b6001600160a01b0383166121465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0f565b6001600160a01b0382166121a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661226c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0f565b6001600160a01b0382166122ce5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0f565b600081116123305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a0f565b6001600160a01b03821660009081526009602052604090205460ff16156123935760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610a0f565b6001600160a01b03831660009081526009602052604090205460ff16156123f65760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610a0f565b6000546001600160a01b0384811691161480159061242257506000546001600160a01b03838116911614155b1561248057601f54600160a81b900460ff166124805760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610a0f565b601f546000906001600160a01b03858116911614806124ac5750601f546001600160a01b038481169116145b80156124f457506001600160a01b0384166000908152600c602052604090205460ff16806124f257506001600160a01b0383166000908152600c602052604090205460ff165b155b156124fd575060015b6000600b5411801561254157506001600160a01b0383166000908152600d602052604090205460ff1615801561254157506000546001600160a01b03858116911614155b801561255c575043600a54600b5461255991906136c8565b11155b156125d05760165461256d84611754565b61257790846136c8565b11156125d05760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610a0f565b601b54601c55600b54158015906125f5575043600a54600b546125f391906136c8565b115b1561261e576001600160a01b0383166000908152600960205260409020805460ff191660011790555b601f54600160b01b900460ff161561269e57601f54600160a81b900460ff1680156126565750601f546001600160a01b038581169116145b15612661576000601c555b601f54600160a81b900460ff1680156126875750601f546001600160a01b038481169116145b1561269e57601b5461269a9060026136b1565b601c555b601f54600160a01b900460ff161580156126c15750601f54600160a81b900460ff165b80156126da5750601f546001600160a01b038481169116145b156127045760006126ea30611754565b9050601d5481106127025750601d546127028161282c565b505b610e35848484846128d4565b600081848411156127345760405162461bcd60e51b8152600401610a0f919061315b565b506000612741848661372a565b95945050505050565b6000806000612757612a00565b90925090506127668282611fc1565b9250505090565b60008060008060008060008060006127848a612b82565b92509250925060008060006127a28d868661279d61274a565b612bc4565b919f909e50909c50959a5093985091965092945050505050565b6000610f5883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612710565b6000818361281f5760405162461bcd60e51b8152600401610a0f919061315b565b5060006127418486613753565b601f805460ff60a01b1916600160a01b17905561284881612c14565b601b54601a5447919060009061286b908390612865908690612003565b90611fc1565b90506000612888836128656019548761200390919063ffffffff16565b90504780156128bf576004546128a89083906001600160a01b0316612da7565b6005546128bf9084906001600160a01b0316612da7565b5050601f805460ff60a01b1916905550505050565b601754601c54826128ea5760006017819055601c555b6001600160a01b0386166000908152600e602052604090205460ff16801561292b57506001600160a01b0385166000908152600e602052604090205460ff16155b156129405761293b868686612ddd565b6129ec565b6001600160a01b0386166000908152600e602052604090205460ff1615801561298157506001600160a01b0385166000908152600e602052604090205460ff165b156129915761293b868686612f03565b6001600160a01b0386166000908152600e602052604090205460ff1680156129d157506001600160a01b0385166000908152600e602052604090205460ff165b156129e15761293b868686612fac565b6129ec86868661301f565b8261115e57601791909155601c5550505050565b6012546011546000918291825b600f54811015612b52578260066000600f8481548110612a2f57612a2f61369b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a9a57508160076000600f8481548110612a7357612a7361369b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ab057601254601154945094505050509091565b612af660066000600f8481548110612aca57612aca61369b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127bc565b9250612b3e60076000600f8481548110612b1257612b1261369b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127bc565b915080612b4a816136db565b915050612a0d565b50601154601254612b6291611fc1565b821015612b79576012546011549350935050509091565b90939092509050565b600080600080612b9185613063565b90506000612b9e8661307f565b90506000612bb682612bb089866127bc565b906127bc565b979296509094509092505050565b6000808080612bd38886612003565b90506000612be18887612003565b90506000612bef8888612003565b90506000612c0182612bb086866127bc565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c4957612c4961369b565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc69190613775565b81600181518110612cd957612cd961369b565b6001600160a01b039283166020918202929092010152601e54612cff91309116846120e4565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d389085906000908690309042906004016137d6565b600060405180830381600087803b158015612d5257600080fd5b505af1158015612d66573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d9b929190613812565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561190e573d6000803e3d6000fd5b600080600080600080612def8761276d565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612e2190886127bc565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612e5090876127bc565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054612e7f9086612085565b6001600160a01b038916600090815260066020526040902055612ea18161309b565b612eab8483613137565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ef091815260200190565b60405180910390a3505050505050505050565b600080600080600080612f158761276d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612f4790876127bc565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054612f7d9084612085565b6001600160a01b038916600090815260076020908152604080832093909355600690522054612e7f9086612085565b600080600080600080612fbe8761276d565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612ff090886127bc565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054612f4790876127bc565b6000806000806000806130318761276d565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612e5090876127bc565b6000610a5060646128656017548561200390919063ffffffff16565b6000610a506064612865601c548561200390919063ffffffff16565b60006130a561274a565b905060006130b38383612003565b6010546001600160a01b03166000908152600660205260409020549091506130db9082612085565b601080546001600160a01b0390811660009081526006602090815260408083209590955592549091168152600790915220546131179084612085565b6010546001600160a01b0316600090815260076020526040902055505050565b60125461314490836127bc565b6012556013546131549082612085565b6013555050565b600060208083528351808285015260005b818110156131885785810183015185820160400152820161316c565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156131bb57600080fd5b5035919050565b6001600160a01b03811681146131d757600080fd5b50565b600080604083850312156131ed57600080fd5b82356131f8816131c2565b946020939093013593505050565b60006020828403121561321857600080fd5b8135610f58816131c2565b60008083601f84011261323557600080fd5b50813567ffffffffffffffff81111561324d57600080fd5b6020830191508360208260051b850101111561326857600080fd5b9250929050565b60008060008060006060868803121561328757600080fd5b8535613292816131c2565b9450602086013567ffffffffffffffff808211156132af57600080fd5b6132bb89838a01613223565b909650945060408801359150808211156132d457600080fd5b506132e188828901613223565b969995985093965092949392505050565b60008060006060848603121561330757600080fd5b8335613312816131c2565b92506020840135613322816131c2565b929592945050506040919091013590565b6000806040838503121561334657600080fd5b8235613351816131c2565b91506020830135613361816131c2565b809150509250929050565b80151581146131d757600080fd5b6000806040838503121561338d57600080fd5b82356131f88161336c565b600080600080606085870312156133ae57600080fd5b84356133b9816131c2565b9350602085013567ffffffffffffffff8111156133d557600080fd5b6133e187828801613223565b9598909750949560400135949350505050565b6000806040838503121561340757600080fd5b8235915060208301356133618161336c565b60006020828403121561342b57600080fd5b8135610f588161336c565b60008060006040848603121561344b57600080fd5b833567ffffffffffffffff81111561346257600080fd5b61346e86828701613223565b90945092505060208401356134828161336c565b809150509250925092565b600080600080608085870312156134a357600080fd5b5050823594602084013594506040840135936060013592509050565b600080602083850312156134d257600080fd5b823567ffffffffffffffff8111156134e957600080fd5b6134f585828601613223565b90969095509350505050565b6000806040838503121561351457600080fd5b50508035926020909101359150565b600181811c9082168061353757607f821691505b60208210810361355757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135e35781600019048211156135c9576135c9613592565b808516156135d657918102915b93841c93908002906135ad565b509250929050565b6000826135fa57506001610a50565b8161360757506000610a50565b816001811461361d576002811461362757613643565b6001915050610a50565b60ff84111561363857613638613592565b50506001821b610a50565b5060208310610133831016604e8410600b8410161715613666575081810a610a50565b61367083836135a8565b806000190482111561368457613684613592565b029392505050565b6000610f5860ff8416836135eb565b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610a5057610a50613592565b80820180821115610a5057610a50613592565b6000600182016136ed576136ed613592565b5060010190565b60006020828403121561370657600080fd5b5051919050565b60006020828403121561371f57600080fd5b8151610f588161336c565b81810381811115610a5057610a50613592565b634e487b7160e01b600052603160045260246000fd5b60008261377057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561378757600080fd5b8151610f58816131c2565b600081518084526020808501945080840160005b838110156137cb5781516001600160a01b0316875295820195908201906001016137a6565b509495945050505050565b85815284602082015260a0604082015260006137f560a0830186613792565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061382b6040830184613792565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203e0cf3866297043ceb94ef573e9e75ed4282210e369ad9cacf5023e2834f0a8c64736f6c63430008110033

Deployed Bytecode Sourcemap

14635:21286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16276:55;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16276:55:0;;;;;;;;18537:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34110:175::-;;;;;;;;;;-1:-1:-1;34110:175:0;;;;;:::i;:::-;;:::i;:::-;;19449:161;;;;;;;;;;-1:-1:-1;19449:161:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;19449:161:0;1390:187:1;33442:106:0;;;;;;;;;;-1:-1:-1;33442:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;33522:18:0;33498:4;33522:18;;;:9;:18;;;;;;;;;33442:106;20570:87;;;;;;;;;;-1:-1:-1;20639:10:0;;20570:87;;16351:41;;;;;;;;;;-1:-1:-1;16351:41:0;;;;-1:-1:-1;;;;;16351:41:0;;;;;;-1:-1:-1;;;;;2025:32:1;;;2007:51;;1995:2;1980:18;16351:41:0;1834:230:1;18814:95:0;;;;;;;;;;-1:-1:-1;18894:7:0;;18814:95;;34600:702;;;;;;;;;;-1:-1:-1;34600:702:0;;;;;:::i;:::-;;:::i;16138:76::-;;;;;;;;;;;;;;;;19618:313;;;;;;;;;;-1:-1:-1;19618:313:0;;;;;:::i;:::-;;:::i;33925:177::-;;;;;;;;;;-1:-1:-1;33925:177:0;;;;;:::i;:::-;;:::i;17545:337::-;;;;;;;;;;-1:-1:-1;17545:337:0;;;;;:::i;:::-;;:::i;21502:253::-;;;;;;;;;;-1:-1:-1;21502:253:0;;;;;:::i;:::-;;:::i;34293:113::-;;;;;;;;;;-1:-1:-1;34293:113:0;;;;;:::i;:::-;;:::i;18723:83::-;;;;;;;;;;-1:-1:-1;18789:9:0;;-1:-1:-1;;;18789:9:0;;;;18723:83;;4830:4:1;4818:17;;;4800:36;;4788:2;4773:18;18723:83:0;4658:184:1;35310:512:0;;;;;;;;;;-1:-1:-1;35310:512:0;;;;;:::i;:::-;;:::i;22034:479::-;;;;;;;;;;-1:-1:-1;22034:479:0;;;;;:::i;:::-;;:::i;19939:218::-;;;;;;;;;;-1:-1:-1;19939:218:0;;;;;:::i;:::-;;:::i;20669:377::-;;;;;;;;;;-1:-1:-1;20669:377:0;;;;;:::i;:::-;;:::i;21058:436::-;;;;;;;;;;-1:-1:-1;21058:436:0;;;;;:::i;:::-;;:::i;16399:28::-;;;;;;;;;;-1:-1:-1;16399:28:0;;;;-1:-1:-1;;;;;16399:28:0;;;17896:102;;;;;;;;;;-1:-1:-1;17896:102:0;;;;;:::i;:::-;;:::i;21763:263::-;;;;;;;;;;-1:-1:-1;21763:263:0;;;;;:::i;:::-;;:::i;33560:204::-;;;;;;;;;;-1:-1:-1;33560:204:0;;;;;:::i;:::-;;:::i;16064:31::-;;;;;;;;;;;;;;;;32915:378;;;;;;;;;;-1:-1:-1;32915:378:0;;;;;:::i;:::-;;:::i;18917:198::-;;;;;;;;;;-1:-1:-1;18917:198:0;;;;;:::i;:::-;;:::i;6178:236::-;;;;;;;;;;;;;:::i;32367:198::-;;;;;;;;;;-1:-1:-1;32367:198:0;;;;;:::i;:::-;;:::i;33782:135::-;;;;;;;;;;-1:-1:-1;33782:135:0;;;;;:::i;:::-;;:::i;14760:92::-;;;;;;;;;;-1:-1:-1;14760:92:0;;;;-1:-1:-1;;;;;14760:92:0;;;15918:58;;;;;;;;;;;;;;;;14879:91;;;;;;;;;;-1:-1:-1;14879:91:0;;;;-1:-1:-1;;;;;14879:91:0;;;20442:120;;;;;;;;;;-1:-1:-1;20442:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20534:20:0;20510:4;20534:20;;;:11;:20;;;;;;;;;20442:120;5925:79;;;;;;;;;;-1:-1:-1;5963:7:0;5990:6;-1:-1:-1;;;;;5990:6:0;5925:79;;34414:178;;;;;;;;;;-1:-1:-1;34414:178:0;;;;;:::i;:::-;;:::i;18628:87::-;;;;;;;;;;;;;:::i;20165:269::-;;;;;;;;;;-1:-1:-1;20165:269:0;;;;;:::i;:::-;;:::i;19123:167::-;;;;;;;;;;-1:-1:-1;19123:167:0;;;;;:::i;:::-;;:::i;15265:29::-;;;;;;;;;;;;;;;;32705:202;;;;;;;;;;-1:-1:-1;32705:202:0;;;;;:::i;:::-;;:::i;19298:143::-;;;;;;;;;;-1:-1:-1;19298:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19406:18:0;;;19379:7;19406:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19298:143;32583:110;;;;;;;;;;-1:-1:-1;32583:110:0;;;;;:::i;:::-;;:::i;18006:523::-;;;;;;;;;;-1:-1:-1;18006:523:0;;;;;:::i;:::-;;:::i;16102:29::-;;;;;;;;;;;;;;;;32247:112;;;;;;;;;;-1:-1:-1;32247:112:0;;;;;:::i;:::-;;:::i;6422:244::-;;;;;;;;;;-1:-1:-1;6422:244:0;;;;;:::i;:::-;;:::i;15229:29::-;;;;;;;;;;;;;;;;16031:26;;;;;;;;;;;;;;;;18537:83;18574:13;18607:5;18600:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18537:83;:::o;34110:175::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;;;;;;;;;34231:46:::1;34253:23;34231:17;34243:4;34231:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;34213:15;:64:::0;-1:-1:-1;34110:175:0:o;19449:161::-;19524:4;19541:39;247:10;19564:7;19573:6;19541:8;:39::i;:::-;-1:-1:-1;19598:4:0;19449:161;;;;;:::o;34600:702::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;34753:3:::1;34734:22:::0;::::1;34726:79;;;::::0;-1:-1:-1;;;34726:79:0;;9741:2:1;34726:79:0::1;::::0;::::1;9723:21:1::0;9780:2;9760:18;;;9753:30;9819:34;9799:18;;;9792:62;-1:-1:-1;;;9870:18:1;;;9863:43;9923:19;;34726:79:0::1;9539:409:1::0;34726:79:0::1;34847:33:::0;;::::1;34839:85;;;::::0;-1:-1:-1;;;34839:85:0;;10155:2:1;34839:85:0::1;::::0;::::1;10137:21:1::0;10194:2;10174:18;;;10167:30;10233:34;10213:18;;;10206:62;-1:-1:-1;;;10284:18:1;;;10277:38;10332:19;;34839:85:0::1;9953:404:1::0;34839:85:0::1;34937:12;34970:6:::0;34966:108:::1;34980:20:::0;;::::1;34966:108;;;35052:9;::::0;35048:13:::1;::::0;-1:-1:-1;;;35052:9:0;::::1;;;35048:2;:13;:::i;:::-;35036:6;;35043:1;35036:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;35028:34;::::0;:4;:34:::1;:::i;:::-;35021:41:::0;-1:-1:-1;35002:3:0;::::1;::::0;::::1;:::i;:::-;;;;34966:108;;;;35113:4;35094:15;35104:4;35094:9;:15::i;:::-;:23;;35086:63;;;::::0;-1:-1:-1;;;35086:63:0;;12654:2:1;35086:63:0::1;::::0;::::1;12636:21:1::0;12693:2;12673:18;;;12666:30;12732:29;12712:18;;;12705:57;12779:18;;35086:63:0::1;12452:351:1::0;35086:63:0::1;35166:6;35162:133;35176:20:::0;;::::1;35162:133;;;35217:56;35227:4;35232:9;;35242:1;35232:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;35262:9;::::0;35258:13:::1;::::0;-1:-1:-1;;;35262:9:0;::::1;;;35258:2;:13;:::i;:::-;35246:6;;35253:1;35246:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;35217:9;:56::i;:::-;35198:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35162:133;;;;34713:589;34600:702:::0;;;;;:::o;19618:313::-;19716:4;19733:36;19743:6;19751:9;19762:6;19733:9;:36::i;:::-;19780:121;19789:6;247:10;19811:89;19849:6;19811:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19811:19:0;;;;;;:11;:19;;;;;;;;247:10;19811:33;;;;;;;;;;:37;:89::i;:::-;19780:8;:121::i;:::-;-1:-1:-1;19919:4:0;19618:313;;;;;:::o;33925:177::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;34026:30:::1;::::0;-1:-1:-1;;;34026:30:0;;34050:4:::1;34026:30;::::0;::::1;2007:51:1::0;34008:15:0::1;::::0;-1:-1:-1;;;;;34026:15:0;::::1;::::0;::::1;::::0;1980:18:1;;34026:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34067:27;::::0;-1:-1:-1;;;34067:27:0;;-1:-1:-1;;;;;13189:32:1;;;34067:27:0::1;::::0;::::1;13171:51:1::0;13238:18;;;13231:34;;;34008:48:0;;-1:-1:-1;34067:14:0;;::::1;::::0;::::1;::::0;13144:18:1;;34067:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33997:105;33925:177:::0;;:::o;17545:337::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;17632:11:::1;:21:::0;;-1:-1:-1;;;;17632:21:0::1;-1:-1:-1::0;;;17632:21:0;::::1;;;;::::0;;17664:32:::1;17690:4;17664:17;:32::i;:::-;17725:13;::::0;17707:32:::1;::::0;-1:-1:-1;;;;;17725:13:0::1;17707:17;:32::i;:::-;17753:11;::::0;-1:-1:-1;;;17753:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;17768:10:0::1;::::0;:15;17753:30:::1;17750:125;;;17812:12;17799:10;:25:::0;17839:10:::1;:24:::0;;;17750:125:::1;17545:337:::0;;:::o;21502:253::-;21568:7;21607;;21596;:18;;21588:73;;;;-1:-1:-1;;;21588:73:0;;13728:2:1;21588:73:0;;;13710:21:1;13767:2;13747:18;;;13740:30;13806:34;13786:18;;;13779:62;-1:-1:-1;;;13857:18:1;;;13850:40;13907:19;;21588:73:0;13526:406:1;21588:73:0;21672:19;21695:10;:8;:10::i;:::-;21672:33;-1:-1:-1;21723:24:0;:7;21672:33;21723:11;:24::i;:::-;21716:31;21502:253;-1:-1:-1;;;21502:253:0:o;34293:113::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34366:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;34366:32:0::1;34394:4;34366:32;::::0;;34293:113::o;35310:512::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;35458:4:::1;35439:23:::0;::::1;35431:81;;;::::0;-1:-1:-1;;;35431:81:0;;14139:2:1;35431:81:0::1;::::0;::::1;14121:21:1::0;14178:2;14158:18;;;14151:30;14217:34;14197:18;;;14190:62;-1:-1:-1;;;14268:18:1;;;14261:44;14322:19;;35431:81:0::1;13937:410:1::0;35431:81:0::1;35575:9;::::0;35548:12:::1;::::0;35587:9;;35571:13:::1;::::0;-1:-1:-1;;;35575:9:0;::::1;;;35571:2;:13;:::i;:::-;35563:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;35548:55;;35643:4;35624:15;35634:4;35624:9;:15::i;:::-;:23;;35616:63;;;::::0;-1:-1:-1;;;35616:63:0;;12654:2:1;35616:63:0::1;::::0;::::1;12636:21:1::0;12693:2;12673:18;;;12666:30;12732:29;12712:18;;;12705:57;12779:18;;35616:63:0::1;12452:351:1::0;35616:63:0::1;35696:6;35692:123;35706:20:::0;;::::1;35692:123;;;35747:52;35757:4;35762:9;;35772:1;35762:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;35788:9;::::0;35784:13:::1;::::0;-1:-1:-1;;;35788:9:0;::::1;;;35784:2;:13;:::i;:::-;35776:21;::::0;:6;:21:::1;:::i;35747:52::-;35728:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35692:123;;;;35418:404;35310:512:::0;;;;:::o;22034:479::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22116:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22108:60;;;::::0;-1:-1:-1;;;22108:60:0;;14554:2:1;22108:60:0::1;::::0;::::1;14536:21:1::0;14593:2;14573:18;;;14566:30;14632:29;14612:18;;;14605:57;14679:18;;22108:60:0::1;14352:351:1::0;22108:60:0::1;22184:9;22179:327;22203:9;:16:::0;22199:20;::::1;22179:327;;;22261:7;-1:-1:-1::0;;;;;22245:23:0::1;:9;22255:1;22245:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22245:12:0::1;:23:::0;22241:254:::1;;22304:9;22314:16:::0;;:20:::1;::::0;22333:1:::1;::::0;22314:20:::1;:::i;:::-;22304:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22289:9:::1;:12:::0;;-1:-1:-1;;;;;22304:31:0;;::::1;::::0;22299:1;;22289:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22289:46:0::1;-1:-1:-1::0;;;;;22289:46:0;;::::1;;::::0;;22354:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22393:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22393:28:0::1;::::0;;22440:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22440:15:0;;;;;-1:-1:-1;;;;;;22440:15:0::1;::::0;;;;;17545:337;;:::o;22241:254::-:1;22221:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22179:327;;19939:218:::0;247:10;20027:4;20076:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20076:34:0;;;;;;;;;;20027:4;;20044:83;;20067:7;;20076:50;;20115:10;20076:38;:50::i;20669:377::-;247:10;20721:14;20770:19;;;:11;:19;;;;;;;;20769:20;20761:77;;;;-1:-1:-1;;;20761:77:0;;15175:2:1;20761:77:0;;;15157:21:1;15214:2;15194:18;;;15187:30;15253:34;15233:18;;;15226:62;-1:-1:-1;;;15304:18:1;;;15297:42;15356:19;;20761:77:0;14973:408:1;20761:77:0;20850:15;20874:19;20885:7;20874:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20922:15:0;;;;;;:7;:15;;;;;;20849:44;;-1:-1:-1;20922:28:0;;:15;-1:-1:-1;20849:44:0;20922:19;:28::i;:::-;-1:-1:-1;;;;;20904:15:0;;;;;;:7;:15;;;;;:46;20971:7;;:20;;20983:7;20971:11;:20::i;:::-;20961:7;:30;21015:10;;:23;;21030:7;21015:14;:23::i;:::-;21002:10;:36;-1:-1:-1;;;20669:377:0:o;21058:436::-;21148:7;21187;;21176;:18;;21168:62;;;;-1:-1:-1;;;21168:62:0;;15588:2:1;21168:62:0;;;15570:21:1;15627:2;15607:18;;;15600:30;15666:33;15646:18;;;15639:61;15717:18;;21168:62:0;15386:355:1;21168:62:0;21246:17;21241:246;;21281:15;21305:19;21316:7;21305:10;:19::i;:::-;-1:-1:-1;21280:44:0;;-1:-1:-1;21339:14:0;;-1:-1:-1;;;;;21339:14:0;21241:246;21388:23;21419:19;21430:7;21419:10;:19::i;:::-;-1:-1:-1;21386:52:0;;-1:-1:-1;21453:22:0;;-1:-1:-1;;;;;21453:22:0;17896:102;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;17968:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;17968:22:0::1;-1:-1:-1::0;;;;17968:22:0;;::::1;::::0;;;::::1;::::0;;17896:102::o;21763:263::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21842:16:0;::::1;21861:1;21842:16:::0;;;:7:::1;:16;::::0;;;;;:20;21839:108:::1;;-1:-1:-1::0;;;;;21918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21898:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21879:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21839:108:::1;-1:-1:-1::0;;;;;21957:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21957:27:0::1;21980:4;21957:27:::0;;::::1;::::0;;;21995:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21995:23:0::1;::::0;;::::1;::::0;;21763:263::o;33560:204::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;33660:9:::1;33655:102;33671:20:::0;;::::1;33655:102;;;33739:6;33713:9;:23;33723:9;;33733:1;33723:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33713:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33713:23:0;:32;;-1:-1:-1;;33713:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33693:3:::1;::::0;::::1;:::i;:::-;;;33655:102;;32915:378:::0;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;33091:13:::1;:28:::0;;;33130:7:::1;:18:::0;;;33159:10:::1;:24:::0;;;33194:12:::1;:28:::0;;;33244:41:::1;33172:11:::0;33244:25:::1;33140:8:::0;33209:13;33244:11:::1;:25::i;:::-;:29:::0;::::1;:41::i;:::-;33233:8;:52:::0;-1:-1:-1;;;;32915:378:0:o;18917:198::-;-1:-1:-1;;;;;19007:20:0;;18983:7;19007:20;;;:11;:20;;;;;;;;19003:49;;;-1:-1:-1;;;;;;19036:16:0;;;;;:7;:16;;;;;;;18917:198::o;19003:49::-;-1:-1:-1;;;;;19090:16:0;;;;;;:7;:16;;;;;;19070:37;;:19;:37::i;6178:236::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;6285:1:::1;6269:6:::0;;6248:40:::1;::::0;-1:-1:-1;;;;;6269:6:0;;::::1;::::0;6248:40:::1;::::0;6285:1;;6248:40:::1;6316:1;6299:19:::0;;-1:-1:-1;;;;;;6299:19:0::1;::::0;;-1:-1:-1;6349:8:0;-1:-1:-1;;;;;6349:8:0::1;247:10:::0;6333:24;6329:78:::1;;6374:8;:21:::0;;-1:-1:-1;;;;;;6374:21:0::1;::::0;;6329:78:::1;6178:236::o:0;32367:198::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;32454:9:::1;32449:109;32465:20:::0;;::::1;32449:109;;;32542:4;32507:18;:32;32526:9;;32536:1;32526:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32507:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32507:32:0;:39;;-1:-1:-1;;32507:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32487:3:::1;::::0;::::1;:::i;:::-;;;32449:109;;;;32367:198:::0;;:::o;33782:135::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;33867:42:::1;::::0;-1:-1:-1;;;;;33867:19:0;::::1;::::0;33887:21:::1;33867:42:::0;::::1;;;::::0;::::1;::::0;;;33887:21;33867:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;34414:178:::0;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;34568:16:::1;34548;34538:7;;:26;;;;:::i;:::-;34537:47;;;;:::i;:::-;34521:13;:63:::0;-1:-1:-1;;34414:178:0:o;18628:87::-;18667:13;18700:7;18693:14;;;;;:::i;20165:269::-;20258:4;20275:129;247:10;20298:7;20307:96;20346:15;20307:96;;;;;;;;;;;;;;;;;247:10;20307:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20307:34:0;;;;;;;;;;;;:38;:96::i;19123:167::-;19201:4;19218:42;247:10;19242:9;19253:6;19218:9;:42::i;32705:202::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;32806:15:::1;:43:::0;;-1:-1:-1;;;;;32806:43:0;;::::1;-1:-1:-1::0;;;;;;32806:43:0;;::::1;;::::0;;;32860:13:::1;:39:::0;;;;;::::1;::::0;::::1;;::::0;;32705:202::o;32583:110::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32650:27:0::1;32680:5;32650:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32650:35:0::1;::::0;;32583:110::o;18006:523::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;18079:29:::1;18130:9;18079:61;;18151:16;18188:10;-1:-1:-1::0;;;;;18188:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18170:47:0::1;;18226:4;18233:10;-1:-1:-1::0;;;;;18233:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18170:81;::::0;-1:-1:-1;;;;;;18170:81:0::1;::::0;;;;;;-1:-1:-1;;;;;16454:15:1;;;18170:81:0::1;::::0;::::1;16436:34:1::0;16506:15;;16486:18;;;16479:43;16371:18;;18170:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18151:100:::0;-1:-1:-1;;;;;;18266:22:0;::::1;18262:221;;18339:10;-1:-1:-1::0;;;;;18339:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18321:50:0::1;;18380:4;18387:10;-1:-1:-1::0;;;;;18387:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18321:84;::::0;-1:-1:-1;;;;;;18321:84:0::1;::::0;;;;;;-1:-1:-1;;;;;16454:15:1;;;18321:84:0::1;::::0;::::1;16436:34:1::0;16506:15;;16486:18;;;16479:43;16371:18;;18321:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18305:13;:100:::0;;-1:-1:-1;;;;;;18305:100:0::1;-1:-1:-1::0;;;;;18305:100:0;;;::::1;::::0;;;::::1;::::0;;18262:221:::1;;;18447:13;:24:::0;;-1:-1:-1;;;;;;18447:24:0::1;-1:-1:-1::0;;;;;18447:24:0;::::1;;::::0;;18262:221:::1;-1:-1:-1::0;18493:15:0::1;:28:::0;;-1:-1:-1;;;;;;18493:28:0::1;-1:-1:-1::0;;;;;18493:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18006:523:0:o;32247:112::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32317:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32317:34:0::1;32347:4;32317:34;::::0;;32247:112::o;6422:244::-;6059:6;;-1:-1:-1;;;;;6059:6:0;247:10;6059:22;;:50;;-1:-1:-1;6085:8:0;;-1:-1:-1;;;;;6085:8:0;247:10;6085:24;6059:50;6051:95;;;;-1:-1:-1;;;6051:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6511:22:0;::::1;6503:73;;;::::0;-1:-1:-1;;;6503:73:0;;16735:2:1;6503:73:0::1;::::0;::::1;16717:21:1::0;16774:2;16754:18;;;16747:30;16813:34;16793:18;;;16786:62;-1:-1:-1;;;16864:18:1;;;16857:36;16910:19;;6503:73:0::1;16533:402:1::0;6503:73:0::1;6613:6;::::0;;6592:38:::1;::::0;-1:-1:-1;;;;;6592:38:0;;::::1;::::0;6613:6;::::1;::::0;6592:38:::1;::::0;::::1;6641:6;:17:::0;;-1:-1:-1;;;;;;6641:17:0::1;-1:-1:-1::0;;;;;6641:17:0;;;::::1;::::0;;;::::1;::::0;;6422:244::o;2022:132::-;2080:7;2107:39;2111:1;2114;2107:39;;;;;;;;;;;;;;;;;:3;:39::i;1762:250::-;1820:7;1844:1;1849;1844:6;1840:47;;-1:-1:-1;1874:1:0;1867:8;;1840:47;1899:9;1911:5;1915:1;1911;:5;:::i;:::-;1899:17;-1:-1:-1;1944:1:0;1935:5;1939:1;1899:17;1935:5;:::i;:::-;:10;1927:56;;;;-1:-1:-1;;;1927:56:0;;17142:2:1;1927:56:0;;;17124:21:1;17181:2;17161:18;;;17154:30;17220:34;17200:18;;;17193:62;-1:-1:-1;;;17271:18:1;;;17264:31;17312:19;;1927:56:0;16940:397:1;1229:181:0;1287:7;;1319:5;1323:1;1319;:5;:::i;:::-;1307:17;;1348:1;1343;:6;;1335:46;;;;-1:-1:-1;;;1335:46:0;;17544:2:1;1335:46:0;;;17526:21:1;17583:2;17563:18;;;17556:30;17622:29;17602:18;;;17595:57;17669:18;;1335:46:0;17342:351:1;22521:337:0;-1:-1:-1;;;;;22614:19:0;;22606:68;;;;-1:-1:-1;;;22606:68:0;;17900:2:1;22606:68:0;;;17882:21:1;17939:2;17919:18;;;17912:30;17978:34;17958:18;;;17951:62;-1:-1:-1;;;18029:18:1;;;18022:34;18073:19;;22606:68:0;17698:400:1;22606:68:0;-1:-1:-1;;;;;22693:21:0;;22685:68;;;;-1:-1:-1;;;22685:68:0;;18305:2:1;22685:68:0;;;18287:21:1;18344:2;18324:18;;;18317:30;18383:34;18363:18;;;18356:62;-1:-1:-1;;;18434:18:1;;;18427:32;18476:19;;22685:68:0;18103:398:1;22685:68:0;-1:-1:-1;;;;;22766:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22818:32;;160:25:1;;;22818:32:0;;133:18:1;22818:32:0;;;;;;;22521:337;;;:::o;22866:1987::-;-1:-1:-1;;;;;22988:18:0;;22980:68;;;;-1:-1:-1;;;22980:68:0;;18708:2:1;22980:68:0;;;18690:21:1;18747:2;18727:18;;;18720:30;18786:34;18766:18;;;18759:62;-1:-1:-1;;;18837:18:1;;;18830:35;18882:19;;22980:68:0;18506:401:1;22980:68:0;-1:-1:-1;;;;;23067:16:0;;23059:64;;;;-1:-1:-1;;;23059:64:0;;19114:2:1;23059:64:0;;;19096:21:1;19153:2;19133:18;;;19126:30;19192:34;19172:18;;;19165:62;-1:-1:-1;;;19243:18:1;;;19236:33;19286:19;;23059:64:0;18912:399:1;23059:64:0;23151:1;23142:6;:10;23134:64;;;;-1:-1:-1;;;23134:64:0;;19518:2:1;23134:64:0;;;19500:21:1;19557:2;19537:18;;;19530:30;19596:34;19576:18;;;19569:62;-1:-1:-1;;;19647:18:1;;;19640:39;19696:19;;23134:64:0;19316:405:1;23134:64:0;-1:-1:-1;;;;;23218:13:0;;;;;;:9;:13;;;;;;;;23217:14;23209:50;;;;-1:-1:-1;;;23209:50:0;;19928:2:1;23209:50:0;;;19910:21:1;19967:2;19947:18;;;19940:30;-1:-1:-1;;;19986:18:1;;;19979:53;20049:18;;23209:50:0;19726:347:1;23209:50:0;-1:-1:-1;;;;;23279:15:0;;;;;;:9;:15;;;;;;;;23278:16;23270:52;;;;-1:-1:-1;;;23270:52:0;;19928:2:1;23270:52:0;;;19910:21:1;19967:2;19947:18;;;19940:30;-1:-1:-1;;;19986:18:1;;;19979:53;20049:18;;23270:52:0;19726:347:1;23270:52:0;5963:7;5990:6;-1:-1:-1;;;;;23337:14:0;;;5990:6;;23337:14;;;;:30;;-1:-1:-1;5963:7:0;5990:6;-1:-1:-1;;;;;23355:12:0;;;5990:6;;23355:12;;23337:30;23333:84;;;23377:11;;-1:-1:-1;;;23377:11:0;;;;23369:48;;;;-1:-1:-1;;;23369:48:0;;20280:2:1;23369:48:0;;;20262:21:1;20319:2;20299:18;;;20292:30;20358:26;20338:18;;;20331:54;20402:18;;23369:48:0;20078:348:1;23369:48:0;23556:13;;23479:12;;-1:-1:-1;;;;;23550:19:0;;;23556:13;;23550:19;;:40;;-1:-1:-1;23577:13:0;;-1:-1:-1;;;;;23573:17:0;;;23577:13;;23573:17;23550:40;23549:99;;;;-1:-1:-1;;;;;;23597:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23625:22:0;;;;;;:18;:22;;;;;;;;23597:50;23595:53;23549:99;23544:148;;;-1:-1:-1;23676:4:0;23544:148;23718:1;23707:10;;:12;:59;;;;-1:-1:-1;;;;;;23725:22:0;;;;;;:18;:22;;;;;;;;23724:23;:41;;;;-1:-1:-1;5963:7:0;5990:6;-1:-1:-1;;;;;23751:14:0;;;5990:6;;23751:14;;23724:41;23707:106;;;;;23800:12;23786:10;;23773;;:23;;;;:::i;:::-;23772:40;23770:43;23707:106;23704:247;;;23864:15;;23849:13;23859:2;23849:9;:13::i;:::-;23841:21;;:6;:21;:::i;:::-;:38;;23833:106;;;;-1:-1:-1;;;23833:106:0;;20633:2:1;23833:106:0;;;20615:21:1;20672:2;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;-1:-1:-1;;;20762:18:1;;;20755:32;20804:19;;23833:106:0;20431:398:1;23833:106:0;23979:8;;23963:15;:24;24023:10;;:12;;;;:56;;;24067:12;24053:10;;24040;;:23;;;;:::i;:::-;24039:40;24023:56;24020:109;;;-1:-1:-1;;;;;24099:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;24099:18:0;24113:4;24099:18;;;24020:109;24144:14;;-1:-1:-1;;;24144:14:0;;;;24141:278;;;24178:11;;-1:-1:-1;;;24178:11:0;;;;:36;;;;-1:-1:-1;24201:13:0;;-1:-1:-1;;;;;24193:21:0;;;24201:13;;24193:21;24178:36;24175:105;;;24262:1;24246:15;:17;24175:105;24298:11;;-1:-1:-1;;;24298:11:0;;;;:34;;;;-1:-1:-1;24319:13:0;;-1:-1:-1;;;;;24313:19:0;;;24319:13;;24313:19;24298:34;24295:113;;;24383:8;;24381:10;;:1;:10;:::i;:::-;24365:15;:26;24295:113;24452:6;;-1:-1:-1;;;24452:6:0;;;;24451:7;:22;;;;-1:-1:-1;24462:11:0;;-1:-1:-1;;;24462:11:0;;;;24451:22;:45;;;;-1:-1:-1;24483:13:0;;-1:-1:-1;;;;;24477:19:0;;;24483:13;;24477:19;24451:45;24447:350;;;24521:28;24552:24;24570:4;24552:9;:24::i;:::-;24521:55;;24630:13;;24608:20;:35;24605:169;;-1:-1:-1;24690:13:0;;24726:32;24690:13;24726:10;:32::i;:::-;24498:299;24447:350;24807:38;24822:4;24827:2;24830:6;24837:7;24807:14;:38::i;1562:192::-;1648:7;1684:12;1676:6;;;;1668:29;;;;-1:-1:-1;;;1668:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1708:9:0;1720:5;1724:1;1720;:5;:::i;:::-;1708:17;1562:192;-1:-1:-1;;;;;1562:192:0:o;30899:163::-;30940:7;30961:15;30978;30997:19;:17;:19::i;:::-;30960:56;;-1:-1:-1;30960:56:0;-1:-1:-1;31034:20:0;30960:56;;31034:11;:20::i;:::-;31027:27;;;;30899:163;:::o;29752:404::-;29811:7;29820;29829;29838;29847;29856;29877:23;29902:12;29916:13;29933:20;29945:7;29933:11;:20::i;:::-;29876:77;;;;;;29965:15;29982:23;30007:12;30023:45;30035:7;30044:4;30050:5;30057:10;:8;:10::i;:::-;30023:11;:45::i;:::-;29964:104;;;;-1:-1:-1;29964:104:0;;-1:-1:-1;30119:15:0;;-1:-1:-1;30136:4:0;;-1:-1:-1;30142:5:0;;-1:-1:-1;29752:404:0;;-1:-1:-1;;;;;29752:404:0:o;1418:136::-;1476:7;1503:43;1507:1;1510;1503:43;;;;;;;;;;;;;;;;;:3;:43::i;2162:278::-;2248:7;2283:12;2276:5;2268:28;;;;-1:-1:-1;;;2268:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2307:9:0;2319:5;2323:1;2319;:5;:::i;24861:701::-;16755:6;:13;;-1:-1:-1;;;;16755:13:0;-1:-1:-1;;;16755:13:0;;;24942:38:::1;24959:20:::0;24942:16:::1;:38::i;:::-;25069:8;::::0;25131:10:::1;::::0;25013:21:::1;::::0;25069:8;24993:17:::1;::::0;25117:42:::1;::::0;25069:8;;25117:25:::1;::::0;25013:21;;25117:13:::1;:25::i;:::-;:29:::0;::::1;:42::i;:::-;25090:69;;25170:26;25199:68;25245:11;25199:27;25213:12;;25199:9;:13;;:27;;;;:::i;:68::-;25170:97:::0;-1:-1:-1;25362:21:0::1;25397:22:::0;;25394:161:::1;;25468:15;::::0;25436:48:::1;::::0;25449:18;;-1:-1:-1;;;;;25468:15:0::1;25436:12;:48::i;:::-;25529:13;::::0;25499:44:::1;::::0;25512:16;;-1:-1:-1;;;;;25529:13:0::1;25499:12;:44::i;:::-;-1:-1:-1::0;;16791:6:0;:14;;-1:-1:-1;;;;16791:14:0;;;-1:-1:-1;;;;24861:701:0:o;26378:943::-;26518:13;;26568:15;;26598:7;26594:88;;26637:1;26621:13;:17;;;26653:15;:17;26594:88;-1:-1:-1;;;;;26706:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;26730:22:0;;;;;;:11;:22;;;;;;;;26729:23;26706:46;26702:467;;;26769:48;26791:6;26799:9;26810:6;26769:21;:48::i;:::-;26702:467;;;-1:-1:-1;;;;;26840:19:0;;;;;;:11;:19;;;;;;;;26839:20;:46;;;;-1:-1:-1;;;;;;26863:22:0;;;;;;:11;:22;;;;;;;;26839:46;26835:334;;;26902:46;26922:6;26930:9;26941:6;26902:19;:46::i;26835:334::-;-1:-1:-1;;;;;26970:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;26993:22:0;;;;;;:11;:22;;;;;;;;26970:45;26966:203;;;27032:48;27054:6;27062:9;27073:6;27032:21;:48::i;26966:203::-;27113:44;27131:6;27139:9;27150:6;27113:17;:44::i;:::-;27193:7;27189:125;;27216:13;:38;;;;27269:15;:33;-1:-1:-1;;;;26378:943:0:o;31070:561::-;31167:7;;31203;;31120;;;;;31227:289;31251:9;:16;31247:20;;31227:289;;;31317:7;31293;:21;31301:9;31311:1;31301:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31301:12:0;31293:21;;;;;;;;;;;;;:31;;:66;;;31352:7;31328;:21;31336:9;31346:1;31336:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31336:12:0;31328:21;;;;;;;;;;;;;:31;31293:66;31289:97;;;31369:7;;31378;;31361:25;;;;;;;31070:561;;:::o;31289:97::-;31411:34;31423:7;:21;31431:9;31441:1;31431:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31431:12:0;31423:21;;;;;;;;;;;;;31411:7;;:11;:34::i;:::-;31401:44;;31470:34;31482:7;:21;31490:9;31500:1;31490:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31490:12:0;31482:21;;;;;;;;;;;;;31470:7;;:11;:34::i;:::-;31460:44;-1:-1:-1;31269:3:0;;;;:::i;:::-;;;;31227:289;;;-1:-1:-1;31552:7:0;;31540;;:20;;:11;:20::i;:::-;31530:7;:30;31526:61;;;31570:7;;31579;;31562:25;;;;;;31070:561;;:::o;31526:61::-;31606:7;;31615;;-1:-1:-1;31070:561:0;-1:-1:-1;31070:561:0:o;30164:310::-;30224:7;30233;30242;30262:12;30277:24;30293:7;30277:15;:24::i;:::-;30262:39;;30312:13;30328:25;30345:7;30328:16;:25::i;:::-;30312:41;-1:-1:-1;30364:23:0;30390:28;30312:41;30390:17;:7;30402:4;30390:11;:17::i;:::-;:21;;:28::i;:::-;30364:54;30454:4;;-1:-1:-1;30460:5:0;;-1:-1:-1;30164:310:0;;-1:-1:-1;;;30164:310:0:o;30482:409::-;30592:7;;;;30648:24;:7;30660:11;30648;:24::i;:::-;30630:42;-1:-1:-1;30683:12:0;30698:21;:4;30707:11;30698:8;:21::i;:::-;30683:36;-1:-1:-1;30730:13:0;30746:22;:5;30756:11;30746:9;:22::i;:::-;30730:38;-1:-1:-1;30779:23:0;30805:28;30730:38;30805:17;:7;30817:4;30805:11;:17::i;:28::-;30852:7;;;;-1:-1:-1;30878:4:0;;-1:-1:-1;30482:409:0;;-1:-1:-1;;;;;;;30482:409:0:o;25704:666::-;25854:16;;;25868:1;25854:16;;;;;;;;25830:21;;25854:16;;;;;;;;;;-1:-1:-1;25854:16:0;25830:40;;25899:4;25881;25886:1;25881:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25881:23:0;;;:7;;;;;;;;;;:23;;;;25925:15;;:22;;;-1:-1:-1;;;25925:22:0;;;;:15;;;;;:20;;:22;;;;;25881:7;;25925:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25915:4;25920:1;25915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25915:32:0;;;:7;;;;;;;;;:32;25992:15;;25960:62;;25977:4;;25992:15;26010:11;25960:8;:62::i;:::-;26061:15;;:240;;-1:-1:-1;;;26061:240:0;;-1:-1:-1;;;;;26061:15:0;;;;:66;;:240;;26142:11;;26061:15;;26212:4;;26239;;26275:15;;26061:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26327:35;26344:11;26357:4;26327:35;;;;;;;:::i;:::-;;;;;;;;25759:611;25704:666;:::o;25574:111::-;25654:23;;-1:-1:-1;;;;;25654:15:0;;;:23;;;;;25670:6;;25654:23;;;;25670:6;25654:15;:23;;;;;;;;;;;;;;;;;;;28403:551;28506:15;28523:23;28548:12;28562:23;28587:12;28601:13;28618:19;28629:7;28618:10;:19::i;:::-;-1:-1:-1;;;;;28666:15:0;;;;;;:7;:15;;;;;;28505:132;;-1:-1:-1;28505:132:0;;-1:-1:-1;28505:132:0;;-1:-1:-1;28505:132:0;-1:-1:-1;28505:132:0;-1:-1:-1;28505:132:0;-1:-1:-1;28666:28:0;;28686:7;28666:19;:28::i;:::-;-1:-1:-1;;;;;28648:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28723:7;:15;;;;:28;;28743:7;28723:19;:28::i;:::-;-1:-1:-1;;;;;28705:15:0;;;;;;;:7;:15;;;;;;:46;;;;28783:18;;;;;;;:39;;28806:15;28783:22;:39::i;:::-;-1:-1:-1;;;;;28762:18:0;;;;;;:7;:18;;;;;:60;28836:16;28846:5;28836:9;:16::i;:::-;28863:23;28875:4;28881;28863:11;:23::i;:::-;28919:9;-1:-1:-1;;;;;28902:44:0;28911:6;-1:-1:-1;;;;;28902:44:0;;28930:15;28902:44;;;;160:25:1;;148:2;133:18;;14:177;28902:44:0;;;;;;;;28494:460;;;;;;28403:551;;;:::o;27824:571::-;27925:15;27942:23;27967:12;27981:23;28006:12;28020:13;28037:19;28048:7;28037:10;:19::i;:::-;-1:-1:-1;;;;;28085:15:0;;;;;;:7;:15;;;;;;27924:132;;-1:-1:-1;27924:132:0;;-1:-1:-1;27924:132:0;;-1:-1:-1;27924:132:0;-1:-1:-1;27924:132:0;-1:-1:-1;27924:132:0;-1:-1:-1;28085:28:0;;27924:132;28085:19;:28::i;:::-;-1:-1:-1;;;;;28067:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28145:18;;;;;:7;:18;;;;;:39;;28168:15;28145:22;:39::i;:::-;-1:-1:-1;;;;;28124:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28216:7;:18;;;;:39;;28239:15;28216:22;:39::i;28962:627::-;29065:15;29082:23;29107:12;29121:23;29146:12;29160:13;29177:19;29188:7;29177:10;:19::i;:::-;-1:-1:-1;;;;;29225:15:0;;;;;;:7;:15;;;;;;29064:132;;-1:-1:-1;29064:132:0;;-1:-1:-1;29064:132:0;;-1:-1:-1;29064:132:0;-1:-1:-1;29064:132:0;-1:-1:-1;29064:132:0;-1:-1:-1;29225:28:0;;29245:7;29225:19;:28::i;:::-;-1:-1:-1;;;;;29207:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29282:7;:15;;;;:28;;29302:7;29282:19;:28::i;27329:487::-;27428:15;27445:23;27470:12;27484:23;27509:12;27523:13;27540:19;27551:7;27540:10;:19::i;:::-;-1:-1:-1;;;;;27588:15:0;;;;;;:7;:15;;;;;;27427:132;;-1:-1:-1;27427:132:0;;-1:-1:-1;27427:132:0;;-1:-1:-1;27427:132:0;-1:-1:-1;27427:132:0;-1:-1:-1;27427:132:0;-1:-1:-1;27588:28:0;;27427:132;27588:19;:28::i;31900:160::-;31964:7;31991:61;32036:5;31991:26;32003:13;;31991:7;:11;;:26;;;;:::i;32072:163::-;32137:7;32164:63;32211:5;32164:28;32176:15;;32164:7;:11;;:28;;;;:::i;31643:245::-;31696:19;31719:10;:8;:10::i;:::-;31696:33;-1:-1:-1;31740:13:0;31756:22;:5;31696:33;31756:9;:22::i;:::-;31813:4;;-1:-1:-1;;;;;31813:4:0;31805:13;;;;:7;:13;;;;;;31740:38;;-1:-1:-1;31805:24:0;;31740:38;31805:17;:24::i;:::-;31797:4;;;-1:-1:-1;;;;;31797:4:0;;;31789:13;;;;:7;:13;;;;;;;;:40;;;;31864:4;;;;;31856:13;;:7;:13;;;;;:24;;31874:5;31856:17;:24::i;:::-;31848:4;;-1:-1:-1;;;;;31848:4:0;31840:13;;;;:7;:13;;;;;:40;-1:-1:-1;;;31643:245:0:o;29597:147::-;29675:7;;:17;;29687:4;29675:11;:17::i;:::-;29665:7;:27;29716:10;;:20;;29731:4;29716:14;:20::i;:::-;29703:10;:33;-1:-1:-1;;29597:147:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;989:70;934:131;:::o;1070:315::-;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:247::-;1641:6;1694:2;1682:9;1673:7;1669:23;1665:32;1662:52;;;1710:1;1707;1700:12;1662:52;1749:9;1736:23;1768:31;1793:5;1768:31;:::i;2069:367::-;2132:8;2142:6;2196:3;2189:4;2181:6;2177:17;2173:27;2163:55;;2214:1;2211;2204:12;2163:55;-1:-1:-1;2237:20:1;;2280:18;2269:30;;2266:50;;;2312:1;2309;2302:12;2266:50;2349:4;2341:6;2337:17;2325:29;;2409:3;2402:4;2392:6;2389:1;2385:14;2377:6;2373:27;2369:38;2366:47;2363:67;;;2426:1;2423;2416:12;2363:67;2069:367;;;;;:::o;2441:908::-;2572:6;2580;2588;2596;2604;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;:::-;2781:5;-1:-1:-1;2837:2:1;2822:18;;2809:32;2860:18;2890:14;;;2887:34;;;2917:1;2914;2907:12;2887:34;2956:70;3018:7;3009:6;2998:9;2994:22;2956:70;:::i;:::-;3045:8;;-1:-1:-1;2930:96:1;-1:-1:-1;3133:2:1;3118:18;;3105:32;;-1:-1:-1;3149:16:1;;;3146:36;;;3178:1;3175;3168:12;3146:36;;3217:72;3281:7;3270:8;3259:9;3255:24;3217:72;:::i;:::-;2441:908;;;;-1:-1:-1;2441:908:1;;-1:-1:-1;3308:8:1;;3191:98;2441:908;-1:-1:-1;;;2441:908:1:o;3354:456::-;3431:6;3439;3447;3500:2;3488:9;3479:7;3475:23;3471:32;3468:52;;;3516:1;3513;3506:12;3468:52;3555:9;3542:23;3574:31;3599:5;3574:31;:::i;:::-;3624:5;-1:-1:-1;3681:2:1;3666:18;;3653:32;3694:33;3653:32;3694:33;:::i;:::-;3354:456;;3746:7;;-1:-1:-1;;;3800:2:1;3785:18;;;;3772:32;;3354:456::o;3815:401::-;3896:6;3904;3957:2;3945:9;3936:7;3932:23;3928:32;3925:52;;;3973:1;3970;3963:12;3925:52;4012:9;3999:23;4031:31;4056:5;4031:31;:::i;:::-;4081:5;-1:-1:-1;4138:2:1;4123:18;;4110:32;4151:33;4110:32;4151:33;:::i;:::-;4203:7;4193:17;;;3815:401;;;;;:::o;4221:118::-;4307:5;4300:13;4293:21;4286:5;4283:32;4273:60;;4329:1;4326;4319:12;4344:309;4409:6;4417;4470:2;4458:9;4449:7;4445:23;4441:32;4438:52;;;4486:1;4483;4476:12;4438:52;4525:9;4512:23;4544:28;4566:5;4544:28;:::i;4847:640::-;4951:6;4959;4967;4975;5028:2;5016:9;5007:7;5003:23;4999:32;4996:52;;;5044:1;5041;5034:12;4996:52;5083:9;5070:23;5102:31;5127:5;5102:31;:::i;:::-;5152:5;-1:-1:-1;5208:2:1;5193:18;;5180:32;5235:18;5224:30;;5221:50;;;5267:1;5264;5257:12;5221:50;5306:70;5368:7;5359:6;5348:9;5344:22;5306:70;:::i;:::-;4847:640;;5395:8;;-1:-1:-1;5280:96:1;;5477:2;5462:18;5449:32;;4847:640;-1:-1:-1;;;;4847:640:1:o;5492:309::-;5557:6;5565;5618:2;5606:9;5597:7;5593:23;5589:32;5586:52;;;5634:1;5631;5624:12;5586:52;5670:9;5657:23;5647:33;;5730:2;5719:9;5715:18;5702:32;5743:28;5765:5;5743:28;:::i;6014:241::-;6070:6;6123:2;6111:9;6102:7;6098:23;6094:32;6091:52;;;6139:1;6136;6129:12;6091:52;6178:9;6165:23;6197:28;6219:5;6197:28;:::i;6260:566::-;6352:6;6360;6368;6421:2;6409:9;6400:7;6396:23;6392:32;6389:52;;;6437:1;6434;6427:12;6389:52;6477:9;6464:23;6510:18;6502:6;6499:30;6496:50;;;6542:1;6539;6532:12;6496:50;6581:70;6643:7;6634:6;6623:9;6619:22;6581:70;:::i;:::-;6670:8;;-1:-1:-1;6555:96:1;-1:-1:-1;;6755:2:1;6740:18;;6727:32;6768:28;6727:32;6768:28;:::i;:::-;6815:5;6805:15;;;6260:566;;;;;:::o;6831:385::-;6917:6;6925;6933;6941;6994:3;6982:9;6973:7;6969:23;6965:33;6962:53;;;7011:1;7008;7001:12;6962:53;-1:-1:-1;;7034:23:1;;;7104:2;7089:18;;7076:32;;-1:-1:-1;7155:2:1;7140:18;;7127:32;;7206:2;7191:18;7178:32;;-1:-1:-1;6831:385:1;-1:-1:-1;6831:385:1:o;7221:437::-;7307:6;7315;7368:2;7356:9;7347:7;7343:23;7339:32;7336:52;;;7384:1;7381;7374:12;7336:52;7424:9;7411:23;7457:18;7449:6;7446:30;7443:50;;;7489:1;7486;7479:12;7443:50;7528:70;7590:7;7581:6;7570:9;7566:22;7528:70;:::i;:::-;7617:8;;7502:96;;-1:-1:-1;7221:437:1;-1:-1:-1;;;;7221:437:1:o;8147:248::-;8215:6;8223;8276:2;8264:9;8255:7;8251:23;8247:32;8244:52;;;8292:1;8289;8282:12;8244:52;-1:-1:-1;;8315:23:1;;;8385:2;8370:18;;;8357:32;;-1:-1:-1;8147:248:1:o;8793:380::-;8872:1;8868:12;;;;8915;;;8936:61;;8990:4;8982:6;8978:17;8968:27;;8936:61;9043:2;9035:6;9032:14;9012:18;9009:38;9006:161;;9089:10;9084:3;9080:20;9077:1;9070:31;9124:4;9121:1;9114:15;9152:4;9149:1;9142:15;9006:161;;8793:380;;;:::o;9178:356::-;9380:2;9362:21;;;9399:18;;;9392:30;9458:34;9453:2;9438:18;;9431:62;9525:2;9510:18;;9178:356::o;10362:127::-;10423:10;10418:3;10414:20;10411:1;10404:31;10454:4;10451:1;10444:15;10478:4;10475:1;10468:15;10494:422;10583:1;10626:5;10583:1;10640:270;10661:7;10651:8;10648:21;10640:270;;;10720:4;10716:1;10712:6;10708:17;10702:4;10699:27;10696:53;;;10729:18;;:::i;:::-;10779:7;10769:8;10765:22;10762:55;;;10799:16;;;;10762:55;10878:22;;;;10838:15;;;;10640:270;;;10644:3;10494:422;;;;;:::o;10921:806::-;10970:5;11000:8;10990:80;;-1:-1:-1;11041:1:1;11055:5;;10990:80;11089:4;11079:76;;-1:-1:-1;11126:1:1;11140:5;;11079:76;11171:4;11189:1;11184:59;;;;11257:1;11252:130;;;;11164:218;;11184:59;11214:1;11205:10;;11228:5;;;11252:130;11289:3;11279:8;11276:17;11273:43;;;11296:18;;:::i;:::-;-1:-1:-1;;11352:1:1;11338:16;;11367:5;;11164:218;;11466:2;11456:8;11453:16;11447:3;11441:4;11438:13;11434:36;11428:2;11418:8;11415:16;11410:2;11404:4;11401:12;11397:35;11394:77;11391:159;;;-1:-1:-1;11503:19:1;;;11535:5;;11391:159;11582:34;11607:8;11601:4;11582:34;:::i;:::-;11652:6;11648:1;11644:6;11640:19;11631:7;11628:32;11625:58;;;11663:18;;:::i;:::-;11701:20;;10921:806;-1:-1:-1;;;10921:806:1:o;11732:140::-;11790:5;11819:47;11860:4;11850:8;11846:19;11840:4;11819:47;:::i;11877:127::-;11938:10;11933:3;11929:20;11926:1;11919:31;11969:4;11966:1;11959:15;11993:4;11990:1;11983:15;12009:168;12082:9;;;12113;;12130:15;;;12124:22;;12110:37;12100:71;;12151:18;;:::i;12182:125::-;12247:9;;;12268:10;;;12265:36;;;12281:18;;:::i;12312:135::-;12351:3;12372:17;;;12369:43;;12392:18;;:::i;:::-;-1:-1:-1;12439:1:1;12428:13;;12312:135::o;12808:184::-;12878:6;12931:2;12919:9;12910:7;12906:23;12902:32;12899:52;;;12947:1;12944;12937:12;12899:52;-1:-1:-1;12970:16:1;;12808:184;-1:-1:-1;12808:184:1:o;13276:245::-;13343:6;13396:2;13384:9;13375:7;13371:23;13367:32;13364:52;;;13412:1;13409;13402:12;13364:52;13444:9;13438:16;13463:28;13485:5;13463:28;:::i;14708:128::-;14775:9;;;14796:11;;;14793:37;;;14810:18;;:::i;14841:127::-;14902:10;14897:3;14893:20;14890:1;14883:31;14933:4;14930:1;14923:15;14957:4;14954:1;14947:15;15746:217;15786:1;15812;15802:132;;15856:10;15851:3;15847:20;15844:1;15837:31;15891:4;15888:1;15881:15;15919:4;15916:1;15909:15;15802:132;-1:-1:-1;15948:9:1;;15746:217::o;15968:251::-;16038:6;16091:2;16079:9;16070:7;16066:23;16062:32;16059:52;;;16107:1;16104;16097:12;16059:52;16139:9;16133:16;16158:31;16183:5;16158:31;:::i;20966:461::-;21019:3;21057:5;21051:12;21084:6;21079:3;21072:19;21110:4;21139:2;21134:3;21130:12;21123:19;;21176:2;21169:5;21165:14;21197:1;21207:195;21221:6;21218:1;21215:13;21207:195;;;21286:13;;-1:-1:-1;;;;;21282:39:1;21270:52;;21342:12;;;;21377:15;;;;21318:1;21236:9;21207:195;;;-1:-1:-1;21418:3:1;;20966:461;-1:-1:-1;;;;;20966:461:1:o;21432:582::-;21731:6;21720:9;21713:25;21774:6;21769:2;21758:9;21754:18;21747:34;21817:3;21812:2;21801:9;21797:18;21790:31;21694:4;21838:57;21890:3;21879:9;21875:19;21867:6;21838:57;:::i;:::-;-1:-1:-1;;;;;21931:32:1;;;;21926:2;21911:18;;21904:60;-1:-1:-1;21995:3:1;21980:19;21973:35;21830:65;21432:582;-1:-1:-1;;;21432:582:1:o;22019:332::-;22226:6;22215:9;22208:25;22269:2;22264;22253:9;22249:18;22242:30;22189:4;22289:56;22341:2;22330:9;22326:18;22318:6;22289:56;:::i;:::-;22281:64;22019:332;-1:-1:-1;;;;22019:332:1:o

Swarm Source

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