ETH Price: $2,286.85 (+0.44%)

Token

Berenberg Cash (BBC)
 

Overview

Max Total Supply

11,102,531 BBC

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
27,925.332583777 BBC

Value
$0.00
0x81409e4c1a55c034ec86f64a75d18d911a8b0071
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:
BBC

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

library SafeCast {

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits");
        return uint128(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits");
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits");
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits");
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits");
        return uint8(value);
    }
    
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(value < 2**255, "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


contract Initializable {

  bool private initialized;

  bool private initializing;

  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  function isConstructor() private view returns (bool) {
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  uint256[50] private ______gap;
}

contract ContextUpgradeSafe is Initializable {

    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {
    }

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

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

    uint256[50] private __gap;
}

contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe {
    address private _owner;

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

    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);

    }

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

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

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

    uint256[49] private __gap;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

        return c;
    }

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

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

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

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

        return c;
    }

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    function __ERC20_init(string memory name, string memory symbol) internal initializer {
        __Context_init_unchained();
        __ERC20_init_unchained(name, symbol);
    }

    function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer {


        _name = name;
        _symbol = symbol;
        _decimals = 18;

    }

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

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

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

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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 _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }

    uint256[44] private __gap;
}

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract BBC is ERC20UpgradeSafe, OwnableUpgradeSafe {
    
    using SafeCast for int256;
    using SafeMath for uint256;
    using Address for address;
    
    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);

    Transaction[] public transactions;

    uint256 private _epoch;
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
	
	uint256 private _totalSupply;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    
    uint256 private constant DECIMALS = 9;
    uint256 private constant RATE_PRECISION = 10 ** DECIMALS;
    
    uint256 public _tFeePercent;
    
    address public _rebaser;
    
    uint256 public _limitTransferAmount;
    uint256 public _limitMaxBalance;
    uint256 public _limitSellFeePercent;
    
    uint256 public _limitTimestamp;
    
    uint256 private listedAt;
    IUniswapV2Pair private uniswapV2pair;
    
    uint256 public _presaleTimestamp;
    uint256 public _presaleEth;
    bool public endSale;
    uint256 public _presaleRate;
    mapping(address => uint256) public saleAmt;
    mapping(uint256 => bool) public locked;
    
    IUniswapV2Router02 public uniswapRouterV2;
    IUniswapV2Factory public uniswapFactory;
    bool public syncActive = true;
    
    function initialize()
        public
        initializer
    {
        __ERC20_init("Berenberg Cash", "BBC");
        _setupDecimals(uint8(DECIMALS));
        __Ownable_init();
        
        _totalSupply = 10000000 * 10**9 ;
        _rTotal = (MAX - (MAX % _totalSupply));
        
        _rebaser = _msgSender();
        
        _tFeePercent = 118;

        _rOwned[address(this)] = _rTotal;
        emit Transfer(address(0), address(this), _totalSupply);

        _presaleTimestamp = 1610992800;
        endSale = false;
        _presaleEth = 120 ether;
        _presaleRate = 50000;
        
        excludeAccount(_msgSender());
        excludeAccount(address(this));
        
        uniswapRouterV2 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    }

    receive() external payable {
        require(!endSale, "Presale has ended");
        require(now > 1610992800, "Presale has not started");
        require(_presaleEth >= msg.value, "Sold out");
        saleAmt[msg.sender] += msg.value;
        require(saleAmt[msg.sender] <=  3000000000000000000, "Max presale limit has been reached");
        address payable wallet = address(uint160(owner()));
        wallet.transfer(msg.value.div(3));
        _presaleEth = _presaleEth.sub(msg.value);
        uint256 amountBought = msg.value.div(10**9).mul(_presaleRate);
        _transfer(address(this), msg.sender, amountBought );
    }

    function listToken() external onlyOwner() {
        require(!endSale, 'Token is already listed');
        require(_presaleEth == 0 || _presaleTimestamp < now, "Sale has not ended yet");
        endSale = true;
        _transfer(address(this), _msgSender(), 4000000 * 10**9);
        address tokenUniswapPair = uniswapFactory.createPair(
            address(uniswapRouterV2.WETH()),
            address(address(this))
        );
        IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair);
        address WETH = uniswapRouterV2.WETH();
        uint256 ethToSend = address(this).balance;
        IWETH(WETH).deposit{value : ethToSend}();
        require(address(this).balance == 0 , "Transfer Failed");
        uint256 tokenToAdd = 4000000 * 10**9;
        if(_presaleEth != 0) {
            tokenToAdd = ethToSend.div(10**9).mul(_presaleRate);
            uint256 unsoldTokens = balanceOf(address(this)) - tokenToAdd; 
            _transfer(address(this), address(0), unsoldTokens);
        }
        IWETH(WETH).transfer(address(pair),ethToSend);
        _transfer(address(this), address(pair), tokenToAdd);
        pair.mint(address(this));
        listedAt = now;
        uniswapV2pair = pair;
    }
    function setSyncActive(bool value) public onlyOwner(){
        syncActive = value;
    }
    
    function withdrawLP() public onlyOwner() {
        require(now >= listedAt + 30 days, "Liquidity is locked for 30 days");
        IERC20(address(uniswapV2pair)).transfer(msg.sender, IERC20(address(uniswapV2pair)).balanceOf(address(this)));
    }
    
    function setRebaser(address rebaser) external onlyOwner() {
        _rebaser = rebaser;
    }
     
    function setLock(uint256 _index) external onlyOwner() {
        locked[_index] = true;
    }
    
    function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() {

        _tFeePercent = tFeePercent;
    }
    
    function setLimit(uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() {
        require(_limitTimestamp == 0, "Limit changes not allowed");
        
        _limitTransferAmount = transferAmount;
        _limitMaxBalance = maxBalance;
        _limitSellFeePercent = sellFeePercent;

        _limitTimestamp = now;
    }
    
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }
    
    function rebase(int256 supplyDelta)
        external
        returns (uint256)
    {
        require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized");
        
        _epoch = _epoch.add(1);
		
        if (supplyDelta == 0) {
            emit LogRebase(_epoch, _totalSupply);
            return _totalSupply;
        }
        
        uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256();
        uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply);
        uint256 multiplier;
        
        if (supplyDelta < 0) {
            multiplier = RATE_PRECISION.sub(rate);
        } else {
            multiplier = RATE_PRECISION.add(rate);
        }
        
        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uSupplyDelta);
        } else {
            _totalSupply = _totalSupply.add(uSupplyDelta);
        }
        
        if (_totalSupply > MAX) {
            _totalSupply = MAX;
        }
        
        for (uint256 i = 0; i < _excluded.length; i++) {
            if(_tOwned[_excluded[i]] > 0) {
                _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION);
            }
        }
        
        emit LogRebase(_epoch, _totalSupply);

		for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                bool result = externalCall(t.destination, t.data);
                if (!result) {
                    emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }

        if(syncActive){
            uniswapV2pair.sync();
        }

        return _totalSupply;
    }
    
    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
	
    function addTransaction(address destination, bytes memory data)
        external
        onlyOwner
    {
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }
	
	/**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */

    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");
        require(!locked[index], "index is locked");

        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.pop();
    }
	
	/**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */

    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }
	
	/**
     * @return Number of transactions, both enabled and disabled, in transactions list.
     */

    function transactionsSize()
        external
        view
        returns (uint256)
    {
        return transactions.length;
    }
	
	/**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */

    function externalCall(address destination, bytes memory data)
        internal
        returns (bool)
    {
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                // 34710 is the value that solidity is currently emitting
                // It includes callGas (700) + callVeryLow (3, to pay for SUB)
                // + callValueTransferGas (9000) + callNewAccountGas
                // (25000, in case the destination address does not exist and needs creating)
                sub(gas(), 34710),


                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeAccount(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromRefraction(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _approve(address owner, address spender, uint256 amount) internal override {
        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) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(endSale || sender == owner() || sender == address(this), "transfer paused for sale");
        if(sender == address(this) || sender == owner()) {
            _transferBothExcluded(sender, recipient, amount, 0);
        } else if(_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount, _tFeePercent);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
                _transferToExcluded(sender, recipient, amount, _tFeePercent);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount, _tFeePercent);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount, 0);
        } else {
            _transferStandard(sender, recipient, amount, _tFeePercent);
        }
    }
    

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

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

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

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

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

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

    function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(tFeePercent).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","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":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"saleAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"setLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSyncActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionsSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260e2805460ff60a01b1916600160a01b17905534801561002357600080fd5b50613f9d806100336000396000f3fe6080604052600436106102cd5760003560e01c806365cccc80116101755780639ace38c2116100dc578063d1c83a9211610095578063e46adf621161006f578063e46adf6214610cd2578063f2cc0c1814610d05578063f2fde38b14610d38578063f84354f114610d6b576104a1565b8063d1c83a9214610c41578063d3e1574714610c6d578063dd62ed3e14610c97576104a1565b80639ace38c214610aa2578063a1a64a1e14610b5d578063a457c2d714610b72578063a9059cbb14610bab578063b45a3c0e14610be4578063cba0e99614610c0e576104a1565b80638129fc1c1161012e5780638129fc1c14610a075780638bdb2afa14610a1c5780638da5cb5b14610a3157806391d4ec1814610a4657806395d89b4114610a5b57806397d0677b14610a70576104a1565b806365cccc801461094e5780636e9dde991461096357806370a0823114610995578063715018a6146109c857806377949b0e146109dd5780637d449789146109f2576104a1565b806323b872dd11610234578063380d831b116101ed578063456e0a5d116101c7578063456e0a5d146108c457806346c3bd1f146108d9578063596fa9e3146109035780635c31a71314610918576104a1565b8063380d831b14610845578063395093511461085a5780633aa8d4be14610893576104a1565b806323b872dd1461076e5780632ae427dc146107b15780632bc1281e146107c65780632d7da5a4146107db578063303bb0b6146107f0578063313ce5671461081a576104a1565b806313114a9d1161028657806313114a9d146106a857806314cf1bd8146106bd57806314f43f7e146106f057806316007d291461071a57806318160ddd1461072f5780631f36d92514610744576104a1565b8063030ba6bf146104a657806306fdde03146104bd57806308d1dd8a14610547578063095ea7b31461056e5780630ab114f9146105bb578063126e19be146105e5576104a1565b366104a15760dd5460ff161561031e576040805162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b604482015290519081900360640190fd5b636005cca04211610376576040805162461bcd60e51b815260206004820152601760248201527f50726573616c6520686173206e6f742073746172746564000000000000000000604482015290519081900360640190fd5b3460dc5410156103b8576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260df6020526040902080543401908190556729a2241af62c000010156104155760405162461bcd60e51b8152600401808060200182810382526022815260200180613dc26022913960400191505060405180910390fd5b600061041f610d9e565b90506001600160a01b0381166108fc610439346003610dad565b6040518115909202916000818181858888f19350505050158015610461573d6000803e3d6000fd5b5060dc5461046f9034610df8565b60dc5560de546000906104909061048a34633b9aca00610dad565b90610e3a565b905061049d303383610e93565b5050005b600080fd5b3480156104b257600080fd5b506104bb61114c565b005b3480156104c957600080fd5b506104d2611607565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561050c5781810151838201526020016104f4565b50505050905090810190601f1680156105395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561055357600080fd5b5061055c61169d565b60408051918252519081900360200190f35b34801561057a57600080fd5b506105a76004803603604081101561059157600080fd5b506001600160a01b0381351690602001356116a3565b604080519115158252519081900360200190f35b3480156105c757600080fd5b5061055c600480360360208110156105de57600080fd5b50356116c0565b3480156105f157600080fd5b506104bb6004803603604081101561060857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561063357600080fd5b82018360208201111561064557600080fd5b8035906020019184600183028401116401000000008311171561066757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bdc945050505050565b3480156106b457600080fd5b5061055c611cfd565b3480156106c957600080fd5b5061055c600480360360208110156106e057600080fd5b50356001600160a01b0316611d03565b3480156106fc57600080fd5b506104bb6004803603602081101561071357600080fd5b5035611d15565b34801561072657600080fd5b5061055c611df0565b34801561073b57600080fd5b5061055c611df6565b34801561075057600080fd5b506104bb6004803603602081101561076757600080fd5b5035611dfc565b34801561077a57600080fd5b506105a76004803603606081101561079157600080fd5b506001600160a01b03813581169160208101359091169060400135611e59565b3480156107bd57600080fd5b5061055c611ee0565b3480156107d257600080fd5b5061055c611ee6565b3480156107e757600080fd5b5061055c611eec565b3480156107fc57600080fd5b5061055c6004803603602081101561081357600080fd5b5035611ef2565b34801561082657600080fd5b5061082f611f52565b6040805160ff9092168252519081900360200190f35b34801561085157600080fd5b506105a7611f5b565b34801561086657600080fd5b506105a76004803603604081101561087d57600080fd5b506001600160a01b038135169060200135611f64565b34801561089f57600080fd5b506108a8611fb2565b604080516001600160a01b039092168252519081900360200190f35b3480156108d057600080fd5b5061055c611fc1565b3480156108e557600080fd5b506104bb600480360360208110156108fc57600080fd5b5035611fc7565b34801561090f57600080fd5b506108a86121b5565b34801561092457600080fd5b506104bb6004803603606081101561093b57600080fd5b50803590602081013590604001356121c4565b34801561095a57600080fd5b5061055c612283565b34801561096f57600080fd5b506104bb6004803603604081101561098657600080fd5b50803590602001351515612289565b3480156109a157600080fd5b5061055c600480360360208110156109b857600080fd5b50356001600160a01b0316612352565b3480156109d457600080fd5b506104bb6123b4565b3480156109e957600080fd5b506105a7612456565b3480156109fe57600080fd5b5061055c612466565b348015610a1357600080fd5b506104bb61246c565b348015610a2857600080fd5b506108a8612686565b348015610a3d57600080fd5b506108a8610d9e565b348015610a5257600080fd5b5061055c612695565b348015610a6757600080fd5b506104d261269b565b348015610a7c57600080fd5b5061055c60048036036040811015610a9357600080fd5b508035906020013515156126fc565b348015610aae57600080fd5b50610acc60048036036020811015610ac557600080fd5b5035612792565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b20578181015183820152602001610b08565b50505050905090810190601f168015610b4d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b6957600080fd5b506104bb612857565b348015610b7e57600080fd5b506105a760048036036040811015610b9557600080fd5b506001600160a01b038135169060200135612a08565b348015610bb757600080fd5b506105a760048036036040811015610bce57600080fd5b506001600160a01b038135169060200135612a70565b348015610bf057600080fd5b506105a760048036036020811015610c0757600080fd5b5035612a84565b348015610c1a57600080fd5b506105a760048036036020811015610c3157600080fd5b50356001600160a01b0316612a99565b348015610c4d57600080fd5b506104bb60048036036020811015610c6457600080fd5b50351515612ab7565b348015610c7957600080fd5b506104bb60048036036020811015610c9057600080fd5b5035612b2d565b348015610ca357600080fd5b5061055c60048036036040811015610cba57600080fd5b506001600160a01b0381358116916020013516612ba0565b348015610cde57600080fd5b506104bb60048036036020811015610cf557600080fd5b50356001600160a01b0316612bcb565b348015610d1157600080fd5b506104bb60048036036020811015610d2857600080fd5b50356001600160a01b0316612c45565b348015610d4457600080fd5b506104bb60048036036020811015610d5b57600080fd5b50356001600160a01b0316612dcb565b348015610d7757600080fd5b506104bb60048036036020811015610d8e57600080fd5b50356001600160a01b0316612ec4565b6097546001600160a01b031690565b6000610def83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613081565b90505b92915050565b6000610def83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613123565b600082610e4957506000610df2565b82820282848281610e5657fe5b0414610def5760405162461bcd60e51b8152600401808060200182810382526021815260200180613de46021913960400191505060405180910390fd5b6001600160a01b038316610ed85760405162461bcd60e51b8152600401808060200182810382526025815260200180613ece6025913960400191505060405180910390fd5b60008111610f175760405162461bcd60e51b8152600401808060200182810382526029815260200180613e4d6029913960400191505060405180910390fd5b60dd5460ff1680610f405750610f2b610d9e565b6001600160a01b0316836001600160a01b0316145b80610f5357506001600160a01b03831630145b610fa4576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610fd35750610fbe610d9e565b6001600160a01b0316836001600160a01b0316145b15610fea57610fe5838383600061317d565b611147565b6001600160a01b038316600090815260ce602052604090205460ff16801561102b57506001600160a01b038216600090815260ce602052604090205460ff16155b1561103e57610fe583838360d3546132cc565b6001600160a01b038316600090815260ce602052604090205460ff1615801561107f57506001600160a01b038216600090815260ce602052604090205460ff165b1561109257610fe583838360d35461336c565b6001600160a01b038316600090815260ce602052604090205460ff161580156110d457506001600160a01b038216600090815260ce602052604090205460ff16155b156110e757610fe583838360d3546133ae565b6001600160a01b038316600090815260ce602052604090205460ff16801561112757506001600160a01b038216600090815260ce602052604090205460ff165b1561113957610fe5838383600061317d565b61114783838360d3546133ae565b505050565b6111546133f0565b6097546001600160a01b039081169116146111a4576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60dd5460ff16156111fc576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c7265616479206c6973746564000000000000000000604482015290519081900360640190fd5b60dc54158061120c57504260db54105b611256576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60dd805460ff1916600117905561127c3061126f6133f0565b660e35fa931a0000610e93565b60e25460e154604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b1580156112d057600080fd5b505afa1580156112e4573d6000803e3d6000fd5b505050506040513d60208110156112fa57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b15801561134957600080fd5b505af115801561135d573d6000803e3d6000fd5b505050506040513d602081101561137357600080fd5b505160e154604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d60208110156113e957600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b15801561143457600080fd5b505af1158015611448573d6000803e3d6000fd5b505050505047600014611494576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60dc54660e35fa931a000090156114d95760de546114ba9061048a84633b9aca00610dad565b90506000816114c830612352565b0390506114d730600083610e93565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561153057600080fd5b505af1158015611544573d6000803e3d6000fd5b505050506040513d602081101561155a57600080fd5b506115689050308583610e93565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050506040513d60208110156115da57600080fd5b50504260d955505060da80546001600160a01b0319166001600160a01b0393909316929092179091555050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116935780601f1061166857610100808354040283529160200191611693565b820191906000526020600020905b81548152906001019060200180831161167657829003601f168201915b5050505050905090565b60d85481565b60006116b76116b06133f0565b84846133f4565b50600192915050565b60006116ca610d9e565b6001600160a01b03166116db6133f0565b6001600160a01b0316148061170a575060d4546001600160a01b03166116ff6133f0565b6001600160a01b0316145b611753576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca546117619060016134e0565b60ca55816117aa5760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054611bd7565b60006117c7600084126117bd57836117c2565b836000035b61353a565b60d0549091506000906117e8906117e284633b9aca00610e3a565b90610dad565b905060008085121561180957611802633b9aca0083610df8565b905061181a565b611817633b9aca00836134e0565b90505b60008512156118385760d0546118309084610df8565b60d055611849565b60d05461184590846134e0565b60d0555b60005b60cf5481101561191b57600060cc600060cf848154811061186957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541115611913576118dc6009600a0a6117e28460cc600060cf87815481106118b157fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610e3a565b60cc600060cf84815481106118ed57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b60010161184c565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015611b5257600060c9828154811061197057fe5b60009182526020909120600290910201805490915060ff1615611b495780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095611a389590046001600160a01b0316939092909190830182828015611a2e5780601f10611a0357610100808354040283529160200191611a2e565b820191906000526020600020905b815481529060010190602001808311611a1157829003601f168201915b5050505050613595565b905080611b475781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015611af65780601f10611acb57610100808354040283529160200191611af6565b820191906000526020600020905b815481529060010190602001808311611ad957829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101611957565b5060e254600160a01b900460ff1615611bce5760da60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050505b60d05493505050505b919050565b611be46133f0565b6097546001600160a01b03908116911614611c34576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611cf6937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2901929190910190613c0d565b5050505050565b60d25490565b60df6020526000908152604090205481565b6000611d1f6133f0565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611d7a5760405162461bcd60e51b815260040180806020018281038252602c815260200180613f17602c913960400191505060405180910390fd5b6000611d888360d3546135b8565b505050506001600160a01b038316600090815260cb6020526040902054909150611db29082610df8565b6001600160a01b038316600090815260cb602052604090205560d154611dd89082610df8565b60d15560d254611de890846134e0565b60d255505050565b60de5481565b60d05490565b611e046133f0565b6097546001600160a01b03908116911614611e54576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d355565b6000611e66848484610e93565b611ed684611e726133f0565b611ed185604051806060016040528060288152602001613e05602891396001600160a01b038a16600090815260cd6020526040812090611eb06133f0565b6001600160a01b031681526020810191909152604001600020549190613123565b6133f4565b5060019392505050565b60d35481565b60d55481565b60db5481565b600060d154821115611f355760405162461bcd60e51b815260040180806020018281038252602a815260200180613ea4602a913960400191505060405180910390fd5b6000611f3f613606565b9050611f4b8382610dad565b9392505050565b606a5460ff1690565b60dd5460ff1681565b60006116b7611f716133f0565b84611ed18560cd6000611f826133f0565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906134e0565b60d4546001600160a01b031681565b60d65481565b611fcf6133f0565b6097546001600160a01b0390811691161461201f576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60c954811061206b576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600081815260e0602052604090205460ff16156120c1576040805162461bcd60e51b815260206004820152600f60248201526e1a5b99195e081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b60c954600019018110156121725760c9805460001981019081106120e157fe5b906000526020600020906002020160c982815481106120fc57fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b0316820217825560018085018054939461216e948387019492938116159092026000190190911604613c87565b5050505b60c980548061217d57fe5b60008281526020812060026000199093019283020180546001600160a81b0319168155906121ae6001830182613cfc565b5050905550565b60e1546001600160a01b031681565b6121cc6133f0565b6097546001600160a01b0390811691161461221c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d85415612271576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60dc5481565b6122916133f0565b6097546001600160a01b039081169116146122e1576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60c95482106123215760405162461bcd60e51b8152600401808060200182810382526028815260200180613d9a6028913960400191505060405180910390fd5b8060c9838154811061232f57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561239257506001600160a01b038116600090815260cc6020526040902054611bd7565b6001600160a01b038216600090815260cb6020526040902054610df290611ef2565b6123bc6133f0565b6097546001600160a01b0390811691161461240c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60e254600160a01b900460ff1681565b60d75481565b600054610100900460ff16806124855750612485613629565b80612493575060005460ff16155b6124ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff161580156124f9576000805460ff1961ff0019909116610100171660011790555b6125446040518060400160405280600e81526020016d084cae4cadcc4cae4ce4086c2e6d60931b8152506040518060400160405280600381526020016242424360e81b81525061362f565b61254e60096136e4565b6125566136fa565b662386f26fc1000060d055660e3d2cfe61ffff1960d1556125756133f0565b60d480546001600160a01b0319166001600160a01b0392909216919091179055607660d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3636005cca060db5560dd805460ff1916905568068155a43676e0000060dc5561c35060de5561262061261b6133f0565b612c45565b61262930612c45565b60e180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560e28054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f1790558015612683576000805461ff00191690555b50565b60e2546001600160a01b031681565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116935780601f1061166857610100808354040283529160200191611693565b600060d054831115612755576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816127765760006127688460d3546135b8565b50929450610df29350505050565b60006127848460d3546135b8565b50919450610df29350505050565b60c9818154811061279f57fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b0316949293909283018282801561284d5780601f106128225761010080835404028352916020019161284d565b820191906000526020600020905b81548152906001019060200180831161283057829003601f168201915b5050505050905083565b61285f6133f0565b6097546001600160a01b039081169116146128af576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d95462278d000142101561290b576040805162461bcd60e51b815260206004820152601f60248201527f4c6971756964697479206973206c6f636b656420666f72203330206461797300604482015290519081900360640190fd5b60da54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561295f57600080fd5b505afa158015612973573d6000803e3d6000fd5b505050506040513d602081101561298957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156129da57600080fd5b505af11580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b5050565b60006116b7612a156133f0565b84611ed185604051806060016040528060258152602001613f436025913960cd6000612a3f6133f0565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613123565b60006116b7612a7d6133f0565b8484610e93565b60e06020526000908152604090205460ff1681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b612abf6133f0565b6097546001600160a01b03908116911614612b0f576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60e28054911515600160a01b0260ff60a01b19909216919091179055565b612b356133f0565b6097546001600160a01b03908116911614612b85576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b600090815260e060205260409020805460ff19166001179055565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b612bd36133f0565b6097546001600160a01b03908116911614612c23576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b612c4d6133f0565b6097546001600160a01b03908116911614612c9d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615612d0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612d65576001600160a01b038116600090815260cb6020526040902054612d4b90611ef2565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b612dd36133f0565b6097546001600160a01b03908116911614612e23576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116612e685760405162461bcd60e51b8152600401808060200182810382526026815260200180613d526026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b612ecc6133f0565b6097546001600160a01b03908116911614612f1c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612f89576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612a0457816001600160a01b031660cf8281548110612fad57fe5b6000918252602090912001546001600160a01b031614156130795760cf80546000198101908110612fda57fe5b60009182526020909120015460cf80546001600160a01b03909216918390811061300057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf80548061305257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612a04565b600101612f8c565b6000818361310d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130d25781810151838201526020016130ba565b50505050905090810190601f1680156130ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161311957fe5b0495945050505050565b600081848411156131755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156130d25781810151838201526020016130ba565b505050900390565b600080600080600061318f87876135b8565b6001600160a01b038e16600090815260cc6020526040902054949950929750909550935091506131bf9088610df8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb905220546131ee9086610df8565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc909152205461322490836134e0565b6001600160a01b038916600090815260cc602090815260408083209390935560cb9052205461325390856134e0565b6001600160a01b038916600090815260cb602052604090205561327683826137ab565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006132de87876135b8565b6001600160a01b038e16600090815260cc60205260409020549499509297509095509350915061330e9088610df8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb9052205461333d9086610df8565b6001600160a01b03808b16600090815260cb602052604080822093909355908a168152205461325390856134e0565b600080600080600061337e87876135b8565b6001600160a01b038e16600090815260cb6020526040902054949950929750909550935091506131ee9086610df8565b60008060008060006133c087876135b8565b6001600160a01b038e16600090815260cb60205260409020549499509297509095509350915061333d9086610df8565b3390565b6001600160a01b0383166134395760405162461bcd60e51b8152600401808060200182810382526024815260200180613ef36024913960400191505060405180910390fd5b6001600160a01b03821661347e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613d786022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610def576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613591576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006135cd89896137cf565b9150915060006135db613606565b905060008060006135ed8d86866137fd565b919f909e50909c50959a50939850939650505050505050565b6000806000613613613839565b90925090506136228282610dad565b9250505090565b303b1590565b600054610100900460ff16806136485750613648613629565b80613656575060005460ff16155b6136915760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff161580156136bc576000805460ff1961ff0019909116610100171660011790555b6136c461399c565b6136ce8383613a3c565b8015611147576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff16806137135750613713613629565b80613721575060005460ff16155b61375c5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613787576000805460ff1961ff0019909116610100171660011790555b61378f61399c565b613797613b14565b8015612683576000805461ff001916905550565b60d1546137b89083610df8565b60d15560d2546137c890826134e0565b60d2555050565b600080806137e36127106117e28787610e3a565b905060006137f18683610df8565b96919550909350505050565b600080808061380c8786610e3a565b9050600061381a8787610e3a565b905060006138288383610df8565b929992985090965090945050505050565b60d15460d0546000918291825b60cf5481101561396a578260cb600060cf848154811061386257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138c757508160cc600060cf84815481106138a057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138de5760d15460d05494509450505050613998565b61391e60cb600060cf84815481106138f257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610df8565b925061396060cc600060cf848154811061393457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610df8565b9150600101613846565b5060d05460d15461397a91610dad565b8210156139925760d15460d054935093505050613998565b90925090505b9091565b600054610100900460ff16806139b557506139b5613629565b806139c3575060005460ff16155b6139fe5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613797576000805460ff1961ff0019909116610100171660011790558015612683576000805461ff001916905550565b600054610100900460ff1680613a555750613a55613629565b80613a63575060005460ff16155b613a9e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613ac9576000805460ff1961ff0019909116610100171660011790555b8251613adc906068906020860190613c0d565b508151613af0906069906020850190613c0d565b50606a805460ff191660121790558015611147576000805461ff0019169055505050565b600054610100900460ff1680613b2d5750613b2d613629565b80613b3b575060005460ff16155b613b765760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613ba1576000805460ff1961ff0019909116610100171660011790555b6000613bab6133f0565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612683576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613c4e57805160ff1916838001178555613c7b565b82800160010185558215613c7b579182015b82811115613c7b578251825591602001919060010190613c60565b50613591929150613d3c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613cc05780548555613c7b565b82800160010185558215613c7b57600052602060002091601f016020900482015b82811115613c7b578254825591600101919060010190613ce1565b50805460018160011615610100020316600290046000825580601f10613d225750612683565b601f01602090049060005260206000209081019061268391905b5b808211156135915760008155600101613d3d56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c6973744d61782070726573616c65206c696d697420686173206265656e2072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd7021b35b61c05da8c04a89d0774549c49d5eee83af843d5723036d9165adf764736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806365cccc80116101755780639ace38c2116100dc578063d1c83a9211610095578063e46adf621161006f578063e46adf6214610cd2578063f2cc0c1814610d05578063f2fde38b14610d38578063f84354f114610d6b576104a1565b8063d1c83a9214610c41578063d3e1574714610c6d578063dd62ed3e14610c97576104a1565b80639ace38c214610aa2578063a1a64a1e14610b5d578063a457c2d714610b72578063a9059cbb14610bab578063b45a3c0e14610be4578063cba0e99614610c0e576104a1565b80638129fc1c1161012e5780638129fc1c14610a075780638bdb2afa14610a1c5780638da5cb5b14610a3157806391d4ec1814610a4657806395d89b4114610a5b57806397d0677b14610a70576104a1565b806365cccc801461094e5780636e9dde991461096357806370a0823114610995578063715018a6146109c857806377949b0e146109dd5780637d449789146109f2576104a1565b806323b872dd11610234578063380d831b116101ed578063456e0a5d116101c7578063456e0a5d146108c457806346c3bd1f146108d9578063596fa9e3146109035780635c31a71314610918576104a1565b8063380d831b14610845578063395093511461085a5780633aa8d4be14610893576104a1565b806323b872dd1461076e5780632ae427dc146107b15780632bc1281e146107c65780632d7da5a4146107db578063303bb0b6146107f0578063313ce5671461081a576104a1565b806313114a9d1161028657806313114a9d146106a857806314cf1bd8146106bd57806314f43f7e146106f057806316007d291461071a57806318160ddd1461072f5780631f36d92514610744576104a1565b8063030ba6bf146104a657806306fdde03146104bd57806308d1dd8a14610547578063095ea7b31461056e5780630ab114f9146105bb578063126e19be146105e5576104a1565b366104a15760dd5460ff161561031e576040805162461bcd60e51b8152602060048201526011602482015270141c995cd85b19481a185cc8195b991959607a1b604482015290519081900360640190fd5b636005cca04211610376576040805162461bcd60e51b815260206004820152601760248201527f50726573616c6520686173206e6f742073746172746564000000000000000000604482015290519081900360640190fd5b3460dc5410156103b8576040805162461bcd60e51b815260206004820152600860248201526714dbdb19081bdd5d60c21b604482015290519081900360640190fd5b33600090815260df6020526040902080543401908190556729a2241af62c000010156104155760405162461bcd60e51b8152600401808060200182810382526022815260200180613dc26022913960400191505060405180910390fd5b600061041f610d9e565b90506001600160a01b0381166108fc610439346003610dad565b6040518115909202916000818181858888f19350505050158015610461573d6000803e3d6000fd5b5060dc5461046f9034610df8565b60dc5560de546000906104909061048a34633b9aca00610dad565b90610e3a565b905061049d303383610e93565b5050005b600080fd5b3480156104b257600080fd5b506104bb61114c565b005b3480156104c957600080fd5b506104d2611607565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561050c5781810151838201526020016104f4565b50505050905090810190601f1680156105395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561055357600080fd5b5061055c61169d565b60408051918252519081900360200190f35b34801561057a57600080fd5b506105a76004803603604081101561059157600080fd5b506001600160a01b0381351690602001356116a3565b604080519115158252519081900360200190f35b3480156105c757600080fd5b5061055c600480360360208110156105de57600080fd5b50356116c0565b3480156105f157600080fd5b506104bb6004803603604081101561060857600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561063357600080fd5b82018360208201111561064557600080fd5b8035906020019184600183028401116401000000008311171561066757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bdc945050505050565b3480156106b457600080fd5b5061055c611cfd565b3480156106c957600080fd5b5061055c600480360360208110156106e057600080fd5b50356001600160a01b0316611d03565b3480156106fc57600080fd5b506104bb6004803603602081101561071357600080fd5b5035611d15565b34801561072657600080fd5b5061055c611df0565b34801561073b57600080fd5b5061055c611df6565b34801561075057600080fd5b506104bb6004803603602081101561076757600080fd5b5035611dfc565b34801561077a57600080fd5b506105a76004803603606081101561079157600080fd5b506001600160a01b03813581169160208101359091169060400135611e59565b3480156107bd57600080fd5b5061055c611ee0565b3480156107d257600080fd5b5061055c611ee6565b3480156107e757600080fd5b5061055c611eec565b3480156107fc57600080fd5b5061055c6004803603602081101561081357600080fd5b5035611ef2565b34801561082657600080fd5b5061082f611f52565b6040805160ff9092168252519081900360200190f35b34801561085157600080fd5b506105a7611f5b565b34801561086657600080fd5b506105a76004803603604081101561087d57600080fd5b506001600160a01b038135169060200135611f64565b34801561089f57600080fd5b506108a8611fb2565b604080516001600160a01b039092168252519081900360200190f35b3480156108d057600080fd5b5061055c611fc1565b3480156108e557600080fd5b506104bb600480360360208110156108fc57600080fd5b5035611fc7565b34801561090f57600080fd5b506108a86121b5565b34801561092457600080fd5b506104bb6004803603606081101561093b57600080fd5b50803590602081013590604001356121c4565b34801561095a57600080fd5b5061055c612283565b34801561096f57600080fd5b506104bb6004803603604081101561098657600080fd5b50803590602001351515612289565b3480156109a157600080fd5b5061055c600480360360208110156109b857600080fd5b50356001600160a01b0316612352565b3480156109d457600080fd5b506104bb6123b4565b3480156109e957600080fd5b506105a7612456565b3480156109fe57600080fd5b5061055c612466565b348015610a1357600080fd5b506104bb61246c565b348015610a2857600080fd5b506108a8612686565b348015610a3d57600080fd5b506108a8610d9e565b348015610a5257600080fd5b5061055c612695565b348015610a6757600080fd5b506104d261269b565b348015610a7c57600080fd5b5061055c60048036036040811015610a9357600080fd5b508035906020013515156126fc565b348015610aae57600080fd5b50610acc60048036036020811015610ac557600080fd5b5035612792565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b20578181015183820152602001610b08565b50505050905090810190601f168015610b4d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b6957600080fd5b506104bb612857565b348015610b7e57600080fd5b506105a760048036036040811015610b9557600080fd5b506001600160a01b038135169060200135612a08565b348015610bb757600080fd5b506105a760048036036040811015610bce57600080fd5b506001600160a01b038135169060200135612a70565b348015610bf057600080fd5b506105a760048036036020811015610c0757600080fd5b5035612a84565b348015610c1a57600080fd5b506105a760048036036020811015610c3157600080fd5b50356001600160a01b0316612a99565b348015610c4d57600080fd5b506104bb60048036036020811015610c6457600080fd5b50351515612ab7565b348015610c7957600080fd5b506104bb60048036036020811015610c9057600080fd5b5035612b2d565b348015610ca357600080fd5b5061055c60048036036040811015610cba57600080fd5b506001600160a01b0381358116916020013516612ba0565b348015610cde57600080fd5b506104bb60048036036020811015610cf557600080fd5b50356001600160a01b0316612bcb565b348015610d1157600080fd5b506104bb60048036036020811015610d2857600080fd5b50356001600160a01b0316612c45565b348015610d4457600080fd5b506104bb60048036036020811015610d5b57600080fd5b50356001600160a01b0316612dcb565b348015610d7757600080fd5b506104bb60048036036020811015610d8e57600080fd5b50356001600160a01b0316612ec4565b6097546001600160a01b031690565b6000610def83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613081565b90505b92915050565b6000610def83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613123565b600082610e4957506000610df2565b82820282848281610e5657fe5b0414610def5760405162461bcd60e51b8152600401808060200182810382526021815260200180613de46021913960400191505060405180910390fd5b6001600160a01b038316610ed85760405162461bcd60e51b8152600401808060200182810382526025815260200180613ece6025913960400191505060405180910390fd5b60008111610f175760405162461bcd60e51b8152600401808060200182810382526029815260200180613e4d6029913960400191505060405180910390fd5b60dd5460ff1680610f405750610f2b610d9e565b6001600160a01b0316836001600160a01b0316145b80610f5357506001600160a01b03831630145b610fa4576040805162461bcd60e51b815260206004820152601860248201527f7472616e736665722070617573656420666f722073616c650000000000000000604482015290519081900360640190fd5b6001600160a01b038316301480610fd35750610fbe610d9e565b6001600160a01b0316836001600160a01b0316145b15610fea57610fe5838383600061317d565b611147565b6001600160a01b038316600090815260ce602052604090205460ff16801561102b57506001600160a01b038216600090815260ce602052604090205460ff16155b1561103e57610fe583838360d3546132cc565b6001600160a01b038316600090815260ce602052604090205460ff1615801561107f57506001600160a01b038216600090815260ce602052604090205460ff165b1561109257610fe583838360d35461336c565b6001600160a01b038316600090815260ce602052604090205460ff161580156110d457506001600160a01b038216600090815260ce602052604090205460ff16155b156110e757610fe583838360d3546133ae565b6001600160a01b038316600090815260ce602052604090205460ff16801561112757506001600160a01b038216600090815260ce602052604090205460ff165b1561113957610fe5838383600061317d565b61114783838360d3546133ae565b505050565b6111546133f0565b6097546001600160a01b039081169116146111a4576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60dd5460ff16156111fc576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c7265616479206c6973746564000000000000000000604482015290519081900360640190fd5b60dc54158061120c57504260db54105b611256576040805162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc81b9bdd08195b991959081e595d60521b604482015290519081900360640190fd5b60dd805460ff1916600117905561127c3061126f6133f0565b660e35fa931a0000610e93565b60e25460e154604080516315ab88c960e31b815290516000936001600160a01b039081169363c9c653969391169163ad5c464891600480820192602092909190829003018186803b1580156112d057600080fd5b505afa1580156112e4573d6000803e3d6000fd5b505050506040513d60208110156112fa57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b15801561134957600080fd5b505af115801561135d573d6000803e3d6000fd5b505050506040513d602081101561137357600080fd5b505160e154604080516315ab88c960e31b8152905192935083926000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d60208110156113e957600080fd5b505160408051630d0e30db60e41b8152905191925047916001600160a01b0384169163d0e30db091849160048082019260009290919082900301818588803b15801561143457600080fd5b505af1158015611448573d6000803e3d6000fd5b505050505047600014611494576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b604482015290519081900360640190fd5b60dc54660e35fa931a000090156114d95760de546114ba9061048a84633b9aca00610dad565b90506000816114c830612352565b0390506114d730600083610e93565b505b826001600160a01b031663a9059cbb85846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561153057600080fd5b505af1158015611544573d6000803e3d6000fd5b505050506040513d602081101561155a57600080fd5b506115689050308583610e93565b604080516335313c2160e11b815230600482015290516001600160a01b03861691636a6278429160248083019260209291908290030181600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050506040513d60208110156115da57600080fd5b50504260d955505060da80546001600160a01b0319166001600160a01b0393909316929092179091555050565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116935780601f1061166857610100808354040283529160200191611693565b820191906000526020600020905b81548152906001019060200180831161167657829003601f168201915b5050505050905090565b60d85481565b60006116b76116b06133f0565b84846133f4565b50600192915050565b60006116ca610d9e565b6001600160a01b03166116db6133f0565b6001600160a01b0316148061170a575060d4546001600160a01b03166116ff6133f0565b6001600160a01b0316145b611753576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca546117619060016134e0565b60ca55816117aa5760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054611bd7565b60006117c7600084126117bd57836117c2565b836000035b61353a565b60d0549091506000906117e8906117e284633b9aca00610e3a565b90610dad565b905060008085121561180957611802633b9aca0083610df8565b905061181a565b611817633b9aca00836134e0565b90505b60008512156118385760d0546118309084610df8565b60d055611849565b60d05461184590846134e0565b60d0555b60005b60cf5481101561191b57600060cc600060cf848154811061186957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541115611913576118dc6009600a0a6117e28460cc600060cf87815481106118b157fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205490610e3a565b60cc600060cf84815481106118ed57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b60010161184c565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015611b5257600060c9828154811061197057fe5b60009182526020909120600290910201805490915060ff1615611b495780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095611a389590046001600160a01b0316939092909190830182828015611a2e5780601f10611a0357610100808354040283529160200191611a2e565b820191906000526020600020905b815481529060010190602001808311611a1157829003601f168201915b5050505050613595565b905080611b475781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015611af65780601f10611acb57610100808354040283529160200191611af6565b820191906000526020600020905b815481529060010190602001808311611ad957829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101611957565b5060e254600160a01b900460ff1615611bce5760da60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050505b60d05493505050505b919050565b611be46133f0565b6097546001600160a01b03908116911614611c34576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193611cf6937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2901929190910190613c0d565b5050505050565b60d25490565b60df6020526000908152604090205481565b6000611d1f6133f0565b6001600160a01b038116600090815260ce602052604090205490915060ff1615611d7a5760405162461bcd60e51b815260040180806020018281038252602c815260200180613f17602c913960400191505060405180910390fd5b6000611d888360d3546135b8565b505050506001600160a01b038316600090815260cb6020526040902054909150611db29082610df8565b6001600160a01b038316600090815260cb602052604090205560d154611dd89082610df8565b60d15560d254611de890846134e0565b60d255505050565b60de5481565b60d05490565b611e046133f0565b6097546001600160a01b03908116911614611e54576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d355565b6000611e66848484610e93565b611ed684611e726133f0565b611ed185604051806060016040528060288152602001613e05602891396001600160a01b038a16600090815260cd6020526040812090611eb06133f0565b6001600160a01b031681526020810191909152604001600020549190613123565b6133f4565b5060019392505050565b60d35481565b60d55481565b60db5481565b600060d154821115611f355760405162461bcd60e51b815260040180806020018281038252602a815260200180613ea4602a913960400191505060405180910390fd5b6000611f3f613606565b9050611f4b8382610dad565b9392505050565b606a5460ff1690565b60dd5460ff1681565b60006116b7611f716133f0565b84611ed18560cd6000611f826133f0565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906134e0565b60d4546001600160a01b031681565b60d65481565b611fcf6133f0565b6097546001600160a01b0390811691161461201f576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60c954811061206b576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600081815260e0602052604090205460ff16156120c1576040805162461bcd60e51b815260206004820152600f60248201526e1a5b99195e081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b60c954600019018110156121725760c9805460001981019081106120e157fe5b906000526020600020906002020160c982815481106120fc57fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b0316820217825560018085018054939461216e948387019492938116159092026000190190911604613c87565b5050505b60c980548061217d57fe5b60008281526020812060026000199093019283020180546001600160a81b0319168155906121ae6001830182613cfc565b5050905550565b60e1546001600160a01b031681565b6121cc6133f0565b6097546001600160a01b0390811691161461221c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d85415612271576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d59290925560d65560d7554260d855565b60dc5481565b6122916133f0565b6097546001600160a01b039081169116146122e1576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60c95482106123215760405162461bcd60e51b8152600401808060200182810382526028815260200180613d9a6028913960400191505060405180910390fd5b8060c9838154811061232f57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff161561239257506001600160a01b038116600090815260cc6020526040902054611bd7565b6001600160a01b038216600090815260cb6020526040902054610df290611ef2565b6123bc6133f0565b6097546001600160a01b0390811691161461240c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60e254600160a01b900460ff1681565b60d75481565b600054610100900460ff16806124855750612485613629565b80612493575060005460ff16155b6124ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff161580156124f9576000805460ff1961ff0019909116610100171660011790555b6125446040518060400160405280600e81526020016d084cae4cadcc4cae4ce4086c2e6d60931b8152506040518060400160405280600381526020016242424360e81b81525061362f565b61254e60096136e4565b6125566136fa565b662386f26fc1000060d055660e3d2cfe61ffff1960d1556125756133f0565b60d480546001600160a01b0319166001600160a01b0392909216919091179055607660d35560d15430600081815260cb602090815260408083209490945560d05484519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3636005cca060db5560dd805460ff1916905568068155a43676e0000060dc5561c35060de5561262061261b6133f0565b612c45565b61262930612c45565b60e180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560e28054909116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f1790558015612683576000805461ff00191690555b50565b60e2546001600160a01b031681565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116935780601f1061166857610100808354040283529160200191611693565b600060d054831115612755576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816127765760006127688460d3546135b8565b50929450610df29350505050565b60006127848460d3546135b8565b50919450610df29350505050565b60c9818154811061279f57fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b0316949293909283018282801561284d5780601f106128225761010080835404028352916020019161284d565b820191906000526020600020905b81548152906001019060200180831161283057829003601f168201915b5050505050905083565b61285f6133f0565b6097546001600160a01b039081169116146128af576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d95462278d000142101561290b576040805162461bcd60e51b815260206004820152601f60248201527f4c6971756964697479206973206c6f636b656420666f72203330206461797300604482015290519081900360640190fd5b60da54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561295f57600080fd5b505afa158015612973573d6000803e3d6000fd5b505050506040513d602081101561298957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156129da57600080fd5b505af11580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b5050565b60006116b7612a156133f0565b84611ed185604051806060016040528060258152602001613f436025913960cd6000612a3f6133f0565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613123565b60006116b7612a7d6133f0565b8484610e93565b60e06020526000908152604090205460ff1681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b612abf6133f0565b6097546001600160a01b03908116911614612b0f576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60e28054911515600160a01b0260ff60a01b19909216919091179055565b612b356133f0565b6097546001600160a01b03908116911614612b85576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b600090815260e060205260409020805460ff19166001179055565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b612bd36133f0565b6097546001600160a01b03908116911614612c23576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b60d480546001600160a01b0319166001600160a01b0392909216919091179055565b612c4d6133f0565b6097546001600160a01b03908116911614612c9d576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615612d0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415612d65576001600160a01b038116600090815260cb6020526040902054612d4b90611ef2565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b612dd36133f0565b6097546001600160a01b03908116911614612e23576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116612e685760405162461bcd60e51b8152600401808060200182810382526026815260200180613d526026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b612ecc6133f0565b6097546001600160a01b03908116911614612f1c576040805162461bcd60e51b81526020600482018190526024820152600080516020613e2d833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612f89576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf54811015612a0457816001600160a01b031660cf8281548110612fad57fe5b6000918252602090912001546001600160a01b031614156130795760cf80546000198101908110612fda57fe5b60009182526020909120015460cf80546001600160a01b03909216918390811061300057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf80548061305257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055612a04565b600101612f8c565b6000818361310d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130d25781810151838201526020016130ba565b50505050905090810190601f1680156130ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161311957fe5b0495945050505050565b600081848411156131755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156130d25781810151838201526020016130ba565b505050900390565b600080600080600061318f87876135b8565b6001600160a01b038e16600090815260cc6020526040902054949950929750909550935091506131bf9088610df8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb905220546131ee9086610df8565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc909152205461322490836134e0565b6001600160a01b038916600090815260cc602090815260408083209390935560cb9052205461325390856134e0565b6001600160a01b038916600090815260cb602052604090205561327683826137ab565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006132de87876135b8565b6001600160a01b038e16600090815260cc60205260409020549499509297509095509350915061330e9088610df8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb9052205461333d9086610df8565b6001600160a01b03808b16600090815260cb602052604080822093909355908a168152205461325390856134e0565b600080600080600061337e87876135b8565b6001600160a01b038e16600090815260cb6020526040902054949950929750909550935091506131ee9086610df8565b60008060008060006133c087876135b8565b6001600160a01b038e16600090815260cb60205260409020549499509297509095509350915061333d9086610df8565b3390565b6001600160a01b0383166134395760405162461bcd60e51b8152600401808060200182810382526024815260200180613ef36024913960400191505060405180910390fd5b6001600160a01b03821661347e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613d786022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610def576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215613591576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006135cd89896137cf565b9150915060006135db613606565b905060008060006135ed8d86866137fd565b919f909e50909c50959a50939850939650505050505050565b6000806000613613613839565b90925090506136228282610dad565b9250505090565b303b1590565b600054610100900460ff16806136485750613648613629565b80613656575060005460ff16155b6136915760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff161580156136bc576000805460ff1961ff0019909116610100171660011790555b6136c461399c565b6136ce8383613a3c565b8015611147576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff16806137135750613713613629565b80613721575060005460ff16155b61375c5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613787576000805460ff1961ff0019909116610100171660011790555b61378f61399c565b613797613b14565b8015612683576000805461ff001916905550565b60d1546137b89083610df8565b60d15560d2546137c890826134e0565b60d2555050565b600080806137e36127106117e28787610e3a565b905060006137f18683610df8565b96919550909350505050565b600080808061380c8786610e3a565b9050600061381a8787610e3a565b905060006138288383610df8565b929992985090965090945050505050565b60d15460d0546000918291825b60cf5481101561396a578260cb600060cf848154811061386257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138c757508160cc600060cf84815481106138a057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138de5760d15460d05494509450505050613998565b61391e60cb600060cf84815481106138f257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610df8565b925061396060cc600060cf848154811061393457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610df8565b9150600101613846565b5060d05460d15461397a91610dad565b8210156139925760d15460d054935093505050613998565b90925090505b9091565b600054610100900460ff16806139b557506139b5613629565b806139c3575060005460ff16155b6139fe5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613797576000805460ff1961ff0019909116610100171660011790558015612683576000805461ff001916905550565b600054610100900460ff1680613a555750613a55613629565b80613a63575060005460ff16155b613a9e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613ac9576000805460ff1961ff0019909116610100171660011790555b8251613adc906068906020860190613c0d565b508151613af0906069906020850190613c0d565b50606a805460ff191660121790558015611147576000805461ff0019169055505050565b600054610100900460ff1680613b2d5750613b2d613629565b80613b3b575060005460ff16155b613b765760405162461bcd60e51b815260040180806020018281038252602e815260200180613e76602e913960400191505060405180910390fd5b600054610100900460ff16158015613ba1576000805460ff1961ff0019909116610100171660011790555b6000613bab6133f0565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612683576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613c4e57805160ff1916838001178555613c7b565b82800160010185558215613c7b579182015b82811115613c7b578251825591602001919060010190613c60565b50613591929150613d3c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613cc05780548555613c7b565b82800160010185558215613c7b57600052602060002091601f016020900482015b82811115613c7b578254825591600101919060010190613ce1565b50805460018160011615610100020316600290046000825580601f10613d225750612683565b601f01602090049060005260206000209081019061268391905b5b808211156135915760008155600101613d3d56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c6973744d61782070726573616c65206c696d697420686173206265656e2072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd7021b35b61c05da8c04a89d0774549c49d5eee83af843d5723036d9165adf764736f6c634300060c0033

