ETH Price: $3,895.80 (-0.46%)

Token

ERC-20: Baby Unicorn | t.me/babyunicorn_ETH (BabyUni)
 

Overview

Max Total Supply

1,000,000,000,000,000 BabyUni

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,940,772,135,427.994600229 BabyUni

Value
$0.00
0x91158c497f8ca72e44096bb83511ae2e71189d4f
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:
babyunicorn

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-02
*/

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;

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

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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



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

}

// 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 babyunicorn is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress = payable(0xB49334b7d9158E5103e9573D4eBAe14d92FB0DB5); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxTxAmount;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Baby Unicorn | t.me/babyunicorn_ETH";
    string private _symbol = "BabyUni";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public marketingDivisor = 2;

    uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9;
    uint256 private constant numTokensSellToAddToLiquidity = 50000 * 10**6 * 10**9;
    uint256 private constant numTokensSellToAddToBuyback = 400000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 450000 * 10**6 * 10**9;
    uint256 private buyBackUpperLimit = 1 * 10**18;

    uint256 public lastBuybackTimestamp;
    uint256 public minTimeToBuyback = 3; // 3 seconds

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;


    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;


        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }

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


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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner() && !_isExcludedFromMaxTxAmount[from]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = numTokensSellToAddToBuyback;
                swapTokens(contractTokenBalance);
            }

	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
              uint256 tokenSwapRate = _getTokenSwapRate();
              uint256 minTransferAmountToBuyBack = tokenSwapRate.mul(buyBackUpperLimit).div(100).div(10**18);
              if (balance > buyBackUpperLimit) {
                if (amount >= minTransferAmountToBuyBack) {
                  balance = buyBackUpperLimit;
                  buyBackTokens(balance.div(100));
                } else if (block.timestamp > lastBuybackTimestamp + minTimeToBuyback) {
                  uint256 lowBuyBack = amount.mul(10**18).div(tokenSwapRate);
                  buyBackTokens(lowBuyBack);
                  lastBuybackTimestamp = block.timestamp;
                }
              }
            }
        }

        // ADDED: Automatic Liquidity
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        bool takeFee = true;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); //

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

        // add liquidity to pancake
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

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

    }


    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            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 _getTokenSwapRate() private view returns(uint256) {
      IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
      (uint Res0, uint Res1,) = pair.getReserves();
      return Res0.div(Res1).mul(10**18); // return amount of token0 needed to buy token1
    }

    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 isExcludedFromMaxTxAmount(address account) public view returns(bool) {
        return _isExcludedFromMaxTxAmount[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromMaxTxAmount(address account) public onlyOwner {
        _isExcludedFromMaxTxAmount[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 setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

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

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _maxTxAmount = 1000000000 * 10**6 * 10**9;
    }

    function afterPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 2;
        _liquidityFee = 9;
        _maxTxAmount = 3000000 * 10**6 * 10**9;
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuybackTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTimeToBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600180546001600160a01b03191673b49334b7d9158e5103e9573d4ebae14d92fb0db51790556ddead00000000000000000000000060805269d3c21bcecceda100000060098190556200005a906000196200052d565b6200006890600019620004cc565b600a556040518060600160405280602381526020016200371f6023913980516200009b91600c91602090910190620003f6565b506040805180820190915260078082526642616279556e6960c81b6020909201918252620000cc91600d91620003f6565b50600e805460ff191660091790556002600f8190556010819055600a601181905560125560135568a2a15d09519be000006014556818650127cc3dc80000601555670de0b6b3a764000060165560036018556019805462ffff001916620100001790553480156200013c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a543360009081526002602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001e057600080fd5b505afa158015620001f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021b91906200049c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026457600080fd5b505afa15801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f91906200049c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e857600080fd5b505af1158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032391906200049c565b6001600160601b0319606091821b811660c0529082901b1660a052600160056000620003576000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200039f3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620003e791815260200190565b60405180910390a3506200054e565b8280546200040490620004f0565b90600052602060002090601f01602090048101928262000428576000855562000473565b82601f106200044357805160ff191683800117855562000473565b8280016001018555821562000473579182015b828111156200047357825182559160200191906001019062000456565b506200048192915062000485565b5090565b5b8082111562000481576000815560010162000486565b600060208284031215620004ae578081fd5b81516001600160a01b0381168114620004c5578182fd5b9392505050565b600082821015620004eb57634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200050557607f821691505b602082108114156200052757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200054957634e487b7160e01b81526012600452602481fd5b500690565b60805160601c60a05160601c60c05160601c613144620005db600039600081816105b5015281816119ba01528181611b190152611dd80152600081816103d2015281816123ec015281816124c2015281816124fe0152818161260901528181612713015281816127f101526128760152600081816104690152818161273e015261284801526131446000f3fe6080604052600436106103035760003560e01c80636bc87c3a11610190578063a457c2d7116100dc578063d3b64ecd11610095578063ea2f0b371161006f578063ea2f0b3714610959578063ec28438a14610979578063f0f165af14610999578063f2fde38b146109b957600080fd5b8063d3b64ecd146108c4578063d6b513cf146108fd578063dd62ed3e1461091357600080fd5b8063a457c2d71461080f578063a5ece9411461082f578063a9059cbb1461084f578063b0cb81f11461086f578063bdc653ef1461088f578063c49b9a80146108a457600080fd5b806388f82020116101495780638ee88c53116101235780638ee88c53146107a5578063906e9dd0146107c557806395d89b41146107e5578063a073d37f146107fa57600080fd5b806388f82020146107385780638a04c283146107715780638da5cb5b1461078757600080fd5b80636bc87c3a1461069757806370a08231146106ad578063715018a6146106cd5780637d1db4a5146106e25780637e3f5606146106f857806382d2a4bb1461071857600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c021461060b5780635342acb41461062b578063557ed1ba146106645780636053a0e31461067757600080fd5b806349bd5a5e146105a35780634a74bb02146105d75780635134f6ab146105f657600080fd5b80633685d419146104ed578063395093511461050d5780633b124fe71461052d5780633bd5d17314610543578063437823ec146105635780634549b0391461058357600080fd5b806318160ddd116102bc57806327c8f8351161029657806327c8f8351461045757806329370cc61461048b5780632d838119146104ab578063313ce567146104cb57600080fd5b806318160ddd1461040c578063218656e41461042157806323b872dd1461043757600080fd5b8063061c82d01461030f57806306fdde031461033157806307efbfdc1461035c578063095ea7b31461037157806313114a9d146103a15780631694505e146103c057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a366004612e02565b6109d9565b005b34801561033d57600080fd5b50610346610a11565b6040516103539190612eea565b60405180910390f35b34801561036857600080fd5b5061032f610aa3565b34801561037d57600080fd5b5061039161038c366004612d6f565b610af0565b6040519015158152602001610353565b3480156103ad57600080fd5b50600b545b604051908152602001610353565b3480156103cc57600080fd5b506103f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610353565b34801561041857600080fd5b506009546103b2565b34801561042d57600080fd5b506103b260175481565b34801561044357600080fd5b50610391610452366004612d2f565b610b07565b34801561046357600080fd5b506103f47f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b5061032f6104a6366004612d9a565b610b70565b3480156104b757600080fd5b506103b26104c6366004612e02565b610bf0565b3480156104d757600080fd5b50600e5460405160ff9091168152602001610353565b3480156104f957600080fd5b5061032f610508366004612cbf565b610c74565b34801561051957600080fd5b50610391610528366004612d6f565b610e63565b34801561053957600080fd5b506103b2600f5481565b34801561054f57600080fd5b5061032f61055e366004612e02565b610e99565b34801561056f57600080fd5b5061032f61057e366004612cbf565b610f83565b34801561058f57600080fd5b506103b261059e366004612e1a565b610fd1565b3480156105af57600080fd5b506103f47f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b5060195461039190610100900460ff1681565b34801561060257600080fd5b5061032f61105e565b34801561061757600080fd5b5061032f610626366004612cbf565b6110ac565b34801561063757600080fd5b50610391610646366004612cbf565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067057600080fd5b50426103b2565b34801561068357600080fd5b506019546103919062010000900460ff1681565b3480156106a357600080fd5b506103b260115481565b3480156106b957600080fd5b506103b26106c8366004612cbf565b6111ff565b3480156106d957600080fd5b5061032f61125e565b3480156106ee57600080fd5b506103b260145481565b34801561070457600080fd5b5061032f610713366004612cbf565b6112d2565b34801561072457600080fd5b5061032f610733366004612e02565b611320565b34801561074457600080fd5b50610391610753366004612cbf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077d57600080fd5b506103b260185481565b34801561079357600080fd5b506000546001600160a01b03166103f4565b3480156107b157600080fd5b5061032f6107c0366004612e02565b611362565b3480156107d157600080fd5b5061032f6107e0366004612cbf565b611391565b3480156107f157600080fd5b506103466113dd565b34801561080657600080fd5b506015546103b2565b34801561081b57600080fd5b5061039161082a366004612d6f565b6113ec565b34801561083b57600080fd5b506001546103f4906001600160a01b031681565b34801561085b57600080fd5b5061039161086a366004612d6f565b61143b565b34801561087b57600080fd5b5061032f61088a366004612e02565b611448565b34801561089b57600080fd5b506016546103b2565b3480156108b057600080fd5b5061032f6108bf366004612d9a565b611477565b3480156108d057600080fd5b506103916108df366004612cbf565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561090957600080fd5b506103b260135481565b34801561091f57600080fd5b506103b261092e366004612cf7565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096557600080fd5b5061032f610974366004612cbf565b6114ea565b34801561098557600080fd5b5061032f610994366004612e02565b611535565b3480156109a557600080fd5b5061032f6109b4366004612e02565b611564565b3480156109c557600080fd5b5061032f6109d4366004612cbf565b611593565b6000546001600160a01b03163314610a0c5760405162461bcd60e51b8152600401610a0390612f3d565b60405180910390fd5b600f55565b6060600c8054610a209061303d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c9061303d565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610acd5760405162461bcd60e51b8152600401610a0390612f3d565b610ad76001611477565b6002600f55600960115568a2a15d09519be00000601455565b6000610afd33848461167d565b5060015b92915050565b6000610b148484846117a1565b610b668433610b61856040518060600160405280602881526020016130c2602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611bdb565b61167d565b5060019392505050565b6000546001600160a01b03163314610b9a5760405162461bcd60e51b8152600401610a0390612f3d565b60198054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610be590831515815260200190565b60405180910390a150565b6000600a54821115610c575760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a03565b6000610c61611c15565b9050610c6d8382611c38565b9392505050565b6000546001600160a01b03163314610c9e5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03811660009081526007602052604090205460ff16610d065760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a03565b60005b600854811015610e5f57816001600160a01b031660088281548110610d3e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e4d5760088054610d6990600190613026565b81548110610d8757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610dc157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff191690556008805480610e2757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5781613078565b915050610d09565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610afd918590610b619086611c7a565b3360008181526007602052604090205460ff1615610f0e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a03565b6000610f1983611cd9565b505050506001600160a01b038416600090815260026020526040902054919250610f4591905082611d28565b6001600160a01b038316600090815260026020526040902055600a54610f6b9082611d28565b600a55600b54610f7b9084611c7a565b600b55505050565b6000546001600160a01b03163314610fad5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006009548311156110255760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a03565b8161104457600061103584611cd9565b50939550610b01945050505050565b600061104f84611cd9565b50929550610b01945050505050565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610a0390612f3d565b6110926000611477565b6000600f81905560115569d3c21bcecceda1000000601455565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03811660009081526007602052604090205460ff161561113f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a03565b6001600160a01b03811660009081526002602052604090205415611199576001600160a01b03811660009081526002602052604090205461117f90610bf0565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561123c57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b0190610bf0565b6000546001600160a01b031633146112885760405162461bcd60e51b8152600401610a0390612f3d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b0316331461134a5760405162461bcd60e51b8152600401610a0390612f3d565b61135c81670de0b6b3a7640000613007565b60165550565b6000546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610a0390612f3d565b601155565b6000546001600160a01b031633146113bb5760405162461bcd60e51b8152600401610a0390612f3d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600d8054610a209061303d565b6000610afd3384610b61856040518060600160405280602581526020016130ea602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611bdb565b6000610afd3384846117a1565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610a0390612f3d565b601355565b6000546001600160a01b031633146114a15760405162461bcd60e51b8152600401610a0390612f3d565b601980548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be590831515815260200190565b6000546001600160a01b031633146115145760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610a0390612f3d565b601455565b6000546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610a0390612f3d565b601555565b6000546001600160a01b031633146115bd5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b0381166116225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a03565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a03565b6001600160a01b0382166117405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a03565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a03565b6001600160a01b0382166118675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a03565b600081116118c95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a03565b6000546001600160a01b038481169116148015906118f557506000546001600160a01b03838116911614155b801561191a57506001600160a01b03831660009081526006602052604090205460ff16155b15611982576014548111156119825760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a03565b600061198d306111ff565b6015546019549192508210159060ff161580156119b15750601954610100900460ff165b80156119ee57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15611ae3578015611a0e576815af1d78b58c4000009150611a0e82611d6a565b601954479062010000900460ff168015611a2f5750670de0b6b3a764000081115b15611ae1576000611a3e611dd3565b90506000611a6e670de0b6b3a7640000611a686064611a6860165487611e9c90919063ffffffff16565b90611c38565b9050601654831115611ade57808610611a9e576016549250611a99611a94846064611c38565b611f1b565b611ade565b601854601754611aae9190612fcf565b421115611ade576000611acd83611a6889670de0b6b3a7640000611e9c565b9050611ad881611f1b565b50426017555b50505b505b6014548210611af25760145491505b6802b5e3af16b188000082108015908190611b10575060195460ff16155b8015611b4e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b8015611b615750601954610100900460ff165b15611b7b576802b5e3af16b18800009250611b7b83611f44565b6001600160a01b03861660009081526005602052604090205460019060ff1680611bbd57506001600160a01b03861660009081526005602052604090205460ff165b15611bc6575060005b611bd287878784611fe2565b50505050505050565b60008184841115611bff5760405162461bcd60e51b8152600401610a039190612eea565b506000611c0c8486613026565b95945050505050565b6000806000611c2261210d565b9092509050611c318282611c38565b9250505090565b6000610c6d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122c7565b600080611c878385612fcf565b905083811015610c6d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a03565b6000806000806000806000806000611cf08a6122f5565b9250925092506000806000611d0e8d8686611d09611c15565b612337565b919f909e50909c50959a5093985091965092945050505050565b6000610c6d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bdb565b6019805460ff1916600117905547611d8182612387565b6000611d8d4783611d28565b600154601354601154929350611dc4926001600160a01b0390921691611dbf9190611db9908690611c38565b90611e9c565b6125ab565b50506019805460ff1916905550565b6000807f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d9190612db4565b506001600160701b039182169350169050611e94670de0b6b3a7640000611db98484611c38565b935050505090565b600082611eab57506000610b01565b6000611eb78385613007565b905082611ec48583612fe7565b14610c6d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a03565b6019805460ff191660011790558015611f3757611f37816125e6565b506019805460ff19169055565b6019805460ff191660011790556000611f5e826002611c38565b90506000611f6c8383611d28565b905047611f7883612387565b6000611f844783611d28565b9050611f9083826127eb565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff19169055505050565b80611fef57611fef6128fb565b6001600160a01b03841660009081526007602052604090205460ff16801561203057506001600160a01b03831660009081526007602052604090205460ff16155b1561204557612040848484612929565b6120f1565b6001600160a01b03841660009081526007602052604090205460ff1615801561208657506001600160a01b03831660009081526007602052604090205460ff165b1561209657612040848484612a4f565b6001600160a01b03841660009081526007602052604090205460ff1680156120d657506001600160a01b03831660009081526007602052604090205460ff165b156120e657612040848484612af8565b6120f1848484612b6b565b8061210757612107601054600f55601254601155565b50505050565b600a546009546000918291825b6008548110156122975782600260006008848154811061214a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121c3575081600360006008848154811061219c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121d957600a54600954945094505050509091565b61222d600260006008848154811061220157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d28565b9250612283600360006008848154811061225757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d28565b91508061228f81613078565b91505061211a565b50600954600a546122a791611c38565b8210156122be57600a546009549350935050509091565b90939092509050565b600081836122e85760405162461bcd60e51b8152600401610a039190612eea565b506000611c0c8486612fe7565b60008060008061230485612baf565b9050600061231186612bcb565b90506000612329826123238986611d28565b90611d28565b979296509094509092505050565b60008080806123468886611e9c565b905060006123548887611e9c565b905060006123628888611e9c565b90506000612374826123238686611d28565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123ca57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561244357600080fd5b505afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190612cdb565b8160018151811061249c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506124e7307f00000000000000000000000000000000000000000000000000000000000000008461167d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061253c908590600090869030904290600401612f93565b600060405180830381600087803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161259f929190612f72565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156125e1573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561266057600080fd5b505afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190612cdb565b816000815181106126b957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126fb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006127694261012c611c7a565b6040518663ffffffff1660e01b81526004016127889493929190612eb5565b6000604051808303818588803b1580156127a157600080fd5b505af11580156127b5573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161259f929190612f72565b612816307f00000000000000000000000000000000000000000000000000000000000000008461167d565b60405163f305d71960e01b81523060048201526024810183905260006044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990839060c4016060604051808303818588803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f49190612e45565b5050505050565b600f5415801561290b5750601154155b1561291257565b600f80546010556011805460125560009182905555565b60008060008060008061293b87611cd9565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061296d9088611d28565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461299c9087611d28565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546129cb9086611c7a565b6001600160a01b0389166000908152600260205260409020556129ed81612be7565b6129f78483612c6f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a3c91815260200190565b60405180910390a3505050505050505050565b600080600080600080612a6187611cd9565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612a939087611d28565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054612ac99084611c7a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546129cb9086611c7a565b600080600080600080612b0a87611cd9565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b3c9088611d28565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612a939087611d28565b600080600080600080612b7d87611cd9565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061299c9087611d28565b6000610b016064611a68600f5485611e9c90919063ffffffff16565b6000610b016064611a6860115485611e9c90919063ffffffff16565b6000612bf1611c15565b90506000612bff8383611e9c565b30600090815260026020526040902054909150612c1c9082611c7a565b3060009081526002602090815260408083209390935560079052205460ff16156125e15730600090815260036020526040902054612c5a9084611c7a565b30600090815260036020526040902055505050565b600a54612c7c9083611d28565b600a55600b54612c8c9082611c7a565b600b555050565b80358015158114612ca357600080fd5b919050565b80516001600160701b0381168114612ca357600080fd5b600060208284031215612cd0578081fd5b8135610c6d816130a9565b600060208284031215612cec578081fd5b8151610c6d816130a9565b60008060408385031215612d09578081fd5b8235612d14816130a9565b91506020830135612d24816130a9565b809150509250929050565b600080600060608486031215612d43578081fd5b8335612d4e816130a9565b92506020840135612d5e816130a9565b929592945050506040919091013590565b60008060408385031215612d81578182fd5b8235612d8c816130a9565b946020939093013593505050565b600060208284031215612dab578081fd5b610c6d82612c93565b600080600060608486031215612dc8578283fd5b612dd184612ca8565b9250612ddf60208501612ca8565b9150604084015163ffffffff81168114612df7578182fd5b809150509250925092565b600060208284031215612e13578081fd5b5035919050565b60008060408385031215612e2c578182fd5b82359150612e3c60208401612c93565b90509250929050565b600080600060608486031215612e59578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612eaa5781516001600160a01b031687529582019590820190600101612e85565b509495945050505050565b848152608060208201526000612ece6080830186612e72565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612f1657858101830151858201604001528201612efa565b81811115612f275783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612f8b6040830184612e72565b949350505050565b85815284602082015260a060408201526000612fb260a0830186612e72565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612fe257612fe2613093565b500190565b60008261300257634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561302157613021613093565b500290565b60008282101561303857613038613093565b500390565b600181811c9082168061305157607f821691505b6020821081141561307257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561308c5761308c613093565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146130be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f421d61fc331284147203d96f5e416799ba0b99ecb8b060c18af87ac22b07e864736f6c634300080400334261627920556e69636f726e207c20742e6d652f62616279756e69636f726e5f455448

Deployed Bytecode

0x6080604052600436106103035760003560e01c80636bc87c3a11610190578063a457c2d7116100dc578063d3b64ecd11610095578063ea2f0b371161006f578063ea2f0b3714610959578063ec28438a14610979578063f0f165af14610999578063f2fde38b146109b957600080fd5b8063d3b64ecd146108c4578063d6b513cf146108fd578063dd62ed3e1461091357600080fd5b8063a457c2d71461080f578063a5ece9411461082f578063a9059cbb1461084f578063b0cb81f11461086f578063bdc653ef1461088f578063c49b9a80146108a457600080fd5b806388f82020116101495780638ee88c53116101235780638ee88c53146107a5578063906e9dd0146107c557806395d89b41146107e5578063a073d37f146107fa57600080fd5b806388f82020146107385780638a04c283146107715780638da5cb5b1461078757600080fd5b80636bc87c3a1461069757806370a08231146106ad578063715018a6146106cd5780637d1db4a5146106e25780637e3f5606146106f857806382d2a4bb1461071857600080fd5b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c021461060b5780635342acb41461062b578063557ed1ba146106645780636053a0e31461067757600080fd5b806349bd5a5e146105a35780634a74bb02146105d75780635134f6ab146105f657600080fd5b80633685d419146104ed578063395093511461050d5780633b124fe71461052d5780633bd5d17314610543578063437823ec146105635780634549b0391461058357600080fd5b806318160ddd116102bc57806327c8f8351161029657806327c8f8351461045757806329370cc61461048b5780632d838119146104ab578063313ce567146104cb57600080fd5b806318160ddd1461040c578063218656e41461042157806323b872dd1461043757600080fd5b8063061c82d01461030f57806306fdde031461033157806307efbfdc1461035c578063095ea7b31461037157806313114a9d146103a15780631694505e146103c057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032f61032a366004612e02565b6109d9565b005b34801561033d57600080fd5b50610346610a11565b6040516103539190612eea565b60405180910390f35b34801561036857600080fd5b5061032f610aa3565b34801561037d57600080fd5b5061039161038c366004612d6f565b610af0565b6040519015158152602001610353565b3480156103ad57600080fd5b50600b545b604051908152602001610353565b3480156103cc57600080fd5b506103f47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610353565b34801561041857600080fd5b506009546103b2565b34801561042d57600080fd5b506103b260175481565b34801561044357600080fd5b50610391610452366004612d2f565b610b07565b34801561046357600080fd5b506103f47f000000000000000000000000000000000000000000000000000000000000dead81565b34801561049757600080fd5b5061032f6104a6366004612d9a565b610b70565b3480156104b757600080fd5b506103b26104c6366004612e02565b610bf0565b3480156104d757600080fd5b50600e5460405160ff9091168152602001610353565b3480156104f957600080fd5b5061032f610508366004612cbf565b610c74565b34801561051957600080fd5b50610391610528366004612d6f565b610e63565b34801561053957600080fd5b506103b2600f5481565b34801561054f57600080fd5b5061032f61055e366004612e02565b610e99565b34801561056f57600080fd5b5061032f61057e366004612cbf565b610f83565b34801561058f57600080fd5b506103b261059e366004612e1a565b610fd1565b3480156105af57600080fd5b506103f47f000000000000000000000000c0f92daaf45fa895e3b96b110558ce4571c2f2b681565b3480156105e357600080fd5b5060195461039190610100900460ff1681565b34801561060257600080fd5b5061032f61105e565b34801561061757600080fd5b5061032f610626366004612cbf565b6110ac565b34801561063757600080fd5b50610391610646366004612cbf565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067057600080fd5b50426103b2565b34801561068357600080fd5b506019546103919062010000900460ff1681565b3480156106a357600080fd5b506103b260115481565b3480156106b957600080fd5b506103b26106c8366004612cbf565b6111ff565b3480156106d957600080fd5b5061032f61125e565b3480156106ee57600080fd5b506103b260145481565b34801561070457600080fd5b5061032f610713366004612cbf565b6112d2565b34801561072457600080fd5b5061032f610733366004612e02565b611320565b34801561074457600080fd5b50610391610753366004612cbf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077d57600080fd5b506103b260185481565b34801561079357600080fd5b506000546001600160a01b03166103f4565b3480156107b157600080fd5b5061032f6107c0366004612e02565b611362565b3480156107d157600080fd5b5061032f6107e0366004612cbf565b611391565b3480156107f157600080fd5b506103466113dd565b34801561080657600080fd5b506015546103b2565b34801561081b57600080fd5b5061039161082a366004612d6f565b6113ec565b34801561083b57600080fd5b506001546103f4906001600160a01b031681565b34801561085b57600080fd5b5061039161086a366004612d6f565b61143b565b34801561087b57600080fd5b5061032f61088a366004612e02565b611448565b34801561089b57600080fd5b506016546103b2565b3480156108b057600080fd5b5061032f6108bf366004612d9a565b611477565b3480156108d057600080fd5b506103916108df366004612cbf565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561090957600080fd5b506103b260135481565b34801561091f57600080fd5b506103b261092e366004612cf7565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561096557600080fd5b5061032f610974366004612cbf565b6114ea565b34801561098557600080fd5b5061032f610994366004612e02565b611535565b3480156109a557600080fd5b5061032f6109b4366004612e02565b611564565b3480156109c557600080fd5b5061032f6109d4366004612cbf565b611593565b6000546001600160a01b03163314610a0c5760405162461bcd60e51b8152600401610a0390612f3d565b60405180910390fd5b600f55565b6060600c8054610a209061303d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c9061303d565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610acd5760405162461bcd60e51b8152600401610a0390612f3d565b610ad76001611477565b6002600f55600960115568a2a15d09519be00000601455565b6000610afd33848461167d565b5060015b92915050565b6000610b148484846117a1565b610b668433610b61856040518060600160405280602881526020016130c2602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611bdb565b61167d565b5060019392505050565b6000546001600160a01b03163314610b9a5760405162461bcd60e51b8152600401610a0390612f3d565b60198054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610be590831515815260200190565b60405180910390a150565b6000600a54821115610c575760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a03565b6000610c61611c15565b9050610c6d8382611c38565b9392505050565b6000546001600160a01b03163314610c9e5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03811660009081526007602052604090205460ff16610d065760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a03565b60005b600854811015610e5f57816001600160a01b031660088281548110610d3e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e4d5760088054610d6990600190613026565b81548110610d8757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610dc157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff191690556008805480610e2757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5781613078565b915050610d09565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610afd918590610b619086611c7a565b3360008181526007602052604090205460ff1615610f0e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a03565b6000610f1983611cd9565b505050506001600160a01b038416600090815260026020526040902054919250610f4591905082611d28565b6001600160a01b038316600090815260026020526040902055600a54610f6b9082611d28565b600a55600b54610f7b9084611c7a565b600b55505050565b6000546001600160a01b03163314610fad5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006009548311156110255760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a03565b8161104457600061103584611cd9565b50939550610b01945050505050565b600061104f84611cd9565b50929550610b01945050505050565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610a0390612f3d565b6110926000611477565b6000600f81905560115569d3c21bcecceda1000000601455565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03811660009081526007602052604090205460ff161561113f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a03565b6001600160a01b03811660009081526002602052604090205415611199576001600160a01b03811660009081526002602052604090205461117f90610bf0565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561123c57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610b0190610bf0565b6000546001600160a01b031633146112885760405162461bcd60e51b8152600401610a0390612f3d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b0316331461134a5760405162461bcd60e51b8152600401610a0390612f3d565b61135c81670de0b6b3a7640000613007565b60165550565b6000546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610a0390612f3d565b601155565b6000546001600160a01b031633146113bb5760405162461bcd60e51b8152600401610a0390612f3d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600d8054610a209061303d565b6000610afd3384610b61856040518060600160405280602581526020016130ea602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611bdb565b6000610afd3384846117a1565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610a0390612f3d565b601355565b6000546001600160a01b031633146114a15760405162461bcd60e51b8152600401610a0390612f3d565b601980548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610be590831515815260200190565b6000546001600160a01b031633146115145760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610a0390612f3d565b601455565b6000546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610a0390612f3d565b601555565b6000546001600160a01b031633146115bd5760405162461bcd60e51b8152600401610a0390612f3d565b6001600160a01b0381166116225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a03565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a03565b6001600160a01b0382166117405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a03565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a03565b6001600160a01b0382166118675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a03565b600081116118c95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a03565b6000546001600160a01b038481169116148015906118f557506000546001600160a01b03838116911614155b801561191a57506001600160a01b03831660009081526006602052604090205460ff16155b15611982576014548111156119825760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a03565b600061198d306111ff565b6015546019549192508210159060ff161580156119b15750601954610100900460ff165b80156119ee57507f000000000000000000000000c0f92daaf45fa895e3b96b110558ce4571c2f2b66001600160a01b0316846001600160a01b0316145b15611ae3578015611a0e576815af1d78b58c4000009150611a0e82611d6a565b601954479062010000900460ff168015611a2f5750670de0b6b3a764000081115b15611ae1576000611a3e611dd3565b90506000611a6e670de0b6b3a7640000611a686064611a6860165487611e9c90919063ffffffff16565b90611c38565b9050601654831115611ade57808610611a9e576016549250611a99611a94846064611c38565b611f1b565b611ade565b601854601754611aae9190612fcf565b421115611ade576000611acd83611a6889670de0b6b3a7640000611e9c565b9050611ad881611f1b565b50426017555b50505b505b6014548210611af25760145491505b6802b5e3af16b188000082108015908190611b10575060195460ff16155b8015611b4e57507f000000000000000000000000c0f92daaf45fa895e3b96b110558ce4571c2f2b66001600160a01b0316866001600160a01b031614155b8015611b615750601954610100900460ff165b15611b7b576802b5e3af16b18800009250611b7b83611f44565b6001600160a01b03861660009081526005602052604090205460019060ff1680611bbd57506001600160a01b03861660009081526005602052604090205460ff165b15611bc6575060005b611bd287878784611fe2565b50505050505050565b60008184841115611bff5760405162461bcd60e51b8152600401610a039190612eea565b506000611c0c8486613026565b95945050505050565b6000806000611c2261210d565b9092509050611c318282611c38565b9250505090565b6000610c6d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122c7565b600080611c878385612fcf565b905083811015610c6d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a03565b6000806000806000806000806000611cf08a6122f5565b9250925092506000806000611d0e8d8686611d09611c15565b612337565b919f909e50909c50959a5093985091965092945050505050565b6000610c6d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bdb565b6019805460ff1916600117905547611d8182612387565b6000611d8d4783611d28565b600154601354601154929350611dc4926001600160a01b0390921691611dbf9190611db9908690611c38565b90611e9c565b6125ab565b50506019805460ff1916905550565b6000807f000000000000000000000000c0f92daaf45fa895e3b96b110558ce4571c2f2b69050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e3557600080fd5b505afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d9190612db4565b506001600160701b039182169350169050611e94670de0b6b3a7640000611db98484611c38565b935050505090565b600082611eab57506000610b01565b6000611eb78385613007565b905082611ec48583612fe7565b14610c6d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a03565b6019805460ff191660011790558015611f3757611f37816125e6565b506019805460ff19169055565b6019805460ff191660011790556000611f5e826002611c38565b90506000611f6c8383611d28565b905047611f7883612387565b6000611f844783611d28565b9050611f9083826127eb565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506019805460ff19169055505050565b80611fef57611fef6128fb565b6001600160a01b03841660009081526007602052604090205460ff16801561203057506001600160a01b03831660009081526007602052604090205460ff16155b1561204557612040848484612929565b6120f1565b6001600160a01b03841660009081526007602052604090205460ff1615801561208657506001600160a01b03831660009081526007602052604090205460ff165b1561209657612040848484612a4f565b6001600160a01b03841660009081526007602052604090205460ff1680156120d657506001600160a01b03831660009081526007602052604090205460ff165b156120e657612040848484612af8565b6120f1848484612b6b565b8061210757612107601054600f55601254601155565b50505050565b600a546009546000918291825b6008548110156122975782600260006008848154811061214a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121c3575081600360006008848154811061219c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121d957600a54600954945094505050509091565b61222d600260006008848154811061220157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d28565b9250612283600360006008848154811061225757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d28565b91508061228f81613078565b91505061211a565b50600954600a546122a791611c38565b8210156122be57600a546009549350935050509091565b90939092509050565b600081836122e85760405162461bcd60e51b8152600401610a039190612eea565b506000611c0c8486612fe7565b60008060008061230485612baf565b9050600061231186612bcb565b90506000612329826123238986611d28565b90611d28565b979296509094509092505050565b60008080806123468886611e9c565b905060006123548887611e9c565b905060006123628888611e9c565b90506000612374826123238686611d28565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123ca57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561244357600080fd5b505afa158015612457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247b9190612cdb565b8160018151811061249c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506124e7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061253c908590600090869030904290600401612f93565b600060405180830381600087803b15801561255657600080fd5b505af115801561256a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161259f929190612f72565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156125e1573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561266057600080fd5b505afa158015612674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126989190612cdb565b816000815181106126b957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126fb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6127694261012c611c7a565b6040518663ffffffff1660e01b81526004016127889493929190612eb5565b6000604051808303818588803b1580156127a157600080fd5b505af11580156127b5573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161259f929190612f72565b612816307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167d565b60405163f305d71960e01b81523060048201526024810183905260006044820181905260648201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990839060c4016060604051808303818588803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f49190612e45565b5050505050565b600f5415801561290b5750601154155b1561291257565b600f80546010556011805460125560009182905555565b60008060008060008061293b87611cd9565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061296d9088611d28565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461299c9087611d28565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546129cb9086611c7a565b6001600160a01b0389166000908152600260205260409020556129ed81612be7565b6129f78483612c6f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a3c91815260200190565b60405180910390a3505050505050505050565b600080600080600080612a6187611cd9565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612a939087611d28565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054612ac99084611c7a565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546129cb9086611c7a565b600080600080600080612b0a87611cd9565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b3c9088611d28565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612a939087611d28565b600080600080600080612b7d87611cd9565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061299c9087611d28565b6000610b016064611a68600f5485611e9c90919063ffffffff16565b6000610b016064611a6860115485611e9c90919063ffffffff16565b6000612bf1611c15565b90506000612bff8383611e9c565b30600090815260026020526040902054909150612c1c9082611c7a565b3060009081526002602090815260408083209390935560079052205460ff16156125e15730600090815260036020526040902054612c5a9084611c7a565b30600090815260036020526040902055505050565b600a54612c7c9083611d28565b600a55600b54612c8c9082611c7a565b600b555050565b80358015158114612ca357600080fd5b919050565b80516001600160701b0381168114612ca357600080fd5b600060208284031215612cd0578081fd5b8135610c6d816130a9565b600060208284031215612cec578081fd5b8151610c6d816130a9565b60008060408385031215612d09578081fd5b8235612d14816130a9565b91506020830135612d24816130a9565b809150509250929050565b600080600060608486031215612d43578081fd5b8335612d4e816130a9565b92506020840135612d5e816130a9565b929592945050506040919091013590565b60008060408385031215612d81578182fd5b8235612d8c816130a9565b946020939093013593505050565b600060208284031215612dab578081fd5b610c6d82612c93565b600080600060608486031215612dc8578283fd5b612dd184612ca8565b9250612ddf60208501612ca8565b9150604084015163ffffffff81168114612df7578182fd5b809150509250925092565b600060208284031215612e13578081fd5b5035919050565b60008060408385031215612e2c578182fd5b82359150612e3c60208401612c93565b90509250929050565b600080600060608486031215612e59578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612eaa5781516001600160a01b031687529582019590820190600101612e85565b509495945050505050565b848152608060208201526000612ece6080830186612e72565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612f1657858101830151858201604001528201612efa565b81811115612f275783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612f8b6040830184612e72565b949350505050565b85815284602082015260a060408201526000612fb260a0830186612e72565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612fe257612fe2613093565b500190565b60008261300257634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561302157613021613093565b500290565b60008282101561303857613038613093565b500390565b600181811c9082168061305157607f821691505b6020821081141561307257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561308c5761308c613093565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146130be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f421d61fc331284147203d96f5e416799ba0b99ecb8b060c18af87ac22b07e864736f6c63430008040033

Deployed Bytecode Sourcemap

14350:22639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35082:98;;;;;;;;;;-1:-1:-1;35082:98:0;;;;;:::i;:::-;;:::i;:::-;;17456:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36567:191;;;;;;;;;;;;;:::i;18368:161::-;;;;;;;;;;-1:-1:-1;18368:161:0;;;;;:::i;:::-;;:::i;:::-;;;5230:14:1;;5223:22;5205:41;;5193:2;5178:18;18368:161:0;5160:92:1;19489:87:0;;;;;;;;;;-1:-1:-1;19558:10:0;;19489:87;;;12264:25:1;;;12252:2;12237:18;19489:87:0;12219:76:1;16106:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4185:32:1;;;4167:51;;4155:2;4140:18;16106:51:0;4122:102:1;17733:95:0;;;;;;;;;;-1:-1:-1;17813:7:0;;17733:95;;16007:35;;;;;;;;;;;;;;;;18537:313;;;;;;;;;;-1:-1:-1;18537:313:0;;;;;:::i;:::-;;:::i;14594:81::-;;;;;;;;;;;;;;;36201:150;;;;;;;;;;-1:-1:-1;36201:150:0;;;;;:::i;:::-;;:::i;20659:253::-;;;;;;;;;;-1:-1:-1;20659:253:0;;;;;:::i;:::-;;:::i;17642:83::-;;;;;;;;;;-1:-1:-1;17708:9:0;;17642:83;;17708:9;;;;13690:36:1;;13678:2;13663:18;17642:83:0;13645:87:1;21263:479:0;;;;;;;;;;-1:-1:-1;21263:479:0;;;;;:::i;:::-;;:::i;18858:218::-;;;;;;;;;;-1:-1:-1;18858:218:0;;;;;:::i;:::-;;:::i;15423:26::-;;;;;;;;;;;;;;;;19828:377;;;;;;;;;;-1:-1:-1;19828:377:0;;;;;:::i;:::-;;:::i;34710:111::-;;;;;;;;;;-1:-1:-1;34710:111:0;;;;;:::i;:::-;;:::i;20215:436::-;;;;;;;;;;-1:-1:-1;20215:436:0;;;;;:::i;:::-;;:::i;16164:38::-;;;;;;;;;;;;;;;16239:41;;;;;;;;;;-1:-1:-1;16239:41:0;;;;;;;;;;;36359:200;;;;;;;;;;;;;:::i;20920:335::-;;;;;;;;;;-1:-1:-1;20920:335:0;;;;;:::i;:::-;;:::i;34432:123::-;;;;;;;;;;-1:-1:-1;34432:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;34520:27:0;34496:4;34520:27;;;:18;:27;;;;;;;;;34432:123;6307:90;;;;;;;;;;-1:-1:-1;6374:15:0;6307:90;;16287:33;;;;;;;;;;-1:-1:-1;16287:33:0;;;;;;;;;;;15506;;;;;;;;;;;;;;;;17836:198;;;;;;;;;;-1:-1:-1;17836:198:0;;;;;:::i;:::-;;:::i;5895:148::-;;;;;;;;;;;;;:::i;15652:53::-;;;;;;;;;;;;;;;;34829:127;;;;;;;;;;-1:-1:-1;34829:127:0;;;;;:::i;:::-;;:::i;35732:133::-;;;;;;;;;;-1:-1:-1;35732:133:0;;;;;:::i;:::-;;:::i;19361:120::-;;;;;;;;;;-1:-1:-1;19361:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19453:20:0;19429:4;19453:20;;;:11;:20;;;;;;;;;19361:120;16049:35;;;;;;;;;;;;;;;;5681:79;;;;;;;;;;-1:-1:-1;5719:7:0;5746:6;-1:-1:-1;;;;;5746:6:0;5681:79;;35188:122;;;;;;;;;;-1:-1:-1;35188:122:0;;;;;:::i;:::-;;:::i;35873:141::-;;;;;;;;;;-1:-1:-1;35873:141:0;;;;;:::i;:::-;;:::i;17547:87::-;;;;;;;;;;;;;:::i;19584:120::-;;;;;;;;;;-1:-1:-1;19673:23:0;;19584:120;;19084:269;;;;;;;;;;-1:-1:-1;19084:269:0;;;;;:::i;:::-;;:::i;14473:93::-;;;;;;;;;;-1:-1:-1;14473:93:0;;;;-1:-1:-1;;;;;14473:93:0;;;18042:167;;;;;;;;;;-1:-1:-1;18042:167:0;;;;;:::i;:::-;;:::i;35437:112::-;;;;;;;;;;-1:-1:-1;35437:112:0;;;;;:::i;:::-;;:::i;19712:108::-;;;;;;;;;;-1:-1:-1;19795:17:0;;19712:108;;36022:171;;;;;;;;;;-1:-1:-1;36022:171:0;;;;;:::i;:::-;;:::i;34563:139::-;;;;;;;;;;-1:-1:-1;34563:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;34659:35:0;34635:4;34659:35;;;:26;:35;;;;;;;;;34563:139;15608:35;;;;;;;;;;;;;;;;18217:143;;;;;;;;;;-1:-1:-1;18217:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18325:18:0;;;18298:7;18325:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18217:143;34964:110;;;;;;;;;;-1:-1:-1;34964:110:0;;;;;:::i;:::-;;:::i;35318:111::-;;;;;;;;;;-1:-1:-1;35318:111:0;;;;;:::i;:::-;;:::i;35557:166::-;;;;;;;;;;-1:-1:-1;35557:166:0;;;;;:::i;:::-;;:::i;6051:244::-;;;;;;;;;;-1:-1:-1;6051:244:0;;;;;:::i;:::-;;:::i;35082:98::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;;;;;;;;;35156:7:::1;:16:::0;35082:98::o;17456:83::-;17493:13;17526:5;17519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17456:83;:::o;36567:191::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;36621:30:::1;36646:4;36621:24;:30::i;:::-;36672:1;36662:7;:11:::0;36700:1:::1;36684:13;:17:::0;36727:23:::1;36712:12;:38:::0;36567:191::o;18368:161::-;18443:4;18460:39;156:10;18483:7;18492:6;18460:8;:39::i;:::-;-1:-1:-1;18517:4:0;18368:161;;;;;:::o;18537:313::-;18635:4;18652:36;18662:6;18670:9;18681:6;18652:9;:36::i;:::-;18699:121;18708:6;156:10;18730:89;18768:6;18730:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18730:19:0;;;;;;:11;:19;;;;;;;;156:10;18730:33;;;;;;;;;;:37;:89::i;:::-;18699:8;:121::i;:::-;-1:-1:-1;18838:4:0;18537:313;;;;;:::o;36201:150::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;36271:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36271:25:0;;::::1;;::::0;;36312:31:::1;::::0;::::1;::::0;::::1;::::0;36288:8;5230:14:1;5223:22;5205:41;;5193:2;5178:18;;5160:92;36312:31:0::1;;;;;;;;36201:150:::0;:::o;20659:253::-;20725:7;20764;;20753;:18;;20745:73;;;;-1:-1:-1;;;20745:73:0;;7221:2:1;20745:73:0;;;7203:21:1;7260:2;7240:18;;;7233:30;7299:34;7279:18;;;7272:62;-1:-1:-1;;;7350:18:1;;;7343:40;7400:19;;20745:73:0;7193:232:1;20745:73:0;20829:19;20852:10;:8;:10::i;:::-;20829:33;-1:-1:-1;20880:24:0;:7;20829:33;20880:11;:24::i;:::-;20873:31;20659:253;-1:-1:-1;;;20659:253:0:o;21263:479::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21345:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21337:60;;;::::0;-1:-1:-1;;;21337:60:0;;8798:2:1;21337:60:0::1;::::0;::::1;8780:21:1::0;8837:2;8817:18;;;8810:30;8876:29;8856:18;;;8849:57;8923:18;;21337:60:0::1;8770:177:1::0;21337:60:0::1;21413:9;21408:327;21432:9;:16:::0;21428:20;::::1;21408:327;;;21490:7;-1:-1:-1::0;;;;;21474:23:0::1;:9;21484:1;21474:12;;;;;;-1:-1:-1::0;;;21474:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21474:12:0::1;:23;21470:254;;;21533:9;21543:16:::0;;:20:::1;::::0;21562:1:::1;::::0;21543:20:::1;:::i;:::-;21533:31;;;;;;-1:-1:-1::0;;;21533:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;21518:9:::1;:12:::0;;-1:-1:-1;;;;;21533:31:0;;::::1;::::0;21528:1;;21518:12;::::1;;;-1:-1:-1::0;;;21518:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21518:46:0::1;-1:-1:-1::0;;;;;21518:46:0;;::::1;;::::0;;21583:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21622:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21622:28:0::1;::::0;;21669:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;21669:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21669:15:0;;;;;-1:-1:-1;;;;;;21669:15:0::1;::::0;;;;;21408:327:::1;21263:479:::0;:::o;21470:254::-:1;21450:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21408:327;;;;21263:479:::0;:::o;18858:218::-;156:10;18946:4;18995:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18995:34:0;;;;;;;;;;18946:4;;18963:83;;18986:7;;18995:50;;19034:10;18995:38;:50::i;19828:377::-;156:10;19880:14;19929:19;;;:11;:19;;;;;;;;19928:20;19920:77;;;;-1:-1:-1;;;19920:77:0;;11907:2:1;19920:77:0;;;11889:21:1;11946:2;11926:18;;;11919:30;11985:34;11965:18;;;11958:62;-1:-1:-1;;;12036:18:1;;;12029:42;12088:19;;19920:77:0;11879:234:1;19920:77:0;20009:15;20033:19;20044:7;20033:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20081:15:0;;;;;;:7;:15;;;;;;20008:44;;-1:-1:-1;20081:28:0;;:15;-1:-1:-1;20008:44:0;20081:19;:28::i;:::-;-1:-1:-1;;;;;20063:15:0;;;;;;:7;:15;;;;;:46;20130:7;;:20;;20142:7;20130:11;:20::i;:::-;20120:7;:30;20174:10;;:23;;20189:7;20174:14;:23::i;:::-;20161:10;:36;-1:-1:-1;;;19828:377:0:o;34710:111::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34779:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34779:34:0::1;34809:4;34779:34;::::0;;34710:111::o;20215:436::-;20305:7;20344;;20333;:18;;20325:62;;;;-1:-1:-1;;;20325:62:0;;9154:2:1;20325:62:0;;;9136:21:1;9193:2;9173:18;;;9166:30;9232:33;9212:18;;;9205:61;9283:18;;20325:62:0;9126:181:1;20325:62:0;20403:17;20398:246;;20438:15;20462:19;20473:7;20462:10;:19::i;:::-;-1:-1:-1;20437:44:0;;-1:-1:-1;20496:14:0;;-1:-1:-1;;;;;20496:14:0;20398:246;20545:23;20576:19;20587:7;20576:10;:19::i;:::-;-1:-1:-1;20543:52:0;;-1:-1:-1;20610:22:0;;-1:-1:-1;;;;;20610:22:0;36359:200;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;36418:31:::1;36443:5;36418:24;:31::i;:::-;36470:1;36460:7;:11:::0;;;36482:13:::1;:17:::0;36525:26:::1;36510:12;:41:::0;36359:200::o;20920:335::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21005:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21004:21;20996:61;;;::::0;-1:-1:-1;;;20996:61:0;;8798:2:1;20996:61:0::1;::::0;::::1;8780:21:1::0;8837:2;8817:18;;;8810:30;8876:29;8856:18;;;8849:57;8923:18;;20996:61:0::1;8770:177:1::0;20996:61:0::1;-1:-1:-1::0;;;;;21071:16:0;::::1;21090:1;21071:16:::0;;;:7:::1;:16;::::0;;;;;:20;21068:108:::1;;-1:-1:-1::0;;;;;21147:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21127:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21108:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21068:108:::1;-1:-1:-1::0;;;;;21186:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21186:27:0::1;21209:4;21186:27:::0;;::::1;::::0;;;21224:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21224:23:0::1;::::0;;::::1;::::0;;20920:335::o;17836:198::-;-1:-1:-1;;;;;17926:20:0;;17902:7;17926:20;;;:11;:20;;;;;;;;17922:49;;;-1:-1:-1;;;;;;17955:16:0;;;;;:7;:16;;;;;;;17836:198::o;17922:49::-;-1:-1:-1;;;;;18009:16:0;;;;;;:7;:16;;;;;;17989:37;;:19;:37::i;5895:148::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;6002:1:::1;5986:6:::0;;5965:40:::1;::::0;-1:-1:-1;;;;;5986:6:0;;::::1;::::0;5965:40:::1;::::0;6002:1;;5965:40:::1;6033:1;6016:19:::0;;-1:-1:-1;;;;;;6016:19:0::1;::::0;;5895:148::o;34829:127::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34906:35:0::1;;::::0;;;:26:::1;:35;::::0;;;;:42;;-1:-1:-1;;34906:42:0::1;34944:4;34906:42;::::0;;34829:127::o;35732:133::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35836:21:::1;:12:::0;35851:6:::1;35836:21;:::i;:::-;35816:17;:41:::0;-1:-1:-1;35732:133:0:o;35188:122::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35274:13:::1;:28:::0;35188:122::o;35873:141::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35961:16:::1;:45:::0;;-1:-1:-1;;;;;;35961:45:0::1;-1:-1:-1::0;;;;;35961:45:0;;;::::1;::::0;;;::::1;::::0;;35873:141::o;17547:87::-;17586:13;17619:7;17612:14;;;;;:::i;19084:269::-;19177:4;19194:129;156:10;19217:7;19226:96;19265:15;19226:96;;;;;;;;;;;;;;;;;156:10;19226:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19226:34:0;;;;;;;;;;;;:38;:96::i;18042:167::-;18120:4;18137:42;156:10;18161:9;18172:6;18137:9;:42::i;35437:112::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35515:16:::1;:26:::0;35437:112::o;36022:171::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;36099:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;36099:32:0;;::::1;;::::0;;36147:38:::1;::::0;::::1;::::0;::::1;::::0;36123:8;5230:14:1;5223:22;5205:41;;5193:2;5178:18;;5160:92;34964:110:0;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35031:27:0::1;35061:5;35031:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35031:35:0::1;::::0;;34964:110::o;35318:111::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35395:12:::1;:26:::0;35318:111::o;35557:166::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;35665:23:::1;:50:::0;35557:166::o;6051:244::-;5808:6;;-1:-1:-1;;;;;5808:6:0;156:10;5808:22;5800:67;;;;-1:-1:-1;;;5800:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6140:22:0;::::1;6132:73;;;::::0;-1:-1:-1;;;6132:73:0;;7632:2:1;6132:73:0::1;::::0;::::1;7614:21:1::0;7671:2;7651:18;;;7644:30;7710:34;7690:18;;;7683:62;-1:-1:-1;;;7761:18:1;;;7754:36;7807:19;;6132:73:0::1;7604:228:1::0;6132:73:0::1;6242:6;::::0;;6221:38:::1;::::0;-1:-1:-1;;;;;6221:38:0;;::::1;::::0;6242:6;::::1;::::0;6221:38:::1;::::0;::::1;6270:6;:17:::0;;-1:-1:-1;;;;;;6270:17:0::1;-1:-1:-1::0;;;;;6270:17:0;;;::::1;::::0;;;::::1;::::0;;6051:244::o;21750:337::-;-1:-1:-1;;;;;21843:19:0;;21835:68;;;;-1:-1:-1;;;21835:68:0;;11502:2:1;21835:68:0;;;11484:21:1;11541:2;11521:18;;;11514:30;11580:34;11560:18;;;11553:62;-1:-1:-1;;;11631:18:1;;;11624:34;11675:19;;21835:68:0;11474:226:1;21835:68:0;-1:-1:-1;;;;;21922:21:0;;21914:68;;;;-1:-1:-1;;;21914:68:0;;8039:2:1;21914:68:0;;;8021:21:1;8078:2;8058:18;;;8051:30;8117:34;8097:18;;;8090:62;-1:-1:-1;;;8168:18:1;;;8161:32;8210:19;;21914:68:0;8011:224:1;21914:68:0;-1:-1:-1;;;;;21995:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22047:32;;12264:25:1;;;22047:32:0;;12237:18:1;22047:32:0;;;;;;;21750:337;;;:::o;22095:2635::-;-1:-1:-1;;;;;22217:18:0;;22209:68;;;;-1:-1:-1;;;22209:68:0;;11096:2:1;22209:68:0;;;11078:21:1;11135:2;11115:18;;;11108:30;11174:34;11154:18;;;11147:62;-1:-1:-1;;;11225:18:1;;;11218:35;11270:19;;22209:68:0;11068:227:1;22209:68:0;-1:-1:-1;;;;;22296:16:0;;22288:64;;;;-1:-1:-1;;;22288:64:0;;6817:2:1;22288:64:0;;;6799:21:1;6856:2;6836:18;;;6829:30;6895:34;6875:18;;;6868:62;-1:-1:-1;;;6946:18:1;;;6939:33;6989:19;;22288:64:0;6789:225:1;22288:64:0;22380:1;22371:6;:10;22363:64;;;;-1:-1:-1;;;22363:64:0;;10686:2:1;22363:64:0;;;10668:21:1;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;-1:-1:-1;;;10815:18:1;;;10808:39;10864:19;;22363:64:0;10658:231:1;22363:64:0;5719:7;5746:6;-1:-1:-1;;;;;22441:15:0;;;5746:6;;22441:15;;;;:32;;-1:-1:-1;5719:7:0;5746:6;-1:-1:-1;;;;;22460:13:0;;;5746:6;;22460:13;;22441:32;:69;;;;-1:-1:-1;;;;;;22478:32:0;;;;;;:26;:32;;;;;;;;22477:33;22441:69;22438:176;;;22545:12;;22535:6;:22;;22527:75;;;;-1:-1:-1;;;22527:75:0;;9514:2:1;22527:75:0;;;9496:21:1;9553:2;9533:18;;;9526:30;9592:34;9572:18;;;9565:62;-1:-1:-1;;;9643:18:1;;;9636:38;9691:19;;22527:75:0;9486:230:1;22527:75:0;22626:28;22657:24;22675:4;22657:9;:24::i;:::-;22747:23;;22786:16;;22626:55;;-1:-1:-1;22723:47:0;;;;22786:16;;22785:17;:42;;;;-1:-1:-1;22806:21:0;;;;;;;22785:42;:65;;;;;22837:13;-1:-1:-1;;;;;22831:19:0;:2;-1:-1:-1;;;;;22831:19:0;;22785:65;22781:1089;;;22871:23;22867:165;;;15852:22;22915:50;;22984:32;22995:20;22984:10;:32::i;:::-;23103:14;;23063:21;;23103:14;;;;;:47;;;;;23139:10;23121:7;:29;23103:47;23099:760;;;23169:21;23193:19;:17;:19::i;:::-;23169:43;;23229:34;23266:57;23316:6;23266:45;23307:3;23266:36;23284:17;;23266:13;:17;;:36;;;;:::i;:::-;:40;;:45::i;:57::-;23229:94;;23354:17;;23344:7;:27;23340:504;;;23406:26;23396:6;:36;23392:435;;23465:17;;;-1:-1:-1;23503:31:0;23517:16;23465:17;23529:3;23517:11;:16::i;:::-;23503:13;:31::i;:::-;23392:435;;;23605:16;;23582:20;;:39;;;;:::i;:::-;23564:15;:57;23560:267;;;23644:18;23665:37;23688:13;23665:18;:6;23676;23665:10;:18::i;:37::-;23644:58;;23723:25;23737:10;23723:13;:25::i;:::-;-1:-1:-1;23792:15:0;23769:20;:38;23560:267;23099:760;;;22781:1089;;23948:12;;23924:20;:36;23921:112;;24009:12;;23986:35;;23921:112;15769:21;24070:53;;;;;;;24152;;-1:-1:-1;24189:16:0;;;;24188:17;24152:53;:91;;;;;24230:13;-1:-1:-1;;;;;24222:21:0;:4;-1:-1:-1;;;;;24222:21:0;;;24152:91;:129;;;;-1:-1:-1;24260:21:0;;;;;;;24152:129;24134:318;;;15769:21;24308:52;;24404:36;24419:20;24404:14;:36::i;:::-;-1:-1:-1;;;;;24579:24:0;;24462:12;24579:24;;;:18;:24;;;;;;24477:4;;24579:24;;;:50;;-1:-1:-1;;;;;;24607:22:0;;;;;;:18;:22;;;;;;;;24579:50;24576:96;;;-1:-1:-1;24655:5:0;24576:96;24684:38;24699:4;24704:2;24707:6;24714:7;24684:14;:38::i;:::-;22095:2635;;;;;;;:::o;1463:192::-;1549:7;1585:12;1577:6;;;;1569:29;;;;-1:-1:-1;;;1569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1609:9:0;1621:5;1625:1;1621;:5;:::i;:::-;1609:17;1463:192;-1:-1:-1;;;;;1463:192:0:o;32346:163::-;32387:7;32408:15;32425;32444:19;:17;:19::i;:::-;32407:56;;-1:-1:-1;32407:56:0;-1:-1:-1;32481:20:0;32407:56;;32481:11;:20::i;:::-;32474:27;;;;32346:163;:::o;1923:132::-;1981:7;2008:39;2012:1;2015;2008:39;;;;;;;;;;;;;;;;;:3;:39::i;1130:181::-;1188:7;;1220:5;1224:1;1220;:5;:::i;:::-;1208:17;;1249:1;1244;:6;;1236:46;;;;-1:-1:-1;;;1236:46:0;;8442:2:1;1236:46:0;;;8424:21:1;8481:2;8461:18;;;8454:30;8520:29;8500:18;;;8493:57;8567:18;;1236:46:0;8414:177:1;31144:419:0;31203:7;31212;31221;31230;31239;31248;31269:23;31294:12;31308:18;31330:20;31342:7;31330:11;:20::i;:::-;31268:82;;;;;;31362:15;31379:23;31404:12;31420:50;31432:7;31441:4;31447:10;31459;:8;:10::i;:::-;31420:11;:50::i;:::-;31361:109;;;;-1:-1:-1;31361:109:0;;-1:-1:-1;31521:15:0;;-1:-1:-1;31538:4:0;;-1:-1:-1;31544:10:0;;-1:-1:-1;31144:419:0;;-1:-1:-1;;;;;31144:419:0:o;1319:136::-;1377:7;1404:43;1408:1;1411;1404:43;;;;;;;;;;;;;;;;;:3;:43::i;25656:418::-;16839:16;:23;;-1:-1:-1;;16839:23:0;16858:4;16839:23;;;25764:21:::1;25796:38;25813:20:::0;25796:16:::1;:38::i;:::-;25845:26;25874:41;:21;25900:14:::0;25874:25:::1;:41::i;:::-;25986:16;::::0;26046::::1;::::0;26027:13:::1;::::0;25845:70;;-1:-1:-1;25965:99:0::1;::::0;-1:-1:-1;;;;;25986:16:0;;::::1;::::0;26004:59:::1;::::0;26046:16;26004:37:::1;::::0;25845:70;;26004:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;:::-;25965:20;:99::i;:::-;-1:-1:-1::0;;16885:16:0;:24;;-1:-1:-1;;16885:24:0;;;-1:-1:-1;25656:418:0:o;33080:270::-;33130:7;33148:19;33185:13;33148:51;;33209:9;33220;33234:4;-1:-1:-1;;;;;33234:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33208:44:0;;;;-1:-1:-1;33208:44:0;;-1:-1:-1;33268:26:0;33287:6;33268:14;33208:44;;33268:8;:14::i;:26::-;33261:33;;;;;33080:270;:::o;1663:250::-;1721:7;1745:6;1741:47;;-1:-1:-1;1775:1:0;1768:8;;1741:47;1800:9;1812:5;1816:1;1812;:5;:::i;:::-;1800:17;-1:-1:-1;1845:1:0;1836:5;1840:1;1800:17;1836:5;:::i;:::-;:10;1828:56;;;;-1:-1:-1;;;1828:56:0;;9923:2:1;1828:56:0;;;9905:21:1;9962:2;9942:18;;;9935:30;10001:34;9981:18;;;9974:62;-1:-1:-1;;;10052:18:1;;;10045:31;10093:19;;1828:56:0;9895:223:1;26084:135:0;16839:16;:23;;-1:-1:-1;;16839:23:0;16858:4;16839:23;;;26155:10;;26151:61:::1;;26179:24;26196:6;26179:16;:24::i;:::-;-1:-1:-1::0;16885:16:0;:24;;-1:-1:-1;;16885:24:0;;;26084:135::o;24738:910::-;16839:16;:23;;-1:-1:-1;;16839:23:0;16858:4;16839:23;;;:16;24889:27:::1;:20:::0;24914:1:::1;24889:24;:27::i;:::-;24874:42:::0;-1:-1:-1;24927:17:0::1;24947:30;:20:::0;24874:42;24947:24:::1;:30::i;:::-;24927:50:::0;-1:-1:-1;25280:21:0::1;25346:22;25363:4:::0;25346:16:::1;:22::i;:::-;25432:18;25453:41;:21;25479:14:::0;25453:25:::1;:41::i;:::-;25432:62;;25544:35;25557:9;25568:10;25544:12;:35::i;:::-;25597:43;::::0;;13426:25:1;;;13482:2;13467:18;;13460:34;;;13510:18;;;13503:34;;;25597:43:0::1;::::0;13414:2:1;13399:18;25597:43:0::1;;;;;;;-1:-1:-1::0;;16885:16:0;:24;;-1:-1:-1;;16885:24:0;;;-1:-1:-1;;;24738:910:0:o;27996:688::-;28107:7;28103:40;;28129:14;:12;:14::i;:::-;-1:-1:-1;;;;;28160:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28184:22:0;;;;;;:11;:22;;;;;;;;28183:23;28160:46;28156:467;;;28223:48;28245:6;28253:9;28264:6;28223:21;:48::i;:::-;28156:467;;;-1:-1:-1;;;;;28294:19:0;;;;;;:11;:19;;;;;;;;28293:20;:46;;;;-1:-1:-1;;;;;;28317:22:0;;;;;;:11;:22;;;;;;;;28293:46;28289:334;;;28356:46;28376:6;28384:9;28395:6;28356:19;:46::i;28289:334::-;-1:-1:-1;;;;;28424:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28447:22:0;;;;;;:11;:22;;;;;;;;28424:45;28420:203;;;28486:48;28508:6;28516:9;28527:6;28486:21;:48::i;28420:203::-;28567:44;28585:6;28593:9;28604:6;28567:17;:44::i;:::-;28639:7;28635:41;;28661:15;34353;;34343:7;:25;34395:21;;34379:13;:37;34299:125;28661:15;27996:688;;;;:::o;32517:555::-;32614:7;;32650;;32567;;;;;32668:289;32692:9;:16;32688:20;;32668:289;;;32758:7;32734;:21;32742:9;32752:1;32742:12;;;;;;-1:-1:-1;;;32742:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32742:12:0;32734:21;;;;;;;;;;;;;:31;;:66;;;32793:7;32769;:21;32777:9;32787:1;32777:12;;;;;;-1:-1:-1;;;32777:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32777:12:0;32769:21;;;;;;;;;;;;;:31;32734:66;32730:97;;;32810:7;;32819;;32802:25;;;;;;;32517:555;;:::o;32730:97::-;32852:34;32864:7;:21;32872:9;32882:1;32872:12;;;;;;-1:-1:-1;;;32872:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32872:12:0;32864:21;;;;;;;;;;;;;32852:7;;:11;:34::i;:::-;32842:44;;32911:34;32923:7;:21;32931:9;32941:1;32931:12;;;;;;-1:-1:-1;;;32931:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32931:12:0;32923:21;;;;;;;;;;;;;32911:7;;:11;:34::i;:::-;32901:44;-1:-1:-1;32710:3:0;;;;:::i;:::-;;;;32668:289;;;-1:-1:-1;32993:7:0;;32981;;:20;;:11;:20::i;:::-;32971:7;:30;32967:61;;;33011:7;;33020;;33003:25;;;;;;32517:555;;:::o;32967:61::-;33047:7;;33056;;-1:-1:-1;32517:555:0;-1:-1:-1;32517:555:0:o;2063:278::-;2149:7;2184:12;2177:5;2169:28;;;;-1:-1:-1;;;2169:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2208:9:0;2220:5;2224:1;2220;:5;:::i;31571:330::-;31631:7;31640;31649;31669:12;31684:24;31700:7;31684:15;:24::i;:::-;31669:39;;31719:18;31740:30;31762:7;31740:21;:30::i;:::-;31719:51;-1:-1:-1;31781:23:0;31807:33;31719:51;31807:17;:7;31819:4;31807:11;:17::i;:::-;:21;;:33::i;:::-;31781:59;31876:4;;-1:-1:-1;31882:10:0;;-1:-1:-1;31571:330:0;;-1:-1:-1;;;31571:330:0:o;31909:429::-;32024:7;;;;32080:24;:7;32092:11;32080;:24::i;:::-;32062:42;-1:-1:-1;32115:12:0;32130:21;:4;32139:11;32130:8;:21::i;:::-;32115:36;-1:-1:-1;32162:18:0;32183:27;:10;32198:11;32183:14;:27::i;:::-;32162:48;-1:-1:-1;32221:23:0;32247:33;32162:48;32247:17;:7;32259:4;32247:11;:17::i;:33::-;32299:7;;;;-1:-1:-1;32325:4:0;;-1:-1:-1;31909:429:0;;-1:-1:-1;;;;;;;31909:429:0:o;26227:658::-;26377:16;;;26391:1;26377:16;;;;;;;;26353:21;;26377:16;;;;;;;;;;-1:-1:-1;26377:16:0;26353:40;;26422:4;26404;26409:1;26404:7;;;;;;-1:-1:-1;;;26404:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;26404:23:0;;;-1:-1:-1;;;;;26404:23:0;;;;;26448:15;-1:-1:-1;;;;;26448:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26438:4;26443:1;26438:7;;;;;;-1:-1:-1;;;26438:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;26438:32:0;;;-1:-1:-1;;;;;26438:32:0;;;;;26483:62;26500:4;26515:15;26533:11;26483:8;:62::i;:::-;26584:240;;-1:-1:-1;;;26584:240:0;;-1:-1:-1;;;;;26584:15:0;:66;;;;:240;;26665:11;;26691:1;;26735:4;;26762;;26798:15;;26584:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26842:35;26859:11;26872:4;26842:35;;;;;;;:::i;:::-;;;;;;;;26227:658;;:::o;36766:126::-;36858:26;;-1:-1:-1;;;;;36858:18:0;;;:26;;;;;36877:6;;36858:26;;;;36877:6;36858:18;:26;;;;;;;;;;;;;;;;;;;;;36766:126;;:::o;26893:570::-;27038:16;;;27052:1;27038:16;;;;;;;;27014:21;;27038:16;;;;;;;;;;-1:-1:-1;27038:16:0;27014:40;;27075:15;-1:-1:-1;;;;;27075:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27065:4;27070:1;27065:7;;;;;;-1:-1:-1;;;27065:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;27065:32:0;;;-1:-1:-1;;;;;27065:32:0;;;;;27126:4;27108;27113:1;27108:7;;;;;;-1:-1:-1;;;27108:7:0;;;;;;;;;-1:-1:-1;;;;;27108:23:0;;;:7;;;;;;;;;:23;27168:15;:66;;27242:6;27264:1;27311:4;27330:11;27372:24;:15;27392:3;27372:19;:24::i;:::-;27168:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27425:30;27442:6;27450:4;27425:30;;;;;;;:::i;27471:517::-;27619:62;27636:4;27651:15;27669:11;27619:8;:62::i;:::-;27724:256;;-1:-1:-1;;;27724:256:0;;27796:4;27724:256;;;4794:34:1;4844:18;;;4837:34;;;-1:-1:-1;4887:18:1;;;4880:34;;;4930:18;;;4923:34;-1:-1:-1;;;;;27928:11:0;4994:15:1;;4973:19;;;4966:44;27954:15:0;5026:19:1;;;5019:35;27724:15:0;:31;;;;27763:9;;4728:19:1;;27724:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27471:517;;:::o;34057:234::-;34103:7;;:12;:34;;;;-1:-1:-1;34119:13:0;;:18;34103:34;34100:46;;;34057:234::o;34100:46::-;34176:7;;;34158:15;:25;34218:13;;;34194:21;:37;-1:-1:-1;34244:11:0;;;;34266:17;34057:234::o;29782:560::-;29885:15;29902:23;29927:12;29941:23;29966:12;29980:18;30002:19;30013:7;30002:10;:19::i;:::-;-1:-1:-1;;;;;30047:15:0;;;;;;:7;:15;;;;;;29884:137;;-1:-1:-1;29884:137:0;;-1:-1:-1;29884:137:0;;-1:-1:-1;29884:137:0;-1:-1:-1;29884:137:0;-1:-1:-1;29884:137:0;-1:-1:-1;30047:28:0;;30067:7;30047:19;:28::i;:::-;-1:-1:-1;;;;;30029:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30104:7;:15;;;;:28;;30124:7;30104:19;:28::i;:::-;-1:-1:-1;;;;;30086:15:0;;;;;;;:7;:15;;;;;;:46;;;;30164:18;;;;;;;:39;;30187:15;30164:22;:39::i;:::-;-1:-1:-1;;;;;30143:18:0;;;;;;:7;:18;;;;;:60;30214:26;30229:10;30214:14;:26::i;:::-;30251:23;30263:4;30269;30251:11;:23::i;:::-;30307:9;-1:-1:-1;;;;;30290:44:0;30299:6;-1:-1:-1;;;;;30290:44:0;;30318:15;30290:44;;;;12264:25:1;;12252:2;12237:18;;12219:76;30290:44:0;;;;;;;;29782:560;;;;;;;;;:::o;29202:572::-;29303:15;29320:23;29345:12;29359:23;29384:12;29398:18;29420:19;29431:7;29420:10;:19::i;:::-;-1:-1:-1;;;;;29465:15:0;;;;;;:7;:15;;;;;;29302:137;;-1:-1:-1;29302:137:0;;-1:-1:-1;29302:137:0;;-1:-1:-1;29302:137:0;-1:-1:-1;29302:137:0;-1:-1:-1;29302:137:0;-1:-1:-1;29465:28:0;;29302:137;29465:19;:28::i;:::-;-1:-1:-1;;;;;29447:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29525:18;;;;;:7;:18;;;;;:39;;29548:15;29525:22;:39::i;:::-;-1:-1:-1;;;;;29504:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29596:7;:18;;;;:39;;29619:15;29596:22;:39::i;30350:631::-;30453:15;30470:23;30495:12;30509:23;30534:12;30548:18;30570:19;30581:7;30570:10;:19::i;:::-;-1:-1:-1;;;;;30615:15:0;;;;;;:7;:15;;;;;;30452:137;;-1:-1:-1;30452:137:0;;-1:-1:-1;30452:137:0;;-1:-1:-1;30452:137:0;-1:-1:-1;30452:137:0;-1:-1:-1;30452:137:0;-1:-1:-1;30615:28:0;;30635:7;30615:19;:28::i;:::-;-1:-1:-1;;;;;30597:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30672:7;:15;;;;:28;;30692:7;30672:19;:28::i;28692:502::-;28791:15;28808:23;28833:12;28847:23;28872:12;28886:18;28908:19;28919:7;28908:10;:19::i;:::-;-1:-1:-1;;;;;28956:15:0;;;;;;:7;:15;;;;;;28790:137;;-1:-1:-1;28790:137:0;;-1:-1:-1;28790:137:0;;-1:-1:-1;28790:137:0;-1:-1:-1;28790:137:0;-1:-1:-1;28790:137:0;-1:-1:-1;28956:28:0;;28790:137;28956:19;:28::i;33721:154::-;33785:7;33812:55;33851:5;33812:20;33824:7;;33812;:11;;:20;;;;:::i;33883:166::-;33953:7;33980:61;34025:5;33980:26;33992:13;;33980:7;:11;;:26;;;;:::i;33358:355::-;33421:19;33444:10;:8;:10::i;:::-;33421:33;-1:-1:-1;33465:18:0;33486:27;:10;33421:33;33486:14;:27::i;:::-;33565:4;33549:22;;;;:7;:22;;;;;;33465:48;;-1:-1:-1;33549:38:0;;33465:48;33549:26;:38::i;:::-;33540:4;33524:22;;;;:7;:22;;;;;;;;:63;;;;33601:11;:26;;;;;;33598:107;;;33683:4;33667:22;;;;:7;:22;;;;;;:38;;33694:10;33667:26;:38::i;:::-;33658:4;33642:22;;;;:7;:22;;;;;:63;33358:355;;;:::o;30989:147::-;31067:7;;:17;;31079:4;31067:11;:17::i;:::-;31057:7;:27;31108:10;;:20;;31123:4;31108:14;:20::i;:::-;31095:10;:33;-1:-1:-1;;30989:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:188::-;258:13;;-1:-1:-1;;;;;300:42:1;;290:53;;280:2;;357:1;354;347:12;372:257;431:6;484:2;472:9;463:7;459:23;455:32;452:2;;;505:6;497;490:22;452:2;549:9;536:23;568:31;593:5;568:31;:::i;634:261::-;704:6;757:2;745:9;736:7;732:23;728:32;725:2;;;778:6;770;763:22;725:2;815:9;809:16;834:31;859:5;834:31;:::i;900:398::-;968:6;976;1029:2;1017:9;1008:7;1004:23;1000:32;997:2;;;1050:6;1042;1035:22;997:2;1094:9;1081:23;1113:31;1138:5;1113:31;:::i;:::-;1163:5;-1:-1:-1;1220:2:1;1205:18;;1192:32;1233:33;1192:32;1233:33;:::i;:::-;1285:7;1275:17;;;987:311;;;;;:::o;1303:466::-;1380:6;1388;1396;1449:2;1437:9;1428:7;1424:23;1420:32;1417:2;;;1470:6;1462;1455:22;1417:2;1514:9;1501:23;1533:31;1558:5;1533:31;:::i;:::-;1583:5;-1:-1:-1;1640:2:1;1625:18;;1612:32;1653:33;1612:32;1653:33;:::i;:::-;1407:362;;1705:7;;-1:-1:-1;;;1759:2:1;1744:18;;;;1731:32;;1407:362::o;1774:325::-;1842:6;1850;1903:2;1891:9;1882:7;1878:23;1874:32;1871:2;;;1924:6;1916;1909:22;1871:2;1968:9;1955:23;1987:31;2012:5;1987:31;:::i;:::-;2037:5;2089:2;2074:18;;;;2061:32;;-1:-1:-1;;;1861:238:1:o;2104:190::-;2160:6;2213:2;2201:9;2192:7;2188:23;2184:32;2181:2;;;2234:6;2226;2219:22;2181:2;2262:26;2278:9;2262:26;:::i;2299:470::-;2386:6;2394;2402;2455:2;2443:9;2434:7;2430:23;2426:32;2423:2;;;2476:6;2468;2461:22;2423:2;2504:40;2534:9;2504:40;:::i;:::-;2494:50;;2563:49;2608:2;2597:9;2593:18;2563:49;:::i;:::-;2553:59;;2655:2;2644:9;2640:18;2634:25;2699:10;2692:5;2688:22;2681:5;2678:33;2668:2;;2730:6;2722;2715:22;2668:2;2758:5;2748:15;;;2413:356;;;;;:::o;2774:190::-;2833:6;2886:2;2874:9;2865:7;2861:23;2857:32;2854:2;;;2907:6;2899;2892:22;2854:2;-1:-1:-1;2935:23:1;;2844:120;-1:-1:-1;2844:120:1:o;2969:258::-;3034:6;3042;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3116:6;3108;3101:22;3063:2;3157:9;3144:23;3134:33;;3186:35;3217:2;3206:9;3202:18;3186:35;:::i;:::-;3176:45;;3053:174;;;;;:::o;3232:316::-;3320:6;3328;3336;3389:2;3377:9;3368:7;3364:23;3360:32;3357:2;;;3410:6;3402;3395:22;3357:2;3444:9;3438:16;3428:26;;3494:2;3483:9;3479:18;3473:25;3463:35;;3538:2;3527:9;3523:18;3517:25;3507:35;;3347:201;;;;;:::o;3553:463::-;3606:3;3644:5;3638:12;3671:6;3666:3;3659:19;3697:4;3726:2;3721:3;3717:12;3710:19;;3763:2;3756:5;3752:14;3784:3;3796:195;3810:6;3807:1;3804:13;3796:195;;;3875:13;;-1:-1:-1;;;;;3871:39:1;3859:52;;3931:12;;;;3966:15;;;;3907:1;3825:9;3796:195;;;-1:-1:-1;4007:3:1;;3614:402;-1:-1:-1;;;;;3614:402:1:o;5492:510::-;5763:6;5752:9;5745:25;5806:3;5801:2;5790:9;5786:18;5779:31;5726:4;5827:57;5879:3;5868:9;5864:19;5856:6;5827:57;:::i;:::-;-1:-1:-1;;;;;5920:32:1;;;;5915:2;5900:18;;5893:60;-1:-1:-1;5984:2:1;5969:18;5962:34;5819:65;5735:267;-1:-1:-1;;5735:267:1:o;6007:603::-;6119:4;6148:2;6177;6166:9;6159:21;6209:6;6203:13;6252:6;6247:2;6236:9;6232:18;6225:34;6277:4;6290:140;6304:6;6301:1;6298:13;6290:140;;;6399:14;;;6395:23;;6389:30;6365:17;;;6384:2;6361:26;6354:66;6319:10;;6290:140;;;6448:6;6445:1;6442:13;6439:2;;;6518:4;6513:2;6504:6;6493:9;6489:22;6485:31;6478:45;6439:2;-1:-1:-1;6594:2:1;6573:15;-1:-1:-1;;6569:29:1;6554:45;;;;6601:2;6550:54;;6128:482;-1:-1:-1;;;6128:482:1:o;10123:356::-;10325:2;10307:21;;;10344:18;;;10337:30;10403:34;10398:2;10383:18;;10376:62;10470:2;10455:18;;10297:182::o;12300:332::-;12507:6;12496:9;12489:25;12550:2;12545;12534:9;12530:18;12523:30;12470:4;12570:56;12622:2;12611:9;12607:18;12599:6;12570:56;:::i;:::-;12562:64;12479:153;-1:-1:-1;;;;12479:153:1:o;12637:582::-;12936:6;12925:9;12918:25;12979:6;12974:2;12963:9;12959:18;12952:34;13022:3;13017:2;13006:9;13002:18;12995:31;12899:4;13043:57;13095:3;13084:9;13080:19;13072:6;13043:57;:::i;:::-;-1:-1:-1;;;;;13136:32:1;;;;13131:2;13116:18;;13109:60;-1:-1:-1;13200:3:1;13185:19;13178:35;13035:65;12908:311;-1:-1:-1;;;12908:311:1:o;13737:128::-;13777:3;13808:1;13804:6;13801:1;13798:13;13795:2;;;13814:18;;:::i;:::-;-1:-1:-1;13850:9:1;;13785:80::o;13870:217::-;13910:1;13936;13926:2;;-1:-1:-1;;;13961:31:1;;14015:4;14012:1;14005:15;14043:4;13968:1;14033:15;13926:2;-1:-1:-1;14072:9:1;;13916:171::o;14092:168::-;14132:7;14198:1;14194;14190:6;14186:14;14183:1;14180:21;14175:1;14168:9;14161:17;14157:45;14154:2;;;14205:18;;:::i;:::-;-1:-1:-1;14245:9:1;;14144:116::o;14265:125::-;14305:4;14333:1;14330;14327:8;14324:2;;;14338:18;;:::i;:::-;-1:-1:-1;14375:9:1;;14314:76::o;14395:380::-;14474:1;14470:12;;;;14517;;;14538:2;;14592:4;14584:6;14580:17;14570:27;;14538:2;14645;14637:6;14634:14;14614:18;14611:38;14608:2;;;14691:10;14686:3;14682:20;14679:1;14672:31;14726:4;14723:1;14716:15;14754:4;14751:1;14744:15;14608:2;;14450:325;;;:::o;14780:135::-;14819:3;-1:-1:-1;;14840:17:1;;14837:2;;;14860:18;;:::i;:::-;-1:-1:-1;14907:1:1;14896:13;;14827:88::o;14920:127::-;14981:10;14976:3;14972:20;14969:1;14962:31;15012:4;15009:1;15002:15;15036:4;15033:1;15026:15;15052:131;-1:-1:-1;;;;;15127:31:1;;15117:42;;15107:2;;15173:1;15170;15163:12;15107:2;15097:86;:::o

Swarm Source

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