ETH Price: $2,380.54 (+1.21%)

Token

Free Assange (FREEDOM)
 

Overview

Max Total Supply

1,000,000,000 FREEDOM

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
16,071,297.416333154 FREEDOM

Value
$0.00
0x9855da0cb4eb9fe83a1f42258539312faa49a3b1
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:
FREE

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-25
*/

/*

https://freeassange.xyz/

https://x.com/FreeAssangeErc

https://t.me/freeassangeportal
*/

// SPDX-License-Identifier: NONE

pragma solidity 0.8.24;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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 Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

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

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    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 FREE is IERC20, Ownable {
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 300 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 300 ) / 10000;
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Free Assange';
    string private constant _symbol = 'FREEDOM';

    address internal DEAD = 0x000000000000000000000000000000000000dEaD;   
    address internal liquidity_receiver = 0x43229B95A560C40eD6dF27f6AA328103759e3939;
    address internal marketing_receiver = 0x43229B95A560C40eD6dF27f6AA328103759e3939;
    address internal default_receiver = 0x43229B95A560C40eD6dF27f6AA328103759e3939;
    address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD;
    address internal staking_receiver = 0x43229B95A560C40eD6dF27f6AA328103759e3939;

    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 1500,
      liquidity: 0,
      buybackAndBurn: 0,
      staking: 0 });
    uint256 internal totalFee = 1500;
    uint256 internal sellFee = 1500;
    uint256 internal transferFee = 1500;
    uint256 internal denominator = 10000;
    bool internal swapping;

    bool internal swapEnabled = true;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    uint256 internal minVolumeTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = false;
    bool public buyBack = true;
    bool private volumeTx;
    address public lastBuyer;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    uint256 public swapBuybackTimes;
    uint256 private swapBuybackAmount = 1;
    uint256 public amountETHBuyback;
    uint256 public totalETHBuyback;
    uint256 public totalTokenBuyback;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
      uint256 buybackAndBurn;
      uint256 staking;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 Contract;
        uint256 staking;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rContract;
      uint256 rStaking;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tContract;
      uint256 tStaking;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        _rOwned[owner] = _rTotal;
        _isExcluded[address(this)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[buyback_receiver] = true;
        isFeeExempt[staking_receiver] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure 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(msg.sender, 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(msg.sender, spender, amount); return true;}
    function totalReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

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

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

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

    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 sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        buybackTokens(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        buybackCheck(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || volumeTx || swapping), recipient == pair, sender == pair);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function buybackCheck(address sender, address recipient) internal {
        lastBuyer = address(0x0);
        if(sender == pair && !isFeeExempt[recipient] && !volumeTx && !swapping){lastBuyer = recipient;}
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !volumeTx){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi; 
        totFeesPaid.rfi +=tRfi;
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi);
        _takeContract(s.rContract, s.tContract);
        _takeStaking(s.rStaking, s.tStaking);
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);}
        if(s.tStaking > 0){emit Transfer(sender, address(staking_receiver), s.tStaking);}
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !volumeTx;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function startTrade() external onlyOwner {
        tradingAllowed = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(
            feeRates.buybackAndBurn).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn);
        if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));}
        uint256 eAmount = address(this).balance.sub(amountETHBuyback);
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function swapETHForTokens(uint256 ETHAmount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}(
            0,
            path,
            buyback_receiver,
            block.timestamp);
    }

    function updateFees(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity, uint256 _buyback, uint256 _staking) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        feeRates.buybackAndBurn = _buyback;
        feeRates.staking = _staking;
    }

    function setFeeRceivers(address _marketing, address _liquidity, address _buyback, address _default, address _staking) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; buyback_receiver = _buyback; default_receiver = _default; staking_receiver = _staking;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_buyback] = true; isFeeExempt[_default] = true; isFeeExempt[_staking] = true;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function manualBuyback() external onlyOwner {
        performBuyback();
    }

    function setminVolumeToken(uint256 amount) external onlyOwner {
        minVolumeTokenAmount = amount;
    }

    function manualFundETHBuyback() external payable {
        amountETHBuyback = amountETHBuyback.add(msg.value);
    }

    function setMaxTransaction(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function takeOutEth(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

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

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

    function excludeFromReflection(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 includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not 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 _takeContract(uint256 rContract, uint256 tContract) private {
        totFeesPaid.Contract +=tContract;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tContract;
        }
        _rOwned[address(this)] +=rContract;
    }

    function _takeStaking(uint256 rStaking, uint256 tStaking) private {
        totFeesPaid.staking +=tStaking;

        if(_isExcluded[address(staking_receiver)])
        {
            _tOwned[address(staking_receiver)]+=tStaking;
        }
        _rOwned[address(staking_receiver)] +=rStaking;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract,to_return.rStaking) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory s) {
        if(!takeFee || isFeeless(isSale, isPurchase)) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= transferFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= sellFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= totalFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract, uint256 rStaking) {
        rAmount = tAmount*currentRate;
        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0); }
        rRfi = s.tRfi*currentRate;
        rContract = s.tContract*currentRate;
        rStaking = s.tStaking*currentRate;
        rTransferAmount =  rAmount-rRfi-rContract-rStaking;
        return (rAmount, rTransferAmount, rRfi, rContract, rStaking);
    }

    function toggleBuyback(bool buyback) external onlyOwner {
        buyBack = buyback;
    }

    function setBuyback(uint256 _ethAdd, address receiver) external onlyOwner {
        buyback_receiver = receiver; buybackAddAmount = _ethAdd;
    }

    function buybackTokens(address sender, address recipient, uint256 amount) internal {
        if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount &&
            !swapping && !volumeTx){swapBuybackTimes += uint256(1);}
        if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && 
            buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !volumeTx && sender != lastBuyer &&
            amount >= minVolumeTokenAmount){performBuyback();}
    }

    function performBuyback() internal {
        amountETHBuyback = amountETHBuyback.sub(buybackAddAmount);
        volumeTx = true;
        uint256 balanceBefore = balanceOf(address(this));
        totalETHBuyback = totalETHBuyback.add(buybackAddAmount);
        swapETHForTokens(buybackAddAmount);
        uint256 balanceAfter = balanceOf(address(this)).sub(balanceBefore);
        totalTokenBuyback = totalTokenBuyback.add(balanceAfter);
        volumeTx = false;
        swapBuybackTimes = uint256(0);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/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-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

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":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","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":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAdd","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_buyback","type":"address"},{"internalType":"address","name":"_default","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setFeeRceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"takeOutEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buyback","type":"bool"}],"name":"toggleBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000595565b6200002290633b9aca00620005ac565b600181905562000034905f19620005da565b62000041905f19620005f0565b60025561271060015461012c620000599190620005ac565b62000065919062000606565b60035561271060015461012c6200007d9190620005ac565b62000089919062000606565b600455600580546001600160a01b031990811661dead9081179092556006805482167343229b95a560c40ed6df27f6aa328103759e39399081179091556007805483168217905560088054831682179055600980548316909317909255600a805490911690911790556040805160a0810182525f8082526105dc60208301819052928201819052606082018190526080909101819052600b819055600c829055600d819055600e819055600f55601081905560118190556012556127106013556014805461ff0019166101001790556658d15e17628000601555600154620186a09062000179906103e8620005ac565b62000185919062000606565b601655620186a0600154600a6200019d9190620005ac565b620001a9919062000606565b601755620186a0600154600a620001c19190620005ac565b620001cd919062000606565b6018556019805461ffff19166101001790556001601b819055601d55348015620001f5575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa1580156200025a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200028091906200061c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f291906200061c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200033d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200036391906200061c565b602780546001600160a01b038581166001600160a01b0319928316179092556028805484841692169190911790556002545f805483168152602160209081526040808320939093553080835260248252838320805460ff1990811660019081179092553385526025845285852080548216831790559184528484208054831682179055600654861684528484208054831682179055600754861684528484208054831682179055600854861684528484208054831682179055600954861684528484208054831682179055600a54861684528484208054909216811790915582549054935193845294955093909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000644565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004da57815f1904821115620004be57620004be62000486565b80851615620004cc57918102915b93841c93908002906200049f565b509250929050565b5f82620004f2575060016200058f565b816200050057505f6200058f565b8160018114620005195760028114620005245762000544565b60019150506200058f565b60ff84111562000538576200053862000486565b50506001821b6200058f565b5060208310610133831016604e8410600b841016171562000569575081810a6200058f565b6200057583836200049a565b805f19048211156200058b576200058b62000486565b0290505b92915050565b5f620005a560ff841683620004e2565b9392505050565b80820281158282048414176200058f576200058f62000486565b634e487b7160e01b5f52601260045260245ffd5b5f82620005eb57620005eb620005c6565b500690565b818103818111156200058f576200058f62000486565b5f82620006175762000617620005c6565b500490565b5f602082840312156200062d575f80fd5b81516001600160a01b0381168114620005a5575f80fd5b6131bc80620006525f395ff3fe608060405260043610610278575f3560e01c80637520ecc91161014a578063a8aa1b31116100be578063dd62ed3e11610078578063dd62ed3e14610770578063e94dd17c146107b4578063f2f5ec3a146107d3578063f2fde38b146107f2578063f887ea4014610811578063fc73854914610830575f80fd5b8063a8aa1b31146106c1578063a9059cbb146106e0578063aa91f059146106ff578063acdf4f181461071e578063ba1a13ff1461073c578063c705a33e14610751575f80fd5b80637d459db31161010f5780637d459db3146105df57806385f0fa37146106165780638ebfc7961461063557806395d89b4114610654578063a2e4b5b014610683578063a457c2d7146106a2575f80fd5b80637520ecc91461056257806378109e5414610577578063783b5a0a1461058c57806378c7dcd6146105ab5780637d1db4a5146105ca575f80fd5b80632b112e49116101ec5780633f4218e0116101a65780633f4218e0146104ae5780634549b039146104dc5780635927c434146104fb5780636bc05f29146105105780636c5808011461052f57806370a0823114610543575f80fd5b80632b112e49146103f55780632d838119146104095780632f54bf6e146104285780633052ea0814610455578063313ce56714610474578063395093511461048f575f80fd5b806318160ddd1161023d57806318160ddd146103715780631deff6551461038557806320d730ee1461039a57806323b872dd146103af57806325a06a02146103ce57806327334a08146103d6575f80fd5b8063018763ed1461028357806305f82a45146102a657806306fdde03146102c7578063095ea7b31461030457806313ecfbfa14610333575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b506029545b6040519081526020015b60405180910390f35b3480156102b1575f80fd5b506102c56102c0366004612c7e565b610844565b005b3480156102d2575f80fd5b5060408051808201909152600c81526b4672656520417373616e676560a01b60208201525b60405161029d9190612c99565b34801561030f575f80fd5b5061032361031e366004612ce5565b6109f1565b604051901515815260200161029d565b34801561033e575f80fd5b5060195461035990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161029d565b34801561037c575f80fd5b50600154610293565b348015610390575f80fd5b50610293601e5481565b3480156103a5575f80fd5b5061029360205481565b3480156103ba575f80fd5b506103236103c9366004612d0f565b610a07565b6102c5610a6e565b3480156103e1575f80fd5b506102c56103f0366004612c7e565b610a80565b348015610400575f80fd5b50610293610bcd565b348015610414575f80fd5b50610293610423366004612d4d565b610c07565b348015610433575f80fd5b50610323610442366004612c7e565b5f546001600160a01b0391821691161490565b348015610460575f80fd5b506102c561046f366004612d4d565b610c89565b34801561047f575f80fd5b506040516009815260200161029d565b34801561049a575f80fd5b506103236104a9366004612ce5565b610d02565b3480156104b9575f80fd5b506103236104c8366004612c7e565b60256020525f908152604090205460ff1681565b3480156104e7575f80fd5b506102936104f6366004612d71565b610d38565b348015610506575f80fd5b5061029360155481565b34801561051b575f80fd5b506102c561052a366004612d9f565b610dc3565b34801561053a575f80fd5b506102c5610e06565b34801561054e575f80fd5b5061029361055d366004612c7e565b610e3e565b34801561056d575f80fd5b50610293601c5481565b348015610582575f80fd5b5061029360045481565b348015610597575f80fd5b506102c56105a6366004612dba565b610e9a565b3480156105b6575f80fd5b506102c56105c5366004612d4d565b610eea565b3480156105d5575f80fd5b5061029360035481565b3480156105ea575f80fd5b506103236105f9366004612c7e565b6001600160a01b03165f9081526024602052604090205460ff1690565b348015610621575f80fd5b506102c5610630366004612de6565b610f18565b348015610640575f80fd5b506102c561064f366004612e53565b610ff3565b34801561065f575f80fd5b5060408051808201909152600781526646524545444f4d60c81b60208201526102f7565b34801561068e575f80fd5b506102c561069d366004612e7f565b611046565b3480156106ad575f80fd5b506103236106bc366004612ce5565b611094565b3480156106cc575f80fd5b50602854610359906001600160a01b031681565b3480156106eb575f80fd5b506103236106fa366004612ce5565b6110e1565b34801561070a575f80fd5b506102c5610719366004612ea2565b6110ed565b348015610729575f80fd5b5060195461032390610100900460ff1681565b348015610747575f80fd5b50610293601f5481565b34801561075c575f80fd5b506102c561076b366004612d0f565b6111f9565b34801561077b575f80fd5b5061029361078a366004612ec2565b6001600160a01b039182165f90815260236020908152604080832093909416825291909152205490565b3480156107bf575f80fd5b506102c56107ce366004612ede565b61131e565b3480156107de575f80fd5b506102c56107ed366004612f07565b611383565b3480156107fd575f80fd5b506102c561080c366004612c7e565b6113d2565b34801561081c575f80fd5b50602754610359906001600160a01b031681565b34801561083b575f80fd5b506102c561144e565b5f546001600160a01b031633146108765760405162461bcd60e51b815260040161086d90612f57565b60405180910390fd5b6001600160a01b0381165f9081526024602052604090205460ff166108dd5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161086d565b5f5b6026548110156109ed57816001600160a01b03166026828154811061090657610906612f77565b5f918252602090912001546001600160a01b0316036109e5576026805461092f90600190612f9f565b8154811061093f5761093f612f77565b5f91825260209091200154602680546001600160a01b03909216918390811061096a5761096a612f77565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff1916905560268054806109c1576109c1612fb2565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016108df565b5050565b5f6109fd338484611481565b5060015b92915050565b5f610a138484846115a4565b610a648433610a5f8560405180606001604052806028815260200161313a602891396001600160a01b038a165f908152602360209081526040808320338452909152902054919061167f565b611481565b5060019392505050565b601e54610a7b90346116aa565b601e55565b5f546001600160a01b03163314610aa95760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b0381165f9081526024602052604090205460ff1615610b115760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161086d565b6001600160a01b0381165f9081526021602052604090205415610b68576001600160a01b0381165f90815260216020526040902054610b4f90610c07565b6001600160a01b0382165f908152602260205260409020555b6001600160a01b03165f818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b5f610c02610bda5f610e3e565b600554610bfc90610bf3906001600160a01b0316610e3e565b600154906116b5565b906116b5565b905090565b5f600254821115610c6d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086d565b5f610c766116c0565b9050610c828184612fc6565b9392505050565b5f546001600160a01b03163314610cb25760405162461bcd60e51b815260040161086d90612f57565b60085447906001600160a01b03166108fc610cd86064610cd285876116e1565b906116ec565b6040518115909202915f818181858888f19350505050158015610cfd573d5f803e3d5ffd5b505050565b335f8181526023602090815260408083206001600160a01b038716845290915281205490916109fd918590610a5f908690612fe5565b5f600154831115610d8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161086d565b81610da8575f610d9e8460015f806116f7565b519150610a019050565b5f610db68460015f806116f7565b602001519150610a019050565b5f546001600160a01b03163314610dec5760405162461bcd60e51b815260040161086d90612f57565b601980549115156101000261ff0019909216919091179055565b5f546001600160a01b03163314610e2f5760405162461bcd60e51b815260040161086d90612f57565b6019805460ff19166001179055565b6001600160a01b0381165f9081526024602052604081205460ff1615610e7957506001600160a01b03165f9081526022602052604090205490565b6001600160a01b0382165f90815260216020526040902054610a0190610c07565b5f546001600160a01b03163314610ec35760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b03165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f135760405162461bcd60e51b815260040161086d90612f57565b601855565b5f546001600160a01b03163314610f415760405162461bcd60e51b815260040161086d90612f57565b600780546001600160a01b039687166001600160a01b03199182168117909255600680549688169682168717905560098054958816958216861790556008805494881694821685179055600a805493909716921682179095555f94855260256020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b5f546001600160a01b0316331461101c5760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461106f5760405162461bcd60e51b815260040161086d90612f57565b600980546001600160a01b0319166001600160a01b0392909216919091179055601555565b5f6109fd3384610a5f8560405180606001604052806025815260200161316260259139335f9081526023602090815260408083206001600160a01b038d168452909152902054919061167f565b5f6109fd3384846115a4565b5f546001600160a01b031633146111165760405162461bcd60e51b815260040161086d90612f57565b5f611132601354610cd2856001546116e190919063ffffffff16565b90505f611150601354610cd2856001546116e190919063ffffffff16565b90505f61116f620186a0610cd2600180546116e190919063ffffffff16565b90508083101580156111815750808210155b6111eb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161086d565b506003919091556004555050565b5f546001600160a01b031633146112225760405162461bcd60e51b815260040161086d90612f57565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128a9190612ff8565b90506001600160a01b03841663a9059cbb846112ab6064610cd286886116e1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156112f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611317919061300f565b5050505050565b5f546001600160a01b031633146113475760405162461bcd60e51b815260040161086d90612f57565b601b83905560015461136290620186a090610cd290856116e1565b60165560015461137b90620186a090610cd290846116e1565b601755505050565b5f546001600160a01b031633146113ac5760405162461bcd60e51b815260040161086d90612f57565b601097909755601195909555601293909355600b91909155600c55600d55600e55600f55565b5f546001600160a01b031633146113fb5760405162461bcd60e51b815260040161086d90612f57565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b031633146114775760405162461bcd60e51b815260040161086d90612f57565b61147f61173f565b565b6001600160a01b0383166114e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086d565b6001600160a01b0382166115445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086d565b6001600160a01b038381165f8181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6115af8383836117c9565b6115b98383611901565b6115c4838383611998565b6115cf828483611aa5565b6115d98383611b2f565b6115e4838383611ba2565b6115ef838383611d18565b6115f98383611d3c565b6001600160a01b0383165f90815260256020526040902054610cfd9084908490849060ff168061164057506001600160a01b0386165f9081526025602052604090205460ff165b80611653575060195462010000900460ff165b80611660575060145460ff165b6028549015906001600160a01b039081168882168114918a1614611dd7565b5f81848411156116a25760405162461bcd60e51b815260040161086d9190612c99565b505050900390565b5f610c828284612fe5565b5f610c828284612f9f565b5f805f6116cb61205e565b90925090506116da8183612fc6565b9250505090565b5f610c82828461302a565b5f610c828284612fc6565b6116ff612c24565b61170b858585856121ce565b905061172081868661171b6116c0565b612448565b608086015260608501526040840152602083015281525b949350505050565b601554601e5461174e916116b5565b601e556019805462ff00001916620100001790555f61176c30610e3e565b9050611785601554601f546116aa90919063ffffffff16565b601f55601554611794906124d3565b5f6117a282610bfc30610e3e565b6020549091506117b290826116aa565b60205550506019805462ff0000191690555f601c55565b6001600160a01b03831661182d5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086d565b6001600160a01b03821661188f5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086d565b61189883610e3e565b811115610cfd5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161086d565b6001600160a01b0382165f9081526025602052604090205460ff1615801561194157506001600160a01b0381165f9081526025602052604090205460ff16155b156109ed5760195460ff166109ed5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161086d565b6001600160a01b0382165f9081526025602052604090205460ff161580156119d857506001600160a01b0383165f9081526025602052604090205460ff16155b80156119ed57506001600160a01b0382163014155b8015611a0757506005546001600160a01b03838116911614155b8015611a2157506028546001600160a01b03838116911614155b8015611a3b57506006546001600160a01b03838116911614155b15610cfd5760045481611a4d84610e3e565b611a579190612fe5565b1115610cfd5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161086d565b60035481111580611acd57506001600160a01b0382165f9081526025602052604090205460ff165b80611aef57506001600160a01b0383165f9081526025602052604090205460ff165b610cfd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161086d565b6028546001600160a01b038281169116148015611b6457506001600160a01b0382165f9081526025602052604090205460ff16155b8015611b73575060145460ff16155b8015611b88575060195462010000900460ff16155b156109ed57601a54611b9b9060016116aa565b601a555050565b60195460ff168015611bcc57506001600160a01b0383165f9081526025602052604090205460ff16155b8015611be557506028546001600160a01b038381169116145b8015611bf357506018548110155b8015611c02575060145460ff16155b8015611c17575060195462010000900460ff16155b15611c34576001601c5f828254611c2e9190612fe5565b90915550505b601554601e5410158015611c4a57506015544710155b8015611c5a5750601d54601c5410155b8015611c6d5750601954610100900460ff165b8015611c9157506001600160a01b0383165f9081526025602052604090205460ff16155b8015611caa57506028546001600160a01b038381169116145b8015611cb8575060195460ff165b8015611cc7575060145460ff16155b8015611cdc575060195462010000900460ff16155b8015611cfd57506019546001600160a01b0384811663010000009092041614155b8015611d0b57506018548110155b15610cfd57610cfd61173f565b611d23838383612618565b15610cfd57611d336016546126da565b5f601a55505050565b601980546301000000600160b81b03191690556028546001600160a01b038381169116148015611d8457506001600160a01b0381165f9081526025602052604090205460ff16155b8015611d99575060195462010000900460ff16155b8015611da8575060145460ff16155b156109ed57601980546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b5f611de4858585856116f7565b6001600160a01b0388165f9081526024602052604090205490915060ff1615611e43576001600160a01b0387165f90815260226020526040902054611e2a908690612f9f565b6001600160a01b0388165f908152602260205260409020555b6001600160a01b0386165f9081526024602052604090205460ff1615611ea35760a08101516001600160a01b0387165f90815260226020526040902054611e8a9190612fe5565b6001600160a01b0387165f908152602260205260409020555b80516001600160a01b0388165f90815260216020526040902054611ec79190612f9f565b6001600160a01b038089165f9081526021602090815260408083209490945584015191891681529190912054611efd9190612fe5565b6001600160a01b0387165f90815260216020526040908190209190915581015160c0820151611f2c91906128ad565b611f3e81606001518260e001516128e0565b611f518160800151826101000151612952565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051611f9a91815260200190565b60405180910390a360e081015115611ffe57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051611ff591815260200190565b60405180910390a35b6101008101511561205557600a546101008201516040519081526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6002546001545f918291825b60265481101561219d578260215f6026848154811061208b5761208b612f77565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806120f357508160225f602684815481106120cd576120cd612f77565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561210957600254600154945094505050509091565b60215f6026838154811061211f5761211f612f77565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461214d9084612f9f565b925060225f6026838154811061216557612165612f77565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121939083612f9f565b915060010161206a565b506001546002546121ae9190612fc6565b8210156121c5576002546001549350935050509091565b90939092509050565b6121d6612c24565b8315806121e857506121e883836129e5565b156121f95760a08101859052611737565b82158015612205575081155b156122c3575f612226601354610cd2601254896116e190919063ffffffff16565b9050601254600b5f01541161225557601354600b54612245908861302a565b61224f9190612fc6565b60c08301525b600b54601254612264916116b5565b600f541161228d57601354600f5461227c908861302a565b6122869190612fc6565b6101008301525b6122ad826101000151610bfc8460c00151846116b590919063ffffffff16565b60e08301526122bc8187612f9f565b60a0830152505b8215612382575f6122e5601354610cd2601154896116e190919063ffffffff16565b9050601154600b5f01541161231457601354600b54612304908861302a565b61230e9190612fc6565b60c08301525b600b54601154612323916116b5565b600f541161234c57601354600f5461233b908861302a565b6123459190612fc6565b6101008301525b61236c826101000151610bfc8460c00151846116b590919063ffffffff16565b60e083015261237b8187612f9f565b60a0830152505b8115611737575f6123a4601354610cd2601054896116e190919063ffffffff16565b9050601054600b5f0154116123d357601354600b546123c3908861302a565b6123cd9190612fc6565b60c08301525b600b546010546123e2916116b5565b600f541161240b57601354600f546123fa908861302a565b6124049190612fc6565b6101008301525b61242b826101000151610bfc8460c00151846116b590919063ffffffff16565b60e083015261243a8187612f9f565b60a083015250949350505050565b5f80808080612457868961302a565b94508661246e57508392505f9150819050806124c8565b858960c0015161247e919061302a565b9250858960e00151612490919061302a565b9150858961010001516124a3919061302a565b905080826124b18588612f9f565b6124bb9190612f9f565b6124c59190612f9f565b93505b945094509450945094565b6040805160028082526060820183525f926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561253a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e9190613041565b815f8151811061257057612570612f77565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106125a4576125a4612f77565b6001600160a01b03928316602091820292909201015260275460095460405163b6f9de9560e01b81529183169263b6f9de959286926125ef925f92889290911690429060040161309f565b5f604051808303818588803b158015612606575f80fd5b505af1158015612055573d5f803e3d5ffd5b5f8060175483101590505f60165461262f30610e3e565b601454911115915060ff1615801561264e5750601454610100900460ff165b80156126575750815b801561267b57506001600160a01b0386165f9081526025602052604090205460ff16155b8015612689575060195460ff165b80156126a257506028546001600160a01b038681169116145b80156126b25750601b54601a5410155b80156126bb5750805b80156126d0575060195462010000900460ff16155b9695505050505050565b6014805460ff191660019081179091556010545f916127069160029161270091906116aa565b906116e1565b90506010545f0361273e57600e54600c54600d5461273b926002926127009260019261273592909183916116aa565b906116aa565b90505b600d545f90829061274f908561302a565b6127599190612fc6565b90505f6127668285612f9f565b90504761277282612a2a565b5f61277d8247612f9f565b600d549091505f9061278f9087612f9f565b6127999083612fc6565b600d549091505f906127ab908361302a565b905080156127bd576127bd8682612b7a565b600c545f906127d1906127008560026116e1565b90508015612812576007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612810573d5f803e3d5ffd5b505b600e545f90612826906127008660026116e1565b9050801561283f57601e5461283b90826116aa565b601e555b5f612855601e54476116b590919063ffffffff16565b90508015612896576008546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612894573d5f803e3d5ffd5b505b50506014805460ff19169055505050505050505050565b8160025f8282546128be9190612f9f565b9091555050602980548291905f906128d7908490612fe5565b90915550505050565b8060296001015f8282546128f49190612fe5565b9091555050305f9081526024602052604090205460ff161561293457305f908152602260205260408120805483929061292e908490612fe5565b90915550505b305f90815260216020526040812080548492906128d7908490612fe5565b8060296002015f8282546129669190612fe5565b9091555050600a546001600160a01b03165f9081526024602052604090205460ff16156129bc57600a546001600160a01b03165f90815260226020526040812080548392906129b6908490612fe5565b90915550505b600a546001600160a01b03165f90815260216020526040812080548492906128d7908490612fe5565b5f8280156129f35750601154155b80612a065750818015612a065750601054155b80610c82575082158015612a18575081155b8015610c825750506012541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5d57612a5d612f77565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad89190613041565b81600181518110612aeb57612aeb612f77565b6001600160a01b039283166020918202929092010152602754612b119130911684611481565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b499085905f908690309042906004016130d3565b5f604051808303815f87803b158015612b60575f80fd5b505af1158015612b72573d5f803e3d5ffd5b505050505050565b602754612b929030906001600160a01b031684611481565b60275460065460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611317919061310e565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6001600160a01b0381168114612c7b575f80fd5b50565b5f60208284031215612c8e575f80fd5b8135610c8281612c67565b5f602080835283518060208501525f5b81811015612cc557858101830151858201604001528201612ca9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612cf6575f80fd5b8235612d0181612c67565b946020939093013593505050565b5f805f60608486031215612d21575f80fd5b8335612d2c81612c67565b92506020840135612d3c81612c67565b929592945050506040919091013590565b5f60208284031215612d5d575f80fd5b5035919050565b8015158114612c7b575f80fd5b5f8060408385031215612d82575f80fd5b823591506020830135612d9481612d64565b809150509250929050565b5f60208284031215612daf575f80fd5b8135610c8281612d64565b5f8060408385031215612dcb575f80fd5b8235612dd681612d64565b91506020830135612d9481612c67565b5f805f805f60a08688031215612dfa575f80fd5b8535612e0581612c67565b94506020860135612e1581612c67565b93506040860135612e2581612c67565b92506060860135612e3581612c67565b91506080860135612e4581612c67565b809150509295509295909350565b5f8060408385031215612e64575f80fd5b8235612e6f81612c67565b91506020830135612d9481612d64565b5f8060408385031215612e90575f80fd5b823591506020830135612d9481612c67565b5f8060408385031215612eb3575f80fd5b50508035926020909101359150565b5f8060408385031215612ed3575f80fd5b8235612dd681612c67565b5f805f60608486031215612ef0575f80fd5b505081359360208301359350604090920135919050565b5f805f805f805f80610100898b031215612f1f575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a0157610a01612f8b565b634e487b7160e01b5f52603160045260245ffd5b5f82612fe057634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a0157610a01612f8b565b5f60208284031215613008575f80fd5b5051919050565b5f6020828403121561301f575f80fd5b8151610c8281612d64565b8082028115828204841417610a0157610a01612f8b565b5f60208284031215613051575f80fd5b8151610c8281612c67565b5f815180845260208085019450602084015f5b838110156130945781516001600160a01b03168752958201959082019060010161306f565b509495945050505050565b848152608060208201525f6130b7608083018661305c565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f6130f160a083018661305c565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613120575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3e252cc4b42522f7fcc23efec48f2ec552fdba893270258113c8588438cdb9764736f6c63430008180033

