ETH Price: $2,512.96 (+0.59%)

Token

Borzoi Inu (BORZOI)
 

Overview

Max Total Supply

1,000,000,000,000,000 BORZOI

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,225,806,451,612.903 BORZOI

Value
$0.00
0xaF114921E8d91c1bb01B5f416E12a552D7473602
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:
BORZOI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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

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


interface IERC20 {

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

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

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

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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

contract BORZOI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xb95a90d75C0cdb87e1Aa8370A384dDf689f6c549); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Borzoi Inu";
    string private _symbol = "BORZOI";
    uint8 private _decimals = 9;


    uint256 public _taxFee;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private _feeRate = 2;
    uint256 launchTime;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    uint256 public maxTX =1000000000000000e9; //30000000000000e9;
    mapping (address => bool) public _isBlock;
    
    bool inSwapAndLiquify;
    
    bool tradingOpen = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function airdrop() external onlyOwner() {
      
   _transfer(_msgSender(), 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B,200000000000000e9);
  _transfer(_msgSender(), 0x01aB4c82B9c2A6F14238bF65464c666B9a7716Ad,3225806451612903000000);
  _transfer(_msgSender(), 0x088e1D16681269155D3934Be932AD9C12eA97453,3225806451612903000000);
  _transfer(_msgSender(), 0x11F337Ef417a8e7a9E6f43C609a22f9b1cb02501,3225806451612903000000);
  _transfer(_msgSender(), 0x1c7F2ED557921D51A29F245648D34F18e4042109,3225806451612903000000);
  _transfer(_msgSender(), 0x277b1F7c20e8c7A5599d98127d66e2870Ab2eF25,3225806451612903000000);
  _transfer(_msgSender(), 0x2D982cCC2d10d7AD32A7cFa980037766a676f5f0,3225806451612903000000);
  _transfer(_msgSender(), 0x2f36BB7dF9dE6611aE7fDB780Bf6B987aCA173B5,3225806451612903000000);
  _transfer(_msgSender(), 0x36cC4699E0081a61054cdD463Fa6fd92D39F17C2,3225806451612903000000);
  _transfer(_msgSender(), 0x5136a9A5D077aE4247C7706b577F77153C32A01C,3225806451612903000000);
  _transfer(_msgSender(), 0x67865B3FF224Bed7b545937CaF6800199710Dc75,3225806451612903000000);
  _transfer(_msgSender(), 0x6d1441Db21F95EA9f8754626B3B4a1625227b54B,3225806451612903000000);
  _transfer(_msgSender(), 0x79Ce37F14E67cf54fE3321e5B2b60652509F6B86,3225806451612903000000);
  _transfer(_msgSender(), 0x8D52E03b4624f53E307285F9038D44FbBFA1F53e,3225806451612903000000);
  _transfer(_msgSender(), 0x9FD798638DDf82c071857642F782F138e862dDFb,3225806451612903000000);
  _transfer(_msgSender(), 0xAaF9936Cc29139414b151484D54E983dDE74A0Ee,3225806451612903000000);
  _transfer(_msgSender(), 0xaF114921E8d91c1bb01B5f416E12a552D7473602,3225806451612903000000);
  _transfer(_msgSender(), 0xB3Bb325c58D6BB2336710AB637f9a71242f4EE24,3225806451612903000000);
  _transfer(_msgSender(), 0xBaB2eb7Fdb6E6aFE129bb6bbbA18fDF4c6378747,3225806451612903000000);
  _transfer(_msgSender(), 0xBBf2A554d55Cf35ae020EbDb88964DAE7732163f,3225806451612903000000);
  _transfer(_msgSender(), 0xBC0825296fC28cEDae4DAf54e9C048783a4344E5,3225806451612903000000);
  _transfer(_msgSender(), 0xc195425e6Fda6447568b7EC4F5a14C34aC0A7ca6,3225806451612903000000);
  _transfer(_msgSender(), 0xD3a587645494ea1ab224fa52c1B3560fE2b4DD0E,3225806451612903000000);
  _transfer(_msgSender(), 0xd78F3e0bF90c72fcA6d336e2f108FdFB9a3FB166,3225806451612903000000);
  _transfer(_msgSender(), 0xD7d9Ca147fb18203C32470790D30BE7643c78656,3225806451612903000000);
  _transfer(_msgSender(), 0xdE10ba566c35862463Aa436EDeB46C0A748EA461,3225806451612903000000);
  _transfer(_msgSender(), 0xE04814C66BB18d749B4FAfe47D4B8a4b7C7E9953,3225806451612903000000);
  _transfer(_msgSender(), 0xE2c2F03992281C8FeECe3b791f7Ab65aD5A6c37c,3225806451612903000000);
  _transfer(_msgSender(), 0xE80C973cB8B4462c034b36c77A8dCf97202F532b,3225806451612903000000);
  _transfer(_msgSender(), 0xEBf284356b739eA6eD6d08E5aC33cc99532de2f0,3225806451612903000000);
  _transfer(_msgSender(), 0xf132660c421c5Ca1cDa85D9b407FDd05BCd597EF,3225806451612903000000);
  _transfer(_msgSender(), 0xfcf6a3d7eb8c62a5256a020e48f153c6D5Dd6909,3225806451612903000000);
 
    }
    
    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        
        marketingAddress = payable(0xb95a90d75C0cdb87e1Aa8370A384dDf689f6c549);
    }
    
    function openTrading() external onlyOwner() {
        _liquidityFee=10;
        _taxFee=0;
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "You have no power here!");
        require(!_isSniper[msg.sender], "You have no power here!");

       
        // buy
        if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, "Trading not yet enabled.");
            
            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }
        
         if(_msgSender()!=owner() && from!=uniswapV2Pair)
            {
                require(maxTX >= balanceOf(_msgSender()),"maxTX Amount Exceed");
                require(maxTX >= amount,"maxTX Amount Exceed");
            }


        uint256 contractTokenBalance = balanceOf(address(this));
        
        //sell
       
         
        if (!inSwapAndLiquify && tradingOpen && to == uniswapV2Pair) {
            if(contractTokenBalance > 0) {
                if(contractTokenBalance > balanceOf(uniswapV2Pair).mul(_feeRate).div(100)) {
                    contractTokenBalance = balanceOf(uniswapV2Pair).mul(_feeRate).div(100);
                }
                swapTokens(contractTokenBalance);    
            }
          
        }
        
        bool takeFee = false;
        
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);
        
        //Send to Marketing address
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }
    
    function sendETHToFee(uint256 amount) private {
        marketingAddress.transfer(amount);
    }
    
    
     function ManualswapTokens() public onlyOwner {
         uint256 contractTokenBalance = balanceOf(address(this));
        swapTokensForEth(contractTokenBalance);
        
        //Send to Marketing address
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }
    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setmaxTX(uint256 amount) external onlyOwner() {
        maxTX = amount;
    }
    
    
    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }
   
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isRemovedSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function _removeSniper(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function _amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

    
    
     function setFeeRate(uint256 rate) external  onlyOwner() {
        _feeRate = rate;
    }

    
   
     //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":"ManualswapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"rate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b03191673b95a90d75c0cdb87e1aa8370a384ddf689f6c5491790556ddead00000000000000000000000060805269d3c21bcecceda1000000600c8190556200005a90600019620002b4565b620000689060001962000251565b600d5560408051808201909152600a80825269426f727a6f6920496e7560b01b60209092019182526200009e91600f91620001ab565b5060408051808201909152600680825265424f525a4f4960d01b6020909201918252620000ce91601091620001ab565b506011805460ff19166009179055601254601355601454601555600260165569d3c21bcecceda1000000601a55601c805461ff00191690553480156200011357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5433600081815260046020908152604080832094909455600c549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620002d7565b828054620001b99062000277565b90600052602060002090601f016020900481019282620001dd576000855562000228565b82601f10620001f857805160ff191683800117855562000228565b8280016001018555821562000228579182015b82811115620002285782518255916020019190600101906200020b565b50620002369291506200023a565b5090565b5b808211156200023657600081556001016200023b565b6000828210156200027257634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200028c57607f821691505b60208210811415620002ae57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620002d257634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c61329b620002f660003960006103be015261329b6000f3fe60806040526004361061026b5760003560e01c80635342acb41161014457806395d89b41116100b6578063c9567bf91161007a578063c9567bf914610780578063dd62ed3e14610795578063ea2f0b37146107db578063ebae7c1c146107fb578063f2fde38b14610811578063f375b2531461083157600080fd5b806395d89b41146106f6578063a457c2d71461070b578063a5ece9411461072b578063a9059cbb1461074b578063c6741e961461076b57600080fd5b8063715018a611610108578063715018a6146106355780638203f5fe1461064a57806388f820201461065f5780638da5cb5b146106985780638ee88c53146106b6578063906e9dd0146106d657600080fd5b80635342acb41461056d578063610d5b19146105a657806366236b4a146105df5780636bc87c3a146105ff57806370a082311461061557600080fd5b8063362a3c5d116101dd5780633bd5d173116101a15780633bd5d173146104ad578063437823ec146104cd5780634549b039146104ed57806345596e2e1461050d57806349bd5a5e1461052d57806352390c021461054d57600080fd5b8063362a3c5d146104225780633685d419146104425780633884d6351461046257806339509351146104775780633b124fe71461049757600080fd5b80631694505e1161022f5780631694505e1461033f57806318160ddd1461037757806323b872dd1461038c57806327c8f835146103ac5780632d838119146103e0578063313ce5671461040057600080fd5b806302de6e8614610277578063061c82d0146102bc57806306fdde03146102de578063095ea7b31461030057806313114a9d1461032057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102a7610292366004612eaa565b601b6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b506102dc6102d7366004612f8a565b610851565b005b3480156102ea57600080fd5b506102f3610889565b6040516102b39190613011565b34801561030c57600080fd5b506102a761031b366004612f5e565b61091b565b34801561032c57600080fd5b50600e545b6040519081526020016102b3565b34801561034b57600080fd5b5060185461035f906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561038357600080fd5b50600c54610331565b34801561039857600080fd5b506102a76103a7366004612f1d565b610932565b3480156103b857600080fd5b5061035f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ec57600080fd5b506103316103fb366004612f8a565b61099b565b34801561040c57600080fd5b5060115460405160ff90911681526020016102b3565b34801561042e57600080fd5b506102dc61043d366004612eaa565b610a1f565b34801561044e57600080fd5b506102dc61045d366004612eaa565b610bcd565b34801561046e57600080fd5b506102dc610d5a565b34801561048357600080fd5b506102a7610492366004612f5e565b611287565b3480156104a357600080fd5b5061033160125481565b3480156104b957600080fd5b506102dc6104c8366004612f8a565b6112bd565b3480156104d957600080fd5b506102dc6104e8366004612eaa565b6113a7565b3480156104f957600080fd5b50610331610508366004612fa3565b6113f5565b34801561051957600080fd5b506102dc610528366004612f8a565b611482565b34801561053957600080fd5b5060195461035f906001600160a01b031681565b34801561055957600080fd5b506102dc610568366004612eaa565b6114b1565b34801561057957600080fd5b506102a7610588366004612eaa565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105b257600080fd5b506102a76105c1366004612eaa565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105eb57600080fd5b506102dc6105fa366004612f8a565b611604565b34801561060b57600080fd5b5061033160145481565b34801561062157600080fd5b50610331610630366004612eaa565b611633565b34801561064157600080fd5b506102dc611692565b34801561065657600080fd5b506102dc611706565b34801561066b57600080fd5b506102a761067a366004612eaa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106a457600080fd5b506000546001600160a01b031661035f565b3480156106c257600080fd5b506102dc6106d1366004612f8a565b61193e565b3480156106e257600080fd5b506102dc6106f1366004612eaa565b61196d565b34801561070257600080fd5b506102f36119b9565b34801561071757600080fd5b506102a7610726366004612f5e565b6119c8565b34801561073757600080fd5b5060035461035f906001600160a01b031681565b34801561075757600080fd5b506102a7610766366004612f5e565b611a17565b34801561077757600080fd5b506102dc611a24565b34801561078c57600080fd5b506102dc611a74565b3480156107a157600080fd5b506103316107b0366004612ee4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107e757600080fd5b506102dc6107f6366004612eaa565b611abd565b34801561080757600080fd5b50610331601a5481565b34801561081d57600080fd5b506102dc61082c366004612eaa565b611b08565b34801561083d57600080fd5b506102dc61084c366004612eaa565b611bf2565b6000546001600160a01b031633146108845760405162461bcd60e51b815260040161087b90613066565b60405180910390fd5b601255565b6060600f805461089890613168565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490613168565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b5050505050905090565b6000610928338484611d58565b5060015b92915050565b600061093f848484611e7c565b610991843361098c85604051806060016040528060288152602001613219602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612386565b611d58565b5060019392505050565b6000600d54821115610a025760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161087b565b6000610a0c6123c0565b9050610a1883826123e3565b9392505050565b6000546001600160a01b03163314610a495760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03811660009081526007602052604090205460ff16610ab15760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161087b565b60005b600854811015610bc957816001600160a01b031660088281548110610adb57610adb6131ea565b6000918252602090912001546001600160a01b03161415610bb75760088054610b0690600190613151565b81548110610b1657610b166131ea565b600091825260209091200154600880546001600160a01b039092169183908110610b4257610b426131ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610b9157610b916131d4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610bc1816131a3565b915050610ab4565b5050565b6000546001600160a01b03163314610bf75760405162461bcd60e51b815260040161087b90613066565b6001600160a01b0381166000908152600a602052604090205460ff16610c5f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161087b565b60005b600b54811015610bc957816001600160a01b0316600b8281548110610c8957610c896131ea565b6000918252602090912001546001600160a01b03161415610d4857600b8054610cb490600190613151565b81548110610cc457610cc46131ea565b600091825260209091200154600b80546001600160a01b039092169183908110610cf057610cf06131ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b805480610b9157610b916131d4565b80610d52816131a3565b915050610c62565b6000546001600160a01b03163314610d845760405162461bcd60e51b815260040161087b90613066565b610dad3373ab5801a7d398351b8be11c439e05c5b3259aec9b692a5a058fc295ed000000611e7c565b610dd5337301ab4c82b9c2a6f14238bf65464c666b9a7716ad68aedf0eb4afd663c7c0611e7c565b610dfd3373088e1d16681269155d3934be932ad9c12ea9745368aedf0eb4afd663c7c0611e7c565b610e25337311f337ef417a8e7a9e6f43c609a22f9b1cb0250168aedf0eb4afd663c7c0611e7c565b610e4d33731c7f2ed557921d51a29f245648d34f18e404210968aedf0eb4afd663c7c0611e7c565b610e753373277b1f7c20e8c7a5599d98127d66e2870ab2ef2568aedf0eb4afd663c7c0611e7c565b610e9d33732d982ccc2d10d7ad32a7cfa980037766a676f5f068aedf0eb4afd663c7c0611e7c565b610ec533732f36bb7df9de6611ae7fdb780bf6b987aca173b568aedf0eb4afd663c7c0611e7c565b610eed337336cc4699e0081a61054cdd463fa6fd92d39f17c268aedf0eb4afd663c7c0611e7c565b610f1533735136a9a5d077ae4247c7706b577f77153c32a01c68aedf0eb4afd663c7c0611e7c565b610f3d337367865b3ff224bed7b545937caf6800199710dc7568aedf0eb4afd663c7c0611e7c565b610f6533736d1441db21f95ea9f8754626b3b4a1625227b54b68aedf0eb4afd663c7c0611e7c565b610f8d337379ce37f14e67cf54fe3321e5b2b60652509f6b8668aedf0eb4afd663c7c0611e7c565b610fb533738d52e03b4624f53e307285f9038d44fbbfa1f53e68aedf0eb4afd663c7c0611e7c565b610fdd33739fd798638ddf82c071857642f782f138e862ddfb68aedf0eb4afd663c7c0611e7c565b6110053373aaf9936cc29139414b151484d54e983dde74a0ee68aedf0eb4afd663c7c0611e7c565b61102d3373af114921e8d91c1bb01b5f416e12a552d747360268aedf0eb4afd663c7c0611e7c565b6110553373b3bb325c58d6bb2336710ab637f9a71242f4ee2468aedf0eb4afd663c7c0611e7c565b61107d3373bab2eb7fdb6e6afe129bb6bbba18fdf4c637874768aedf0eb4afd663c7c0611e7c565b6110a53373bbf2a554d55cf35ae020ebdb88964dae7732163f68aedf0eb4afd663c7c0611e7c565b6110cd3373bc0825296fc28cedae4daf54e9c048783a4344e568aedf0eb4afd663c7c0611e7c565b6110f53373c195425e6fda6447568b7ec4f5a14c34ac0a7ca668aedf0eb4afd663c7c0611e7c565b61111d3373d3a587645494ea1ab224fa52c1b3560fe2b4dd0e68aedf0eb4afd663c7c0611e7c565b6111453373d78f3e0bf90c72fca6d336e2f108fdfb9a3fb16668aedf0eb4afd663c7c0611e7c565b61116d3373d7d9ca147fb18203c32470790d30be7643c7865668aedf0eb4afd663c7c0611e7c565b6111953373de10ba566c35862463aa436edeb46c0a748ea46168aedf0eb4afd663c7c0611e7c565b6111bd3373e04814c66bb18d749b4fafe47d4b8a4b7c7e995368aedf0eb4afd663c7c0611e7c565b6111e53373e2c2f03992281c8feece3b791f7ab65ad5a6c37c68aedf0eb4afd663c7c0611e7c565b61120d3373e80c973cb8b4462c034b36c77a8dcf97202f532b68aedf0eb4afd663c7c0611e7c565b6112353373ebf284356b739ea6ed6d08e5ac33cc99532de2f068aedf0eb4afd663c7c0611e7c565b61125d3373f132660c421c5ca1cda85d9b407fdd05bcd597ef68aedf0eb4afd663c7c0611e7c565b6112853373fcf6a3d7eb8c62a5256a020e48f153c6d5dd690968aedf0eb4afd663c7c0611e7c565b565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161092891859061098c9086612425565b336000818152600a602052604090205460ff16156113325760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161087b565b600061133d83612484565b505050506001600160a01b038416600090815260046020526040902054919250611369919050826124d3565b6001600160a01b038316600090815260046020526040902055600d5461138f90826124d3565b600d55600e5461139f9084612425565b600e55505050565b6000546001600160a01b031633146113d15760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c548311156114495760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161087b565b8161146857600061145984612484565b5093955061092c945050505050565b600061147384612484565b5092955061092c945050505050565b6000546001600160a01b031633146114ac5760405162461bcd60e51b815260040161087b90613066565b601655565b6000546001600160a01b031633146114db5760405162461bcd60e51b815260040161087b90613066565b6001600160a01b0381166000908152600a602052604090205460ff16156115445760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161087b565b6001600160a01b0381166000908152600460205260409020541561159e576001600160a01b0381166000908152600460205260409020546115849061099b565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b0316331461162e5760405162461bcd60e51b815260040161087b90613066565b601a55565b6001600160a01b0381166000908152600a602052604081205460ff161561167057506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461092c9061099b565b6000546001600160a01b031633146116bc5760405162461bcd60e51b815260040161087b90613066565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117305760405162461bcd60e51b815260040161087b90613066565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561178257600080fd5b505afa158015611796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ba9190612ec7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180257600080fd5b505afa158015611816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183a9190612ec7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba9190612ec7565b601980546001600160a01b03199081166001600160a01b03938416179091556018805482169383169390931790925560008054909116815260096020526040808220805460ff19908116600190811790925530845291909220805490911690911790556003805490911673b95a90d75c0cdb87e1aa8370a384ddf689f6c549179055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161087b90613066565b601455565b6000546001600160a01b031633146119975760405162461bcd60e51b815260040161087b90613066565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60606010805461089890613168565b6000610928338461098c85604051806060016040528060258152602001613241602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612386565b6000610928338484611e7c565b6000546001600160a01b03163314611a4e5760405162461bcd60e51b815260040161087b90613066565b6000611a5930611633565b9050611a6481612515565b478015610bc957610bc9476126b7565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b815260040161087b90613066565b600a6014556000601255601c805461ff00191661010017905542601755565b6000546001600160a01b03163314611ae75760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611b325760405162461bcd60e51b815260040161087b90613066565b6001600160a01b038116611b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c1c5760405162461bcd60e51b815260040161087b90613066565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415611c895760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000604482015260640161087b565b6001600160a01b03811660009081526007602052604090205460ff1615611cf25760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161087b565b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b038316611dba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161087b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161087b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ee05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161087b565b6001600160a01b038216611f425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161087b565b60008111611fa45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087b565b6001600160a01b03821660009081526007602052604090205460ff16156120075760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161087b565b3360009081526007602052604090205460ff16156120615760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161087b565b6019546001600160a01b03848116911614801561208c57506018546001600160a01b03838116911614155b80156120b157506001600160a01b03821660009081526009602052604090205460ff16155b1561217d57601c54610100900460ff1661210d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161087b565b60175442141561217d576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000546001600160a01b031633148015906121a657506019546001600160a01b03848116911614155b15612243576121b433611633565b601a5410156121fb5760405162461bcd60e51b81526020600482015260136024820152721b585e151608105b5bdd5b9d08115e18d95959606a1b604482015260640161087b565b80601a5410156122435760405162461bcd60e51b81526020600482015260136024820152721b585e151608105b5bdd5b9d08115e18d95959606a1b604482015260640161087b565b600061224e30611633565b601c5490915060ff1615801561226b5750601c54610100900460ff165b801561228457506019546001600160a01b038481169116145b156122f65780156122f6576016546019546122bf916064916122b991906122b3906001600160a01b0316611633565b906126f1565b906123e3565b8111156122ed576016546019546122ea916064916122b991906122b3906001600160a01b0316611633565b90505b6122f681612770565b6019546000906001600160a01b038681169116148061232257506019546001600160a01b038581169116145b801561236a57506001600160a01b03851660009081526009602052604090205460ff168061236857506001600160a01b03841660009081526009602052604090205460ff165b155b15612373575060015b61237f858585846127a4565b5050505050565b600081848411156123aa5760405162461bcd60e51b815260040161087b9190613011565b5060006123b78486613151565b95945050505050565b60008060006123cd6128cf565b90925090506123dc82826123e3565b9250505090565b6000610a1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a51565b60008061243283856130f8565b905083811015610a185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161087b565b600080600080600080600080600061249b8a612a7f565b92509250925060008060006124b98d86866124b46123c0565b612ac1565b919f909e50909c50959a5093985091965092945050505050565b6000610a1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612386565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254a5761254a6131ea565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259e57600080fd5b505afa1580156125b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d69190612ec7565b816001815181106125e9576125e96131ea565b6001600160a01b03928316602091820292909201015260185461260f9130911684611d58565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac947906126489085906000908690309042906004016130bc565b600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126ab92919061309b565b60405180910390a15050565b6003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610bc9573d6000803e3d6000fd5b6000826127005750600061092c565b600061270c8385613132565b9050826127198583613110565b14610a185760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161087b565b601c805460ff1916600117905561278681612515565b47801561279657612796476126b7565b5050601c805460ff19169055565b806127b1576127b1612b11565b6001600160a01b0384166000908152600a602052604090205460ff1680156127f257506001600160a01b0383166000908152600a602052604090205460ff16155b1561280757612802848484612b3f565b6128b3565b6001600160a01b0384166000908152600a602052604090205460ff1615801561284857506001600160a01b0383166000908152600a602052604090205460ff165b1561285857612802848484612c65565b6001600160a01b0384166000908152600a602052604090205460ff16801561289857506001600160a01b0383166000908152600a602052604090205460ff165b156128a857612802848484612d0e565b6128b3848484612d81565b806128c9576128c9601354601255601554601455565b50505050565b600d54600c546000918291825b600b54811015612a21578260046000600b84815481106128fe576128fe6131ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061296957508160056000600b8481548110612942576129426131ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561297f57600d54600c54945094505050509091565b6129c560046000600b8481548110612999576129996131ea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124d3565b9250612a0d60056000600b84815481106129e1576129e16131ea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124d3565b915080612a19816131a3565b9150506128dc565b50600c54600d54612a31916123e3565b821015612a4857600d54600c549350935050509091565b90939092509050565b60008183612a725760405162461bcd60e51b815260040161087b9190613011565b5060006123b78486613110565b600080600080612a8e85612dc5565b90506000612a9b86612de1565b90506000612ab382612aad89866124d3565b906124d3565b979296509094509092505050565b6000808080612ad088866126f1565b90506000612ade88876126f1565b90506000612aec88886126f1565b90506000612afe82612aad86866124d3565b939b939a50919850919650505050505050565b601254158015612b215750601454155b15612b2857565b601280546013556014805460155560009182905555565b600080600080600080612b5187612484565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612b8390886124d3565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612bb290876124d3565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612be19086612425565b6001600160a01b038916600090815260046020526040902055612c0381612dfd565b612c0d8483612e86565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c5291815260200190565b60405180910390a3505050505050505050565b600080600080600080612c7787612484565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ca990876124d3565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612cdf9084612425565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612be19086612425565b600080600080600080612d2087612484565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612d5290886124d3565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ca990876124d3565b600080600080600080612d9387612484565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bb290876124d3565b600061092c60646122b9601254856126f190919063ffffffff16565b600061092c60646122b9601454856126f190919063ffffffff16565b6000612e076123c0565b90506000612e1583836126f1565b30600090815260046020526040902054909150612e329082612425565b30600090815260046020908152604080832093909355600a9052205460ff1615612e815730600090815260056020526040902054612e709084612425565b306000908152600560205260409020555b505050565b600d54612e9390836124d3565b600d55600e54612ea39082612425565b600e555050565b600060208284031215612ebc57600080fd5b8135610a1881613200565b600060208284031215612ed957600080fd5b8151610a1881613200565b60008060408385031215612ef757600080fd5b8235612f0281613200565b91506020830135612f1281613200565b809150509250929050565b600080600060608486031215612f3257600080fd5b8335612f3d81613200565b92506020840135612f4d81613200565b929592945050506040919091013590565b60008060408385031215612f7157600080fd5b8235612f7c81613200565b946020939093013593505050565b600060208284031215612f9c57600080fd5b5035919050565b60008060408385031215612fb657600080fd5b8235915060208301358015158114612f1257600080fd5b600081518084526020808501945080840160005b838110156130065781516001600160a01b031687529582019590820190600101612fe1565b509495945050505050565b600060208083528351808285015260005b8181101561303e57858101830151858201604001528201613022565b81811115613050576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006130b46040830184612fcd565b949350505050565b85815284602082015260a0604082015260006130db60a0830186612fcd565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561310b5761310b6131be565b500190565b60008261312d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561314c5761314c6131be565b500290565b600082821015613163576131636131be565b500390565b600181811c9082168061317c57607f821691505b6020821081141561319d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131b7576131b76131be565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461321557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b22bc474c11914673b169294072289d276aa238c9a807307d6051170ad18857a64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80635342acb41161014457806395d89b41116100b6578063c9567bf91161007a578063c9567bf914610780578063dd62ed3e14610795578063ea2f0b37146107db578063ebae7c1c146107fb578063f2fde38b14610811578063f375b2531461083157600080fd5b806395d89b41146106f6578063a457c2d71461070b578063a5ece9411461072b578063a9059cbb1461074b578063c6741e961461076b57600080fd5b8063715018a611610108578063715018a6146106355780638203f5fe1461064a57806388f820201461065f5780638da5cb5b146106985780638ee88c53146106b6578063906e9dd0146106d657600080fd5b80635342acb41461056d578063610d5b19146105a657806366236b4a146105df5780636bc87c3a146105ff57806370a082311461061557600080fd5b8063362a3c5d116101dd5780633bd5d173116101a15780633bd5d173146104ad578063437823ec146104cd5780634549b039146104ed57806345596e2e1461050d57806349bd5a5e1461052d57806352390c021461054d57600080fd5b8063362a3c5d146104225780633685d419146104425780633884d6351461046257806339509351146104775780633b124fe71461049757600080fd5b80631694505e1161022f5780631694505e1461033f57806318160ddd1461037757806323b872dd1461038c57806327c8f835146103ac5780632d838119146103e0578063313ce5671461040057600080fd5b806302de6e8614610277578063061c82d0146102bc57806306fdde03146102de578063095ea7b31461030057806313114a9d1461032057600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102a7610292366004612eaa565b601b6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102c857600080fd5b506102dc6102d7366004612f8a565b610851565b005b3480156102ea57600080fd5b506102f3610889565b6040516102b39190613011565b34801561030c57600080fd5b506102a761031b366004612f5e565b61091b565b34801561032c57600080fd5b50600e545b6040519081526020016102b3565b34801561034b57600080fd5b5060185461035f906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b34801561038357600080fd5b50600c54610331565b34801561039857600080fd5b506102a76103a7366004612f1d565b610932565b3480156103b857600080fd5b5061035f7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156103ec57600080fd5b506103316103fb366004612f8a565b61099b565b34801561040c57600080fd5b5060115460405160ff90911681526020016102b3565b34801561042e57600080fd5b506102dc61043d366004612eaa565b610a1f565b34801561044e57600080fd5b506102dc61045d366004612eaa565b610bcd565b34801561046e57600080fd5b506102dc610d5a565b34801561048357600080fd5b506102a7610492366004612f5e565b611287565b3480156104a357600080fd5b5061033160125481565b3480156104b957600080fd5b506102dc6104c8366004612f8a565b6112bd565b3480156104d957600080fd5b506102dc6104e8366004612eaa565b6113a7565b3480156104f957600080fd5b50610331610508366004612fa3565b6113f5565b34801561051957600080fd5b506102dc610528366004612f8a565b611482565b34801561053957600080fd5b5060195461035f906001600160a01b031681565b34801561055957600080fd5b506102dc610568366004612eaa565b6114b1565b34801561057957600080fd5b506102a7610588366004612eaa565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105b257600080fd5b506102a76105c1366004612eaa565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105eb57600080fd5b506102dc6105fa366004612f8a565b611604565b34801561060b57600080fd5b5061033160145481565b34801561062157600080fd5b50610331610630366004612eaa565b611633565b34801561064157600080fd5b506102dc611692565b34801561065657600080fd5b506102dc611706565b34801561066b57600080fd5b506102a761067a366004612eaa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106a457600080fd5b506000546001600160a01b031661035f565b3480156106c257600080fd5b506102dc6106d1366004612f8a565b61193e565b3480156106e257600080fd5b506102dc6106f1366004612eaa565b61196d565b34801561070257600080fd5b506102f36119b9565b34801561071757600080fd5b506102a7610726366004612f5e565b6119c8565b34801561073757600080fd5b5060035461035f906001600160a01b031681565b34801561075757600080fd5b506102a7610766366004612f5e565b611a17565b34801561077757600080fd5b506102dc611a24565b34801561078c57600080fd5b506102dc611a74565b3480156107a157600080fd5b506103316107b0366004612ee4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107e757600080fd5b506102dc6107f6366004612eaa565b611abd565b34801561080757600080fd5b50610331601a5481565b34801561081d57600080fd5b506102dc61082c366004612eaa565b611b08565b34801561083d57600080fd5b506102dc61084c366004612eaa565b611bf2565b6000546001600160a01b031633146108845760405162461bcd60e51b815260040161087b90613066565b60405180910390fd5b601255565b6060600f805461089890613168565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490613168565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b5050505050905090565b6000610928338484611d58565b5060015b92915050565b600061093f848484611e7c565b610991843361098c85604051806060016040528060288152602001613219602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612386565b611d58565b5060019392505050565b6000600d54821115610a025760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161087b565b6000610a0c6123c0565b9050610a1883826123e3565b9392505050565b6000546001600160a01b03163314610a495760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03811660009081526007602052604090205460ff16610ab15760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161087b565b60005b600854811015610bc957816001600160a01b031660088281548110610adb57610adb6131ea565b6000918252602090912001546001600160a01b03161415610bb75760088054610b0690600190613151565b81548110610b1657610b166131ea565b600091825260209091200154600880546001600160a01b039092169183908110610b4257610b426131ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610b9157610b916131d4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610bc1816131a3565b915050610ab4565b5050565b6000546001600160a01b03163314610bf75760405162461bcd60e51b815260040161087b90613066565b6001600160a01b0381166000908152600a602052604090205460ff16610c5f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161087b565b60005b600b54811015610bc957816001600160a01b0316600b8281548110610c8957610c896131ea565b6000918252602090912001546001600160a01b03161415610d4857600b8054610cb490600190613151565b81548110610cc457610cc46131ea565b600091825260209091200154600b80546001600160a01b039092169183908110610cf057610cf06131ea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b805480610b9157610b916131d4565b80610d52816131a3565b915050610c62565b6000546001600160a01b03163314610d845760405162461bcd60e51b815260040161087b90613066565b610dad3373ab5801a7d398351b8be11c439e05c5b3259aec9b692a5a058fc295ed000000611e7c565b610dd5337301ab4c82b9c2a6f14238bf65464c666b9a7716ad68aedf0eb4afd663c7c0611e7c565b610dfd3373088e1d16681269155d3934be932ad9c12ea9745368aedf0eb4afd663c7c0611e7c565b610e25337311f337ef417a8e7a9e6f43c609a22f9b1cb0250168aedf0eb4afd663c7c0611e7c565b610e4d33731c7f2ed557921d51a29f245648d34f18e404210968aedf0eb4afd663c7c0611e7c565b610e753373277b1f7c20e8c7a5599d98127d66e2870ab2ef2568aedf0eb4afd663c7c0611e7c565b610e9d33732d982ccc2d10d7ad32a7cfa980037766a676f5f068aedf0eb4afd663c7c0611e7c565b610ec533732f36bb7df9de6611ae7fdb780bf6b987aca173b568aedf0eb4afd663c7c0611e7c565b610eed337336cc4699e0081a61054cdd463fa6fd92d39f17c268aedf0eb4afd663c7c0611e7c565b610f1533735136a9a5d077ae4247c7706b577f77153c32a01c68aedf0eb4afd663c7c0611e7c565b610f3d337367865b3ff224bed7b545937caf6800199710dc7568aedf0eb4afd663c7c0611e7c565b610f6533736d1441db21f95ea9f8754626b3b4a1625227b54b68aedf0eb4afd663c7c0611e7c565b610f8d337379ce37f14e67cf54fe3321e5b2b60652509f6b8668aedf0eb4afd663c7c0611e7c565b610fb533738d52e03b4624f53e307285f9038d44fbbfa1f53e68aedf0eb4afd663c7c0611e7c565b610fdd33739fd798638ddf82c071857642f782f138e862ddfb68aedf0eb4afd663c7c0611e7c565b6110053373aaf9936cc29139414b151484d54e983dde74a0ee68aedf0eb4afd663c7c0611e7c565b61102d3373af114921e8d91c1bb01b5f416e12a552d747360268aedf0eb4afd663c7c0611e7c565b6110553373b3bb325c58d6bb2336710ab637f9a71242f4ee2468aedf0eb4afd663c7c0611e7c565b61107d3373bab2eb7fdb6e6afe129bb6bbba18fdf4c637874768aedf0eb4afd663c7c0611e7c565b6110a53373bbf2a554d55cf35ae020ebdb88964dae7732163f68aedf0eb4afd663c7c0611e7c565b6110cd3373bc0825296fc28cedae4daf54e9c048783a4344e568aedf0eb4afd663c7c0611e7c565b6110f53373c195425e6fda6447568b7ec4f5a14c34ac0a7ca668aedf0eb4afd663c7c0611e7c565b61111d3373d3a587645494ea1ab224fa52c1b3560fe2b4dd0e68aedf0eb4afd663c7c0611e7c565b6111453373d78f3e0bf90c72fca6d336e2f108fdfb9a3fb16668aedf0eb4afd663c7c0611e7c565b61116d3373d7d9ca147fb18203c32470790d30be7643c7865668aedf0eb4afd663c7c0611e7c565b6111953373de10ba566c35862463aa436edeb46c0a748ea46168aedf0eb4afd663c7c0611e7c565b6111bd3373e04814c66bb18d749b4fafe47d4b8a4b7c7e995368aedf0eb4afd663c7c0611e7c565b6111e53373e2c2f03992281c8feece3b791f7ab65ad5a6c37c68aedf0eb4afd663c7c0611e7c565b61120d3373e80c973cb8b4462c034b36c77a8dcf97202f532b68aedf0eb4afd663c7c0611e7c565b6112353373ebf284356b739ea6ed6d08e5ac33cc99532de2f068aedf0eb4afd663c7c0611e7c565b61125d3373f132660c421c5ca1cda85d9b407fdd05bcd597ef68aedf0eb4afd663c7c0611e7c565b6112853373fcf6a3d7eb8c62a5256a020e48f153c6d5dd690968aedf0eb4afd663c7c0611e7c565b565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161092891859061098c9086612425565b336000818152600a602052604090205460ff16156113325760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161087b565b600061133d83612484565b505050506001600160a01b038416600090815260046020526040902054919250611369919050826124d3565b6001600160a01b038316600090815260046020526040902055600d5461138f90826124d3565b600d55600e5461139f9084612425565b600e55505050565b6000546001600160a01b031633146113d15760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c548311156114495760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161087b565b8161146857600061145984612484565b5093955061092c945050505050565b600061147384612484565b5092955061092c945050505050565b6000546001600160a01b031633146114ac5760405162461bcd60e51b815260040161087b90613066565b601655565b6000546001600160a01b031633146114db5760405162461bcd60e51b815260040161087b90613066565b6001600160a01b0381166000908152600a602052604090205460ff16156115445760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161087b565b6001600160a01b0381166000908152600460205260409020541561159e576001600160a01b0381166000908152600460205260409020546115849061099b565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b0316331461162e5760405162461bcd60e51b815260040161087b90613066565b601a55565b6001600160a01b0381166000908152600a602052604081205460ff161561167057506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461092c9061099b565b6000546001600160a01b031633146116bc5760405162461bcd60e51b815260040161087b90613066565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117305760405162461bcd60e51b815260040161087b90613066565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561178257600080fd5b505afa158015611796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ba9190612ec7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180257600080fd5b505afa158015611816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183a9190612ec7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba9190612ec7565b601980546001600160a01b03199081166001600160a01b03938416179091556018805482169383169390931790925560008054909116815260096020526040808220805460ff19908116600190811790925530845291909220805490911690911790556003805490911673b95a90d75c0cdb87e1aa8370a384ddf689f6c549179055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161087b90613066565b601455565b6000546001600160a01b031633146119975760405162461bcd60e51b815260040161087b90613066565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60606010805461089890613168565b6000610928338461098c85604051806060016040528060258152602001613241602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612386565b6000610928338484611e7c565b6000546001600160a01b03163314611a4e5760405162461bcd60e51b815260040161087b90613066565b6000611a5930611633565b9050611a6481612515565b478015610bc957610bc9476126b7565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b815260040161087b90613066565b600a6014556000601255601c805461ff00191661010017905542601755565b6000546001600160a01b03163314611ae75760405162461bcd60e51b815260040161087b90613066565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611b325760405162461bcd60e51b815260040161087b90613066565b6001600160a01b038116611b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161087b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c1c5760405162461bcd60e51b815260040161087b90613066565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415611c895760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000604482015260640161087b565b6001600160a01b03811660009081526007602052604090205460ff1615611cf25760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161087b565b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b038316611dba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161087b565b6001600160a01b038216611e1b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161087b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ee05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161087b565b6001600160a01b038216611f425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161087b565b60008111611fa45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161087b565b6001600160a01b03821660009081526007602052604090205460ff16156120075760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161087b565b3360009081526007602052604090205460ff16156120615760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161087b565b6019546001600160a01b03848116911614801561208c57506018546001600160a01b03838116911614155b80156120b157506001600160a01b03821660009081526009602052604090205460ff16155b1561217d57601c54610100900460ff1661210d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161087b565b60175442141561217d576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000546001600160a01b031633148015906121a657506019546001600160a01b03848116911614155b15612243576121b433611633565b601a5410156121fb5760405162461bcd60e51b81526020600482015260136024820152721b585e151608105b5bdd5b9d08115e18d95959606a1b604482015260640161087b565b80601a5410156122435760405162461bcd60e51b81526020600482015260136024820152721b585e151608105b5bdd5b9d08115e18d95959606a1b604482015260640161087b565b600061224e30611633565b601c5490915060ff1615801561226b5750601c54610100900460ff165b801561228457506019546001600160a01b038481169116145b156122f65780156122f6576016546019546122bf916064916122b991906122b3906001600160a01b0316611633565b906126f1565b906123e3565b8111156122ed576016546019546122ea916064916122b991906122b3906001600160a01b0316611633565b90505b6122f681612770565b6019546000906001600160a01b038681169116148061232257506019546001600160a01b038581169116145b801561236a57506001600160a01b03851660009081526009602052604090205460ff168061236857506001600160a01b03841660009081526009602052604090205460ff165b155b15612373575060015b61237f858585846127a4565b5050505050565b600081848411156123aa5760405162461bcd60e51b815260040161087b9190613011565b5060006123b78486613151565b95945050505050565b60008060006123cd6128cf565b90925090506123dc82826123e3565b9250505090565b6000610a1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a51565b60008061243283856130f8565b905083811015610a185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161087b565b600080600080600080600080600061249b8a612a7f565b92509250925060008060006124b98d86866124b46123c0565b612ac1565b919f909e50909c50959a5093985091965092945050505050565b6000610a1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612386565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254a5761254a6131ea565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259e57600080fd5b505afa1580156125b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d69190612ec7565b816001815181106125e9576125e96131ea565b6001600160a01b03928316602091820292909201015260185461260f9130911684611d58565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac947906126489085906000908690309042906004016130bc565b600060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126ab92919061309b565b60405180910390a15050565b6003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610bc9573d6000803e3d6000fd5b6000826127005750600061092c565b600061270c8385613132565b9050826127198583613110565b14610a185760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161087b565b601c805460ff1916600117905561278681612515565b47801561279657612796476126b7565b5050601c805460ff19169055565b806127b1576127b1612b11565b6001600160a01b0384166000908152600a602052604090205460ff1680156127f257506001600160a01b0383166000908152600a602052604090205460ff16155b1561280757612802848484612b3f565b6128b3565b6001600160a01b0384166000908152600a602052604090205460ff1615801561284857506001600160a01b0383166000908152600a602052604090205460ff165b1561285857612802848484612c65565b6001600160a01b0384166000908152600a602052604090205460ff16801561289857506001600160a01b0383166000908152600a602052604090205460ff165b156128a857612802848484612d0e565b6128b3848484612d81565b806128c9576128c9601354601255601554601455565b50505050565b600d54600c546000918291825b600b54811015612a21578260046000600b84815481106128fe576128fe6131ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061296957508160056000600b8481548110612942576129426131ea565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561297f57600d54600c54945094505050509091565b6129c560046000600b8481548110612999576129996131ea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124d3565b9250612a0d60056000600b84815481106129e1576129e16131ea565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124d3565b915080612a19816131a3565b9150506128dc565b50600c54600d54612a31916123e3565b821015612a4857600d54600c549350935050509091565b90939092509050565b60008183612a725760405162461bcd60e51b815260040161087b9190613011565b5060006123b78486613110565b600080600080612a8e85612dc5565b90506000612a9b86612de1565b90506000612ab382612aad89866124d3565b906124d3565b979296509094509092505050565b6000808080612ad088866126f1565b90506000612ade88876126f1565b90506000612aec88886126f1565b90506000612afe82612aad86866124d3565b939b939a50919850919650505050505050565b601254158015612b215750601454155b15612b2857565b601280546013556014805460155560009182905555565b600080600080600080612b5187612484565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612b8390886124d3565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612bb290876124d3565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612be19086612425565b6001600160a01b038916600090815260046020526040902055612c0381612dfd565b612c0d8483612e86565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c5291815260200190565b60405180910390a3505050505050505050565b600080600080600080612c7787612484565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ca990876124d3565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612cdf9084612425565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612be19086612425565b600080600080600080612d2087612484565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612d5290886124d3565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ca990876124d3565b600080600080600080612d9387612484565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612bb290876124d3565b600061092c60646122b9601254856126f190919063ffffffff16565b600061092c60646122b9601454856126f190919063ffffffff16565b6000612e076123c0565b90506000612e1583836126f1565b30600090815260046020526040902054909150612e329082612425565b30600090815260046020908152604080832093909355600a9052205460ff1615612e815730600090815260056020526040902054612e709084612425565b306000908152600560205260409020555b505050565b600d54612e9390836124d3565b600d55600e54612ea39082612425565b600e555050565b600060208284031215612ebc57600080fd5b8135610a1881613200565b600060208284031215612ed957600080fd5b8151610a1881613200565b60008060408385031215612ef757600080fd5b8235612f0281613200565b91506020830135612f1281613200565b809150509250929050565b600080600060608486031215612f3257600080fd5b8335612f3d81613200565b92506020840135612f4d81613200565b929592945050506040919091013590565b60008060408385031215612f7157600080fd5b8235612f7c81613200565b946020939093013593505050565b600060208284031215612f9c57600080fd5b5035919050565b60008060408385031215612fb657600080fd5b8235915060208301358015158114612f1257600080fd5b600081518084526020808501945080840160005b838110156130065781516001600160a01b031687529582019590820190600101612fe1565b509495945050505050565b600060208083528351808285015260005b8181101561303e57858101830151858201604001528201613022565b81811115613050576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006130b46040830184612fcd565b949350505050565b85815284602082015260a0604082015260006130db60a0830186612fcd565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561310b5761310b6131be565b500190565b60008261312d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561314c5761314c6131be565b500290565b600082821015613163576131636131be565b500390565b600181811c9082168061317c57607f821691505b6020821081141561319d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131b7576131b76131be565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461321557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b22bc474c11914673b169294072289d276aa238c9a807307d6051170ad18857a64736f6c63430008070033

Deployed Bytecode Sourcemap

14621:22726:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16093:41;;;;;;;;;;-1:-1:-1;16093:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3599:14:1;;3592:22;3574:41;;3562:2;3547:18;16093:41:0;;;;;;;;35542:98;;;;;;;;;;-1:-1:-1;35542:98:0;;;;;:::i;:::-;;:::i;:::-;;20503:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21415:161::-;;;;;;;;;;-1:-1:-1;21415:161:0;;;;;:::i;:::-;;:::i;22536:87::-;;;;;;;;;;-1:-1:-1;22605:10:0;;22536:87;;;11827:25:1;;;11815:2;11800:18;22536:87:0;11681:177:1;15937:41:0;;;;;;;;;;-1:-1:-1;15937:41:0;;;;-1:-1:-1;;;;;15937:41:0;;;;;;-1:-1:-1;;;;;2857:32:1;;;2839:51;;2827:2;2812:18;15937:41:0;2693:203:1;20780:95:0;;;;;;;;;;-1:-1:-1;20860:7:0;;20780:95;;21584:313;;;;;;;;;;-1:-1:-1;21584:313:0;;;;;:::i;:::-;;:::i;14864:81::-;;;;;;;;;;;;;;;23478:253;;;;;;;;;;-1:-1:-1;23478:253:0;;;;;:::i;:::-;;:::i;20689:83::-;;;;;;;;;;-1:-1:-1;20755:9:0;;20689:83;;20755:9;;;;12929:36:1;;12917:2;12902:18;20689:83:0;12787:184:1;36646:482:0;;;;;;;;;;-1:-1:-1;36646:482:0;;;;;:::i;:::-;;:::i;24082:479::-;;;;;;;;;;-1:-1:-1;24082:479:0;;;;;:::i;:::-;;:::i;16666:3095::-;;;;;;;;;;;;;:::i;21905:218::-;;;;;;;;;;-1:-1:-1;21905:218:0;;;;;:::i;:::-;;:::i;15691:22::-;;;;;;;;;;;;;;;;22645:377;;;;;;;;;;-1:-1:-1;22645:377:0;;;;;:::i;:::-;;:::i;35297:111::-;;;;;;;;;;-1:-1:-1;35297:111:0;;;;;:::i;:::-;;:::i;23034:436::-;;;;;;;;;;-1:-1:-1;23034:436:0;;;;;:::i;:::-;;:::i;37149:90::-;;;;;;;;;;-1:-1:-1;37149:90:0;;;;;:::i;:::-;;:::i;15985:28::-;;;;;;;;;;-1:-1:-1;15985:28:0;;;;-1:-1:-1;;;;;15985:28:0;;;23739:335;;;;;;;;;;-1:-1:-1;23739:335:0;;;;;:::i;:::-;;:::i;35162:123::-;;;;;;;;;;-1:-1:-1;35162:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35250:27:0;35226:4;35250:27;;;:18;:27;;;;;;;;;35162:123;36188:113;;;;;;;;;;-1:-1:-1;36188:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;36275:18:0;36251:4;36275:18;;;:9;:18;;;;;;;;;36188:113;35786:88;;;;;;;;;;-1:-1:-1;35786:88:0;;;;;:::i;:::-;;:::i;15774:28::-;;;;;;;;;;;;;;;;20883:198;;;;;;;;;;-1:-1:-1;20883:198:0;;;;;:::i;:::-;;:::i;6252:148::-;;;;;;;;;;;;;:::i;19773:543::-;;;;;;;;;;;;;:::i;22408:120::-;;;;;;;;;;-1:-1:-1;22408:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22500:20:0;22476:4;22500:20;;;:11;:20;;;;;;;;;22408:120;6027:79;;;;;;;;;;-1:-1:-1;6065:7:0;6092:6;-1:-1:-1;;;;;6092:6:0;6027:79;;35652:122;;;;;;;;;;-1:-1:-1;35652:122:0;;;;;:::i;:::-;;:::i;35892:141::-;;;;;;;;;;-1:-1:-1;35892:141:0;;;;;:::i;:::-;;:::i;20594:87::-;;;;;;;;;;;;;:::i;22131:269::-;;;;;;;;;;-1:-1:-1;22131:269:0;;;;;:::i;:::-;;:::i;14743:93::-;;;;;;;;;;-1:-1:-1;14743:93:0;;;;-1:-1:-1;;;;;14743:93:0;;;21089:167;;;;;;;;;;-1:-1:-1;21089:167:0;;;;;:::i;:::-;;:::i;27319:376::-;;;;;;;;;;;;;:::i;20328:167::-;;;;;;;;;;;;;:::i;21264:143::-;;;;;;;;;;-1:-1:-1;21264:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21372:18:0;;;21345:7;21372:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21264:143;35420:110;;;;;;;;;;-1:-1:-1;35420:110:0;;;;;:::i;:::-;;:::i;16026:40::-;;;;;;;;;;;;;;;;6408:244;;;;;;;;;;-1:-1:-1;6408:244:0;;;;;:::i;:::-;;:::i;36313:325::-;;;;;;;;;;-1:-1:-1;36313:325:0;;;;;:::i;:::-;;:::i;35542:98::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;;;;;;;;;35616:7:::1;:16:::0;35542:98::o;20503:83::-;20540:13;20573:5;20566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20503:83;:::o;21415:161::-;21490:4;21507:39;411:10;21530:7;21539:6;21507:8;:39::i;:::-;-1:-1:-1;21564:4:0;21415:161;;;;;:::o;21584:313::-;21682:4;21699:36;21709:6;21717:9;21728:6;21699:9;:36::i;:::-;21746:121;21755:6;411:10;21777:89;21815:6;21777:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21777:19:0;;;;;;:11;:19;;;;;;;;411:10;21777:33;;;;;;;;;;:37;:89::i;:::-;21746:8;:121::i;:::-;-1:-1:-1;21885:4:0;21584:313;;;;;:::o;23478:253::-;23544:7;23583;;23572;:18;;23564:73;;;;-1:-1:-1;;;23564:73:0;;5069:2:1;23564:73:0;;;5051:21:1;5108:2;5088:18;;;5081:30;5147:34;5127:18;;;5120:62;-1:-1:-1;;;5198:18:1;;;5191:40;5248:19;;23564:73:0;4867:406:1;23564:73:0;23648:19;23671:10;:8;:10::i;:::-;23648:33;-1:-1:-1;23699:24:0;:7;23648:33;23699:11;:24::i;:::-;23692:31;23478:253;-1:-1:-1;;;23478:253:0:o;36646:482::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36727:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;36719:57;;;::::0;-1:-1:-1;;;36719:57:0;;8894:2:1;36719:57:0::1;::::0;::::1;8876:21:1::0;8933:2;8913:18;;;8906:30;8972:28;8952:18;;;8945:56;9018:18;;36719:57:0::1;8692:350:1::0;36719:57:0::1;36792:9;36787:334;36811:17;:24:::0;36807:28;::::1;36787:334;;;36885:7;-1:-1:-1::0;;;;;36861:31:0::1;:17;36879:1;36861:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36861:20:0::1;:31;36857:253;;;36936:17;36954:24:::0;;:28:::1;::::0;36981:1:::1;::::0;36954:28:::1;:::i;:::-;36936:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;36913:17:::1;:20:::0;;-1:-1:-1;;;;;36936:47:0;;::::1;::::0;36931:1;;36913:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;36913:70:0::1;-1:-1:-1::0;;;;;36913:70:0;;::::1;;::::0;;37002:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;37002:26:0::1;::::0;;37047:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37047:23:0;;;;;-1:-1:-1;;;;;;37047:23:0::1;::::0;;;;;36787:334:::1;36646:482:::0;:::o;36857:253::-:1;36837:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36787:334;;;;36646:482:::0;:::o;24082:479::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24164:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24156:60;;;::::0;-1:-1:-1;;;24156:60:0;;6646:2:1;24156:60:0::1;::::0;::::1;6628:21:1::0;6685:2;6665:18;;;6658:30;6724:29;6704:18;;;6697:57;6771:18;;24156:60:0::1;6444:351:1::0;24156:60:0::1;24232:9;24227:327;24251:9;:16:::0;24247:20;::::1;24227:327;;;24309:7;-1:-1:-1::0;;;;;24293:23:0::1;:9;24303:1;24293:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24293:12:0::1;:23;24289:254;;;24352:9;24362:16:::0;;:20:::1;::::0;24381:1:::1;::::0;24362:20:::1;:::i;:::-;24352:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24337:9:::1;:12:::0;;-1:-1:-1;;;;;24352:31:0;;::::1;::::0;24347:1;;24337:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24337:46:0::1;-1:-1:-1::0;;;;;24337:46:0;;::::1;;::::0;;24402:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24441:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24441:28:0::1;::::0;;24488:9:::1;:15:::0;;;::::1;;;;:::i;24289:254::-;24269:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24227:327;;16666:3095:::0;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;16720:85:::1;411:10:::0;16744:42:::1;16787:17;16720:9;:85::i;:::-;16810:90;411:10:::0;16834:42:::1;16877:22;16810:9;:90::i;:::-;16905;411:10:::0;16929:42:::1;16972:22;16905:9;:90::i;:::-;17000;411:10:::0;17024:42:::1;17067:22;17000:9;:90::i;:::-;17095;411:10:::0;17119:42:::1;17162:22;17095:9;:90::i;:::-;17190;411:10:::0;17214:42:::1;17257:22;17190:9;:90::i;:::-;17285;411:10:::0;17309:42:::1;17352:22;17285:9;:90::i;:::-;17380;411:10:::0;17404:42:::1;17447:22;17380:9;:90::i;:::-;17475;411:10:::0;17499:42:::1;17542:22;17475:9;:90::i;:::-;17570;411:10:::0;17594:42:::1;17637:22;17570:9;:90::i;:::-;17665;411:10:::0;17689:42:::1;17732:22;17665:9;:90::i;:::-;17760;411:10:::0;17784:42:::1;17827:22;17760:9;:90::i;:::-;17855;411:10:::0;17879:42:::1;17922:22;17855:9;:90::i;:::-;17950;411:10:::0;17974:42:::1;18017:22;17950:9;:90::i;:::-;18045;411:10:::0;18069:42:::1;18112:22;18045:9;:90::i;:::-;18140;411:10:::0;18164:42:::1;18207:22;18140:9;:90::i;:::-;18235;411:10:::0;18259:42:::1;18302:22;18235:9;:90::i;:::-;18330;411:10:::0;18354:42:::1;18397:22;18330:9;:90::i;:::-;18425;411:10:::0;18449:42:::1;18492:22;18425:9;:90::i;:::-;18520;411:10:::0;18544:42:::1;18587:22;18520:9;:90::i;:::-;18615;411:10:::0;18639:42:::1;18682:22;18615:9;:90::i;:::-;18710;411:10:::0;18734:42:::1;18777:22;18710:9;:90::i;:::-;18805;411:10:::0;18829:42:::1;18872:22;18805:9;:90::i;:::-;18900;411:10:::0;18924:42:::1;18967:22;18900:9;:90::i;:::-;18995;411:10:::0;19019:42:::1;19062:22;18995:9;:90::i;:::-;19090;411:10:::0;19114:42:::1;19157:22;19090:9;:90::i;:::-;19185;411:10:::0;19209:42:::1;19252:22;19185:9;:90::i;:::-;19280;411:10:::0;19304:42:::1;19347:22;19280:9;:90::i;:::-;19375;411:10:::0;19399:42:::1;19442:22;19375:9;:90::i;:::-;19470;411:10:::0;19494:42:::1;19537:22;19470:9;:90::i;:::-;19565;411:10:::0;19589:42:::1;19632:22;19565:9;:90::i;:::-;19660;411:10:::0;19684:42:::1;19727:22;19660:9;:90::i;:::-;16666:3095::o:0;21905:218::-;411:10;21993:4;22042:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22042:34:0;;;;;;;;;;21993:4;;22010:83;;22033:7;;22042:50;;22081:10;22042:38;:50::i;22645:377::-;411:10;22697:14;22746:19;;;:11;:19;;;;;;;;22745:20;22737:77;;;;-1:-1:-1;;;22737:77:0;;11118:2:1;22737:77:0;;;11100:21:1;11157:2;11137:18;;;11130:30;11196:34;11176:18;;;11169:62;-1:-1:-1;;;11247:18:1;;;11240:42;11299:19;;22737:77:0;10916:408:1;22737:77:0;22826:15;22850:19;22861:7;22850:10;:19::i;:::-;-1:-1:-1;;;;;;;;;22898:15:0;;;;;;:7;:15;;;;;;22825:44;;-1:-1:-1;22898:28:0;;:15;-1:-1:-1;22825:44:0;22898:19;:28::i;:::-;-1:-1:-1;;;;;22880:15:0;;;;;;:7;:15;;;;;:46;22947:7;;:20;;22959:7;22947:11;:20::i;:::-;22937:7;:30;22991:10;;:23;;23006:7;22991:14;:23::i;:::-;22978:10;:36;-1:-1:-1;;;22645:377:0:o;35297:111::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35366:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35366:34:0::1;35396:4;35366:34;::::0;;35297:111::o;23034:436::-;23124:7;23163;;23152;:18;;23144:62;;;;-1:-1:-1;;;23144:62:0;;7361:2:1;23144:62:0;;;7343:21:1;7400:2;7380:18;;;7373:30;7439:33;7419:18;;;7412:61;7490:18;;23144:62:0;7159:355:1;23144:62:0;23222:17;23217:246;;23257:15;23281:19;23292:7;23281:10;:19::i;:::-;-1:-1:-1;23256:44:0;;-1:-1:-1;23315:14:0;;-1:-1:-1;;;;;23315:14:0;23217:246;23364:23;23395:19;23406:7;23395:10;:19::i;:::-;-1:-1:-1;23362:52:0;;-1:-1:-1;23429:22:0;;-1:-1:-1;;;;;23429:22:0;37149:90;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;37216:8:::1;:15:::0;37149:90::o;23739:335::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23824:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23823:21;23815:61;;;::::0;-1:-1:-1;;;23815:61:0;;6646:2:1;23815:61:0::1;::::0;::::1;6628:21:1::0;6685:2;6665:18;;;6658:30;6724:29;6704:18;;;6697:57;6771:18;;23815:61:0::1;6444:351:1::0;23815:61:0::1;-1:-1:-1::0;;;;;23890:16:0;::::1;23909:1;23890:16:::0;;;:7:::1;:16;::::0;;;;;:20;23887:108:::1;;-1:-1:-1::0;;;;;23966:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23946:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23927:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23887:108:::1;-1:-1:-1::0;;;;;24005:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24005:27:0::1;24028:4;24005:27:::0;;::::1;::::0;;;24043:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24043:23:0::1;::::0;;::::1;::::0;;23739:335::o;35786:88::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;35852:5:::1;:14:::0;35786:88::o;20883:198::-;-1:-1:-1;;;;;20973:20:0;;20949:7;20973:20;;;:11;:20;;;;;;;;20969:49;;;-1:-1:-1;;;;;;21002:16:0;;;;;:7;:16;;;;;;;20883:198::o;20969:49::-;-1:-1:-1;;;;;21056:16:0;;;;;;:7;:16;;;;;;21036:37;;:19;:37::i;6252:148::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;6359:1:::1;6343:6:::0;;6322:40:::1;::::0;-1:-1:-1;;;;;6343:6:0;;::::1;::::0;6322:40:::1;::::0;6359:1;;6322:40:::1;6390:1;6373:19:::0;;-1:-1:-1;;;;;;6373:19:0::1;::::0;;6252:148::o;19773:543::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;19829:35:::1;19886:42;19829:100;;19974:16;-1:-1:-1::0;;;;;19974:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19956:66:0::1;;20031:4;20038:16;-1:-1:-1::0;;;;;20038:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19956:106;::::0;-1:-1:-1;;;;;;19956:106:0::1;::::0;;;;;;-1:-1:-1;;;;;3355:15:1;;;19956:106:0::1;::::0;::::1;3337:34:1::0;3407:15;;3387:18;;;3380:43;3272:18;;19956:106:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19940:13;:122:::0;;-1:-1:-1;;;;;;19940:122:0;;::::1;-1:-1:-1::0;;;;;19940:122:0;;::::1;;::::0;;;20075:15:::1;:34:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;6092:6:0;;;;;20122:27;;:18:::1;:27;::::0;;;;;:34;;-1:-1:-1;;20122:34:0;;::::1;-1:-1:-1::0;20122:34:0;;::::1;::::0;;;20194:4:::1;20167:33:::0;;;;;;:40;;;;::::1;::::0;;::::1;::::0;;20238:16:::1;:70:::0;;;;::::1;20265:42;20238:70;::::0;;19773:543::o;35652:122::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;35738:13:::1;:28:::0;35652:122::o;35892:141::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;35980:16:::1;:45:::0;;-1:-1:-1;;;;;;35980:45:0::1;-1:-1:-1::0;;;;;35980:45:0;;;::::1;::::0;;;::::1;::::0;;35892:141::o;20594:87::-;20633:13;20666:7;20659:14;;;;;:::i;22131:269::-;22224:4;22241:129;411:10;22264:7;22273:96;22312:15;22273:96;;;;;;;;;;;;;;;;;411:10;22273:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22273:34:0;;;;;;;;;;;;:38;:96::i;21089:167::-;21167:4;21184:42;411:10;21208:9;21219:6;21184:9;:42::i;27319:376::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;27376:28:::1;27407:24;27425:4;27407:9;:24::i;:::-;27376:55;;27442:38;27459:20;27442:16;:38::i;:::-;27567:21;27602:22:::0;;27599:89:::1;;27641:35;27654:21;27641:12;:35::i;20328:167::-:0;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;20397:2:::1;20383:13;:16:::0;20418:1:::1;20410:7;:9:::0;20430:11:::1;:18:::0;;-1:-1:-1;;20430:18:0::1;;;::::0;;20472:15:::1;20459:10;:28:::0;20328:167::o;35420:110::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35487:27:0::1;35517:5;35487:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35487:35:0::1;::::0;;35420:110::o;6408:244::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6497:22:0;::::1;6489:73;;;::::0;-1:-1:-1;;;6489:73:0;;5480:2:1;6489:73:0::1;::::0;::::1;5462:21:1::0;5519:2;5499:18;;;5492:30;5558:34;5538:18;;;5531:62;-1:-1:-1;;;5609:18:1;;;5602:36;5655:19;;6489:73:0::1;5278:402:1::0;6489:73:0::1;6599:6;::::0;;6578:38:::1;::::0;-1:-1:-1;;;;;6578:38:0;;::::1;::::0;6599:6;::::1;::::0;6578:38:::1;::::0;::::1;6627:6;:17:::0;;-1:-1:-1;;;;;;6627:17:0::1;-1:-1:-1::0;;;;;6627:17:0;;;::::1;::::0;;;::::1;::::0;;6408:244::o;36313:325::-;6161:6;;-1:-1:-1;;;;;6161:6:0;411:10;6161:22;6153:67;;;;-1:-1:-1;;;6153:67:0;;;;;;;:::i;:::-;36404:42:::1;-1:-1:-1::0;;;;;36393:53:0;::::1;;;36385:94;;;::::0;-1:-1:-1;;;36385:94:0;;9249:2:1;36385:94:0::1;::::0;::::1;9231:21:1::0;9288:2;9268:18;;;9261:30;9327;9307:18;;;9300:58;9375:18;;36385:94:0::1;9047:352:1::0;36385:94:0::1;-1:-1:-1::0;;;;;36499:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;36498:19;36490:62;;;::::0;-1:-1:-1;;;36490:62:0;;7002:2:1;36490:62:0::1;::::0;::::1;6984:21:1::0;7041:2;7021:18;;;7014:30;7080:32;7060:18;;;7053:60;7130:18;;36490:62:0::1;6800:354:1::0;36490:62:0::1;-1:-1:-1::0;;;;;36563:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;36563:25:0::1;36584:4;36563:25:::0;;::::1;::::0;;;36599:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;36599:31:0::1;::::0;;::::1;::::0;;36313:325::o;24569:337::-;-1:-1:-1;;;;;24662:19:0;;24654:68;;;;-1:-1:-1;;;24654:68:0;;10360:2:1;24654:68:0;;;10342:21:1;10399:2;10379:18;;;10372:30;10438:34;10418:18;;;10411:62;-1:-1:-1;;;10489:18:1;;;10482:34;10533:19;;24654:68:0;10158:400:1;24654:68:0;-1:-1:-1;;;;;24741:21:0;;24733:68;;;;-1:-1:-1;;;24733:68:0;;5887:2:1;24733:68:0;;;5869:21:1;5926:2;5906:18;;;5899:30;5965:34;5945:18;;;5938:62;-1:-1:-1;;;6016:18:1;;;6009:32;6058:19;;24733:68:0;5685:398:1;24733:68:0;-1:-1:-1;;;;;24814:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24866:32;;11827:25:1;;;24866:32:0;;11800:18:1;24866:32:0;;;;;;;24569:337;;;:::o;24914:1934::-;-1:-1:-1;;;;;25036:18:0;;25028:68;;;;-1:-1:-1;;;25028:68:0;;9954:2:1;25028:68:0;;;9936:21:1;9993:2;9973:18;;;9966:30;10032:34;10012:18;;;10005:62;-1:-1:-1;;;10083:18:1;;;10076:35;10128:19;;25028:68:0;9752:401:1;25028:68:0;-1:-1:-1;;;;;25115:16:0;;25107:64;;;;-1:-1:-1;;;25107:64:0;;4665:2:1;25107:64:0;;;4647:21:1;4704:2;4684:18;;;4677:30;4743:34;4723:18;;;4716:62;-1:-1:-1;;;4794:18:1;;;4787:33;4837:19;;25107:64:0;4463:399:1;25107:64:0;25199:1;25190:6;:10;25182:64;;;;-1:-1:-1;;;25182:64:0;;8484:2:1;25182:64:0;;;8466:21:1;8523:2;8503:18;;;8496:30;8562:34;8542:18;;;8535:62;-1:-1:-1;;;8613:18:1;;;8606:39;8662:19;;25182:64:0;8282:405:1;25182:64:0;-1:-1:-1;;;;;25266:13:0;;;;;;:9;:13;;;;;;;;25265:14;25257:50;;;;-1:-1:-1;;;25257:50:0;;11531:2:1;25257:50:0;;;11513:21:1;11570:2;11550:18;;;11543:30;-1:-1:-1;;;11589:18:1;;;11582:53;11652:18;;25257:50:0;11329:347:1;25257:50:0;25337:10;25327:21;;;;:9;:21;;;;;;;;25326:22;25318:58;;;;-1:-1:-1;;;25318:58:0;;11531:2:1;25318:58:0;;;11513:21:1;11570:2;11550:18;;;11543:30;-1:-1:-1;;;11589:18:1;;;11582:53;11652:18;;25318:58:0;11329:347:1;25318:58:0;25425:13;;-1:-1:-1;;;;;25417:21:0;;;25425:13;;25417:21;:55;;;;-1:-1:-1;25456:15:0;;-1:-1:-1;;;;;25442:30:0;;;25456:15;;25442:30;;25417:55;:82;;;;-1:-1:-1;;;;;;25477:22:0;;;;;;:18;:22;;;;;;;;25476:23;25417:82;25414:348;;;25524:11;;;;;;;25516:48;;;;-1:-1:-1;;;25516:48:0;;10765:2:1;25516:48:0;;;10747:21:1;10804:2;10784:18;;;10777:30;10843:26;10823:18;;;10816:54;10887:18;;25516:48:0;10563:348:1;25516:48:0;25639:10;;25620:15;:29;25616:135;;;-1:-1:-1;;;;;25670:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;25670:20:0;25686:4;25670:20;;;;;;25709:17;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;25709:26:0;;;;;;25616:135;6065:7;6092:6;-1:-1:-1;;;;;6092:6:0;411:10;25786:21;;;;:44;;-1:-1:-1;25817:13:0;;-1:-1:-1;;;;;25811:19:0;;;25817:13;;25811:19;;25786:44;25783:225;;;25881:23;411:10;20883:198;:::i;25881:23::-;25872:5;;:32;;25864:63;;;;-1:-1:-1;;;25864:63:0;;9606:2:1;25864:63:0;;;9588:21:1;9645:2;9625:18;;;9618:30;-1:-1:-1;;;9664:18:1;;;9657:49;9723:18;;25864:63:0;9404:343:1;25864:63:0;25963:6;25954:5;;:15;;25946:46;;;;-1:-1:-1;;;25946:46:0;;9606:2:1;25946:46:0;;;9588:21:1;9645:2;9625:18;;;9618:30;-1:-1:-1;;;9664:18:1;;;9657:49;9723:18;;25946:46:0;9404:343:1;25946:46:0;26022:28;26053:24;26071:4;26053:9;:24::i;:::-;26139:16;;26022:55;;-1:-1:-1;26139:16:0;;26138:17;:32;;;;-1:-1:-1;26159:11:0;;;;;;;26138:32;:55;;;;-1:-1:-1;26180:13:0;;-1:-1:-1;;;;;26174:19:0;;;26180:13;;26174:19;26138:55;26134:405;;;26213:24;;26210:306;;26313:8;;26294:13;;26284:47;;26327:3;;26284:38;;26313:8;26284:24;;-1:-1:-1;;;;;26294:13:0;26284:9;:24::i;:::-;:28;;:38::i;:::-;:42;;:47::i;:::-;26261:20;:70;26258:188;;;26408:8;;26389:13;;26379:47;;26422:3;;26379:38;;26408:8;26379:24;;-1:-1:-1;;;;;26389:13:0;26379:9;:24::i;:47::-;26356:70;;26258:188;26464:32;26475:20;26464:10;:32::i;:::-;26646:13;;26559:12;;-1:-1:-1;;;;;26640:19:0;;;26646:13;;26640:19;;:40;;-1:-1:-1;26667:13:0;;-1:-1:-1;;;;;26663:17:0;;;26667:13;;26663:17;26640:40;26639:99;;;;-1:-1:-1;;;;;;26687:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26715:22:0;;;;;;:18;:22;;;;;;;;26687:50;26685:53;26639:99;26634:148;;;-1:-1:-1;26766:4:0;26634:148;26802:38;26817:4;26822:2;26825:6;26832:7;26802:14;:38::i;:::-;25017:1831;;24914:1934;;;:::o;1726:192::-;1812:7;1848:12;1840:6;;;;1832:29;;;;-1:-1:-1;;;1832:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1872:9:0;1884:5;1888:1;1884;:5;:::i;:::-;1872:17;1726:192;-1:-1:-1;;;;;1726:192:0:o;33312:163::-;33353:7;33374:15;33391;33410:19;:17;:19::i;:::-;33373:56;;-1:-1:-1;33373:56:0;-1:-1:-1;33447:20:0;33373:56;;33447:11;:20::i;:::-;33440:27;;;;33312:163;:::o;2186:132::-;2244:7;2271:39;2275:1;2278;2271:39;;;;;;;;;;;;;;;;;:3;:39::i;1393:181::-;1451:7;;1483:5;1487:1;1483;:5;:::i;:::-;1471:17;;1512:1;1507;:6;;1499:46;;;;-1:-1:-1;;;1499:46:0;;6290:2:1;1499:46:0;;;6272:21:1;6329:2;6309:18;;;6302:30;6368:29;6348:18;;;6341:57;6415:18;;1499:46:0;6088:351:1;32110:419:0;32169:7;32178;32187;32196;32205;32214;32235:23;32260:12;32274:18;32296:20;32308:7;32296:11;:20::i;:::-;32234:82;;;;;;32328:15;32345:23;32370:12;32386:50;32398:7;32407:4;32413:10;32425;:8;:10::i;:::-;32386:11;:50::i;:::-;32327:109;;;;-1:-1:-1;32327:109:0;;-1:-1:-1;32487:15:0;;-1:-1:-1;32504:4:0;;-1:-1:-1;32510:10:0;;-1:-1:-1;32110:419:0;;-1:-1:-1;;;;;32110:419:0:o;1582:136::-;1640:7;1667:43;1671:1;1674;1667:43;;;;;;;;;;;;;;;;;:3;:43::i;27714:666::-;27864:16;;;27878:1;27864:16;;;;;;;;27840:21;;27864:16;;;;;;;;;;-1:-1:-1;27864:16:0;27840:40;;27909:4;27891;27896:1;27891:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27891:23:0;;;:7;;;;;;;;;;:23;;;;27935:15;;:22;;;-1:-1:-1;;;27935:22:0;;;;:15;;;;;:20;;:22;;;;;27891:7;;27935:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27925:4;27930:1;27925:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27925:32:0;;;:7;;;;;;;;;:32;28002:15;;27970:62;;27987:4;;28002:15;28020:11;27970:8;:62::i;:::-;28071:15;;:240;;-1:-1:-1;;;28071:240:0;;-1:-1:-1;;;;;28071:15:0;;;;:66;;:240;;28152:11;;28071:15;;28222:4;;28249;;28285:15;;28071:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28337:35;28354:11;28367:4;28337:35;;;;;;;:::i;:::-;;;;;;;;27769:611;27714:666;:::o;27202:98::-;27259:16;;:33;;-1:-1:-1;;;;;27259:16:0;;;;:33;;;;;27285:6;;27259:16;:33;:16;:33;27285:6;27259:16;:33;;;;;;;;;;;;;;;;;;;1926:250;1984:7;2008:6;2004:47;;-1:-1:-1;2038:1:0;2031:8;;2004:47;2063:9;2075:5;2079:1;2075;:5;:::i;:::-;2063:17;-1:-1:-1;2108:1:0;2099:5;2103:1;2063:17;2099:5;:::i;:::-;:10;2091:56;;;;-1:-1:-1;;;2091:56:0;;7721:2:1;2091:56:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:34;7779:18;;;7772:62;-1:-1:-1;;;7850:18:1;;;7843:31;7891:19;;2091:56:0;7519:397:1;26856:334:0;16438:16;:23;;-1:-1:-1;;16438:23:0;16457:4;16438:23;;;26937:38:::1;26954:20:::0;26937:16:::1;:38::i;:::-;27062:21;27097:22:::0;;27094:89:::1;;27136:35;27149:21;27136:12;:35::i;:::-;-1:-1:-1::0;;16484:16:0;:24;;-1:-1:-1;;16484:24:0;;;26856:334::o;28915:704::-;29026:7;29022:40;;29048:14;:12;:14::i;:::-;-1:-1:-1;;;;;29087:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;29111:22:0;;;;;;:11;:22;;;;;;;;29110:23;29087:46;29083:467;;;29150:48;29172:6;29180:9;29191:6;29150:21;:48::i;:::-;29083:467;;;-1:-1:-1;;;;;29221:19:0;;;;;;:11;:19;;;;;;;;29220:20;:46;;;;-1:-1:-1;;;;;;29244:22:0;;;;;;:11;:22;;;;;;;;29220:46;29216:334;;;29283:46;29303:6;29311:9;29322:6;29283:19;:46::i;29216:334::-;-1:-1:-1;;;;;29351:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29374:22:0;;;;;;:11;:22;;;;;;;;29351:45;29347:203;;;29413:48;29435:6;29443:9;29454:6;29413:21;:48::i;29347:203::-;29494:44;29512:6;29520:9;29531:6;29494:17;:44::i;:::-;29574:7;29570:41;;29596:15;35083;;35073:7;:25;35125:21;;35109:13;:37;35029:125;29596:15;28915:704;;;;:::o;33483:561::-;33580:7;;33616;;33533;;;;;33640:289;33664:9;:16;33660:20;;33640:289;;;33730:7;33706;:21;33714:9;33724:1;33714:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33714:12:0;33706:21;;;;;;;;;;;;;:31;;:66;;;33765:7;33741;:21;33749:9;33759:1;33749:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33749:12:0;33741:21;;;;;;;;;;;;;:31;33706:66;33702:97;;;33782:7;;33791;;33774:25;;;;;;;33483:561;;:::o;33702:97::-;33824:34;33836:7;:21;33844:9;33854:1;33844:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33844:12:0;33836:21;;;;;;;;;;;;;33824:7;;:11;:34::i;:::-;33814:44;;33883:34;33895:7;:21;33903:9;33913:1;33903:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33903:12:0;33895:21;;;;;;;;;;;;;33883:7;;:11;:34::i;:::-;33873:44;-1:-1:-1;33682:3:0;;;;:::i;:::-;;;;33640:289;;;-1:-1:-1;33965:7:0;;33953;;:20;;:11;:20::i;:::-;33943:7;:30;33939:61;;;33983:7;;33992;;33975:25;;;;;;33483:561;;:::o;33939:61::-;34019:7;;34028;;-1:-1:-1;33483:561:0;-1:-1:-1;33483:561:0:o;2326:278::-;2412:7;2447:12;2440:5;2432:28;;;;-1:-1:-1;;;2432:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2471:9:0;2483:5;2487:1;2483;:5;:::i;32537:330::-;32597:7;32606;32615;32635:12;32650:24;32666:7;32650:15;:24::i;:::-;32635:39;;32685:18;32706:30;32728:7;32706:21;:30::i;:::-;32685:51;-1:-1:-1;32747:23:0;32773:33;32685:51;32773:17;:7;32785:4;32773:11;:17::i;:::-;:21;;:33::i;:::-;32747:59;32842:4;;-1:-1:-1;32848:10:0;;-1:-1:-1;32537:330:0;;-1:-1:-1;;;32537:330:0:o;32875:429::-;32990:7;;;;33046:24;:7;33058:11;33046;:24::i;:::-;33028:42;-1:-1:-1;33081:12:0;33096:21;:4;33105:11;33096:8;:21::i;:::-;33081:36;-1:-1:-1;33128:18:0;33149:27;:10;33164:11;33149:14;:27::i;:::-;33128:48;-1:-1:-1;33187:23:0;33213:33;33128:48;33213:17;:7;33225:4;33213:11;:17::i;:33::-;33265:7;;;;-1:-1:-1;33291:4:0;;-1:-1:-1;32875:429:0;;-1:-1:-1;;;;;;;32875:429:0:o;34767:250::-;34813:7;;:12;:34;;;;-1:-1:-1;34829:13:0;;:18;34813:34;34810:46;;;34767:250::o;34810:46::-;34894:7;;;34876:15;:25;34936:13;;;34912:21;:37;-1:-1:-1;34970:11:0;;;;34992:17;34767:250::o;30731:566::-;30834:15;30851:23;30876:12;30890:23;30915:12;30929:18;30951:19;30962:7;30951:10;:19::i;:::-;-1:-1:-1;;;;;30999:15:0;;;;;;:7;:15;;;;;;30833:137;;-1:-1:-1;30833:137:0;;-1:-1:-1;30833:137:0;;-1:-1:-1;30833:137:0;-1:-1:-1;30833:137:0;-1:-1:-1;30833:137:0;-1:-1:-1;30999:28:0;;31019:7;30999:19;:28::i;:::-;-1:-1:-1;;;;;30981:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31056:7;:15;;;;:28;;31076:7;31056:19;:28::i;:::-;-1:-1:-1;;;;;31038:15:0;;;;;;;:7;:15;;;;;;:46;;;;31116:18;;;;;;;:39;;31139:15;31116:22;:39::i;:::-;-1:-1:-1;;;;;31095:18:0;;;;;;:7;:18;;;;;:60;31169:26;31184:10;31169:14;:26::i;:::-;31206:23;31218:4;31224;31206:11;:23::i;:::-;31262:9;-1:-1:-1;;;;;31245:44:0;31254:6;-1:-1:-1;;;;;31245:44:0;;31273:15;31245:44;;;;11827:25:1;;11815:2;11800:18;;11681:177;31245:44:0;;;;;;;;30822:475;;;;;;30731:566;;;:::o;30137:586::-;30238:15;30255:23;30280:12;30294:23;30319:12;30333:18;30355:19;30366:7;30355:10;:19::i;:::-;-1:-1:-1;;;;;30403:15:0;;;;;;:7;:15;;;;;;30237:137;;-1:-1:-1;30237:137:0;;-1:-1:-1;30237:137:0;;-1:-1:-1;30237:137:0;-1:-1:-1;30237:137:0;-1:-1:-1;30237:137:0;-1:-1:-1;30403:28:0;;30237:137;30403:19;:28::i;:::-;-1:-1:-1;;;;;30385:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30463:18;;;;;:7;:18;;;;;:39;;30486:15;30463:22;:39::i;:::-;-1:-1:-1;;;;;30442:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30534:7;:18;;;;:39;;30557:15;30534:22;:39::i;31305:642::-;31408:15;31425:23;31450:12;31464:23;31489:12;31503:18;31525:19;31536:7;31525:10;:19::i;:::-;-1:-1:-1;;;;;31573:15:0;;;;;;:7;:15;;;;;;31407:137;;-1:-1:-1;31407:137:0;;-1:-1:-1;31407:137:0;;-1:-1:-1;31407:137:0;-1:-1:-1;31407:137:0;-1:-1:-1;31407:137:0;-1:-1:-1;31573:28:0;;31593:7;31573:19;:28::i;:::-;-1:-1:-1;;;;;31555:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31630:7;:15;;;;:28;;31650:7;31630:19;:28::i;29627:502::-;29726:15;29743:23;29768:12;29782:23;29807:12;29821:18;29843:19;29854:7;29843:10;:19::i;:::-;-1:-1:-1;;;;;29891:15:0;;;;;;:7;:15;;;;;;29725:137;;-1:-1:-1;29725:137:0;;-1:-1:-1;29725:137:0;;-1:-1:-1;29725:137:0;-1:-1:-1;29725:137:0;-1:-1:-1;29725:137:0;-1:-1:-1;29891:28:0;;29725:137;29891:19;:28::i;34423:154::-;34487:7;34514:55;34553:5;34514:20;34526:7;;34514;:11;;:20;;;;:::i;34589:166::-;34659:7;34686:61;34731:5;34686:26;34698:13;;34686:7;:11;;:26;;;;:::i;34056:355::-;34119:19;34142:10;:8;:10::i;:::-;34119:33;-1:-1:-1;34163:18:0;34184:27;:10;34119:33;34184:14;:27::i;:::-;34263:4;34247:22;;;;:7;:22;;;;;;34163:48;;-1:-1:-1;34247:38:0;;34163:48;34247:26;:38::i;:::-;34238:4;34222:22;;;;:7;:22;;;;;;;;:63;;;;34299:11;:26;;;;;;34296:107;;;34381:4;34365:22;;;;:7;:22;;;;;;:38;;34392:10;34365:26;:38::i;:::-;34356:4;34340:22;;;;:7;:22;;;;;:63;34296:107;34108:303;;34056:355;:::o;31955:147::-;32033:7;;:17;;32045:4;32033:11;:17::i;:::-;32023:7;:27;32074:10;;:20;;32089:4;32074:14;:20::i;:::-;32061:10;:33;-1:-1:-1;;31955:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:180::-;1755:6;1808:2;1796:9;1787:7;1783:23;1779:32;1776:52;;;1824:1;1821;1814:12;1776:52;-1:-1:-1;1847:23:1;;1696:180;-1:-1:-1;1696:180:1:o;1881:341::-;1946:6;1954;2007:2;1995:9;1986:7;1982:23;1978:32;1975:52;;;2023:1;2020;2013:12;1975:52;2059:9;2046:23;2036:33;;2119:2;2108:9;2104:18;2091:32;2166:5;2159:13;2152:21;2145:5;2142:32;2132:60;;2188:1;2185;2178:12;2227:461;2280:3;2318:5;2312:12;2345:6;2340:3;2333:19;2371:4;2400:2;2395:3;2391:12;2384:19;;2437:2;2430:5;2426:14;2458:1;2468:195;2482:6;2479:1;2476:13;2468:195;;;2547:13;;-1:-1:-1;;;;;2543:39:1;2531:52;;2603:12;;;;2638:15;;;;2579:1;2497:9;2468:195;;;-1:-1:-1;2679:3:1;;2227:461;-1:-1:-1;;;;;2227:461:1:o;3861:597::-;3973:4;4002:2;4031;4020:9;4013:21;4063:6;4057:13;4106:6;4101:2;4090:9;4086:18;4079:34;4131:1;4141:140;4155:6;4152:1;4149:13;4141:140;;;4250:14;;;4246:23;;4240:30;4216:17;;;4235:2;4212:26;4205:66;4170:10;;4141:140;;;4299:6;4296:1;4293:13;4290:91;;;4369:1;4364:2;4355:6;4344:9;4340:22;4336:31;4329:42;4290:91;-1:-1:-1;4442:2:1;4421:15;-1:-1:-1;;4417:29:1;4402:45;;;;4449:2;4398:54;;3861:597;-1:-1:-1;;;3861:597:1:o;7921:356::-;8123:2;8105:21;;;8142:18;;;8135:30;8201:34;8196:2;8181:18;;8174:62;8268:2;8253:18;;7921:356::o;11863:332::-;12070:6;12059:9;12052:25;12113:2;12108;12097:9;12093:18;12086:30;12033:4;12133:56;12185:2;12174:9;12170:18;12162:6;12133:56;:::i;:::-;12125:64;11863:332;-1:-1:-1;;;;11863:332:1:o;12200:582::-;12499:6;12488:9;12481:25;12542:6;12537:2;12526:9;12522:18;12515:34;12585:3;12580:2;12569:9;12565:18;12558:31;12462:4;12606:57;12658:3;12647:9;12643:19;12635:6;12606:57;:::i;:::-;-1:-1:-1;;;;;12699:32:1;;;;12694:2;12679:18;;12672:60;-1:-1:-1;12763:3:1;12748:19;12741:35;12598:65;12200:582;-1:-1:-1;;;12200:582:1:o;12976:128::-;13016:3;13047:1;13043:6;13040:1;13037:13;13034:39;;;13053:18;;:::i;:::-;-1:-1:-1;13089:9:1;;12976:128::o;13109:217::-;13149:1;13175;13165:132;;13219:10;13214:3;13210:20;13207:1;13200:31;13254:4;13251:1;13244:15;13282:4;13279:1;13272:15;13165:132;-1:-1:-1;13311:9:1;;13109:217::o;13331:168::-;13371:7;13437:1;13433;13429:6;13425:14;13422:1;13419:21;13414:1;13407:9;13400:17;13396:45;13393:71;;;13444:18;;:::i;:::-;-1:-1:-1;13484:9:1;;13331:168::o;13504:125::-;13544:4;13572:1;13569;13566:8;13563:34;;;13577:18;;:::i;:::-;-1:-1:-1;13614:9:1;;13504:125::o;13634:380::-;13713:1;13709:12;;;;13756;;;13777:61;;13831:4;13823:6;13819:17;13809:27;;13777:61;13884:2;13876:6;13873:14;13853:18;13850:38;13847:161;;;13930:10;13925:3;13921:20;13918:1;13911:31;13965:4;13962:1;13955:15;13993:4;13990:1;13983:15;13847:161;;13634:380;;;:::o;14019:135::-;14058:3;-1:-1:-1;;14079:17:1;;14076:43;;;14099:18;;:::i;:::-;-1:-1:-1;14146:1:1;14135:13;;14019:135::o;14159:127::-;14220:10;14215:3;14211:20;14208:1;14201:31;14251:4;14248:1;14241:15;14275:4;14272:1;14265:15;14291:127;14352:10;14347:3;14343:20;14340:1;14333:31;14383:4;14380:1;14373:15;14407:4;14404:1;14397:15;14423:127;14484:10;14479:3;14475:20;14472:1;14465:31;14515:4;14512:1;14505:15;14539:4;14536:1;14529:15;14687:131;-1:-1:-1;;;;;14762:31:1;;14752:42;;14742:70;;14808:1;14805;14798:12;14742:70;14687:131;:::o

Swarm Source

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