Deployed Bytecode Sourcemap

18831:20204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21517:7;;;;21516:8;21508:38;;;;;-1:-1:-1;;;21508:38:0;;;;;;;;;;;;-1:-1:-1;;;21508:38:0;;;;;;;;;;;;;;;21571:10;21565:3;:16;21557:52;;;;;-1:-1:-1;;;21557:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21643:9;21628:11;;:24;;21620:45;;;;;-1:-1:-1;;;21620:45:0;;;;;;;;;;;;-1:-1:-1;;;21620:45:0;;;;;;;;;;;;;;;21684:10;21676:19;;;;:7;:19;;;;;:32;;21699:9;21676:32;;;;;21751:19;-1:-1:-1;21727:43:0;21719:90;;;;-1:-1:-1;;;21719:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21820:22;21861:7;:5;:7::i;:::-;21820:50;-1:-1:-1;;;;;;21881:15:0;;:33;21897:16;:9;21911:1;21897:13;:16::i;:::-;21881:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21939:11:0;;:26;;21955:9;21939:15;:26::i;:::-;21925:11;:40;22024:12;;21976:20;;21999:38;;:20;:9;22013:5;21999:13;:20::i;:::-;:24;;:38::i;:::-;21976:61;;22048:51;22066:4;22073:10;22085:12;22048:9;:51::i;:::-;21470:637;;18831:20204;;;;;22115:1230;;;;;;;;;;;;;:::i;:::-;;7567:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20074:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30110:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30110:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24547:1834;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24547:1834:0;;:::i;26607:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26607:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26607:260:0;;-1:-1:-1;26607:260:0;;-1:-1:-1;;;;;26607:260:0:i;31239:87::-;;;;;;;;;;;;;:::i;20329:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20329:42:0;-1:-1:-1;;;;;20329:42:0;;:::i;31334:390::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31334:390:0;;:::i;20295:27::-;;;;;;;;;;;;;:::i;24435:100::-;;;;;;;;;;;;;:::i;23927:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23927:120:0;;:::i;30279:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30279:313:0;;;;;;;;;;;;;;;;;:::i;19870:27::-;;;;;;;;;;;;;:::i;19946:35::-;;;;;;;;;;;;;:::i;20197:32::-;;;;;;;;;;;;;:::i;32207:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32207:253:0;;:::i;7753:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20269:19;;;;;;;;;;;;;:::i;30600:227::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30600:227:0;;;;;;;;:::i;19910:23::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19910:23:0;;;;;;;;;;;;;;19988:31;;;;;;;;;;;;;:::i;27019:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27019:378:0;;:::i;20429:41::-;;;;;;;;;;;;;:::i;24059:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24059:364:0;;;;;;;;;;;;:::i;20236:26::-;;;;;;;;;;;;;:::i;27579:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27579:246:0;;;;;;;;;:::i;29578:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29578:198:0;-1:-1:-1;;;;;29578:198:0;;:::i;3430:148::-;;;;;;;;;;;;;:::i;20523:29::-;;;;;;;;;;;;;:::i;20026:35::-;;;;;;;;;;;;;:::i;20565:897::-;;;;;;;;;;;;;:::i;20477:39::-;;;;;;;;;;;;;:::i;3216:79::-;;;;;;;;;;;;;:::i;27940:137::-;;;;;;;;;;;;;:::i;7658:87::-;;;;;;;;;;;;;:::i;31732:467::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31732:467:0;;;;;;;;;:::i;19194:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19194:33:0;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;19194:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23453:248;;;;;;;;;;;;;:::i;30835:278::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30835:278:0;;;;;;;;:::i;29784:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29784:167:0;;;;;;;;:::i;20378:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20378:38:0;;:::i;31121:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31121:110:0;-1:-1:-1;;;;;31121:110:0;;:::i;23351:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23351:90:0;;;;:::i;23821:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23821:94:0;;:::i;29959:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29959:143:0;;;;;;;;;;:::i;23713:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23713:95:0;-1:-1:-1;;;;;23713:95:0;;:::i;32468:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32468:330:0;-1:-1:-1;;;;;32468:330:0;;:::i;3587:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3587:244:0;-1:-1:-1;;;;;3587:244:0;;:::i;32806:476::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32806:476:0;-1:-1:-1;;;;;32806:476:0;;:::i;3216:79::-;3281:6;;-1:-1:-1;;;;;3281:6:0;3216:79;:::o;5387:132::-;5445:7;5472:39;5476:1;5479;5472:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5465:46;;5387:132;;;;;:::o;4781:136::-;4839:7;4866:43;4870:1;4873;4866:43;;;;;;;;;;;;;;;;;:3;:43::i;5129:250::-;5187:7;5211:6;5207:47;;-1:-1:-1;5241:1:0;5234:8;;5207:47;5278:5;;;5282:1;5278;:5;:1;5302:5;;;;;:10;5294:56;;;;-1:-1:-1;;;5294:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33645:1157;-1:-1:-1;;;;;33752:20:0;;33744:70;;;;-1:-1:-1;;;33744:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33842:1;33833:6;:10;33825:64;;;;-1:-1:-1;;;33825:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33908:7;;;;;:28;;;33929:7;:5;:7::i;:::-;-1:-1:-1;;;;;33919:17:0;:6;-1:-1:-1;;;;;33919:17:0;;33908:28;:55;;;-1:-1:-1;;;;;;33940:23:0;;33958:4;33940:23;33908:55;33900:92;;;;;-1:-1:-1;;;33900:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34006:23:0;;34024:4;34006:23;;:44;;;34043:7;:5;:7::i;:::-;-1:-1:-1;;;;;34033:17:0;:6;-1:-1:-1;;;;;34033:17:0;;34006:44;34003:792;;;34067:51;34089:6;34097:9;34108:6;34116:1;34067:21;:51::i;:::-;34003:792;;;-1:-1:-1;;;;;34139:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34163:22:0;;;;;;:11;:22;;;;;;;;34162:23;34139:46;34136:659;;;34202:62;34224:6;34232:9;34243:6;34251:12;;34202:21;:62::i;34136:659::-;-1:-1:-1;;;;;34287:19:0;;;;;;:11;:19;;;;;;;;34286:20;:46;;;;-1:-1:-1;;;;;;34310:22:0;;;;;;:11;:22;;;;;;;;34286:46;34282:513;;;34353:60;34373:6;34381:9;34392:6;34400:12;;34353:19;:60::i;34282:513::-;-1:-1:-1;;;;;34436:19:0;;;;;;:11;:19;;;;;;;;34435:20;:47;;;;-1:-1:-1;;;;;;34460:22:0;;;;;;:11;:22;;;;;;;;34459:23;34435:47;34431:364;;;34499:58;34517:6;34525:9;34536:6;34544:12;;34499:17;:58::i;34431:364::-;-1:-1:-1;;;;;34579:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34602:22:0;;;;;;:11;:22;;;;;;;;34579:45;34575:220;;;34641:51;34663:6;34671:9;34682:6;34690:1;34641:21;:51::i;34575:220::-;34725:58;34743:6;34751:9;34762:6;34770:12;;34725:17;:58::i;:::-;33645:1157;;;:::o;22115:1230::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;22177:7:::1;::::0;::::1;;22176:8;22168:44;;;::::0;;-1:-1:-1;;;22168:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22231:11;::::0;:16;;:43:::1;;;22271:3;22251:17;;:23;22231:43;22223:78;;;::::0;;-1:-1:-1;;;22223:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22223:78:0;;;;;;;;;;;;;::::1;;22312:7;:14:::0;;-1:-1:-1;;22312:14:0::1;22322:4;22312:14;::::0;;22337:55:::1;22355:4;22362:12;:10;:12::i;:::-;22376:15;22337:9;:55::i;:::-;22430:14;::::0;22478:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22478:22:0;;;;22403:24:::1;::::0;-1:-1:-1;;;;;22430:14:0;;::::1;::::0;:25:::1;::::0;22478:15;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22478:22:0;22430:119:::1;::::0;;-1:-1:-1;;;;;;22430:119:0::1;::::0;;;;;;-1:-1:-1;;;;;22430:119:0;;::::1;;::::0;::::1;::::0;22532:4:::1;22430:119:::0;;;;;;;;;;22478:22:::1;::::0;22430:119;;;;;;;-1:-1:-1;22430:119:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22430:119:0;22640:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;22640:22:0;;;;22430:119;;-1:-1:-1;22430:119:0;;22560:19:::1;::::0;-1:-1:-1;;;;;22640:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;22430:119:::1;::::0;22640:22;;;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22640:22:0;22725:40:::1;::::0;;-1:-1:-1;;;22725:40:0;;;;22640:22;;-1:-1:-1;22693:21:0::1;::::0;-1:-1:-1;;;;;22725:19:0;::::1;::::0;::::1;::::0;22693:21;;22725:40:::1;::::0;;::::1;::::0;22673:17:::1;::::0;22725:40;;;;;;;;22693:21;22725:19;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22784:21;22809:1;22784:26;22776:55;;;::::0;;-1:-1:-1;;;22776:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22776:55:0;;;;;;;;;;;;;::::1;;22892:11;::::0;22863:15:::1;::::0;22892:16;22889:240:::1;;22963:12;::::0;22938:38:::1;::::0;:20:::1;:9:::0;22952:5:::1;22938:13;:20::i;:38::-;22925:51;;22991:20;23041:10;23014:24;23032:4;23014:9;:24::i;:::-;:37;22991:60;;23067:50;23085:4;23100:1;23104:12;23067:9;:50::i;:::-;22889:240;;23145:4;-1:-1:-1::0;;;;;23139:20:0::1;;23168:4;23174:9;23139:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23139:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23195:51:0::1;::::0;-1:-1:-1;23213:4:0::1;23228::::0;23235:10;23195:9:::1;:51::i;:::-;23257:24;::::0;;-1:-1:-1;;;23257:24:0;;23275:4:::1;23257:24;::::0;::::1;::::0;;;-1:-1:-1;;;;;23257:9:0;::::1;::::0;::::1;::::0;:24;;;;;::::1;::::0;;;;;;;;-1:-1:-1;23257:9:0;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23303:3:0::1;23292:8;:14:::0;-1:-1:-1;;23317:13:0::1;:20:::0;;-1:-1:-1;;;;;;23317:20:0::1;-1:-1:-1::0;;;;;23317:20:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;22115:1230:0:o;7567:83::-;7637:5;7630:12;;;;;;;;-1:-1:-1;;7630:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7604:13;;7630:12;;7637:5;;7630:12;;7637:5;7630:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7567:83;:::o;20074:30::-;;;;:::o;30110:161::-;30185:4;30202:39;30211:12;:10;:12::i;:::-;30225:7;30234:6;30202:8;:39::i;:::-;-1:-1:-1;30259:4:0;30110:161;;;;:::o;24547:1834::-;24619:7;24668;:5;:7::i;:::-;-1:-1:-1;;;;;24652:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;24652:23:0;;:51;;;-1:-1:-1;24695:8:0;;-1:-1:-1;;;;;24695:8:0;24679:12;:10;:12::i;:::-;-1:-1:-1;;;;;24679:24:0;;24652:51;24644:85;;;;;-1:-1:-1;;;24644:85:0;;;;;;;;;;;;-1:-1:-1;;;24644:85:0;;;;;;;;;;;;;;;24759:6;;:13;;24770:1;24759:10;:13::i;:::-;24750:6;:22;24791:16;24787:119;;24839:6;;24847:12;;24829:31;;;;;;;;;;;;;;;;-1:-1:-1;24882:12:0;;24875:19;;24787:119;24926:20;24949:58;24964:1;24950:11;:15;:44;;24983:11;24950:44;;;24969:11;24968:12;;24950:44;24949:56;:58::i;:::-;25070:12;;24926:81;;-1:-1:-1;25018:12:0;;25033:50;;:32;24926:81;19843:14;25033:16;:32::i;:::-;:36;;:50::i;:::-;25018:65;;25094:18;25151:1;25137:11;:15;25133:155;;;25182:24;19843:14;25201:4;25182:18;:24::i;:::-;25169:37;;25133:155;;;25252:24;19843:14;25271:4;25252:18;:24::i;:::-;25239:37;;25133:155;25326:1;25312:11;:15;25308:171;;;25359:12;;:30;;25376:12;25359:16;:30::i;:::-;25344:12;:45;25308:171;;;25437:12;;:30;;25454:12;25437:16;:30::i;:::-;25422:12;:45;25308:171;25593:9;25588:219;25612:9;:16;25608:20;;25588:219;;;25677:1;25653:7;:21;25661:9;25671:1;25661:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25661:12:0;25653:21;;;;;;;;;;;;;:25;25650:146;;;25723:57;19793:1;19843:2;:14;25723:37;25749:10;25723:7;:21;25731:9;25741:1;25731:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25731:12:0;25723:21;;;;;;;;;;;;;;:25;:37::i;:57::-;25699:7;:21;25707:9;25717:1;25707:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25707:12:0;25699:21;;;;;;;;;;;;:81;25650:146;25630:3;;25588:219;;;-1:-1:-1;25842:6:0;;25850:12;;25832:31;;;;;;;;;;;;;;;;25875:6;25870:399;25891:12;:19;25887:23;;25870:399;;;25932:21;25956:12;25969:1;25956:15;;;;;;;;;;;;;;;;;;;;;25990:9;;25956:15;;-1:-1:-1;25990:9:0;;25986:272;;;26047:13;;;26062:6;;;26034:35;;;;;;;26047:13;26034:35;;;;;;-1:-1:-1;;26034:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26034:35:0;;26047:13;;-1:-1:-1;;;;;26047:13:0;;26034:35;;26062:6;;26034:35;;;26062:6;26034:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;26020:49;;26093:6;26088:155;;26147:13;;26129:43;;;;;;;;;;;;26147:13;26165:6;;;26129:43;;;26147:13;26129:43;;;;;;-1:-1:-1;;26129:43:0;;;;;;;;;;;26147:13;;-1:-1:-1;;;;;26147:13:0;;26129:43;;;;26165:6;;26129:43;;;;;26165:6;;26129:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26195:28;;;-1:-1:-1;;;26195:28:0;;;;;;;;;;;;-1:-1:-1;;;26195:28:0;;;;;;;;;;;;;;26088:155;25986:272;;-1:-1:-1;25912:3:0;;25870:399;;;-1:-1:-1;26284:10:0;;-1:-1:-1;;;26284:10:0;;;;26281:61;;;26310:13;;;;;;;;;-1:-1:-1;;;;;26310:13:0;-1:-1:-1;;;;;26310:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26281:61;26361:12;;26354:19;;;;;24547:1834;;;;:::o;26607:260::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;26742:116:::1;::::0;;::::1;::::0;::::1;::::0;;26778:4:::1;26742:116:::0;;;-1:-1:-1;;;;;26742:116:0;;::::1;;::::0;;::::1;::::0;;;;;;;;;26724:12:::1;:135:::0;;;;::::1;::::0;;-1:-1:-1;26724:135:0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;;-1:-1:-1::0;;;;;;26724:135:0;::::1;;-1:-1:-1::0;;26724:135:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;26742:116;;26724:135;;::::1;::::0;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;26607:260:::0;;:::o;31239:87::-;31308:10;;31239:87;:::o;20329:42::-;;;;;;;;;;;;;:::o;31334:390::-;31386:14;31403:12;:10;:12::i;:::-;-1:-1:-1;;;;;31435:19:0;;;;;;:11;:19;;;;;;31386:29;;-1:-1:-1;31435:19:0;;31434:20;31426:77;;;;-1:-1:-1;;;31426:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31515:15;31538:33;31549:7;31558:12;;31538:10;:33::i;:::-;-1:-1:-1;;;;;;;;;31600:15:0;;;;;;:7;:15;;;;;;31514:57;;-1:-1:-1;31600:28:0;;31514:57;31600:19;:28::i;:::-;-1:-1:-1;;;;;31582:15:0;;;;;;:7;:15;;;;;:46;31649:7;;:20;;31661:7;31649:11;:20::i;:::-;31639:7;:30;31693:10;;:23;;31708:7;31693:14;:23::i;:::-;31680:10;:36;-1:-1:-1;;;31334:390:0:o;20295:27::-;;;;:::o;24435:100::-;24515:12;;24435:100;:::o;23927:120::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;24013:12:::1;:26:::0;23927:120::o;30279:313::-;30377:4;30394:36;30404:6;30412:9;30423:6;30394:9;:36::i;:::-;30441:121;30450:6;30458:12;:10;:12::i;:::-;30472:89;30510:6;30472:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30472:19:0;;;;;;:11;:19;;;;;;30492:12;:10;:12::i;:::-;-1:-1:-1;;;;;30472:33:0;;;;;;;;;;;;-1:-1:-1;30472:33:0;;;:89;:37;:89::i;:::-;30441:8;:121::i;:::-;-1:-1:-1;30580:4:0;30279:313;;;;;:::o;19870:27::-;;;;:::o;19946:35::-;;;;:::o;20197:32::-;;;;:::o;32207:253::-;32273:7;32312;;32301;:18;;32293:73;;;;-1:-1:-1;;;32293:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32377:19;32400:10;:8;:10::i;:::-;32377:33;-1:-1:-1;32428:24:0;:7;32377:33;32428:11;:24::i;:::-;32421:31;32207:253;-1:-1:-1;;;32207:253:0:o;7753:83::-;7819:9;;;;7753:83;:::o;20269:19::-;;;;;;:::o;30600:227::-;30697:4;30714:83;30723:12;:10;:12::i;:::-;30737:7;30746:50;30785:10;30746:11;:25;30758:12;:10;:12::i;:::-;-1:-1:-1;;;;;30746:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30746:25:0;;;:34;;;;;;;;;;;:38;:50::i;19910:23::-;;;-1:-1:-1;;;;;19910:23:0;;:::o;19988:31::-;;;;:::o;27019:378::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;27127:12:::1;:19:::0;27119:27;::::1;27111:59;;;::::0;;-1:-1:-1;;;27111:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27111:59:0;;;;;;;;;;;;;::::1;;27190:13;::::0;;;:6:::1;:13;::::0;;;;;::::1;;27189:14;27181:42;;;::::0;;-1:-1:-1;;;27181:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27181:42:0;;;;;;;;;;;;;::::1;;27248:12;:19:::0;-1:-1:-1;;27248:23:0;27240:31;::::1;27236:123;;;27310:12;27323:19:::0;;-1:-1:-1;;27323:23:0;;;27310:37;::::1;;;;;;;;;;;;;;;27288:12;27301:5;27288:19;;;;;;;;;::::0;;;::::1;::::0;;;:59;;:19:::1;::::0;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;27288:59:0::1;;::::0;;::::1;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;;;;;27288:59:0;;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;;27288:59:0::1;::::0;::::1;;::::0;;-1:-1:-1;27288:59:0;;::::1;::::0;;:19;;:59:::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;::::1;-1:-1:-1::0;;27288:59:0;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;27236:123:0::1;27371:12;:18;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;27371:18:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;27371:18:0;;;;::::1;;::::0;::::1;::::0;::::1;:::i;:::-;;;;;27019:378:::0;:::o;20429:41::-;;;-1:-1:-1;;;;;20429:41:0;;:::o;24059:364::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;24185:15:::1;::::0;:20;24177:58:::1;;;::::0;;-1:-1:-1;;;24177:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24256:20;:37:::0;;;;24304:16:::1;:29:::0;24344:20:::1;:37:::0;24412:3:::1;24394:15;:21:::0;24059:364::o;20236:26::-;;;;:::o;27579:246::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;27705:12:::1;:19:::0;27697:27;::::1;27689:80;;;;-1:-1:-1::0;;;27689:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27810:7;27780:12;27793:5;27780:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;;-1:-1:-1;;27780:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;27579:246:0:o;29578:198::-;-1:-1:-1;;;;;29668:20:0;;29644:7;29668:20;;;:11;:20;;;;;;;;29664:49;;;-1:-1:-1;;;;;;29697:16:0;;;;;;:7;:16;;;;;;29690:23;;29664:49;-1:-1:-1;;;;;29751:16:0;;;;;;:7;:16;;;;;;29731:37;;:19;:37::i;3430:148::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;3521:6:::1;::::0;3500:40:::1;::::0;3537:1:::1;::::0;-1:-1:-1;;;;;3521:6:0::1;::::0;3500:40:::1;::::0;3537:1;;3500:40:::1;3551:6;:19:::0;;-1:-1:-1;;;;;;3551:19:0::1;::::0;;3430:148::o;20523:29::-;;;-1:-1:-1;;;20523:29:0;;;;;:::o;20026:35::-;;;;:::o;20565:897::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1677:83;20640:37:::1;;;;;;;;;;;;;;-1:-1:-1::0;;;20640:37:0::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;20640:37:0::1;;::::0;:12:::1;:37::i;:::-;20688:31;19793:1;20688:14;:31::i;:::-;20730:16;:14;:16::i;:::-;20782;20767:12;:31:::0;-1:-1:-1;;20810:7:0::1;:38:::0;20880:12:::1;:10;:12::i;:::-;20869:8;:23:::0;;-1:-1:-1;;;;;;20869:23:0::1;-1:-1:-1::0;;;;;20869:23:0;;;::::1;::::0;;;::::1;::::0;;20928:3:::1;20913:12;:18:::0;20969:7:::1;::::0;20960:4:::1;-1:-1:-1::0;20944:22:0;;;:7:::1;:22;::::0;;;;;;;:32;;;;21028:12:::1;::::0;20992:49;;;;;;;20960:4;;-1:-1:-1;;20992:49:0::1;::::0;;;;;;;;::::1;21074:10;21054:17;:30:::0;21095:7:::1;:15:::0;;-1:-1:-1;;21095:15:0::1;::::0;;21135:9:::1;21121:11;:23:::0;21170:5:::1;21155:12;:20:::0;21196:28:::1;21211:12;:10;:12::i;:::-;21196:14;:28::i;:::-;21235:29;21258:4;21235:14;:29::i;:::-;21285:15;:80:::0;;-1:-1:-1;;;;;;21285:80:0;;::::1;21322:42;21285:80;::::0;;;21376:14:::1;:78:::0;;;;::::1;21411:42;21376:78;::::0;;1778:57;;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;1778:57;20565:897;:::o;20477:39::-;;;-1:-1:-1;;;;;20477:39:0;;:::o;27940:137::-;28050:12;:19;27940:137;:::o;7658:87::-;7730:7;7723:14;;;;;;;;-1:-1:-1;;7723:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7697:13;;7723:14;;7730:7;;7723:14;;7730:7;7723:14;;;;;;;;;;;;;;;;;;;;;;;;31732:467;31822:7;31861:12;;31850:7;:23;;31842:67;;;;;-1:-1:-1;;;31842:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31925:17;31920:272;;31960:15;31983:33;31994:7;32003:12;;31983:10;:33::i;:::-;-1:-1:-1;31959:57:0;;-1:-1:-1;32031:14:0;;-1:-1:-1;;;;32031:14:0;31920:272;32080:23;32110:33;32121:7;32130:12;;32110:10;:33::i;:::-;-1:-1:-1;32078:65:0;;-1:-1:-1;32158:22:0;;-1:-1:-1;;;;32158:22:0;19194:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19194:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19194:33:0;;;;-1:-1:-1;;;;;19194:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23453:248::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;23520:8:::1;;23531:7;23520:18;23513:3;:25;;23505:69;;;::::0;;-1:-1:-1;;;23505:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23600:13;::::0;23637:55:::1;::::0;;-1:-1:-1;;;23637:55:0;;23686:4:::1;23637:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;23600:13:0;;::::1;::::0;23585:39:::1;::::0;23625:10:::1;::::0;23600:13;;23637:40:::1;::::0;:55;;;;;::::1;::::0;;;;;;;;23600:13;23637:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23637:55:0;23585:108:::1;::::0;;-1:-1:-1;;;;;;23585:108:0::1;::::0;;;;;;-1:-1:-1;;;;;23585:108:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;23637:55:::1;::::0;23585:108;;;;;;;-1:-1:-1;23585:108:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23453:248:0:o;30835:278::-;30937:4;30954:129;30963:12;:10;:12::i;:::-;30977:7;30986:96;31025:15;30986:96;;;;;;;;;;;;;;;;;:11;:25;30998:12;:10;:12::i;:::-;-1:-1:-1;;;;;30986:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30986:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;29784:167::-;29862:4;29879:42;29889:12;:10;:12::i;:::-;29903:9;29914:6;29879:9;:42::i;20378:38::-;;;;;;;;;;;;;;;:::o;31121:110::-;-1:-1:-1;;;;;31203:20:0;31179:4;31203:20;;;:11;:20;;;;;;;;;31121:110::o;23351:90::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;23415:10:::1;:18:::0;;;::::1;;-1:-1:-1::0;;;23415:18:0::1;-1:-1:-1::0;;;;23415:18:0;;::::1;::::0;;;::::1;::::0;;23351:90::o;23821:94::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;23886:14:::1;::::0;;;:6:::1;:14;::::0;;;;:21;;-1:-1:-1;;23886:21:0::1;23903:4;23886:21;::::0;;23821:94::o;29959:143::-;-1:-1:-1;;;;;30067:18:0;;;30040:7;30067:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29959:143::o;23713:95::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;23782:8:::1;:18:::0;;-1:-1:-1;;;;;;23782:18:0::1;-1:-1:-1::0;;;;;23782:18:0;;;::::1;::::0;;;::::1;::::0;;23713:95::o;32468:330::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32548:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32547:21;32539:61;;;::::0;;-1:-1:-1;;;32539:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32614:16:0;::::1;32633:1;32614:16:::0;;;:7:::1;:16;::::0;;;;;:20;32611:108:::1;;-1:-1:-1::0;;;;;32690:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32670:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32651:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32611:108:::1;-1:-1:-1::0;;;;;32729:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32729:27:0::1;32752:4;32729:27:::0;;::::1;::::0;;;32767:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32767:23:0::1;::::0;;::::1;::::0;;32468:330::o;3587:244::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3676:22:0;::::1;3668:73;;;;-1:-1:-1::0;;;3668:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3778:6;::::0;3757:38:::1;::::0;-1:-1:-1;;;;;3757:38:0;;::::1;::::0;3778:6:::1;::::0;3757:38:::1;::::0;3778:6:::1;::::0;3757:38:::1;3806:6;:17:::0;;-1:-1:-1;;;;;;3806:17:0::1;-1:-1:-1::0;;;;;3806:17:0;;;::::1;::::0;;;::::1;::::0;;3587:244::o;32806:476::-;3353:12;:10;:12::i;:::-;3343:6;;-1:-1:-1;;;;;3343:6:0;;;:22;;;3335:67;;;;;-1:-1:-1;;;3335:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3335:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32885:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32877:60;;;::::0;;-1:-1:-1;;;32877:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32953:9;32948:327;32972:9;:16:::0;32968:20;::::1;32948:327;;;33030:7;-1:-1:-1::0;;;;;33014:23:0::1;:9;33024:1;33014:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33014:12:0::1;:23;33010:254;;;33073:9;33083:16:::0;;-1:-1:-1;;33083:20:0;;;33073:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33058:9:::1;:12:::0;;-1:-1:-1;;;;;33073:31:0;;::::1;::::0;33068:1;;33058:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33058:46:0::1;-1:-1:-1::0;;;;;33058:46:0;;::::1;;::::0;;33123:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33162:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33162:28:0::1;::::0;;33209:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33209:15:0;;;;;-1:-1:-1;;;;;;33209:15:0::1;::::0;;;;;33243:5:::1;;33010:254;32990:3;;32948:327;;5527:189:::0;5613:7;5648:12;5641:5;5633:28;;;;-1:-1:-1;;;5633:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5672:9;5688:1;5684;:5;;;;;;;5527:189;-1:-1:-1;;;;;5527:189:0:o;4925:192::-;5011:7;5047:12;5039:6;;;;5031:29;;;;-1:-1:-1;;;5031:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5083:5:0;;;4925:192::o;36432:619::-;36556:15;36573:23;36598:12;36612:23;36637:12;36653:32;36664:7;36673:11;36653:10;:32::i;:::-;-1:-1:-1;;;;;36714:15:0;;;;;;:7;:15;;;;;;36555:130;;-1:-1:-1;36555:130:0;;-1:-1:-1;36555:130:0;;-1:-1:-1;36555:130:0;-1:-1:-1;36555:130:0;-1:-1:-1;36714:28:0;;36734:7;36714:19;:28::i;:::-;-1:-1:-1;;;;;36696:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36771:7;:15;;;;:28;;36791:7;36771:19;:28::i;:::-;-1:-1:-1;;;;;36753:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;36831:18;;;;;:7;:18;;;;;:39;;36854:15;36831:22;:39::i;:::-;-1:-1:-1;;;;;36810:18:0;;;;;;:7;:18;;;;;;;;:60;;;;36902:7;:18;;;;:39;;36925:15;36902:22;:39::i;:::-;-1:-1:-1;;;;;36881:18:0;;;;;;:7;:18;;;;;:60;36960:23;36972:4;36978;36960:11;:23::i;:::-;37016:9;-1:-1:-1;;;;;36999:44:0;37008:6;-1:-1:-1;;;;;36999:44:0;;37027:15;36999:44;;;;;;;;;;;;;;;;;;36432:619;;;;;;;;;:::o;35881:543::-;36005:15;36022:23;36047:12;36061:23;36086:12;36102:32;36113:7;36122:11;36102:10;:32::i;:::-;-1:-1:-1;;;;;36163:15:0;;;;;;:7;:15;;;;;;36004:130;;-1:-1:-1;36004:130:0;;-1:-1:-1;36004:130:0;;-1:-1:-1;36004:130:0;-1:-1:-1;36004:130:0;-1:-1:-1;36163:28:0;;36183:7;36163:19;:28::i;:::-;-1:-1:-1;;;;;36145:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36220:7;:15;;;;:28;;36240:7;36220:19;:28::i;:::-;-1:-1:-1;;;;;36202:15:0;;;;;;;:7;:15;;;;;;:46;;;;36280:18;;;;;;;:39;;36303:15;36280:22;:39::i;35310:563::-;35432:15;35449:23;35474:12;35488:23;35513:12;35529:32;35540:7;35549:11;35529:10;:32::i;:::-;-1:-1:-1;;;;;35590:15:0;;;;;;:7;:15;;;;;;35431:130;;-1:-1:-1;35431:130:0;;-1:-1:-1;35431:130:0;;-1:-1:-1;35431:130:0;-1:-1:-1;35431:130:0;-1:-1:-1;35590:28:0;;35431:130;35590:19;:28::i;34816:486::-;34936:15;34953:23;34978:12;34992:23;35017:12;35033:32;35044:7;35053:11;35033:10;:32::i;:::-;-1:-1:-1;;;;;35094:15:0;;;;;;:7;:15;;;;;;34935:130;;-1:-1:-1;34935:130:0;;-1:-1:-1;34935:130:0;;-1:-1:-1;34935:130:0;-1:-1:-1;34935:130:0;-1:-1:-1;35094:28:0;;34935:130;35094:19;:28::i;2290:106::-;2378:10;2290:106;:::o;33290:347::-;-1:-1:-1;;;;;33393:19:0;;33385:68;;;;-1:-1:-1;;;33385:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33472:21:0;;33464:68;;;;-1:-1:-1;;;33464:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33545:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33597:32;;;;;;;;;;;;;;;;;33290:347;;;:::o;4592:181::-;4650:7;4682:5;;;4706:6;;;;4698:46;;;;;-1:-1:-1;;;4698:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1028:171;1084:7;1121:1;1112:5;:10;;1104:55;;;;;-1:-1:-1;;;1104:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1185:5:0;1028:171::o;28320:1250::-;28418:4;28440:11;28680:4;28674:11;28808:2;28802:4;28798:13;29455:1;29423:13;29331:4;29325:11;29295;29250:1;29220:11;29191:5;29184;29180:17;28837:691;28827:701;28320:1250;-1:-1:-1;;;;;;28320:1250:0:o;37214:445::-;37294:7;37303;37312;37321;37330;37351:23;37376:12;37392:33;37404:7;37413:11;37392;:33::i;:::-;37350:75;;;;37436:19;37459:10;:8;:10::i;:::-;37436:33;;37481:15;37498:23;37523:12;37539:39;37551:7;37560:4;37566:11;37539;:39::i;:::-;37480:98;;;;-1:-1:-1;37480:98:0;;-1:-1:-1;37629:15:0;;-1:-1:-1;37646:4:0;;-1:-1:-1;37214:445:0;;-1:-1:-1;;;;;;;37214:445:0:o;38280:163::-;38321:7;38342:15;38359;38378:19;:17;:19::i;:::-;38341:56;;-1:-1:-1;38341:56:0;-1:-1:-1;38415:20:0;38341:56;;38415:11;:20::i;:::-;38408:27;;;;38280:163;:::o;1846:174::-;1929:4;1975:17;2007:7;1846:174;:::o;7190:177::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1677:83;7286:26:::1;:24;:26::i;:::-;7323:36;7346:4;7352:6;7323:22;:36::i;:::-;1782:14:::0;1778:57;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;7190:177;;;:::o;10355:90::-;10416:9;:21;;-1:-1:-1;;10416:21:0;;;;;;;;;;;;10355:90::o;2873:129::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1677:83;2931:26:::1;:24;:26::i;:::-;2968;:24;:26::i;:::-;1782:14:::0;1778:57;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;2873:129;:::o;37059:147::-;37137:7;;:17;;37149:4;37137:11;:17::i;:::-;37127:7;:27;37178:10;;:20;;37193:4;37178:14;:20::i;:::-;37165:10;:33;-1:-1:-1;;37059:147:0:o;37667:263::-;37748:7;;;37792:35;37821:5;37792:24;:7;37804:11;37792;:24::i;:35::-;37777:50;-1:-1:-1;37838:23:0;37864:17;:7;37777:50;37864:11;:17::i;:::-;37838:43;37917:4;;-1:-1:-1;37667:263:0;;-1:-1:-1;;;;37667:263:0:o;37938:334::-;38033:7;;;;38089:24;:7;38101:11;38089;:24::i;:::-;38071:42;-1:-1:-1;38124:12:0;38139:21;:4;38148:11;38139:8;:21::i;:::-;38124:36;-1:-1:-1;38171:23:0;38197:17;:7;38124:36;38197:11;:17::i;:::-;38233:7;;;;-1:-1:-1;38259:4:0;;-1:-1:-1;37938:334:0;;-1:-1:-1;;;;;37938:334:0:o;38451:581::-;38548:7;;38584:12;;38501:7;;;;;38613:294;38637:9;:16;38633:20;;38613:294;;;38703:7;38679;:21;38687:9;38697:1;38687:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38687:12:0;38679:21;;;;;;;;;;;;;:31;;:66;;;38738:7;38714;:21;38722:9;38732:1;38722:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38722:12:0;38714:21;;;;;;;;;;;;;:31;38679:66;38675:102;;;38755:7;;38764:12;;38747:30;;;;;;;;;38675:102;38802:34;38814:7;:21;38822:9;38832:1;38822:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38822:12:0;38814:21;;;;;;;;;;;;;38802:7;;:11;:34::i;:::-;38792:44;;38861:34;38873:7;:21;38881:9;38891:1;38881:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38881:12:0;38873:21;;;;;;;;;;;;;38861:7;;:11;:34::i;:::-;38851:44;-1:-1:-1;38655:3:0;;38613:294;;;-1:-1:-1;38943:12:0;;38931:7;;:25;;:11;:25::i;:::-;38921:7;:35;38917:71;;;38966:7;;38975:12;;38958:30;;;;;;;;38917:71;39007:7;;-1:-1:-1;39016:7:0;-1:-1:-1;38451:581:0;;;:::o;2217:65::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1782:14;1778:57;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;2217:65;:::o;7375:184::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1677:83;7485:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7508:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;7535:9:0::1;:14:::0;;-1:-1:-1;;7535:14:0::1;7547:2;7535:14;::::0;;1778:57;;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;7375:184;;;:::o;3010:198::-;1528:12;;;;;;;;:31;;;1544:15;:13;:15::i;:::-;1528:47;;;-1:-1:-1;1564:11:0;;;;1563:12;1528:47;1520:106;;;;-1:-1:-1;;;1520:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:19;1658:12;;;;;;1657:13;1677:83;;;;1706:12;:19;;-1:-1:-1;;;;1706:19:0;;;;;1734:18;1721:4;1734:18;;;1677:83;3078:17:::1;3098:12;:10;:12::i;:::-;3121:6;:18:::0;;-1:-1:-1;;;;;;3121:18:0::1;-1:-1:-1::0;;;;;3121:18:0;::::1;::::0;;::::1;::::0;;;3155:43:::1;::::0;3121:18;;-1:-1:-1;3121:18:0;-1:-1:-1;;3155:43:0::1;::::0;-1:-1:-1;;3155:43:0::1;1768:1;1782:14:::0;1778:57;;;1822:5;1807:20;;-1:-1:-1;;1807:20:0;;;3010:198;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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