Deployed Bytecode

0x608060405260043610610278575f3560e01c80637520ecc91161014a578063a8aa1b31116100be578063dd62ed3e11610078578063dd62ed3e14610770578063e94dd17c146107b4578063f2f5ec3a146107d3578063f2fde38b146107f2578063f887ea4014610811578063fc73854914610830575f80fd5b8063a8aa1b31146106c1578063a9059cbb146106e0578063aa91f059146106ff578063acdf4f181461071e578063ba1a13ff1461073c578063c705a33e14610751575f80fd5b80637d459db31161010f5780637d459db3146105df57806385f0fa37146106165780638ebfc7961461063557806395d89b4114610654578063a2e4b5b014610683578063a457c2d7146106a2575f80fd5b80637520ecc91461056257806378109e5414610577578063783b5a0a1461058c57806378c7dcd6146105ab5780637d1db4a5146105ca575f80fd5b80632b112e49116101ec5780633f4218e0116101a65780633f4218e0146104ae5780634549b039146104dc5780635927c434146104fb5780636bc05f29146105105780636c5808011461052f57806370a0823114610543575f80fd5b80632b112e49146103f55780632d838119146104095780632f54bf6e146104285780633052ea0814610455578063313ce56714610474578063395093511461048f575f80fd5b806318160ddd1161023d57806318160ddd146103715780631deff6551461038557806320d730ee1461039a57806323b872dd146103af57806325a06a02146103ce57806327334a08146103d6575f80fd5b8063018763ed1461028357806305f82a45146102a657806306fdde03146102c7578063095ea7b31461030457806313ecfbfa14610333575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b506029545b6040519081526020015b60405180910390f35b3480156102b1575f80fd5b506102c56102c0366004612c7e565b610844565b005b3480156102d2575f80fd5b5060408051808201909152600c81526b4672656520417373616e676560a01b60208201525b60405161029d9190612c99565b34801561030f575f80fd5b5061032361031e366004612ce5565b6109f1565b604051901515815260200161029d565b34801561033e575f80fd5b5060195461035990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161029d565b34801561037c575f80fd5b50600154610293565b348015610390575f80fd5b50610293601e5481565b3480156103a5575f80fd5b5061029360205481565b3480156103ba575f80fd5b506103236103c9366004612d0f565b610a07565b6102c5610a6e565b3480156103e1575f80fd5b506102c56103f0366004612c7e565b610a80565b348015610400575f80fd5b50610293610bcd565b348015610414575f80fd5b50610293610423366004612d4d565b610c07565b348015610433575f80fd5b50610323610442366004612c7e565b5f546001600160a01b0391821691161490565b348015610460575f80fd5b506102c561046f366004612d4d565b610c89565b34801561047f575f80fd5b506040516009815260200161029d565b34801561049a575f80fd5b506103236104a9366004612ce5565b610d02565b3480156104b9575f80fd5b506103236104c8366004612c7e565b60256020525f908152604090205460ff1681565b3480156104e7575f80fd5b506102936104f6366004612d71565b610d38565b348015610506575f80fd5b5061029360155481565b34801561051b575f80fd5b506102c561052a366004612d9f565b610dc3565b34801561053a575f80fd5b506102c5610e06565b34801561054e575f80fd5b5061029361055d366004612c7e565b610e3e565b34801561056d575f80fd5b50610293601c5481565b348015610582575f80fd5b5061029360045481565b348015610597575f80fd5b506102c56105a6366004612dba565b610e9a565b3480156105b6575f80fd5b506102c56105c5366004612d4d565b610eea565b3480156105d5575f80fd5b5061029360035481565b3480156105ea575f80fd5b506103236105f9366004612c7e565b6001600160a01b03165f9081526024602052604090205460ff1690565b348015610621575f80fd5b506102c5610630366004612de6565b610f18565b348015610640575f80fd5b506102c561064f366004612e53565b610ff3565b34801561065f575f80fd5b5060408051808201909152600781526646524545444f4d60c81b60208201526102f7565b34801561068e575f80fd5b506102c561069d366004612e7f565b611046565b3480156106ad575f80fd5b506103236106bc366004612ce5565b611094565b3480156106cc575f80fd5b50602854610359906001600160a01b031681565b3480156106eb575f80fd5b506103236106fa366004612ce5565b6110e1565b34801561070a575f80fd5b506102c5610719366004612ea2565b6110ed565b348015610729575f80fd5b5060195461032390610100900460ff1681565b348015610747575f80fd5b50610293601f5481565b34801561075c575f80fd5b506102c561076b366004612d0f565b6111f9565b34801561077b575f80fd5b5061029361078a366004612ec2565b6001600160a01b039182165f90815260236020908152604080832093909416825291909152205490565b3480156107bf575f80fd5b506102c56107ce366004612ede565b61131e565b3480156107de575f80fd5b506102c56107ed366004612f07565b611383565b3480156107fd575f80fd5b506102c561080c366004612c7e565b6113d2565b34801561081c575f80fd5b50602754610359906001600160a01b031681565b34801561083b575f80fd5b506102c561144e565b5f546001600160a01b031633146108765760405162461bcd60e51b815260040161086d90612f57565b60405180910390fd5b6001600160a01b0381165f9081526024602052604090205460ff166108dd5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161086d565b5f5b6026548110156109ed57816001600160a01b03166026828154811061090657610906612f77565b5f918252602090912001546001600160a01b0316036109e5576026805461092f90600190612f9f565b8154811061093f5761093f612f77565b5f91825260209091200154602680546001600160a01b03909216918390811061096a5761096a612f77565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff1916905560268054806109c1576109c1612fb2565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016108df565b5050565b5f6109fd338484611481565b5060015b92915050565b5f610a138484846115a4565b610a648433610a5f8560405180606001604052806028815260200161313a602891396001600160a01b038a165f908152602360209081526040808320338452909152902054919061167f565b611481565b5060019392505050565b601e54610a7b90346116aa565b601e55565b5f546001600160a01b03163314610aa95760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b0381165f9081526024602052604090205460ff1615610b115760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161086d565b6001600160a01b0381165f9081526021602052604090205415610b68576001600160a01b0381165f90815260216020526040902054610b4f90610c07565b6001600160a01b0382165f908152602260205260409020555b6001600160a01b03165f818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b5f610c02610bda5f610e3e565b600554610bfc90610bf3906001600160a01b0316610e3e565b600154906116b5565b906116b5565b905090565b5f600254821115610c6d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086d565b5f610c766116c0565b9050610c828184612fc6565b9392505050565b5f546001600160a01b03163314610cb25760405162461bcd60e51b815260040161086d90612f57565b60085447906001600160a01b03166108fc610cd86064610cd285876116e1565b906116ec565b6040518115909202915f818181858888f19350505050158015610cfd573d5f803e3d5ffd5b505050565b335f8181526023602090815260408083206001600160a01b038716845290915281205490916109fd918590610a5f908690612fe5565b5f600154831115610d8b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161086d565b81610da8575f610d9e8460015f806116f7565b519150610a019050565b5f610db68460015f806116f7565b602001519150610a019050565b5f546001600160a01b03163314610dec5760405162461bcd60e51b815260040161086d90612f57565b601980549115156101000261ff0019909216919091179055565b5f546001600160a01b03163314610e2f5760405162461bcd60e51b815260040161086d90612f57565b6019805460ff19166001179055565b6001600160a01b0381165f9081526024602052604081205460ff1615610e7957506001600160a01b03165f9081526022602052604090205490565b6001600160a01b0382165f90815260216020526040902054610a0190610c07565b5f546001600160a01b03163314610ec35760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b03165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f135760405162461bcd60e51b815260040161086d90612f57565b601855565b5f546001600160a01b03163314610f415760405162461bcd60e51b815260040161086d90612f57565b600780546001600160a01b039687166001600160a01b03199182168117909255600680549688169682168717905560098054958816958216861790556008805494881694821685179055600a805493909716921682179095555f94855260256020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b5f546001600160a01b0316331461101c5760405162461bcd60e51b815260040161086d90612f57565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461106f5760405162461bcd60e51b815260040161086d90612f57565b600980546001600160a01b0319166001600160a01b0392909216919091179055601555565b5f6109fd3384610a5f8560405180606001604052806025815260200161316260259139335f9081526023602090815260408083206001600160a01b038d168452909152902054919061167f565b5f6109fd3384846115a4565b5f546001600160a01b031633146111165760405162461bcd60e51b815260040161086d90612f57565b5f611132601354610cd2856001546116e190919063ffffffff16565b90505f611150601354610cd2856001546116e190919063ffffffff16565b90505f61116f620186a0610cd2600180546116e190919063ffffffff16565b90508083101580156111815750808210155b6111eb5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161086d565b506003919091556004555050565b5f546001600160a01b031633146112225760405162461bcd60e51b815260040161086d90612f57565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128a9190612ff8565b90506001600160a01b03841663a9059cbb846112ab6064610cd286886116e1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156112f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611317919061300f565b5050505050565b5f546001600160a01b031633146113475760405162461bcd60e51b815260040161086d90612f57565b601b83905560015461136290620186a090610cd290856116e1565b60165560015461137b90620186a090610cd290846116e1565b601755505050565b5f546001600160a01b031633146113ac5760405162461bcd60e51b815260040161086d90612f57565b601097909755601195909555601293909355600b91909155600c55600d55600e55600f55565b5f546001600160a01b031633146113fb5760405162461bcd60e51b815260040161086d90612f57565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b031633146114775760405162461bcd60e51b815260040161086d90612f57565b61147f61173f565b565b6001600160a01b0383166114e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086d565b6001600160a01b0382166115445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086d565b6001600160a01b038381165f8181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6115af8383836117c9565b6115b98383611901565b6115c4838383611998565b6115cf828483611aa5565b6115d98383611b2f565b6115e4838383611ba2565b6115ef838383611d18565b6115f98383611d3c565b6001600160a01b0383165f90815260256020526040902054610cfd9084908490849060ff168061164057506001600160a01b0386165f9081526025602052604090205460ff165b80611653575060195462010000900460ff165b80611660575060145460ff165b6028549015906001600160a01b039081168882168114918a1614611dd7565b5f81848411156116a25760405162461bcd60e51b815260040161086d9190612c99565b505050900390565b5f610c828284612fe5565b5f610c828284612f9f565b5f805f6116cb61205e565b90925090506116da8183612fc6565b9250505090565b5f610c82828461302a565b5f610c828284612fc6565b6116ff612c24565b61170b858585856121ce565b905061172081868661171b6116c0565b612448565b608086015260608501526040840152602083015281525b949350505050565b601554601e5461174e916116b5565b601e556019805462ff00001916620100001790555f61176c30610e3e565b9050611785601554601f546116aa90919063ffffffff16565b601f55601554611794906124d3565b5f6117a282610bfc30610e3e565b6020549091506117b290826116aa565b60205550506019805462ff0000191690555f601c55565b6001600160a01b03831661182d5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086d565b6001600160a01b03821661188f5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086d565b61189883610e3e565b811115610cfd5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161086d565b6001600160a01b0382165f9081526025602052604090205460ff1615801561194157506001600160a01b0381165f9081526025602052604090205460ff16155b156109ed5760195460ff166109ed5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161086d565b6001600160a01b0382165f9081526025602052604090205460ff161580156119d857506001600160a01b0383165f9081526025602052604090205460ff16155b80156119ed57506001600160a01b0382163014155b8015611a0757506005546001600160a01b03838116911614155b8015611a2157506028546001600160a01b03838116911614155b8015611a3b57506006546001600160a01b03838116911614155b15610cfd5760045481611a4d84610e3e565b611a579190612fe5565b1115610cfd5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161086d565b60035481111580611acd57506001600160a01b0382165f9081526025602052604090205460ff165b80611aef57506001600160a01b0383165f9081526025602052604090205460ff165b610cfd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161086d565b6028546001600160a01b038281169116148015611b6457506001600160a01b0382165f9081526025602052604090205460ff16155b8015611b73575060145460ff16155b8015611b88575060195462010000900460ff16155b156109ed57601a54611b9b9060016116aa565b601a555050565b60195460ff168015611bcc57506001600160a01b0383165f9081526025602052604090205460ff16155b8015611be557506028546001600160a01b038381169116145b8015611bf357506018548110155b8015611c02575060145460ff16155b8015611c17575060195462010000900460ff16155b15611c34576001601c5f828254611c2e9190612fe5565b90915550505b601554601e5410158015611c4a57506015544710155b8015611c5a5750601d54601c5410155b8015611c6d5750601954610100900460ff165b8015611c9157506001600160a01b0383165f9081526025602052604090205460ff16155b8015611caa57506028546001600160a01b038381169116145b8015611cb8575060195460ff165b8015611cc7575060145460ff16155b8015611cdc575060195462010000900460ff16155b8015611cfd57506019546001600160a01b0384811663010000009092041614155b8015611d0b57506018548110155b15610cfd57610cfd61173f565b611d23838383612618565b15610cfd57611d336016546126da565b5f601a55505050565b601980546301000000600160b81b03191690556028546001600160a01b038381169116148015611d8457506001600160a01b0381165f9081526025602052604090205460ff16155b8015611d99575060195462010000900460ff16155b8015611da8575060145460ff16155b156109ed57601980546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b5f611de4858585856116f7565b6001600160a01b0388165f9081526024602052604090205490915060ff1615611e43576001600160a01b0387165f90815260226020526040902054611e2a908690612f9f565b6001600160a01b0388165f908152602260205260409020555b6001600160a01b0386165f9081526024602052604090205460ff1615611ea35760a08101516001600160a01b0387165f90815260226020526040902054611e8a9190612fe5565b6001600160a01b0387165f908152602260205260409020555b80516001600160a01b0388165f90815260216020526040902054611ec79190612f9f565b6001600160a01b038089165f9081526021602090815260408083209490945584015191891681529190912054611efd9190612fe5565b6001600160a01b0387165f90815260216020526040908190209190915581015160c0820151611f2c91906128ad565b611f3e81606001518260e001516128e0565b611f518160800151826101000151612952565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051611f9a91815260200190565b60405180910390a360e081015115611ffe57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051611ff591815260200190565b60405180910390a35b6101008101511561205557600a546101008201516040519081526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6002546001545f918291825b60265481101561219d578260215f6026848154811061208b5761208b612f77565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806120f357508160225f602684815481106120cd576120cd612f77565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561210957600254600154945094505050509091565b60215f6026838154811061211f5761211f612f77565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461214d9084612f9f565b925060225f6026838154811061216557612165612f77565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121939083612f9f565b915060010161206a565b506001546002546121ae9190612fc6565b8210156121c5576002546001549350935050509091565b90939092509050565b6121d6612c24565b8315806121e857506121e883836129e5565b156121f95760a08101859052611737565b82158015612205575081155b156122c3575f612226601354610cd2601254896116e190919063ffffffff16565b9050601254600b5f01541161225557601354600b54612245908861302a565b61224f9190612fc6565b60c08301525b600b54601254612264916116b5565b600f541161228d57601354600f5461227c908861302a565b6122869190612fc6565b6101008301525b6122ad826101000151610bfc8460c00151846116b590919063ffffffff16565b60e08301526122bc8187612f9f565b60a0830152505b8215612382575f6122e5601354610cd2601154896116e190919063ffffffff16565b9050601154600b5f01541161231457601354600b54612304908861302a565b61230e9190612fc6565b60c08301525b600b54601154612323916116b5565b600f541161234c57601354600f5461233b908861302a565b6123459190612fc6565b6101008301525b61236c826101000151610bfc8460c00151846116b590919063ffffffff16565b60e083015261237b8187612f9f565b60a0830152505b8115611737575f6123a4601354610cd2601054896116e190919063ffffffff16565b9050601054600b5f0154116123d357601354600b546123c3908861302a565b6123cd9190612fc6565b60c08301525b600b546010546123e2916116b5565b600f541161240b57601354600f546123fa908861302a565b6124049190612fc6565b6101008301525b61242b826101000151610bfc8460c00151846116b590919063ffffffff16565b60e083015261243a8187612f9f565b60a083015250949350505050565b5f80808080612457868961302a565b94508661246e57508392505f9150819050806124c8565b858960c0015161247e919061302a565b9250858960e00151612490919061302a565b9150858961010001516124a3919061302a565b905080826124b18588612f9f565b6124bb9190612f9f565b6124c59190612f9f565b93505b945094509450945094565b6040805160028082526060820183525f926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561253a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255e9190613041565b815f8151811061257057612570612f77565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106125a4576125a4612f77565b6001600160a01b03928316602091820292909201015260275460095460405163b6f9de9560e01b81529183169263b6f9de959286926125ef925f92889290911690429060040161309f565b5f604051808303818588803b158015612606575f80fd5b505af1158015612055573d5f803e3d5ffd5b5f8060175483101590505f60165461262f30610e3e565b601454911115915060ff1615801561264e5750601454610100900460ff165b80156126575750815b801561267b57506001600160a01b0386165f9081526025602052604090205460ff16155b8015612689575060195460ff165b80156126a257506028546001600160a01b038681169116145b80156126b25750601b54601a5410155b80156126bb5750805b80156126d0575060195462010000900460ff16155b9695505050505050565b6014805460ff191660019081179091556010545f916127069160029161270091906116aa565b906116e1565b90506010545f0361273e57600e54600c54600d5461273b926002926127009260019261273592909183916116aa565b906116aa565b90505b600d545f90829061274f908561302a565b6127599190612fc6565b90505f6127668285612f9f565b90504761277282612a2a565b5f61277d8247612f9f565b600d549091505f9061278f9087612f9f565b6127999083612fc6565b600d549091505f906127ab908361302a565b905080156127bd576127bd8682612b7a565b600c545f906127d1906127008560026116e1565b90508015612812576007546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612810573d5f803e3d5ffd5b505b600e545f90612826906127008660026116e1565b9050801561283f57601e5461283b90826116aa565b601e555b5f612855601e54476116b590919063ffffffff16565b90508015612896576008546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612894573d5f803e3d5ffd5b505b50506014805460ff19169055505050505050505050565b8160025f8282546128be9190612f9f565b9091555050602980548291905f906128d7908490612fe5565b90915550505050565b8060296001015f8282546128f49190612fe5565b9091555050305f9081526024602052604090205460ff161561293457305f908152602260205260408120805483929061292e908490612fe5565b90915550505b305f90815260216020526040812080548492906128d7908490612fe5565b8060296002015f8282546129669190612fe5565b9091555050600a546001600160a01b03165f9081526024602052604090205460ff16156129bc57600a546001600160a01b03165f90815260226020526040812080548392906129b6908490612fe5565b90915550505b600a546001600160a01b03165f90815260216020526040812080548492906128d7908490612fe5565b5f8280156129f35750601154155b80612a065750818015612a065750601054155b80610c82575082158015612a18575081155b8015610c825750506012541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a5d57612a5d612f77565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad89190613041565b81600181518110612aeb57612aeb612f77565b6001600160a01b039283166020918202929092010152602754612b119130911684611481565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b499085905f908690309042906004016130d3565b5f604051808303815f87803b158015612b60575f80fd5b505af1158015612b72573d5f803e3d5ffd5b505050505050565b602754612b929030906001600160a01b031684611481565b60275460065460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bff573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611317919061310e565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6001600160a01b0381168114612c7b575f80fd5b50565b5f60208284031215612c8e575f80fd5b8135610c8281612c67565b5f602080835283518060208501525f5b81811015612cc557858101830151858201604001528201612ca9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612cf6575f80fd5b8235612d0181612c67565b946020939093013593505050565b5f805f60608486031215612d21575f80fd5b8335612d2c81612c67565b92506020840135612d3c81612c67565b929592945050506040919091013590565b5f60208284031215612d5d575f80fd5b5035919050565b8015158114612c7b575f80fd5b5f8060408385031215612d82575f80fd5b823591506020830135612d9481612d64565b809150509250929050565b5f60208284031215612daf575f80fd5b8135610c8281612d64565b5f8060408385031215612dcb575f80fd5b8235612dd681612d64565b91506020830135612d9481612c67565b5f805f805f60a08688031215612dfa575f80fd5b8535612e0581612c67565b94506020860135612e1581612c67565b93506040860135612e2581612c67565b92506060860135612e3581612c67565b91506080860135612e4581612c67565b809150509295509295909350565b5f8060408385031215612e64575f80fd5b8235612e6f81612c67565b91506020830135612d9481612d64565b5f8060408385031215612e90575f80fd5b823591506020830135612d9481612c67565b5f8060408385031215612eb3575f80fd5b50508035926020909101359150565b5f8060408385031215612ed3575f80fd5b8235612dd681612c67565b5f805f60608486031215612ef0575f80fd5b505081359360208301359350604090920135919050565b5f805f805f805f80610100898b031215612f1f575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a0157610a01612f8b565b634e487b7160e01b5f52603160045260245ffd5b5f82612fe057634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a0157610a01612f8b565b5f60208284031215613008575f80fd5b5051919050565b5f6020828403121561301f575f80fd5b8151610c8281612d64565b8082028115828204841417610a0157610a01612f8b565b5f60208284031215613051575f80fd5b8151610c8281612c67565b5f815180845260208085019450602084015f5b838110156130945781516001600160a01b03168752958201959082019060010161306f565b509495945050505050565b848152608060208201525f6130b7608083018661305c565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f6130f160a083018661305c565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613120575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3e252cc4b42522f7fcc23efec48f2ec552fdba893270258113c8588438cdb9764736f6c63430008180033

Deployed Bytecode Sourcemap

7439:22702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12221:83;;;;;;;;;;-1:-1:-1;12287:11:0;:15;12221:83;;;160:25:1;;;148:2;133:18;12221:83:0;;;;;;;;24148:464;;;;;;;;;;-1:-1:-1;24148:464:0;;;;;:::i;:::-;;:::i;:::-;;11315:67;;;;;;;;;;-1:-1:-1;11375:5:0;;;;;;;;;;;;-1:-1:-1;;;11375:5:0;;;;11315:67;;;;;;;:::i;12081:134::-;;;;;;;;;;-1:-1:-1;12081:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12081:134:0;1457:187:1;9267:24:0;;;;;;;;;;-1:-1:-1;9267:24:0;;;;;;;-1:-1:-1;;;;;9267:24:0;;;;;;-1:-1:-1;;;;;1813:32:1;;;1795:51;;1783:2;1768:18;9267:24:0;1649:203:1;11538:79:0;;;;;;;;;;-1:-1:-1;11608:7:0;;11538:79;;9450:31;;;;;;;;;;;;;;;;9525:32;;;;;;;;;;;;;;;;12492:309;;;;;;;;;;-1:-1:-1;12492:309:0;;;;;:::i;:::-;;:::i;22079:118::-;;;:::i;23805:335::-;;;;;;;;;;-1:-1:-1;23805:335:0;;;;;:::i;:::-;;:::i;22915:143::-;;;;;;;;;;;;;:::i;23549:248::-;;;;;;;;;;-1:-1:-1;23549:248:0;;;;;:::i;:::-;;:::i;6360:87::-;;;;;;;;;;-1:-1:-1;6360:87:0;;;;;:::i;:::-;6415:4;6440:5;-1:-1:-1;;;;;6429:16:0;;;6440:5;;6429:16;;6360:87;21257:182;;;;;;;;;;-1:-1:-1;21257:182:0;;;;;:::i;:::-;;:::i;11465:67::-;;;;;;;;;;-1:-1:-1;11465:67:0;;7514:1;2645:36:1;;2633:2;2618:18;11465:67:0;2503:184:1;12809:209:0;;;;;;;;;;-1:-1:-1;12809:209:0;;;;;:::i;:::-;;:::i;9796:44::-;;;;;;;;;;-1:-1:-1;9796:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23066:475;;;;;;;;;;-1:-1:-1;23066:475:0;;;;;:::i;:::-;;:::i;8890:60::-;;;;;;;;;;;;;;;;28025:92;;;;;;;;;;-1:-1:-1;28025:92:0;;;;;:::i;:::-;;:::i;17568:81::-;;;;;;;;;;;;;:::i;11623:173::-;;;;;;;;;;-1:-1:-1;11623:173:0;;;;;:::i;:::-;;:::i;9368:31::-;;;;;;;;;;;;;;;;7752:58;;;;;;;;;;;;;;;;17657:124;;;;;;;;;;-1:-1:-1;17657:124:0;;;;;:::i;:::-;;:::i;21961:110::-;;;;;;;;;;-1:-1:-1;21961:110:0;;;;;:::i;:::-;;:::i;7690:55::-;;;;;;;;;;;;;;;;12310:108;;;;;;;;;;-1:-1:-1;12310:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12396:20:0;12382:4;12396:20;;;:11;:20;;;;;;;;;12310:108;20779:470;;;;;;;;;;-1:-1:-1;20779:470:0;;;;;:::i;:::-;;:::i;21447:117::-;;;;;;;;;;-1:-1:-1;21447:117:0;;;;;:::i;:::-;;:::i;11388:71::-;;;;;;;;;;-1:-1:-1;11450:7:0;;;;;;;;;;;;-1:-1:-1;;;11450:7:0;;;;11388:71;;28125:148;;;;;;;;;;-1:-1:-1;28125:148:0;;;;;:::i;:::-;;:::i;13026:265::-;;;;;;;;;;-1:-1:-1;13026:265:0;;;;;:::i;:::-;;:::i;9909:19::-;;;;;;;;;;-1:-1:-1;9909:19:0;;;;-1:-1:-1;;;;;9909:19:0;;;11802:140;;;;;;;;;;-1:-1:-1;11802:140:0;;;;;:::i;:::-;;:::i;22205:449::-;;;;;;;;;;-1:-1:-1;22205:449:0;;;;;:::i;:::-;;:::i;9206:26::-;;;;;;;;;;-1:-1:-1;9206:26:0;;;;;;;;;;;9488:30;;;;;;;;;;;;;;;;22662:245;;;;;;;;;;-1:-1:-1;22662:245:0;;;;;:::i;:::-;;:::i;11948:127::-;;;;;;;;;;-1:-1:-1;11948:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12046:18:0;;;12029:7;12046:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11948:127;21572:294;;;;;;;;;;-1:-1:-1;21572:294:0;;;;;:::i;:::-;;:::i;20311:460::-;;;;;;;;;;-1:-1:-1;20311:460:0;;;;;:::i;:::-;;:::i;6453:111::-;;;;;;;;;;-1:-1:-1;6453:111:0;;;;;:::i;:::-;;:::i;9881:21::-;;;;;;;;;;-1:-1:-1;9881:21:0;;;;-1:-1:-1;;;;;9881:21:0;;;21874:79;;;;;;;;;;;;;:::i;24148:464::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24232:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24224:56;;;::::0;-1:-1:-1;;;24224:56:0;;7939:2:1;24224:56:0::1;::::0;::::1;7921:21:1::0;7978:2;7958:18;;;7951:30;8017:25;7997:18;;;7990:53;8060:18;;24224:56:0::1;7737:347:1::0;24224:56:0::1;24296:9;24291:314;24315:9;:16:::0;24311:20;::::1;24291:314;;;24373:7;-1:-1:-1::0;;;;;24357:23:0::1;:9;24367:1;24357:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24357:12:0::1;:23:::0;24353:241:::1;;24416:9;24426:16:::0;;:20:::1;::::0;24445:1:::1;::::0;24426:20:::1;:::i;:::-;24416:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24401:9:::1;:12:::0;;-1:-1:-1;;;;;24416:31:0;;::::1;::::0;24411:1;;24401:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24401:46:0::1;-1:-1:-1::0;;;;;24401:46:0;;::::1;;::::0;;24466:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24505:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24505:28:0::1;::::0;;24552:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24552:15:0;;;;;-1:-1:-1;;;;;;24552:15:0::1;::::0;;;;;24291:314:::1;24148:464:::0;:::o;24353:241::-:1;24333:3;;24291:314;;;;24148:464:::0;:::o;12081:134::-;12156:4;12163:37;12172:10;12184:7;12193:6;12163:8;:37::i;:::-;-1:-1:-1;12209:4:0;12081:134;;;;;:::o;12492:309::-;12590:4;12607:36;12617:6;12625:9;12636:6;12607:9;:36::i;:::-;12654:117;12663:6;12671:10;12683:87;12719:6;12683:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12683:19:0;;;;;;:11;:19;;;;;;;;12703:10;12683:31;;;;;;;;;:87;:35;:87::i;:::-;12654:8;:117::i;:::-;-1:-1:-1;12789:4:0;12492:309;;;;;:::o;22079:118::-;22158:16;;:31;;22179:9;22158:20;:31::i;:::-;22139:16;:50;22079:118::o;23805:335::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23890:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23889:21;23881:61;;;::::0;-1:-1:-1;;;23881:61:0;;8820:2:1;23881:61:0::1;::::0;::::1;8802:21:1::0;8859:2;8839:18;;;8832:30;8898:29;8878:18;;;8871:57;8945:18;;23881:61:0::1;8618:351:1::0;23881:61:0::1;-1:-1:-1::0;;;;;23956:16:0;::::1;23975:1;23956:16:::0;;;:7:::1;:16;::::0;;;;;:20;23953:108:::1;;-1:-1:-1::0;;;;;24032:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24012:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23993:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23953:108:::1;-1:-1:-1::0;;;;;24071:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24071:27:0::1;24094:4;24071:27:::0;;::::1;::::0;;;24109:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24109:23:0::1;::::0;;::::1;::::0;;23805:335::o;22915:143::-;22968:7;22995:55;23028:21;23046:1;23028:9;:21::i;:::-;23017:4;;22995:28;;23007:15;;-1:-1:-1;;;;;23017:4:0;23007:9;:15::i;:::-;22995:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;22988:62;;22915:143;:::o;23549:248::-;23615:7;23654;;23643;:18;;23635:73;;;;-1:-1:-1;;;23635:73:0;;9176:2:1;23635:73:0;;;9158:21:1;9215:2;9195:18;;;9188:30;9254:34;9234:18;;;9227:62;-1:-1:-1;;;9305:18:1;;;9298:40;9355:19;;23635:73:0;8974:406:1;23635:73:0;23719:19;23742:10;:8;:10::i;:::-;23719:33;-1:-1:-1;23770:19:0;23719:33;23770:7;:19;:::i;:::-;23763:26;23549:248;-1:-1:-1;;;23549:248:0:o;21257:182::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;21377:16:::1;::::0;21337:21:::1;::::0;-1:-1:-1;;;;;21377:16:0::1;21369:62;21404:26;21426:3;21404:17;21337:21:::0;21418:2;21404:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;21369:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21306:133;21257:182:::0;:::o;12809:209::-;12923:10;12897:4;12944:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12944:32:0;;;;;;;;;;12897:4;;12914:74;;12935:7;;12944:43;;12977:10;;12944:43;:::i;23066:475::-;23156:7;23195;;23184;:18;;23176:62;;;;-1:-1:-1;;;23176:62:0;;9939:2:1;23176:62:0;;;9921:21:1;9978:2;9958:18;;;9951:30;10017:33;9997:18;;;9990:61;10068:18;;23176:62:0;9737:355:1;23176:62:0;23254:17;23249:285;;23288:28;23319:39;23330:7;23339:4;23345:5;23352;23319:10;:39::i;:::-;23380:9;;-1:-1:-1;23373:16:0;;-1:-1:-1;23373:16:0;23249:285;23422:28;23453:39;23464:7;23473:4;23479:5;23486;23453:10;:39::i;:::-;23514:17;;;;-1:-1:-1;23507:24:0;;-1:-1:-1;23507:24:0;28025:92;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;28092:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;28092:17:0;;::::1;::::0;;;::::1;::::0;;28025:92::o;17568:81::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;17620:14:::1;:21:::0;;-1:-1:-1;;17620:21:0::1;17637:4;17620:21;::::0;;17568:81::o;11623:173::-;-1:-1:-1;;;;;11703:20:0;;11689:7;11703:20;;;:11;:20;;;;;;;;11699:49;;;-1:-1:-1;;;;;;11732:16:0;;;;;:7;:16;;;;;;;11623:173::o;11699:49::-;-1:-1:-1;;;;;11777:16:0;;;;;;:7;:16;;;;;;11757:37;;:19;:37::i;17657:124::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17741:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;17741:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17657:124::o;21961:110::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;22034:20:::1;:29:::0;21961:110::o;20779:470::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;20927:18:::1;:31:::0;;-1:-1:-1;;;;;20927:31:0;;::::1;-1:-1:-1::0;;;;;;20927:31:0;;::::1;::::0;::::1;::::0;;;20960:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;20993:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21022:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21051:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;20927:18:::1;21089:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;21089:30:0;;::::1;20927:31:::0;21089:30;;::::1;::::0;;;21121:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;21153:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21183:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21213:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;20779:470::o;21447:117::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21528:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;21528:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21447:117::o;28125:148::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;28210:16:::1;:27:::0;;-1:-1:-1;;;;;;28210:27:0::1;-1:-1:-1::0;;;;;28210:27:0;;;::::1;::::0;;;::::1;::::0;;28239:16:::1;:26:::0;28125:148::o;13026:265::-;13119:4;13136:125;13145:10;13157:7;13166:94;13203:15;13166:94;;;;;;;;;;;;;;;;;13178:10;13166:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13166:32:0;;;;;;;;;;;:94;:36;:94::i;11802:140::-;11880:4;11887:40;11897:10;11909:9;11920:6;11887:9;:40::i;22205:449::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;22293:13:::1;22309:43;22339:11;;22309:17;22321:4;22309:7;;:11;;:17;;;;:::i;:43::-;22293:59;;22363:17;22383:46;22416:11;;22383:20;22395:7;22383;;:11;;:20;;;;:::i;:46::-;22363:66;;22431:13;22447:26;22466:6;22447:14;22459:1;22447:7:::0;::::1;:11;;:14;;;;:::i;:26::-;22431:42;;22501:5;22492;:14;;:36;;;;;22523:5;22510:9;:18;;22492:36;22484:102;;;::::0;-1:-1:-1;;;22484:102:0;;10299:2:1;22484:102:0::1;::::0;::::1;10281:21:1::0;10338:2;10318:18;;;10311:30;10377:34;10357:18;;;10350:62;-1:-1:-1;;;10428:18:1;;;10421:51;10489:19;;22484:102:0::1;10097:417:1::0;22484:102:0::1;-1:-1:-1::0;22597:12:0::1;:20:::0;;;;22619:15:::1;:27:::0;-1:-1:-1;;22205:449:0:o;22662:245::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;22783:39:::1;::::0;-1:-1:-1;;;22783:39:0;;22816:4:::1;22783:39;::::0;::::1;1795:51:1::0;22768:12:0::1;::::0;-1:-1:-1;;;;;22783:24:0;::::1;::::0;::::1;::::0;1768:18:1;;22783:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22768:54:::0;-1:-1:-1;;;;;;22833:23:0;::::1;;22857:9:::0;22868:30:::1;22894:3;22868:21;22768:54:::0;22877:11;22868:8:::1;:21::i;:30::-;22833:66;::::0;-1:-1:-1;;;;;;22833:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10900:32:1;;;22833:66:0::1;::::0;::::1;10882:51:1::0;10949:18;;;10942:34;10855:18;;22833:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22757:150;22662:245:::0;;;:::o;21572:294::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;21700:10:::1;:24:::0;;;21742:7:::1;::::0;:48:::1;::::0;21782:6:::1;::::0;21742:27:::1;::::0;21754:14;21742:11:::1;:27::i;:48::-;21726:13;:64:::0;21810:7:::1;::::0;:48:::1;::::0;21850:6:::1;::::0;21810:27:::1;::::0;21822:14;21810:11:::1;:27::i;:48::-;21792:15;:66:::0;-1:-1:-1;;;21572:294:0:o;20311:460::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;20504:8:::1;:15:::0;;;;20521:7:::1;:15:::0;;;;20538:11:::1;:20:::0;;;;20569:8:::1;:27:::0;;;;20607:18;:31;20649:18;:31;20691:23;:34;20736:16;:27;20311:460::o;6453:111::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;6519:5:::1;:11:::0;;-1:-1:-1;;;;;;6519:11:0::1;-1:-1:-1::0;;;;;6519:11:0;::::1;::::0;;::::1;::::0;;;6537:25:::1;::::0;1795:51:1;;;6537:25:0::1;::::0;1783:2:1;1768:18;6537:25:0::1;;;;;;;6453:111:::0;:::o;21874:79::-;6415:4;6440:5;-1:-1:-1;;;;;6440:5:0;6327:10;6429:16;6311:38;;;;-1:-1:-1;;;6311:38:0;;;;;;;:::i;:::-;21929:16:::1;:14;:16::i;:::-;21874:79::o:0;13299:335::-;-1:-1:-1;;;;;13392:19:0;;13384:68;;;;-1:-1:-1;;;13384:68:0;;11655:2:1;13384:68:0;;;11637:21:1;11694:2;11674:18;;;11667:30;11733:34;11713:18;;;11706:62;-1:-1:-1;;;11784:18:1;;;11777:34;11828:19;;13384:68:0;11453:400:1;13384:68:0;-1:-1:-1;;;;;13471:21:0;;13463:68;;;;-1:-1:-1;;;13463:68:0;;12060:2:1;13463:68:0;;;12042:21:1;12099:2;12079:18;;;12072:30;12138:34;12118:18;;;12111:62;-1:-1:-1;;;12189:18:1;;;12182:32;12231:19;;13463:68:0;11858:398:1;13463:68:0;-1:-1:-1;;;;;13542:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13594:32;;160:25:1;;;13594:32:0;;133:18:1;13594:32:0;;;;;;;13299:335;;;:::o;13642:632::-;13731:37;13742:6;13750:9;13761:6;13731:10;:37::i;:::-;13779:38;13799:6;13807:9;13779:19;:38::i;:::-;13828:41;13843:6;13851:9;13862:6;13828:14;:41::i;:::-;13881:39;13894:9;13905:6;13913;13881:12;:39::i;:::-;13931:35;13948:6;13956:9;13931:16;:35::i;:::-;13977:40;13991:6;13999:9;14010:6;13977:13;:40::i;:::-;14028:35;14037:6;14045:9;14056:6;14028:8;:35::i;:::-;14074:31;14087:6;14095:9;14074:12;:31::i;:::-;-1:-1:-1;;;;;14160:19:0;;;;;;:11;:19;;;;;;14116:150;;14131:6;;14139:9;;14150:6;;14160:19;;;:45;;-1:-1:-1;;;;;;14183:22:0;;;;;;:11;:22;;;;;;;;14160:45;:57;;;-1:-1:-1;14209:8:0;;;;;;;14160:57;:69;;;-1:-1:-1;14221:8:0;;;;14160:69;14245:4;;14158:72;;;-1:-1:-1;;;;;14245:4:0;;;14232:17;;;;;;14251:14;;;14116;:150::i;5453:162::-;5539:7;5585:12;5577:6;;;;5569:29;;;;-1:-1:-1;;;5569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5607:5:0;;;5453:162::o;4152:82::-;4210:7;4227:5;4231:1;4227;:5;:::i;4240:82::-;4298:7;4315:5;4319:1;4315;:5;:::i;29441:158::-;29482:7;29503:15;29520;29539:19;:17;:19::i;:::-;29502:56;;-1:-1:-1;29502:56:0;-1:-1:-1;29576:15:0;29502:56;;29576:15;:::i;:::-;29569:22;;;;29441:158;:::o;4328:82::-;4386:7;4403:5;4407:1;4403;:5;:::i;4416:82::-;4474:7;4491:5;4495:1;4491;:5;:::i;25219:415::-;25322:36;;:::i;:::-;25383:49;25395:7;25404;25413:6;25421:10;25383:11;:49::i;:::-;25371:61;;25547:52;25559:9;25570:7;25579;25588:10;:8;:10::i;:::-;25547:11;:52::i;:::-;25525:18;;;25443:156;25505:19;;;25443:156;25490:14;;;25443:156;25463:25;;;25443:156;;;25219:415;;;;;;;:::o;28916:517::-;29002:16;;28981;;:38;;:20;:38::i;:::-;28962:16;:57;29030:8;:15;;-1:-1:-1;;29030:15:0;;;;;;29080:24;29098:4;29080:9;:24::i;:::-;29056:48;;29133:37;29153:16;;29133:15;;:19;;:37;;;;:::i;:::-;29115:15;:55;29198:16;;29181:34;;:16;:34::i;:::-;29226:20;29249:43;29278:13;29249:24;29267:4;29249:9;:24::i;:43::-;29323:17;;29226:66;;-1:-1:-1;29323:35:0;;29226:66;29323:21;:35::i;:::-;29303:17;:55;-1:-1:-1;;29369:8:0;:16;;-1:-1:-1;;29369:16:0;;;29380:5;29396:16;:29;28916:517::o;14282:355::-;-1:-1:-1;;;;;14386:20:0;;14378:70;;;;-1:-1:-1;;;14378:70:0;;12636:2:1;14378:70:0;;;12618:21:1;12675:2;12655:18;;;12648:30;12714:34;12694:18;;;12687:62;-1:-1:-1;;;12765:18:1;;;12758:35;12810:19;;14378:70:0;12434:401:1;14378:70:0;-1:-1:-1;;;;;14467:23:0;;14459:71;;;;-1:-1:-1;;;14459:71:0;;13042:2:1;14459:71:0;;;13024:21:1;13081:2;13061:18;;;13054:30;13120:34;13100:18;;;13093:62;-1:-1:-1;;;13171:18:1;;;13164:33;13214:19;;14459:71:0;12840:399:1;14459:71:0;14559:17;14569:6;14559:9;:17::i;:::-;14549:6;:27;;14541:88;;;;-1:-1:-1;;;14541:88:0;;13446:2:1;14541:88:0;;;13428:21:1;13485:2;13465:18;;;13458:30;13524:34;13504:18;;;13497:62;-1:-1:-1;;;13575:18:1;;;13568:47;13632:19;;14541:88:0;13244:413:1;14867:206:0;-1:-1:-1;;;;;14960:19:0;;;;;;:11;:19;;;;;;;;14959:20;:47;;;;-1:-1:-1;;;;;;14984:22:0;;;;;;:11;:22;;;;;;;;14983:23;14959:47;14956:110;;;15016:14;;;;15008:56;;;;-1:-1:-1;;;15008:56:0;;13864:2:1;15008:56:0;;;13846:21:1;13903:2;13883:18;;;13876:30;13942:31;13922:18;;;13915:59;13991:18;;15008:56:0;13662:353:1;15085:384:0;-1:-1:-1;;;;;15189:22:0;;;;;;:11;:22;;;;;;;;15188:23;:47;;;;-1:-1:-1;;;;;;15216:19:0;;;;;;:11;:19;;;;;;;;15215:20;15188:47;:77;;;;-1:-1:-1;;;;;;15239:26:0;;15260:4;15239:26;;15188:77;:107;;;;-1:-1:-1;15290:4:0;;-1:-1:-1;;;;;15269:26:0;;;15290:4;;15269:26;;15188:107;:128;;;;-1:-1:-1;15312:4:0;;-1:-1:-1;;;;;15299:17:0;;;15312:4;;15299:17;;15188:128;:163;;;;-1:-1:-1;15333:18:0;;-1:-1:-1;;;;;15320:31:0;;;15333:18;;15320:31;;15188:163;15185:277;;;15410:15;;15399:6;15376:20;15386:9;15376;:20::i;:::-;:29;;;;:::i;:::-;15375:50;;15367:93;;;;-1:-1:-1;;;15367:93:0;;14222:2:1;15367:93:0;;;14204:21:1;14261:2;14241:18;;;14234:30;14300:32;14280:18;;;14273:60;14350:18;;15367:93:0;14020:354:1;15675:193:0;15784:12;;15774:6;:22;;:45;;;-1:-1:-1;;;;;;15800:19:0;;;;;;:11;:19;;;;;;;;15774:45;:64;;;-1:-1:-1;;;;;;15823:15:0;;;;;;:11;:15;;;;;;;;15774:64;15766:94;;;;-1:-1:-1;;;15766:94:0;;14581:2:1;15766:94:0;;;14563:21:1;14620:2;14600:18;;;14593:30;-1:-1:-1;;;14639:18:1;;;14632:47;14696:18;;15766:94:0;14379:341:1;15477:190:0;15574:4;;-1:-1:-1;;;;;15561:17:0;;;15574:4;;15561:17;:41;;;;-1:-1:-1;;;;;;15583:19:0;;;;;;:11;:19;;;;;;;;15582:20;15561:41;:54;;;;-1:-1:-1;15607:8:0;;;;15606:9;15561:54;:67;;;;-1:-1:-1;15620:8:0;;;;;;;15619:9;15561:67;15558:102;;;15642:9;;:16;;15656:1;15642:13;:16::i;:::-;15630:9;:28;15477:190;;:::o;28281:627::-;28378:14;;;;:38;;;;-1:-1:-1;;;;;;28397:19:0;;;;;;:11;:19;;;;;;;;28396:20;28378:38;:68;;;;-1:-1:-1;28441:4:0;;-1:-1:-1;;;;;28420:26:0;;;28441:4;;28420:26;28378:68;:102;;;;;28460:20;;28450:6;:30;;28378:102;:128;;;;-1:-1:-1;28498:8:0;;;;28497:9;28378:128;:141;;;;-1:-1:-1;28511:8:0;;;;;;;28510:9;28378:141;28375:178;;;28549:1;28521:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;28375:178:0;28586:16;;28566;;:36;;:81;;;;;28631:16;;28606:21;:41;;28566:81;:122;;;;;28671:17;;28651:16;;:37;;28566:122;:147;;;;-1:-1:-1;28706:7:0;;;;;;;28566:147;:171;;;;-1:-1:-1;;;;;;28718:19:0;;;;;;:11;:19;;;;;;;;28717:20;28566:171;:201;;;;-1:-1:-1;28762:4:0;;-1:-1:-1;;;;;28741:26:0;;;28762:4;;28741:26;28566:201;:219;;;;-1:-1:-1;28771:14:0;;;;28566:219;:232;;;;-1:-1:-1;28790:8:0;;;;28789:9;28566:232;:245;;;;-1:-1:-1;28803:8:0;;;;;;;28802:9;28566:245;:268;;;;-1:-1:-1;28825:9:0;;-1:-1:-1;;;;;28815:19:0;;;28825:9;;;;;28815:19;;28566:268;:315;;;;;28861:20;;28851:6;:30;;28566:315;28563:338;;;28883:16;:14;:16::i;17372:188::-;17464:41;17479:6;17487:9;17498:6;17464:14;:41::i;:::-;17461:92;;;17507:29;17522:13;;17507:14;:29::i;:::-;17550:1;17538:9;:13;17372:188;;;:::o;14645:214::-;14722:9;:24;;-1:-1:-1;;;;;;14722:24:0;;;14770:4;;-1:-1:-1;;;;;14760:14:0;;;14770:4;;14760:14;:41;;;;-1:-1:-1;;;;;;14779:22:0;;;;;;:11;:22;;;;;;;;14778:23;14760:41;:54;;;;-1:-1:-1;14806:8:0;;;;;;;14805:9;14760:54;:67;;;;-1:-1:-1;14819:8:0;;;;14818:9;14760:67;14757:95;;;14829:9;:21;;-1:-1:-1;;;;;14829:21:0;;;;-1:-1:-1;;;;;;14829:21:0;;;;;;14645:214;;:::o;16008:921::-;16147:28;16178:48;16189:7;16198;16207:6;16215:10;16178;:48::i;:::-;-1:-1:-1;;;;;16240:19:0;;;;;;:11;:19;;;;;;16147:79;;-1:-1:-1;16240:19:0;;16237:83;;;-1:-1:-1;;;;;16295:15:0;;;;;;:7;:15;;;;;;:23;;16311:7;;16295:23;:::i;:::-;-1:-1:-1;;;;;16277:15:0;;;;;;:7;:15;;;;;:41;16237:83;-1:-1:-1;;;;;16333:22:0;;;;;;:11;:22;;;;;;;;16330:101;;;16412:17;;;;-1:-1:-1;;;;;16393:18:0;;;;;;:7;:18;;;;;;:36;;16412:17;16393:36;:::i;:::-;-1:-1:-1;;;;;16372:18:0;;;;;;:7;:18;;;;;:57;16330:101;16475:9;;-1:-1:-1;;;;;16459:15:0;;16475:9;16459:15;;;:7;:15;;;;;;:25;;16475:9;16459:25;:::i;:::-;-1:-1:-1;;;;;16441:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16535:17;;;16516:18;;;;;;;;;;:36;;16535:17;16516:36;:::i;:::-;-1:-1:-1;;;;;16495:18:0;;;;;;:7;:18;;;;;;;:57;;;;16575:6;;;16583;;;;16563:27;;16575:6;16563:11;:27::i;:::-;16601:39;16615:1;:11;;;16628:1;:11;;;16601:13;:39::i;:::-;16651:36;16664:1;:10;;;16676:1;:10;;;16651:12;:36::i;:::-;16720:9;-1:-1:-1;;;;;16703:46:0;16712:6;-1:-1:-1;;;;;16703:46:0;;16731:1;:17;;;16703:46;;;;160:25:1;;148:2;133:18;;14:177;16703:46:0;;;;;;;;16763:11;;;;:15;16760:71;;16810:4;-1:-1:-1;;;;;16785:44:0;16794:6;-1:-1:-1;;;;;16785:44:0;;16817:1;:11;;;16785:44;;;;160:25:1;;148:2;133:18;;14:177;16785:44:0;;;;;;;;16760:71;16844:10;;;;:14;16841:81;;16890:16;;;16909:10;;;16865:55;;160:25:1;;;-1:-1:-1;;;;;16890:16:0;;;;16865:55;;;;;148:2:1;133:18;16865:55:0;;;;;;;16841:81;16136:793;16008:921;;;;;;:::o;29607:531::-;29704:7;;29740;;29657;;;;;29758:270;29782:9;:16;29778:20;;29758:270;;;29848:7;29824;:21;29832:9;29842:1;29832:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29832:12:0;29824:21;;;;;;;;;;;;;:31;;:66;;;29883:7;29859;:21;29867:9;29877:1;29867:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29867:12:0;29859:21;;;;;;;;;;;;;:31;29824:66;29820:97;;;29900:7;;29909;;29892:25;;;;;;;29607:531;;:::o;29820:97::-;29950:7;:21;29958:9;29968:1;29958:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29958:12:0;29950:21;;;;;;;;;;;;;29942:29;;:7;:29;:::i;:::-;29932:39;;30004:7;:21;30012:9;30022:1;30012:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30012:12:0;30004:21;;;;;;;;;;;;;29996:29;;:7;:29;:::i;:::-;29986:39;-1:-1:-1;29800:3:0;;29758:270;;;;30060:7;;30052;;:15;;;;:::i;:::-;30042:7;:25;30038:56;;;30077:7;;30086;;30069:25;;;;;;29607:531;;:::o;30038:56::-;30113:7;;30122;;-1:-1:-1;29607:531:0;-1:-1:-1;29607:531:0:o;25860:1555::-;25964:28;;:::i;:::-;26009:7;26008:8;:41;;;;26020:29;26030:6;26038:10;26020:9;:29::i;:::-;26005:110;;;26064:17;;;:27;;;26104:8;;26005:110;26129:6;26128:7;:22;;;;;26140:10;26139:11;26128:22;26125:431;;;26166:17;26186:41;26215:11;;26186:24;26198:11;;26186:7;:11;;:24;;;;:::i;:41::-;26166:61;;26261:11;;26245:8;:12;;;:27;26242:75;;26304:11;;26291:8;:12;26283:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26274:6;;;:41;26242:75;26370:8;:12;26354:11;;:29;;:15;:29::i;:::-;26334:16;;:49;26331:105;;26423:11;;26406:16;;26398:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26385:10;;;:49;26331:105;26464:37;26490:1;:10;;;26464:21;26478:1;:6;;;26464:9;:13;;:21;;;;:::i;:37::-;26450:11;;;:51;26536:17;26544:9;26536:7;:17;:::i;:::-;26516;;;:37;-1:-1:-1;26125:431:0;26569:6;26566:403;;;26591:17;26611:37;26636:11;;26611:20;26623:7;;26611;:11;;:20;;;;:::i;:37::-;26591:57;;26682:7;;26666:8;:12;;;:23;26663:71;;26721:11;;26708:8;:12;26700:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26691:6;;;:41;26663:71;26783:8;:12;26771:7;;:25;;:11;:25::i;:::-;26751:16;;:45;26748:101;;26836:11;;26819:16;;26811:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26798:10;;;:49;26748:101;26877:37;26903:1;:10;;;26877:21;26891:1;:6;;;26877:9;:13;;:21;;;;:::i;:37::-;26863:11;;;:51;26949:17;26957:9;26949:7;:17;:::i;:::-;26929;;;:37;-1:-1:-1;26566:403:0;26982:10;26979:410;;;27008:17;27028:38;27054:11;;27028:21;27040:8;;27028:7;:11;;:21;;;;:::i;:38::-;27008:58;;27100:8;;27084;:12;;;:24;27081:72;;27140:11;;27127:8;:12;27119:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27110:6;;;:41;27081:72;27203:8;:12;27190:8;;:26;;:12;:26::i;:::-;27170:16;;:46;27167:102;;27256:11;;27239:16;;27231:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27218:10;;;:49;27167:102;27297:37;27323:1;:10;;;27297:21;27311:1;:6;;;27297:9;:13;;:21;;;;:::i;:37::-;27283:11;;;:51;27369:17;27377:9;27369:7;:17;:::i;:::-;27349;;;:37;-1:-1:-1;25860:1555:0;;;;;;:::o;27423:594::-;27548:15;;;;;27662:19;27670:11;27662:7;:19;:::i;:::-;27652:29;;27696:7;27692:60;;-1:-1:-1;27725:7:0;;-1:-1:-1;27743:1:0;;-1:-1:-1;27743:1:0;;-1:-1:-1;27743:1:0;27718:31;;27692:60;27776:11;27769:1;:6;;;:18;;;;:::i;:::-;27762:25;;27822:11;27810:1;:11;;;:23;;;;:::i;:::-;27798:35;;27866:11;27855:1;:10;;;:22;;;;:::i;:::-;27844:33;-1:-1:-1;27844:33:0;27920:9;27907:12;27915:4;27907:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;27888:50;;27423:594;;;;;;;;;;:::o;19940:363::-;20028:16;;;20042:1;20028:16;;;;;;;;20004:21;;20028:16;;;;;;;;-1:-1:-1;;20065:6:0;;:13;;;-1:-1:-1;;;20065:13:0;;;;20004:40;;-1:-1:-1;;;;;;20065:6:0;;;;:11;;-1:-1:-1;20065:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20055:4;20060:1;20055:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;20055:23:0;;;-1:-1:-1;;;;;20055:23:0;;;;;20107:4;20089;20094:1;20089:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20089:23:0;;;:7;;;;;;;;;:23;20123:6;;20248:16;;20123:172;;-1:-1:-1;;;20123:172:0;;:6;;;;:57;;20188:9;;20123:172;;:6;;20229:4;;20248:16;;;;20279:15;;20123:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16938:426;17036:4;17053:13;17079:15;;17069:6;:25;;17053:41;;17105:19;17155:13;;17127:24;17145:4;17127:9;:24::i;:::-;17187:8;;17127:41;-1:-1:-1;17127:41:0;;-1:-1:-1;17187:8:0;;17186:9;:24;;;;-1:-1:-1;17199:11:0;;;;;;;17186:24;:36;;;;;17214:8;17186:36;:60;;;;-1:-1:-1;;;;;;17227:19:0;;;;;;:11;:19;;;;;;;;17226:20;17186:60;:78;;;;-1:-1:-1;17250:14:0;;;;17186:78;:112;;;;-1:-1:-1;17294:4:0;;-1:-1:-1;;;;;17281:17:0;;;17294:4;;17281:17;17186:112;:139;;;;;17315:10;;17302:9;;:23;;17186:139;:157;;;;;17329:14;17186:157;:170;;;;-1:-1:-1;17348:8:0;;;;;;;17347:9;17186:170;17179:177;16938:426;-1:-1:-1;;;;;;16938:426:0:o;17789:1350::-;12446:8;:15;;-1:-1:-1;;12446:15:0;12457:4;12446:15;;;;;;17883:8:::1;::::0;12446;;17882:24:::1;::::0;17904:1:::1;::::0;17882:17:::1;::::0;17883:8;17882:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;17859:47;;17920:8;;17932:1;17920:13:::0;17917:134:::1;;18011:23:::0;;17973:18;;17950;;:99:::1;::::0;18047:1:::1;::::0;17950:92:::1;::::0;18040:1:::1;::::0;17950:85:::1;::::0;18011:23;;17950:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;17935:114;;17917:134;18105:18:::0;;18061:32:::1;::::0;18126:12;;18096:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;18061:77:::0;-1:-1:-1;18149:14:0::1;18166:33;18061:77:::0;18166:6;:33:::1;:::i;:::-;18149:50:::0;-1:-1:-1;18235:21:0::1;18267:24;18149:50:::0;18267:16:::1;:24::i;:::-;18302:20;18325:38;18349:14:::0;18325:21:::1;:38;:::i;:::-;18426:18:::0;;18302:61;;-1:-1:-1;18374:19:0::1;::::0;18411:33:::1;::::0;:12;:33:::1;:::i;:::-;18395:50;::::0;:12;:50:::1;:::i;:::-;18502:18:::0;;18374:71;;-1:-1:-1;18456:29:0::1;::::0;18488:32:::1;::::0;18374:71;18488:32:::1;:::i;:::-;18456:64:::0;-1:-1:-1;18534:25:0;;18531:108:::1;;18575:61;18588:24;18614:21;18575:12;:61::i;:::-;18698:18:::0;;18649:23:::1;::::0;18675:42:::1;::::0;:18:::1;:11:::0;18691:1:::1;18675:15;:18::i;:42::-;18649:68:::0;-1:-1:-1;18731:19:0;;18728:80:::1;;18760:18;::::0;18752:53:::1;::::0;-1:-1:-1;;;;;18760:18:0;;::::1;::::0;18752:53;::::1;;;::::0;18789:15;;18760:18:::1;18752:53:::0;18760:18;18752:53;18789:15;18760:18;18752:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18728:80;18865:23:::0;;18818:21:::1;::::0;18842:47:::1;::::0;:18:::1;:11:::0;18858:1:::1;18842:15;:18::i;:47::-;18818:71:::0;-1:-1:-1;18903:17:0;;18900:80:::1;;18942:16;::::0;:35:::1;::::0;18963:13;18942:20:::1;:35::i;:::-;18923:16;:54:::0;18900:80:::1;18990:15;19008:43;19034:16;;19008:21;:25;;:43;;;;:::i;:::-;18990:61:::0;-1:-1:-1;19065:20:0;;19062:70:::1;;19095:16;::::0;19087:43:::1;::::0;-1:-1:-1;;;;;19095:16:0;;::::1;::::0;19087:43;::::1;;;::::0;19122:7;;19095:16:::1;19087:43:::0;19095:16;19087:43;19122:7;19095:16;19087:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19062:70;-1:-1:-1::0;;12466:8:0;:16;;-1:-1:-1;;12466:16:0;;;-1:-1:-1;;;;;;;;;17789:1350:0:o;15876:124::-;15954:4;15944:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;15970:11:0;:22;;15988:4;;15970:11;:15;;:22;;15988:4;;15970:22;:::i;:::-;;;;-1:-1:-1;;;;15876:124:0:o;24620:277::-;24723:9;24700:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;24768:4:0;24748:26;;;;:11;:26;;;;;;;;24745:100;;;24816:4;24800:22;;;;:7;:22;;;;;:33;;24824:9;;24800:22;:33;;24824:9;;24800:33;:::i;:::-;;;;-1:-1:-1;;24745:100:0;24871:4;24855:22;;;;:7;:22;;;;;:34;;24880:9;;24855:22;:34;;24880:9;;24855:34;:::i;24905:306::-;25004:8;24982:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;25048:16:0;;-1:-1:-1;;;;;25048:16:0;25028:38;;;;:11;:38;;;;;;;;25025:123;;;25108:16;;-1:-1:-1;;;;;25108:16:0;25092:34;;;;:7;:34;;;;;:44;;25128:8;;25092:34;:44;;25128:8;;25092:44;:::i;:::-;;;;-1:-1:-1;;25025:123:0;25174:16;;-1:-1:-1;;;;;25174:16:0;25158:34;;;;:7;:34;;;;;:45;;25195:8;;25158:34;:45;;25195:8;;25158:45;:::i;25642:210::-;25714:4;25739:6;:22;;;;-1:-1:-1;25749:7:0;;:12;25739:22;25738:57;;;;25767:10;:27;;;;-1:-1:-1;25781:8:0;;:13;25767:27;25738:105;;;;25801:6;25800:7;:22;;;;;25812:10;25811:11;25800:22;:42;;;;-1:-1:-1;;25826:11:0;;:16;;25642:210;-1:-1:-1;;25642:210:0:o;19498:434::-;19588:16;;;19602:1;19588:16;;;;;;;;19564:21;;19588:16;;;;;;;;;;-1:-1:-1;19588:16:0;19564:40;;19633:4;19615;19620:1;19615:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19615:23:0;;;:7;;;;;;;;;;:23;;;;19659:6;;:13;;;-1:-1:-1;;;19659:13:0;;;;:6;;;;;:11;;:13;;;;;19615:7;;19659:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19649:4;19654:1;19649:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19649:23:0;;;:7;;;;;;;;;:23;19715:6;;19683:53;;19700:4;;19715:6;19724:11;19683:8;:53::i;:::-;19747:6;;:177;;-1:-1:-1;;;19747:177:0;;-1:-1:-1;;;;;19747:6:0;;;;:57;;:177;;19819:11;;19747:6;;19861:4;;19888;;19908:15;;19747:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19553:379;19498:434;:::o;19147:343::-;19260:6;;19228:53;;19245:4;;-1:-1:-1;;;;;19260:6:0;19269:11;19228:8;:53::i;:::-;19292:6;;19433:18;;19292:190;;-1:-1:-1;;;19292:190:0;;19355:4;19292:190;;;17026:34:1;17076:18;;;17069:34;;;19292:6:0;17119:18:1;;;17112:34;;;17162:18;;;17155:34;-1:-1:-1;;;;;19433:18:0;;;17205:19:1;;;17198:44;19466:15:0;17258:19:1;;;17251:35;19292:6:0;;;:22;;19322:9;;16960:19:1;;19292:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1857:456::-;1934:6;1942;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2184:2:1;2169:18;;2156:32;2197:33;2156:32;2197:33;:::i;:::-;1857:456;;2249:7;;-1:-1:-1;;;2303:2:1;2288:18;;;;2275:32;;1857:456::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:309;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2993:9;2980:23;2970:33;;3053:2;3042:9;3038:18;3025:32;3066:28;3088:5;3066:28;:::i;:::-;3113:5;3103:15;;;2815:309;;;;;:::o;3129:241::-;3185:6;3238:2;3226:9;3217:7;3213:23;3209:32;3206:52;;;3254:1;3251;3244:12;3206:52;3293:9;3280:23;3312:28;3334:5;3312:28;:::i;3375:382::-;3440:6;3448;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;3556:9;3543:23;3575:28;3597:5;3575:28;:::i;:::-;3622:5;-1:-1:-1;3679:2:1;3664:18;;3651:32;3692:33;3651:32;3692:33;:::i;3762:813::-;3857:6;3865;3873;3881;3889;3942:3;3930:9;3921:7;3917:23;3913:33;3910:53;;;3959:1;3956;3949:12;3910:53;3998:9;3985:23;4017:31;4042:5;4017:31;:::i;:::-;4067:5;-1:-1:-1;4124:2:1;4109:18;;4096:32;4137:33;4096:32;4137:33;:::i;:::-;4189:7;-1:-1:-1;4248:2:1;4233:18;;4220:32;4261:33;4220:32;4261:33;:::i;:::-;4313:7;-1:-1:-1;4372:2:1;4357:18;;4344:32;4385:33;4344:32;4385:33;:::i;:::-;4437:7;-1:-1:-1;4496:3:1;4481:19;;4468:33;4510;4468;4510;:::i;:::-;4562:7;4552:17;;;3762:813;;;;;;;;:::o;4580:382::-;4645:6;4653;4706:2;4694:9;4685:7;4681:23;4677:32;4674:52;;;4722:1;4719;4712:12;4674:52;4761:9;4748:23;4780:31;4805:5;4780:31;:::i;:::-;4830:5;-1:-1:-1;4887:2:1;4872:18;;4859:32;4900:30;4859:32;4900:30;:::i;4967:315::-;5035:6;5043;5096:2;5084:9;5075:7;5071:23;5067:32;5064:52;;;5112:1;5109;5102:12;5064:52;5148:9;5135:23;5125:33;;5208:2;5197:9;5193:18;5180:32;5221:31;5246:5;5221:31;:::i;5287:248::-;5355:6;5363;5416:2;5404:9;5395:7;5391:23;5387:32;5384:52;;;5432:1;5429;5422:12;5384:52;-1:-1:-1;;5455:23:1;;;5525:2;5510:18;;;5497:32;;-1:-1:-1;5287:248:1:o;5540:388::-;5608:6;5616;5669:2;5657:9;5648:7;5644:23;5640:32;5637:52;;;5685:1;5682;5675:12;5637:52;5724:9;5711:23;5743:31;5768:5;5743:31;:::i;5933:316::-;6010:6;6018;6026;6079:2;6067:9;6058:7;6054:23;6050:32;6047:52;;;6095:1;6092;6085:12;6047:52;-1:-1:-1;;6118:23:1;;;6188:2;6173:18;;6160:32;;-1:-1:-1;6239:2:1;6224:18;;;6211:32;;5933:316;-1:-1:-1;5933:316:1:o;6254:661::-;6376:6;6384;6392;6400;6408;6416;6424;6432;6485:3;6473:9;6464:7;6460:23;6456:33;6453:53;;;6502:1;6499;6492:12;6453:53;-1:-1:-1;;6525:23:1;;;6595:2;6580:18;;6567:32;;-1:-1:-1;6646:2:1;6631:18;;6618:32;;6697:2;6682:18;;6669:32;;-1:-1:-1;6748:3:1;6733:19;;6720:33;;-1:-1:-1;6800:3:1;6785:19;;6772:33;;-1:-1:-1;6852:3:1;6837:19;;6824:33;;-1:-1:-1;6904:3:1;6889:19;6876:33;;-1:-1:-1;6254:661:1;-1:-1:-1;6254:661:1:o;7403:329::-;7605:2;7587:21;;;7644:1;7624:18;;;7617:29;-1:-1:-1;;;7677:2:1;7662:18;;7655:36;7723:2;7708:18;;7403:329::o;8089:127::-;8150:10;8145:3;8141:20;8138:1;8131:31;8181:4;8178:1;8171:15;8205:4;8202:1;8195:15;8221:127;8282:10;8277:3;8273:20;8270:1;8263:31;8313:4;8310:1;8303:15;8337:4;8334:1;8327:15;8353:128;8420:9;;;8441:11;;;8438:37;;;8455:18;;:::i;8486:127::-;8547:10;8542:3;8538:20;8535:1;8528:31;8578:4;8575:1;8568:15;8602:4;8599:1;8592:15;9385:217;9425:1;9451;9441:132;;9495:10;9490:3;9486:20;9483:1;9476:31;9530:4;9527:1;9520:15;9558:4;9555:1;9548:15;9441:132;-1:-1:-1;9587:9:1;;9385:217::o;9607:125::-;9672:9;;;9693:10;;;9690:36;;;9706:18;;:::i;10519:184::-;10589:6;10642:2;10630:9;10621:7;10617:23;10613:32;10610:52;;;10658:1;10655;10648:12;10610:52;-1:-1:-1;10681:16:1;;10519:184;-1:-1:-1;10519:184:1:o;10987:245::-;11054:6;11107:2;11095:9;11086:7;11082:23;11078:32;11075:52;;;11123:1;11120;11113:12;11075:52;11155:9;11149:16;11174:28;11196:5;11174:28;:::i;12261:168::-;12334:9;;;12365;;12382:15;;;12376:22;;12362:37;12352:71;;12403:18;;:::i;14857:251::-;14927:6;14980:2;14968:9;14959:7;14955:23;14951:32;14948:52;;;14996:1;14993;14986:12;14948:52;15028:9;15022:16;15047:31;15072:5;15047:31;:::i;15113:465::-;15166:3;15204:5;15198:12;15231:6;15226:3;15219:19;15257:4;15286;15281:3;15277:14;15270:21;;15325:4;15318:5;15314:16;15348:1;15358:195;15372:6;15369:1;15366:13;15358:195;;;15437:13;;-1:-1:-1;;;;;15433:39:1;15421:52;;15493:12;;;;15528:15;;;;15469:1;15387:9;15358:195;;;-1:-1:-1;15569:3:1;;15113:465;-1:-1:-1;;;;;15113:465:1:o;15583:510::-;15854:6;15843:9;15836:25;15897:3;15892:2;15881:9;15877:18;15870:31;15817:4;15918:57;15970:3;15959:9;15955:19;15947:6;15918:57;:::i;:::-;-1:-1:-1;;;;;16011:32:1;;;;16006:2;15991:18;;15984:60;-1:-1:-1;16075:2:1;16060:18;16053:34;15910:65;15583:510;-1:-1:-1;;15583:510:1:o;16098:582::-;16397:6;16386:9;16379:25;16440:6;16435:2;16424:9;16420:18;16413:34;16483:3;16478:2;16467:9;16463:18;16456:31;16360:4;16504:57;16556:3;16545:9;16541:19;16533:6;16504:57;:::i;:::-;-1:-1:-1;;;;;16597:32:1;;;;16592:2;16577:18;;16570:60;-1:-1:-1;16661:3:1;16646:19;16639:35;16496:65;16098:582;-1:-1:-1;;;16098:582:1:o;17297:306::-;17385:6;17393;17401;17454:2;17442:9;17433:7;17429:23;17425:32;17422:52;;;17470:1;17467;17460:12;17422:52;17499:9;17493:16;17483:26;;17549:2;17538:9;17534:18;17528:25;17518:35;;17593:2;17582:9;17578:18;17572:25;17562:35;;17297:306;;;;;:::o

Swarm Source

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