ETH Price: $2,523.01 (-0.11%)

Token

Floki2022 (FLOKI2022)
 

Overview

Max Total Supply

1,000,000,000,000 FLOKI2022

Holders

153

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
pavitrprabhakar.eth
Balance
97,968.369174555773848633 FLOKI2022

Value
$0.00
0xe22b1eE0E32138Df285e242FC5487876b6809A82
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:
FLOKI2022

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/**
 * SPDX-License-Identifier: MIT
 */ 
 
// FLOKI2022 https://t.me/floki2022crypto

pragma solidity ^0.8.6;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

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


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

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

    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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }


    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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

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


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

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

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

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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {return msg.sender;}
    function _msgData() internal view virtual returns (bytes calldata) {this; return msg.data;}
}

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

interface IPancakeV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IPancakeV2Router {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

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

contract FLOKI2022 is IERC20Metadata, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address internal deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public presaleAddress = address(0);
    
    address public marketingWallet = 0x5B6B252Fceb83AcE18db9902c05B6Cf3cBa5051b;
    address public launchpadWallet = 0x82a27faa29fE9632A847132761313579F41F60d2;
    address public teamWallet = 0x0305b5580400d08B8488e92D01B287BBb0F0a982;
    
    string constant _name = "Floki2022";
    string constant _symbol = "FLOKI2022";
    uint8 constant _decimals = 18;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant _totalSupply = 1000000000000 * (10**18);
    uint256 internal _reflectedSupply = (MAX - (MAX % _totalSupply));
    
    uint256 public collectedFeeTotal;
  
    uint256 public maxTxAmount = _totalSupply / 1000; // 0.5% of the total supply
    uint256 public maxWalletBalance = _totalSupply / 50; // 2% of the total supply
    
    bool public takeFeeEnabled = true;
    bool public tradingIsEnabled = true;
    bool public isInPresale = false;
    
    bool private swapping;
    bool public swapEnabled = true;
    uint256 public swapTokensAtAmount = 10000000 * (10**18);

    bool public antiBotEnabled = false;
    uint256 public antiBotFee = 990; // 99%
    uint256 public _startTimeForSwap;
    
    uint256 internal FEES_DIVISOR = 10**2;

    uint256 public sellingRfiFee = 1;
    uint256 public buyingRfiFee =1;

    uint256 public sellingMarketingFee = 3;
    uint256 public buyingMarketingFee = 3;
    
    uint256 public sellingLaunchpadFee = 2;
    uint256 public buyingLaunchpadFee = 2;

    uint256 public sellingTeamFee = 4;
    uint256 public buyingTeamFee = 4;
    
    uint256 public sellingLpFee = 1;
    uint256 public buyingLpFee = 1;
    
    uint256 public buyersTotalFees = buyingRfiFee.add(buyingMarketingFee).add(buyingLaunchpadFee).add(buyingTeamFee).add(buyingLpFee);
    uint256 public sellersTotalFees = sellingRfiFee.add(sellingMarketingFee).add(sellingLaunchpadFee).add(sellingTeamFee).add(sellingLpFee);
    
    // Total = 100% (100)
    uint256 public marketingPortionOfSwap = 30; // 30%
    uint256 public launchpadPortionOfSwap = 20; // 20%
    uint256 public teamPortionOfSwap = 40; // 40%
    uint256 public lpPortionOfSwap = 10; // 10%
    
    IPancakeV2Router public router;
    address public pair;
    
    
    mapping (address => uint256) internal _reflectedBalances;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;

    mapping(address => bool) public _isBlacklisted;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _isExcludedFromRewards;
    address[] private _excluded;
    
    event UpdatePancakeswapRouter(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    
    event MarketingWalletUpdated(address indexed newMarketingWallet, address indexed oldMarketingWallet);
    event LaunchpadWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet);
    event TeamWalletUpdated(address indexed newTeamWallet, address indexed oldTeamWallet);

    event LiquidityAdded(uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity);
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    constructor () {
        _reflectedBalances[owner()] = _reflectedSupply;
        
        IPancakeV2Router _newPancakeRouter = IPancakeV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IPancakeV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        router = _newPancakeRouter;
        
        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        // exclude the owner and this contract from rewards
        _exclude(owner());
        _exclude(address(this));
        
        // exclude the pair address from rewards - we don't want to redistribute
        _exclude(pair);
        _exclude(deadAddress);
        
        _approve(owner(), address(router), ~uint256(0));
        
        emit Transfer(address(0), owner(), _totalSupply);
    }
    
    receive() external payable { }
    
    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view override returns (uint256){
        if (_isExcludedFromRewards[account]) return _balances[account];
        return tokenFromReflection(_reflectedBalances[account]);
        }
        
    function transfer(address recipient, uint256 amount) external override returns (bool){
        _transfer(_msgSender(), recipient, amount);
        return true;
        }
        
    function allowance(address owner, address spender) external view override returns (uint256){
        return _allowances[owner][spender];
        }
    
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
        }
        
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
        }
        
    function burn(uint256 amount) external {

        address sender = _msgSender();
        require(sender != address(0), "ERC20: burn from the zero address");
        require(sender != address(deadAddress), "ERC20: burn from the burn address");

        uint256 balance = balanceOf(sender);
        require(balance >= amount, "ERC20: burn amount exceeds balance");

        uint256 reflectedAmount = amount.mul(_getCurrentRate());

        // remove the amount from the sender's balance first
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
        if (_isExcludedFromRewards[sender])
            _balances[sender] = _balances[sender].sub(amount);

        _burnTokens( sender, amount, reflectedAmount );
    }
    
    /**
     * @dev "Soft" burns the specified amount of tokens by sending them 
     * to the burn address
     */
    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

        /**
         * @dev Do not reduce _totalSupply and/or _reflectedSupply. (soft) burning by sending
         * tokens to the burn address (which should be excluded from rewards) is sufficient
         * in RFI
         */ 
        _reflectedBalances[deadAddress] = _reflectedBalances[deadAddress].add(rBurn);
        if (_isExcludedFromRewards[deadAddress])
            _balances[deadAddress] = _balances[deadAddress].add(tBurn);

        /**
         * @dev Emit the event so that the burn address balance is updated (on bscscan)
         */
        emit Transfer(sender, deadAddress, tBurn);
    }
    
    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 _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BaseRfiToken: approve from the zero address");
        require(spender != address(0), "BaseRfiToken: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
      
     /**
     * @dev Calculates and returns the reflected amount for the given amount with or without 
     * the transfer fees (deductTransferFee true/false)
     */
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee, bool isBuying) external view returns(uint256) {
         require(tAmount <= _totalSupply, "Amount must be less than supply");
        uint256 feesSum;
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount,0);
            return rAmount;
        } else {
            feesSum = isBuying ? buyersTotalFees : sellersTotalFees;
            feesSum = antiBotEnabled && block.timestamp < _startTimeForSwap ? antiBotFee : feesSum;
            (,uint256 rTransferAmount,,,) = _getValues(tAmount, feesSum);
            return rTransferAmount;
        }
    }

    /**
     * @dev Calculates and returns the amount of tokens corresponding to the given reflected amount.
     */
    function tokenFromReflection(uint256 rAmount) internal view returns(uint256) {
        require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
        uint256 currentRate = _getCurrentRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromRewards[account], "Account is not included");
        _exclude(account);
    }
    
    function _exclude(address account) internal {
        if(_reflectedBalances[account] > 0) {
            _balances[account] = tokenFromReflection(_reflectedBalances[account]);
        }
        _isExcludedFromRewards[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromRewards[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balances[account] = 0;
                _isExcludedFromRewards[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function setExcludedFromFee(address account, bool value) external onlyOwner { 
        _isExcludedFromFee[account] = value; 
    }

    function _getValues(uint256 tAmount, uint256 feesSum) internal view returns (uint256, uint256, uint256, uint256, uint256) {
        
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);
        uint256 currentRate = _getCurrentRate();
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTotalFees = tTotalFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTotalFees);
        
        return (rAmount, rTransferAmount, tAmount, tTransferAmount, currentRate);
    }
    
    function _getCurrentRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _reflectedSupply;
        uint256 tSupply = _totalSupply;

        /**
         * The code below removes balances of addresses excluded from rewards from
         * rSupply and tSupply, which effectively increases the % of transaction fees
         * delivered to non-excluded holders
         */    
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectedBalances[_excluded[i]] > rSupply || _balances[_excluded[i]] > tSupply)
            return (_reflectedSupply, _totalSupply);
            rSupply = rSupply.sub(_reflectedBalances[_excluded[i]]);
            tSupply = tSupply.sub(_balances[_excluded[i]]);
        }
        if (tSupply == 0 || rSupply < _reflectedSupply.div(_totalSupply)) return (_reflectedSupply, _totalSupply);
        return (rSupply, tSupply);
    }
    
    
    /**
     * @dev Redistributes the specified amount among the current holders via the reflect.finance
     * algorithm, i.e. by updating the _reflectedSupply (_rSupply) which ultimately adjusts the
     * current rate used by `tokenFromReflection` and, in turn, the value returns from `balanceOf`. 
     * 
     */
    function _redistribute(uint256 amount, uint256 currentRate, uint256 fee) internal {
        uint256 tFee = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rFee = tFee.mul(currentRate);

        _reflectedSupply = _reflectedSupply.sub(rFee);
        
        collectedFeeTotal = collectedFeeTotal.add(tFee);
    }
    
    function _burn(uint256 amount, uint256 currentRate, uint256 fee) private {
        uint256 tBurn = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rBurn = tBurn.mul(currentRate);

        _burnTokens(address(this), tBurn, rBurn);
        
        collectedFeeTotal = collectedFeeTotal.add(tBurn);
    }

    function totalCollectedFees() external view returns (uint256) {
        return collectedFeeTotal;
    }
    
     function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcludedFromRewards[account];
    }
    
    function isExcludedFromFee(address account) public view returns(bool) { 
        return _isExcludedFromFee[account]; 
    }
    
    function whitelistDxSale(address _presaleAddress, address _routerAddress) external onlyOwner {
  	    presaleAddress = _presaleAddress;
  	    
        _exclude(_presaleAddress);
        _isExcludedFromFee[_presaleAddress] = true;

        _exclude(_routerAddress);
        _isExcludedFromFee[_routerAddress] = true;
  	}

    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }
 
    function prepareForPreSale() external onlyOwner {
        takeFeeEnabled = false;
        swapEnabled = false;
        isInPresale = true;
        maxTxAmount = _totalSupply;
        maxWalletBalance = _totalSupply;
    }
    
    function afterPreSale() external onlyOwner {
        takeFeeEnabled = true;
        swapEnabled = true;
        isInPresale = false;
        maxTxAmount = _totalSupply / 1000;
        maxWalletBalance = _totalSupply / 50;
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled  = _enabled;
    }
    
    function updateSwapTokensAt(uint256 _swaptokens) external onlyOwner {
        swapTokensAtAmount = _swaptokens * (10**18);
    }
    
    function updateWalletMax(uint256 _walletMax) external onlyOwner {
        maxWalletBalance = _walletMax * (10**18);
    }
    
    function updateTransactionMax(uint256 _txMax) external onlyOwner {
        maxTxAmount = _txMax * (10**18);
    }
    
    function calcBuyersTotalFees() private {
        buyersTotalFees = buyingRfiFee.add(buyingMarketingFee).add(buyingLaunchpadFee).add(buyingTeamFee).add(buyingLpFee);
    }
    
    function calcSellersTotalFees() private {
        sellersTotalFees = sellingRfiFee.add(sellingMarketingFee).add(sellingLaunchpadFee).add(sellingTeamFee).add(sellingLpFee);
    }
    
    function updateBuyingRfiFee(uint256 newFee) external onlyOwner {
        buyingRfiFee = newFee;
        calcBuyersTotalFees();
    }
    
    function updateBuyingMarketingFee(uint256 newFee) external onlyOwner {
        buyingMarketingFee = newFee;
        calcBuyersTotalFees();
    }
    
    function updateBuyingLaunchpadFee(uint256 newFee) external onlyOwner {
        buyingLaunchpadFee = newFee;
        calcBuyersTotalFees();
    }
    
    function updateBuyingTeamFee(uint256 newFee) external onlyOwner {
        buyingTeamFee = newFee;
        calcBuyersTotalFees();
    }

    function updateBuyingLpFee (uint256 newFee) external onlyOwner {
        buyingLpFee = newFee;
        calcBuyersTotalFees();
    }

    function updateSellingRfiFee(uint256 newFee) external onlyOwner {
        sellingRfiFee = newFee;
        calcSellersTotalFees();
    }
    
    function updateSellingMarketingFee(uint256 newFee) external onlyOwner {
        sellingMarketingFee = newFee;
        calcSellersTotalFees();
    }
    
    function updateSellingLaunchpadFee(uint256 newFee) external onlyOwner {
        sellingLaunchpadFee = newFee;
        calcSellersTotalFees();
    }
    
    function updateSellingTeamFee(uint256 newFee) external onlyOwner {
        sellingTeamFee = newFee;
        calcSellersTotalFees();
    }

    function updateSellingLpFee (uint256 newFee) external onlyOwner {
        sellingLpFee = newFee;
        calcSellersTotalFees();
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        require(newMarketingWallet != marketingWallet, "The Marketing wallet is already this address");
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        
        marketingWallet = newMarketingWallet;
    }
    
    function updateLaunchpadWallet(address newLaunchpadWallet) external onlyOwner {
        require(newLaunchpadWallet != launchpadWallet, "The Launchpad wallet is already this address");
        emit LaunchpadWalletUpdated(newLaunchpadWallet, launchpadWallet);
        
        launchpadWallet = newLaunchpadWallet;
    }
    
    function updateTeamWallet(address newTeamWallet) external onlyOwner {
        require(newTeamWallet != teamWallet, "The Team wallet is already this address");
        emit TeamWalletUpdated(newTeamWallet, teamWallet);
        
        teamWallet = newTeamWallet;
    }
    
    function updatePortionsOfSwap(uint256 marketingPortion, uint256 launchpadPortion, uint256 teamPortion, uint256 lpPortion) 
    external onlyOwner {
        
        uint256 totalPortion = marketingPortion.add(launchpadPortion).add(teamPortion).add(lpPortion);
        require(totalPortion == 100, "Total must be equal to 100 (100%)");
        
        marketingPortionOfSwap = marketingPortion;
        launchpadPortionOfSwap = launchpadPortion;
        teamPortionOfSwap = teamPortion;
        lpPortionOfSwap = lpPortion;
    }
    
    function setFeesDivisor(uint256 divisor) external onlyOwner() {
        FEES_DIVISOR = divisor;
    }
    
    function updateTradingIsEnabled(bool tradingStatus) external onlyOwner() {
        tradingIsEnabled = tradingStatus;
    }
    
    function updateRouterAddress(address newAddress) external onlyOwner {
        require(newAddress != address(router), "The router already has that address");
        emit UpdatePancakeswapRouter(newAddress, address(router));
        
        router = IPancakeV2Router(newAddress);   
    }

    function toggleAntiBot(bool toggleStatus) external onlyOwner() {
        antiBotEnabled = toggleStatus;
        if(antiBotEnabled){
            _startTimeForSwap = block.timestamp + 60;    
        }    
    }
    
    function _takeFee(uint256 amount, uint256 currentRate, uint256 fee, address recipient) private {
        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rAmount = tAmount.mul(currentRate);

        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rAmount);
        if(_isExcludedFromRewards[recipient])
            _balances[recipient] = _balances[recipient].add(tAmount);

        collectedFeeTotal = collectedFeeTotal.add(tAmount);
    }
    
    function _transferTokens(address sender, address recipient, uint256 amount, bool takeFee) private {
        
        uint256 sumOfFees = buyersTotalFees; // if buying

        bool isBuying = true;
         
        if(recipient == pair) {
            sumOfFees = sellersTotalFees; // if selling
            isBuying  = false;
        }

        sumOfFees = antiBotEnabled && block.timestamp <= _startTimeForSwap ? antiBotFee : sumOfFees;
        
        if ( !takeFee ){ sumOfFees = 0; }
        
        processReflectedBal(sender, recipient, amount, sumOfFees, isBuying);
       
    }
    
    function processReflectedBal (address sender, address recipient, uint256 amount, uint256 sumOfFees, bool isBuying) private {
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, sumOfFees);
         
        theReflection(sender, recipient, rAmount, rTransferAmount, tAmount, tTransferAmount); 
        
        _takeFees(amount, currentRate, sumOfFees, isBuying);
        
        emit Transfer(sender, recipient, tTransferAmount);    
    }
    
    function theReflection(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, 
        uint256 tTransferAmount) private {
            
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(rAmount);
        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rTransferAmount);
        
        /**
         * Update the true/nominal balances for excluded accounts
         */        
        if (_isExcludedFromRewards[sender]) { _balances[sender] = _balances[sender].sub(tAmount); }
        if (_isExcludedFromRewards[recipient] ) { _balances[recipient] = _balances[recipient].add(tTransferAmount); }
    }
    
    
    function _takeFees(uint256 amount, uint256 currentRate, uint256 sumOfFees, bool isBuying) private {
        
         if ( sumOfFees > 0 && !isInPresale ){
            if(antiBotEnabled && block.timestamp < _startTimeForSwap) {
                _takeFee( amount, currentRate, antiBotFee, address(this));    
            }
            else if(isBuying) {
                _redistribute( amount, currentRate, buyingRfiFee);
                _takeFee( amount, currentRate, buyingMarketingFee, address(this));
                _takeFee( amount, currentRate, buyingLpFee, address(this));
                _takeFee( amount, currentRate, buyingLaunchpadFee, address(this));
                _takeFee( amount, currentRate, buyingTeamFee, address(this));     
            }
            else{
                _redistribute( amount, currentRate, sellingRfiFee);
                _takeFee( amount, currentRate, sellingMarketingFee, address(this));
                _takeFee( amount, currentRate, sellingLpFee, address(this));
                _takeFee( amount, currentRate, sellingLaunchpadFee, address(this));
                _takeFee( amount, currentRate, sellingTeamFee, address(this));
            }
        }
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "Token: transfer from the zero address");
        require(recipient != address(0), "Token: transfer to the zero address");
        require(sender != address(deadAddress), "Token: transfer from the burn address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        require(tradingIsEnabled, "This account cannot send tokens until trading is enabled");

        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");
        
        if (
            sender != address(router) && //router -> pair is removing liquidity which shouldn't have max
            !_isExcludedFromFee[recipient] && //no max for those excluded from fees
            !_isExcludedFromFee[sender] 
        ) {
            require(amount <= maxTxAmount, "Transfer amount exceeds the Max Transaction Amount.");
            
        }
        
        if ( maxWalletBalance > 0 && !_isExcludedFromFee[recipient] && !_isExcludedFromFee[sender] && recipient != address(pair) ) {
                uint256 recipientBalance = balanceOf(recipient);
                require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
            }
            
         // indicates whether or not fee should be deducted from the transfer
        bool _isTakeFee = takeFeeEnabled;
        if ( isInPresale ){ _isTakeFee = false; }
        
         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { 
            _isTakeFee = false; 
        }
        
        _beforeTokenTransfer(recipient);
        _transferTokens(sender, recipient, amount, _isTakeFee);
        
    }
    
    function _beforeTokenTransfer(address recipient) private {
            
        if ( !isInPresale ){
            uint256 contractTokenBalance = balanceOf(address(this));
            // swap
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;
            
            if (!swapping && canSwap && swapEnabled && recipient == pair) {
                swapping = true;
                
                swapBack();
  
                swapping = false;
            }
            
        }
    }
    
    function swapBack() private {
        uint256 splitLiquidityPortion = lpPortionOfSwap.div(2);
        uint256 amountToLiquify = balanceOf(address(this)).mul(splitLiquidityPortion).div(FEES_DIVISOR);
        uint256 amountToSwap = balanceOf(address(this)).sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;
        
        swapTokensForETH(amountToSwap);

        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        
        uint256 amountBNBMarketing = amountBNB.mul(marketingPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBLaunchpad = amountBNB.mul(launchpadPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBTeam = amountBNB.mul(teamPortionOfSwap).div(FEES_DIVISOR);
        uint256 amountBNBLiquidity = amountBNB.mul(splitLiquidityPortion).div(FEES_DIVISOR);
        
        // Send to addresses
        transferToAddress(payable(marketingWallet), amountBNBMarketing);
        transferToAddress(payable(launchpadWallet), amountBNBLaunchpad);
        transferToAddress(payable(teamWallet), amountBNBTeam);

         // add liquidity
        _addLiquidity(amountToLiquify, amountBNBLiquidity);
    }

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

        // add the liquidity
        (uint256 tokenAmountSent, uint256 ethAmountSent, uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );

        emit LiquidityAdded(tokenAmountSent, ethAmountSent, liquidity);
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function transferToAddress(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function TransferETH(address payable recipient, uint256 amount) external onlyOwner {
        require(recipient != address(0), "Cannot withdraw the ETH balance to the zero address");
        recipient.transfer(amount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"LaunchpadWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTeamWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldTeamWallet","type":"address"}],"name":"TeamWalletUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdatePancakeswapRouter","type":"event"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTimeForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotFee","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyersTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingLaunchpadFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingRfiFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectedFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchpadPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchpadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"},{"internalType":"bool","name":"isBuying","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellersTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingLaunchpadFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingRfiFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setFeesDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"takeFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPortionOfSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"toggleStatus","type":"bool"}],"name":"toggleAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalCollectedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyingLaunchpadFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyingLpFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyingMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyingRfiFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyingTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLaunchpadWallet","type":"address"}],"name":"updateLaunchpadWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingPortion","type":"uint256"},{"internalType":"uint256","name":"launchpadPortion","type":"uint256"},{"internalType":"uint256","name":"teamPortion","type":"uint256"},{"internalType":"uint256","name":"lpPortion","type":"uint256"}],"name":"updatePortionsOfSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellingLaunchpadFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellingLpFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellingMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellingRfiFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellingTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swaptokens","type":"uint256"}],"name":"updateSwapTokensAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"tradingStatus","type":"bool"}],"name":"updateTradingIsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txMax","type":"uint256"}],"name":"updateTransactionMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletMax","type":"uint256"}],"name":"updateWalletMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"whitelistDxSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead179091556002805482169055600380548216735b6b252fceb83ace18db9902c05b6cf3cba5051b1790556004805482167382a27faa29fe9632a847132761313579f41f60d217905560058054909116730305b5580400d08b8488e92d01b287bbb0f0a982179055620000996c0c9f2c9cd04674edea4000000060001962000bd5565b620000a79060001962000b9d565b600655620000c56103e86c0c9f2c9cd04674edea4000000062000b86565b600855620000e260326c0c9f2c9cd04674edea4000000062000b86565b600955600a805464ff00ffffff19166401000001011790556a084595161401484a000000600b55600c805460ff191690556103de600d556064600f55600160108190556011819055600360128190556013819055600260148190556015819055600460168190556017819055601884905560198490556200018f93926200017b9283918290869062000561602090811b6200220d17901c565b6200056160201b6200220d1790919060201c565b601a55620001c56018546200017b6016546200017b6014546200017b6012546010546200056160201b6200220d1790919060201c565b601b55601e601c556014601d556028601e55600a601f55348015620001e957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065460226000620002456000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bc57600080fd5b505afa158015620002d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f7919062000b40565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034057600080fd5b505afa15801562000355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037b919062000b40565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003c457600080fd5b505af1158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000b40565b602180546001600160a01b03199081166001600160a01b039384161790915560208054909116918316919091179055600160266000620004476000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526026909252902080549091166001179055620004a46200049e6000546001600160a01b031690565b620005cf565b620004af30620005cf565b602154620004c6906001600160a01b0316620005cf565b600154620004dd906001600160a01b0316620005cf565b62000509620004f46000546001600160a01b031690565b6020546001600160a01b031660001962000692565b600080546040516c0c9f2c9cd04674edea4000000081526001600160a01b0390911691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000c2e565b60008062000570838562000b6b565b905083811015620005c85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b038116600090815260226020526040902054156200062c576001600160a01b0381166000908152602260205260409020546200061290620007c9565b6001600160a01b0382166000908152602360205260409020555b6001600160a01b03166000818152602760205260408120805460ff191660019081179091556028805491820181559091527fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab50180546001600160a01b0319169091179055565b6001600160a01b038316620006fe5760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401620005bf565b6001600160a01b038216620007685760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401620005bf565b6001600160a01b0383811660008181526024602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000600654821115620008325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005bf565b60006200083e6200085a565b9050620005c881846200088d60201b6200226c1790919060201c565b6000808062000868620008ec565b915091506200088681836200088d60201b6200226c1790919060201c565b9250505090565b6000808211620008e05760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401620005bf565b620005c8828462000b86565b60065460009081906c0c9f2c9cd04674edea40000000825b60285481101562000a81578260226000602884815481106200092a576200092a62000c18565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000999575081602360006028848154811062000972576200097262000c18565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620009ba575050600654936c0c9f2c9cd04674edea400000009350915050565b62000a116022600060288481548110620009d857620009d862000c18565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620022c762000ae0821b17901c565b925062000a6a602360006028848154811062000a315762000a3162000c18565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620022c762000ae0821b17901c565b91508062000a788162000bb7565b91505062000904565b5080158062000ab7575062000ab46c0c9f2c9cd04674edea400000006006546200088d60201b6200226c1790919060201c565b82105b1562000ad7575050600654926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b60008282111562000b345760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401620005bf565b620005c8828462000b9d565b60006020828403121562000b5357600080fd5b81516001600160a01b0381168114620005c857600080fd5b6000821982111562000b815762000b8162000bec565b500190565b60008262000b985762000b9862000c02565b500490565b60008282101562000bb25762000bb262000bec565b500390565b600060001982141562000bce5762000bce62000bec565b5060010190565b60008262000be75762000be762000c02565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613bd68062000c3e6000396000f3fe6080604052600436106104965760003560e01c8063715018a611610260578063b0b30b1311610144578063d6b6209a116100c1578063e1fd960511610085578063e1fd960514610e0e578063e2f4560514610e24578063f2fde38b14610e3a578063f3ffadad14610e5a578063f887ea4014610e7a578063fd69c21514610e9a57600080fd5b8063d6b6209a14610d4e578063d8c6404b14610d6e578063db39b7d714610d88578063dd62ed3e14610da8578063e01af92c14610dee57600080fd5b8063bd24661511610108578063bd24661514610ccc578063c139437c14610cec578063cbf7e88814610d02578063ce81a1fd14610d18578063d4cdeb3c14610d2e57600080fd5b8063b0b30b1314610c40578063b225d4b714610c60578063b414f55114610c80578063bbde77c114610c96578063bbf1af9514610cac57600080fd5b80638c0b5e22116101dd578063a43c7725116101a1578063a43c772514610b94578063a457c2d714610baa578063a8aa1b3114610bca578063a9059cbb14610bea578063aa687e5014610c0a578063aacebbe314610c2057600080fd5b80638c0b5e2214610af95780638da5cb5b14610b0f57806391053d9414610b2d57806395d89b4114610b4d57806396bd072c14610b7f57600080fd5b806379c4903c1161022457806379c4903c14610a545780637cb332bb14610a6a5780637d8dbe2414610a8a578063872f596914610aaa57806388f8202014610ac057600080fd5b8063715018a6146109c9578063721d4e2b146109de57806375f0a874146109f457806377f7cb4414610a1457806378b0acf114610a3457600080fd5b806339509351116103875780635342acb41161030457806365587302116102c857806365587302146109115780636612e66f1461093157806366b3e74c14610951578063690c22ca146109715780636ddd17131461098757806370a08231146109a957600080fd5b80635342acb41461086c57806353a4ec55146108a5578063589d89dc146108c557806359927044146108db5780635a565c39146108fb57600080fd5b8063455a43961161034b578063455a4396146107d75780634844dd4a146107f75780634e83ff6f146108175780635134f6ab1461083757806352390c021461084c57600080fd5b806339509351146107475780633f63d40f1461076757806342966c6814610787578063444a63a8146107a7578063450dde46146107bd57600080fd5b80631cdd3be31161041557806327c04032116103d957806327c04032146106bf5780632a6ae1e8146106d5578063313ce567146106eb578063361ff9bf146107075780633685d4191461072757600080fd5b80631cdd3be314610619578063209a5c26146106495780632325755e1461065f57806323b5192c1461067f57806323b872dd1461069f57600080fd5b806309c58fcd1161045c57806309c58fcd1461056d578063122fe6851461058c5780631264c9c4146105c4578063176b48b8146105e457806318160ddd146105fa57600080fd5b80628e25a7146104a2578062e6be7b146104cb57806306fdde03146104ed57806307efbfdc14610528578063095ea7b31461053d57600080fd5b3661049d57005b600080fd5b3480156104ae57600080fd5b506104b8601d5481565b6040519081526020015b60405180910390f35b3480156104d757600080fd5b506104eb6104e6366004613769565b610eba565b005b3480156104f957600080fd5b50604080518082019091526009815268233637b5b49918191960b91b60208201525b6040516104c29190613992565b34801561053457600080fd5b506104eb610fb4565b34801561054957600080fd5b5061055d6105583660046137a3565b61102a565b60405190151581526020016104c2565b34801561057957600080fd5b50600a5461055d90610100900460ff1681565b34801561059857600080fd5b506002546105ac906001600160a01b031681565b6040516001600160a01b0390911681526020016104c2565b3480156105d057600080fd5b506104eb6105df36600461387e565b611041565b3480156105f057600080fd5b506104b8601b5481565b34801561060657600080fd5b5068327cb2734119d3b7a9601e1b6104b8565b34801561062557600080fd5b5061055d610634366004613769565b60256020526000908152604090205460ff1681565b34801561065557600080fd5b506104b860155481565b34801561066b57600080fd5b506104eb61067a366004613899565b611085565b34801561068b57600080fd5b506104eb61069a366004613899565b6110bf565b3480156106ab57600080fd5b5061055d6106ba366004613808565b6110f6565b3480156106cb57600080fd5b506104b860185481565b3480156106e157600080fd5b506104b860125481565b3480156106f757600080fd5b50604051601281526020016104c2565b34801561071357600080fd5b506104eb61072236600461391c565b611160565b34801561073357600080fd5b506104eb610742366004613769565b611213565b34801561075357600080fd5b5061055d6107623660046137a3565b6113ca565b34801561077357600080fd5b506104b86107823660046138b2565b611400565b34801561079357600080fd5b506104eb6107a2366004613899565b6114d3565b3480156107b357600080fd5b506104b860195481565b3480156107c957600080fd5b50600a5461055d9060ff1681565b3480156107e357600080fd5b506104eb6107f2366004613849565b6116b0565b34801561080357600080fd5b506104eb610812366004613899565b611705565b34801561082357600080fd5b506104eb6108323660046137cf565b61173c565b34801561084357600080fd5b506104eb6117db565b34801561085857600080fd5b506104eb610867366004613769565b61182f565b34801561087857600080fd5b5061055d610887366004613769565b6001600160a01b031660009081526026602052604090205460ff1690565b3480156108b157600080fd5b506104eb6108c0366004613899565b6118cb565b3480156108d157600080fd5b506104b860075481565b3480156108e757600080fd5b506005546105ac906001600160a01b031681565b34801561090757600080fd5b506104b8601e5481565b34801561091d57600080fd5b506104eb61092c366004613899565b611902565b34801561093d57600080fd5b506104eb61094c366004613849565b611939565b34801561095d57600080fd5b506104eb61096c366004613769565b61198e565b34801561097d57600080fd5b506104b8600e5481565b34801561099357600080fd5b50600a5461055d90640100000000900460ff1681565b3480156109b557600080fd5b506104b86109c4366004613769565b611a88565b3480156109d557600080fd5b506104eb611ae7565b3480156109ea57600080fd5b506104b860135481565b348015610a0057600080fd5b506003546105ac906001600160a01b031681565b348015610a2057600080fd5b506104eb610a2f366004613899565b611b5b565b348015610a4057600080fd5b506104eb610a4f366004613899565b611b92565b348015610a6057600080fd5b506104b8601c5481565b348015610a7657600080fd5b506104eb610a85366004613769565b611bc9565b348015610a9657600080fd5b506104eb610aa5366004613899565b611cbe565b348015610ab657600080fd5b506104b8600d5481565b348015610acc57600080fd5b5061055d610adb366004613769565b6001600160a01b031660009081526027602052604090205460ff1690565b348015610b0557600080fd5b506104b860085481565b348015610b1b57600080fd5b506000546001600160a01b03166105ac565b348015610b3957600080fd5b506104eb610b48366004613899565b611d00565b348015610b5957600080fd5b50604080518082019091526009815268232627a5a49918191960b91b602082015261051b565b348015610b8b57600080fd5b506007546104b8565b348015610ba057600080fd5b506104b8601a5481565b348015610bb657600080fd5b5061055d610bc53660046137a3565b611d42565b348015610bd657600080fd5b506021546105ac906001600160a01b031681565b348015610bf657600080fd5b5061055d610c053660046137a3565b611d91565b348015610c1657600080fd5b506104b860105481565b348015610c2c57600080fd5b506104eb610c3b366004613769565b611d9e565b348015610c4c57600080fd5b506004546105ac906001600160a01b031681565b348015610c6c57600080fd5b506104eb610c7b366004613899565b611e98565b348015610c8c57600080fd5b506104b860145481565b348015610ca257600080fd5b506104b860095481565b348015610cb857600080fd5b506104eb610cc736600461387e565b611eda565b348015610cd857600080fd5b506104eb610ce7366004613899565b611f2e565b348015610cf857600080fd5b506104b860115481565b348015610d0e57600080fd5b506104b8601f5481565b348015610d2457600080fd5b506104b860175481565b348015610d3a57600080fd5b50600a5461055d9062010000900460ff1681565b348015610d5a57600080fd5b506104eb610d69366004613899565b611f5d565b348015610d7a57600080fd5b50600c5461055d9060ff1681565b348015610d9457600080fd5b506104eb610da3366004613899565b611f94565b348015610db457600080fd5b506104b8610dc33660046137cf565b6001600160a01b03918216600090815260246020908152604080832093909416825291909152205490565b348015610dfa57600080fd5b506104eb610e0936600461387e565b611fcb565b348015610e1a57600080fd5b506104b860165481565b348015610e3057600080fd5b506104b8600b5481565b348015610e4657600080fd5b506104eb610e55366004613769565b612015565b348015610e6657600080fd5b506104eb610e75366004613899565b6120ff565b348015610e8657600080fd5b506020546105ac906001600160a01b031681565b348015610ea657600080fd5b506104eb610eb53660046137a3565b612136565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610ee4906139e7565b60405180910390fd5b6020546001600160a01b0382811691161415610f575760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610ee4565b6020546040516001600160a01b03918216918316907fc4382ee892d64a85fffb798adefd9dd8fcdeb2b1ababe74b46cdae7fe88da4e090600090a3602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fde5760405162461bcd60e51b8152600401610ee4906139e7565b600a805464ff00ff00ff191664010000000117905561100b6103e868327cb2734119d3b7a9601e1b613a89565b600855611025603268327cb2734119d3b7a9601e1b613a89565b600955565b6000611037338484612323565b5060015b92915050565b6000546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610ee4906139e7565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146110af5760405162461bcd60e51b8152600401610ee4906139e7565b60188190556110bc612457565b50565b6000546001600160a01b031633146110e95760405162461bcd60e51b8152600401610ee4906139e7565b60158190556110bc612485565b60006111038484846124b3565b611155843361115085604051806060016040528060288152602001613b54602891396001600160a01b038a166000908152602460209081526040808320338452909152902054919061297d565b612323565b5060015b9392505050565b6000546001600160a01b0316331461118a5760405162461bcd60e51b8152600401610ee4906139e7565b60006111a28261119c8581898961220d565b9061220d565b9050806064146111fe5760405162461bcd60e51b815260206004820152602160248201527f546f74616c206d75737420626520657175616c20746f203130302028313030256044820152602960f81b6064820152608401610ee4565b50601c93909355601d91909155601e55601f55565b6000546001600160a01b0316331461123d5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03811660009081526027602052604090205460ff166112a55760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ee4565b60005b6028548110156113c657816001600160a01b0316602882815481106112cf576112cf613b28565b6000918252602090912001546001600160a01b031614156113b457602880546112fa90600190613aca565b8154811061130a5761130a613b28565b600091825260209091200154602880546001600160a01b03909216918390811061133657611336613b28565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602382526040808220829055602790925220805460ff19169055602880548061138e5761138e613b12565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113be81613ae1565b9150506112a8565b5050565b3360008181526024602090815260408083206001600160a01b03871684529091528120549091611037918590611150908661220d565b600068327cb2734119d3b7a9601e1b84111561145e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ee4565b6000836114815760006114728660006129b4565b50929550611159945050505050565b8261148e57601b54611492565b601a545b600c5490915060ff1680156114a85750600e5442105b6114b257806114b6565b600d545b905060006114c486836129b4565b50919550611159945050505050565b338061152b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ee4565b6001546001600160a01b03828116911614156115935760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610ee4565b600061159e82611a88565b9050828110156115fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ee4565b600061160f611608612a35565b8590612a58565b6001600160a01b03841660009081526022602052604090205490915061163590826122c7565b6001600160a01b03841660009081526022602090815260408083209390935560279052205460ff161561169f576001600160a01b03831660009081526023602052604090205461168590856122c7565b6001600160a01b0384166000908152602360205260409020555b6116aa838583612ad7565b50505050565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610ee4906139e7565b60198190556110bc612485565b6000546001600160a01b031633146117665760405162461bcd60e51b8152600401610ee4906139e7565b600280546001600160a01b0319166001600160a01b03841617905561178a82612bb9565b6001600160a01b0382166000908152602660205260409020805460ff191660011790556117b681612bb9565b6001600160a01b03166000908152602660205260409020805460ff1916600117905550565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610ee4906139e7565b600a805464ff00ff00ff19166201000017905568327cb2734119d3b7a9601e1b6008819055600955565b6000546001600160a01b031633146118595760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03811660009081526027602052604090205460ff16156118c25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420696e636c756465640000000000000000006044820152606401610ee4565b6110bc81612bb9565b6000546001600160a01b031633146118f55760405162461bcd60e51b8152600401610ee4906139e7565b60128190556110bc612457565b6000546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610ee4906139e7565b60138190556110bc612485565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119b85760405162461bcd60e51b8152600401610ee4906139e7565b6004546001600160a01b0382811691161415611a2b5760405162461bcd60e51b815260206004820152602c60248201527f546865204c61756e63687061642077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610ee4565b6004546040516001600160a01b03918216918316907f0345b63eb6b46e7262ed6abe1225a066f75cf7c56a6d38ab6635c2372e4ccf0190600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526027602052604081205460ff1615611ac557506001600160a01b031660009081526023602052604090205490565b6001600160a01b03821660009081526022602052604090205461103b90612c79565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610ee4906139e7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611b855760405162461bcd60e51b8152600401610ee4906139e7565b60148190556110bc612457565b6000546001600160a01b03163314611bbc5760405162461bcd60e51b8152600401610ee4906139e7565b60118190556110bc612485565b6000546001600160a01b03163314611bf35760405162461bcd60e51b8152600401610ee4906139e7565b6005546001600160a01b0382811691161415611c615760405162461bcd60e51b815260206004820152602760248201527f546865205465616d2077616c6c657420697320616c72656164792074686973206044820152666164647265737360c81b6064820152608401610ee4565b6005546040516001600160a01b03918216918316907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309590600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610ee4906139e7565b611cfa81670de0b6b3a7640000613aab565b60085550565b6000546001600160a01b03163314611d2a5760405162461bcd60e51b8152600401610ee4906139e7565b611d3c81670de0b6b3a7640000613aab565b60095550565b6000611037338461115085604051806060016040528060258152602001613b7c602591393360009081526024602090815260408083206001600160a01b038d168452909152902054919061297d565b60006110373384846124b3565b6000546001600160a01b03163314611dc85760405162461bcd60e51b8152600401610ee4906139e7565b6003546001600160a01b0382811691161415611e3b5760405162461bcd60e51b815260206004820152602c60248201527f546865204d61726b6574696e672077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610ee4565b6003546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610ee4906139e7565b611ed481670de0b6b3a7640000613aab565b600b5550565b6000546001600160a01b03163314611f045760405162461bcd60e51b8152600401610ee4906139e7565b600c805460ff191682151590811790915560ff16156110bc57611f2842603c613a71565b600e5550565b6000546001600160a01b03163314611f585760405162461bcd60e51b8152600401610ee4906139e7565b600f55565b6000546001600160a01b03163314611f875760405162461bcd60e51b8152600401610ee4906139e7565b60108190556110bc612457565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610ee4906139e7565b60178190556110bc612485565b6000546001600160a01b03163314611ff55760405162461bcd60e51b8152600401610ee4906139e7565b600a80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b0316331461203f5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b0381166120a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ee4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121295760405162461bcd60e51b8152600401610ee4906139e7565b60168190556110bc612457565b6000546001600160a01b031633146121605760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b0382166121d25760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015272746f20746865207a65726f206164647265737360681b6064820152608401610ee4565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612208573d6000803e3d6000fd5b505050565b60008061221a8385613a71565b9050838110156111595760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ee4565b60008082116122bd5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ee4565b6111598284613a89565b6000828211156123195760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ee4565b6111598284613aca565b6001600160a01b03831661238d5760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610ee4565b6001600160a01b0382166123f55760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610ee4565b6001600160a01b0383811660008181526024602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b61248060185461119c60165461119c60145461119c60125460105461220d90919063ffffffff16565b601b55565b6124ae60195461119c60175461119c60155461119c60135460115461220d90919063ffffffff16565b601a55565b6001600160a01b0383166125175760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ee4565b6001600160a01b0382166125795760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ee4565b6001546001600160a01b03848116911614156125e55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865206275726e206164604482015264647265737360d81b6064820152608401610ee4565b600081116126475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ee4565b600a54610100900460ff166126c45760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610ee4565b6001600160a01b03831660009081526025602052604090205460ff1615801561270657506001600160a01b03821660009081526025602052604090205460ff16155b6127485760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610ee4565b6020546001600160a01b0384811691161480159061277f57506001600160a01b03821660009081526026602052604090205460ff16155b80156127a457506001600160a01b03831660009081526026602052604090205460ff16155b15612817576008548111156128175760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865204d6178206044820152722a3930b739b0b1ba34b7b71020b6b7bab73a1760691b6064820152608401610ee4565b600060095411801561284257506001600160a01b03821660009081526026602052604090205460ff16155b801561286757506001600160a01b03831660009081526026602052604090205460ff16155b801561288157506021546001600160a01b03838116911614155b1561290757600061289183611a88565b6009549091506128a18383613a71565b11156129055760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610ee4565b505b600a5460ff808216916201000090041615612920575060005b6001600160a01b03841660009081526026602052604090205460ff168061295f57506001600160a01b03831660009081526026602052604090205460ff165b15612968575060005b61297183612cf6565b6116aa84848484612d93565b600081848411156129a15760405162461bcd60e51b8152600401610ee49190613992565b506129ac8385613aca565b949350505050565b6000806000806000806129dc600f546129d6898b612a5890919063ffffffff16565b9061226c565b905060006129ea89836122c7565b905060006129f6612a35565b90506000612a048b83612a58565b90506000612a128584612a58565b90506000612a2083836122c7565b929d929c9b5093995091975095505050505050565b6000806000612a42612dfa565b9092509050612a51828261226c565b9250505090565b600082612a675750600061103b565b6000612a738385613aab565b905082612a808583613a89565b146111595760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ee4565b6001546001600160a01b0316600090815260226020526040902054612afc908261220d565b600180546001600160a01b03908116600090815260226020908152604080832095909555925490911681526027909152205460ff1615612b77576001546001600160a01b0316600090815260236020526040902054612b5b908361220d565b6001546001600160a01b03166000908152602360205260409020555b6001546040518381526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161244a565b6001600160a01b03811660009081526022602052604090205415612c13576001600160a01b038116600090815260226020526040902054612bf990612c79565b6001600160a01b0382166000908152602360205260409020555b6001600160a01b03166000818152602760205260408120805460ff191660019081179091556028805491820181559091527fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab50180546001600160a01b0319169091179055565b6000600654821115612ce05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ee4565b6000612cea612a35565b9050611159838261226c565b600a5462010000900460ff166110bc576000612d1130611a88565b600b54600a54919250821015906301000000900460ff16158015612d325750805b8015612d485750600a54640100000000900460ff165b8015612d6157506021546001600160a01b038481169116145b1561220857600a805463ff00000019166301000000179055612d81612fab565b600a805463ff00000019169055505050565b601a546021546001906001600160a01b0386811691161415612db7575050601b5460005b600c5460ff168015612dcb5750600e544211155b612dd55781612dd9565b600d545b915082612de557600091505b612df286868685856130dc565b505050505050565b600654600090819068327cb2734119d3b7a9601e1b825b602854811015612f5f57826022600060288481548110612e3357612e33613b28565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e9e5750816023600060288481548110612e7757612e77613b28565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ebd5750506006549368327cb2734119d3b7a9601e1b9350915050565b612f036022600060288481548110612ed757612ed7613b28565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122c7565b9250612f4b6023600060288481548110612f1f57612f1f613b28565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122c7565b915080612f5781613ae1565b915050612e11565b50801580612f845750600654612f819068327cb2734119d3b7a9601e1b61226c565b82105b15612fa25750506006549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b601f54600090612fbc90600261226c565b90506000612fd9600f546129d684612fd330611a88565b90612a58565b90506000612ff082612fea30611a88565b906122c7565b905047612ffc8261316b565b600061300847836122c7565b90506000613027600f546129d6601c5485612a5890919063ffffffff16565b90506000613046600f546129d6601d5486612a5890919063ffffffff16565b90506000613065600f546129d6601e5487612a5890919063ffffffff16565b90506000613082600f546129d68b88612a5890919063ffffffff16565b60035490915061309b906001600160a01b0316856121d2565b6004546130b1906001600160a01b0316846121d2565b6005546130c7906001600160a01b0316836121d2565b6130d1888261330e565b505050505050505050565b60008060008060006130ee88886129b4565b945094509450945094506131068a8a87878787613441565b61311288828989613569565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315791815260200190565b60405180910390a350505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131a0576131a0613b28565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131f357600080fd5b505afa158015613207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322b9190613786565b8160018151811061323e5761323e613b28565b6001600160a01b03928316602091820292909201810191909152546132669130911684612323565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac9479061329f908590600090869030904290600401613a35565b600060405180830381600087803b1580156132b957600080fd5b505af11580156132cd573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613302929190613a1c565b60405180910390a15050565b6020546133269030906001600160a01b031684612323565b602054600090819081906001600160a01b031663f305d71985308885806133556000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f191906138ee565b604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b6001600160a01b03861660009081526022602052604090205461346490856122c7565b6001600160a01b038088166000908152602260205260408082209390935590871681522054613493908461220d565b6001600160a01b0380871660009081526022602090815260408083209490945591891681526027909152205460ff1615613504576001600160a01b0386166000908152602360205260409020546134ea90836122c7565b6001600160a01b0387166000908152602360205260409020555b6001600160a01b03851660009081526027602052604090205460ff1615612df2576001600160a01b038516600090815260236020526040902054613548908261220d565b6001600160a01b038616600090815260236020526040902055505050505050565b6000821180156135825750600a5462010000900460ff16155b156116aa57600c5460ff16801561359a5750600e5442105b156135b2576135ad8484600d543061363e565b6116aa565b80156135fd576135c58484601154613708565b6135d384846013543061363e565b6135e184846019543061363e565b6135ef84846015543061363e565b6135ad84846017543061363e565b61360a8484601054613708565b61361884846012543061363e565b61362684846018543061363e565b61363484846014543061363e565b6116aa8484601654305b600f54600090613652906129d68786612a58565b905060006136608286612a58565b6001600160a01b038416600090815260226020526040902054909150613686908261220d565b6001600160a01b03841660009081526022602090815260408083209390935560279052205460ff16156136f0576001600160a01b0383166000908152602360205260409020546136d6908361220d565b6001600160a01b0384166000908152602360205260409020555b6007546136fd908361220d565b600755505050505050565b600f5460009061371c906129d68685612a58565b9050600061372a8285612a58565b60065490915061373a90826122c7565b60065560075461374a908361220d565b6007555050505050565b8035801515811461376457600080fd5b919050565b60006020828403121561377b57600080fd5b813561115981613b3e565b60006020828403121561379857600080fd5b815161115981613b3e565b600080604083850312156137b657600080fd5b82356137c181613b3e565b946020939093013593505050565b600080604083850312156137e257600080fd5b82356137ed81613b3e565b915060208301356137fd81613b3e565b809150509250929050565b60008060006060848603121561381d57600080fd5b833561382881613b3e565b9250602084013561383881613b3e565b929592945050506040919091013590565b6000806040838503121561385c57600080fd5b823561386781613b3e565b915061387560208401613754565b90509250929050565b60006020828403121561389057600080fd5b61115982613754565b6000602082840312156138ab57600080fd5b5035919050565b6000806000606084860312156138c757600080fd5b833592506138d760208501613754565b91506138e560408501613754565b90509250925092565b60008060006060848603121561390357600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561393257600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156139875781516001600160a01b031687529582019590820190600101613962565b509495945050505050565b600060208083528351808285015260005b818110156139bf578581018301518582016040015282016139a3565b818111156139d1576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006129ac604083018461394e565b85815284602082015260a060408201526000613a5460a083018661394e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a8457613a84613afc565b500190565b600082613aa657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613ac557613ac5613afc565b500290565b600082821015613adc57613adc613afc565b500390565b6000600019821415613af557613af5613afc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146110bc57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206800e2c76d7496879e133741fd0c92d67cf325a04b59b6616bb8923ab1a18fae64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106104965760003560e01c8063715018a611610260578063b0b30b1311610144578063d6b6209a116100c1578063e1fd960511610085578063e1fd960514610e0e578063e2f4560514610e24578063f2fde38b14610e3a578063f3ffadad14610e5a578063f887ea4014610e7a578063fd69c21514610e9a57600080fd5b8063d6b6209a14610d4e578063d8c6404b14610d6e578063db39b7d714610d88578063dd62ed3e14610da8578063e01af92c14610dee57600080fd5b8063bd24661511610108578063bd24661514610ccc578063c139437c14610cec578063cbf7e88814610d02578063ce81a1fd14610d18578063d4cdeb3c14610d2e57600080fd5b8063b0b30b1314610c40578063b225d4b714610c60578063b414f55114610c80578063bbde77c114610c96578063bbf1af9514610cac57600080fd5b80638c0b5e22116101dd578063a43c7725116101a1578063a43c772514610b94578063a457c2d714610baa578063a8aa1b3114610bca578063a9059cbb14610bea578063aa687e5014610c0a578063aacebbe314610c2057600080fd5b80638c0b5e2214610af95780638da5cb5b14610b0f57806391053d9414610b2d57806395d89b4114610b4d57806396bd072c14610b7f57600080fd5b806379c4903c1161022457806379c4903c14610a545780637cb332bb14610a6a5780637d8dbe2414610a8a578063872f596914610aaa57806388f8202014610ac057600080fd5b8063715018a6146109c9578063721d4e2b146109de57806375f0a874146109f457806377f7cb4414610a1457806378b0acf114610a3457600080fd5b806339509351116103875780635342acb41161030457806365587302116102c857806365587302146109115780636612e66f1461093157806366b3e74c14610951578063690c22ca146109715780636ddd17131461098757806370a08231146109a957600080fd5b80635342acb41461086c57806353a4ec55146108a5578063589d89dc146108c557806359927044146108db5780635a565c39146108fb57600080fd5b8063455a43961161034b578063455a4396146107d75780634844dd4a146107f75780634e83ff6f146108175780635134f6ab1461083757806352390c021461084c57600080fd5b806339509351146107475780633f63d40f1461076757806342966c6814610787578063444a63a8146107a7578063450dde46146107bd57600080fd5b80631cdd3be31161041557806327c04032116103d957806327c04032146106bf5780632a6ae1e8146106d5578063313ce567146106eb578063361ff9bf146107075780633685d4191461072757600080fd5b80631cdd3be314610619578063209a5c26146106495780632325755e1461065f57806323b5192c1461067f57806323b872dd1461069f57600080fd5b806309c58fcd1161045c57806309c58fcd1461056d578063122fe6851461058c5780631264c9c4146105c4578063176b48b8146105e457806318160ddd146105fa57600080fd5b80628e25a7146104a2578062e6be7b146104cb57806306fdde03146104ed57806307efbfdc14610528578063095ea7b31461053d57600080fd5b3661049d57005b600080fd5b3480156104ae57600080fd5b506104b8601d5481565b6040519081526020015b60405180910390f35b3480156104d757600080fd5b506104eb6104e6366004613769565b610eba565b005b3480156104f957600080fd5b50604080518082019091526009815268233637b5b49918191960b91b60208201525b6040516104c29190613992565b34801561053457600080fd5b506104eb610fb4565b34801561054957600080fd5b5061055d6105583660046137a3565b61102a565b60405190151581526020016104c2565b34801561057957600080fd5b50600a5461055d90610100900460ff1681565b34801561059857600080fd5b506002546105ac906001600160a01b031681565b6040516001600160a01b0390911681526020016104c2565b3480156105d057600080fd5b506104eb6105df36600461387e565b611041565b3480156105f057600080fd5b506104b8601b5481565b34801561060657600080fd5b5068327cb2734119d3b7a9601e1b6104b8565b34801561062557600080fd5b5061055d610634366004613769565b60256020526000908152604090205460ff1681565b34801561065557600080fd5b506104b860155481565b34801561066b57600080fd5b506104eb61067a366004613899565b611085565b34801561068b57600080fd5b506104eb61069a366004613899565b6110bf565b3480156106ab57600080fd5b5061055d6106ba366004613808565b6110f6565b3480156106cb57600080fd5b506104b860185481565b3480156106e157600080fd5b506104b860125481565b3480156106f757600080fd5b50604051601281526020016104c2565b34801561071357600080fd5b506104eb61072236600461391c565b611160565b34801561073357600080fd5b506104eb610742366004613769565b611213565b34801561075357600080fd5b5061055d6107623660046137a3565b6113ca565b34801561077357600080fd5b506104b86107823660046138b2565b611400565b34801561079357600080fd5b506104eb6107a2366004613899565b6114d3565b3480156107b357600080fd5b506104b860195481565b3480156107c957600080fd5b50600a5461055d9060ff1681565b3480156107e357600080fd5b506104eb6107f2366004613849565b6116b0565b34801561080357600080fd5b506104eb610812366004613899565b611705565b34801561082357600080fd5b506104eb6108323660046137cf565b61173c565b34801561084357600080fd5b506104eb6117db565b34801561085857600080fd5b506104eb610867366004613769565b61182f565b34801561087857600080fd5b5061055d610887366004613769565b6001600160a01b031660009081526026602052604090205460ff1690565b3480156108b157600080fd5b506104eb6108c0366004613899565b6118cb565b3480156108d157600080fd5b506104b860075481565b3480156108e757600080fd5b506005546105ac906001600160a01b031681565b34801561090757600080fd5b506104b8601e5481565b34801561091d57600080fd5b506104eb61092c366004613899565b611902565b34801561093d57600080fd5b506104eb61094c366004613849565b611939565b34801561095d57600080fd5b506104eb61096c366004613769565b61198e565b34801561097d57600080fd5b506104b8600e5481565b34801561099357600080fd5b50600a5461055d90640100000000900460ff1681565b3480156109b557600080fd5b506104b86109c4366004613769565b611a88565b3480156109d557600080fd5b506104eb611ae7565b3480156109ea57600080fd5b506104b860135481565b348015610a0057600080fd5b506003546105ac906001600160a01b031681565b348015610a2057600080fd5b506104eb610a2f366004613899565b611b5b565b348015610a4057600080fd5b506104eb610a4f366004613899565b611b92565b348015610a6057600080fd5b506104b8601c5481565b348015610a7657600080fd5b506104eb610a85366004613769565b611bc9565b348015610a9657600080fd5b506104eb610aa5366004613899565b611cbe565b348015610ab657600080fd5b506104b8600d5481565b348015610acc57600080fd5b5061055d610adb366004613769565b6001600160a01b031660009081526027602052604090205460ff1690565b348015610b0557600080fd5b506104b860085481565b348015610b1b57600080fd5b506000546001600160a01b03166105ac565b348015610b3957600080fd5b506104eb610b48366004613899565b611d00565b348015610b5957600080fd5b50604080518082019091526009815268232627a5a49918191960b91b602082015261051b565b348015610b8b57600080fd5b506007546104b8565b348015610ba057600080fd5b506104b8601a5481565b348015610bb657600080fd5b5061055d610bc53660046137a3565b611d42565b348015610bd657600080fd5b506021546105ac906001600160a01b031681565b348015610bf657600080fd5b5061055d610c053660046137a3565b611d91565b348015610c1657600080fd5b506104b860105481565b348015610c2c57600080fd5b506104eb610c3b366004613769565b611d9e565b348015610c4c57600080fd5b506004546105ac906001600160a01b031681565b348015610c6c57600080fd5b506104eb610c7b366004613899565b611e98565b348015610c8c57600080fd5b506104b860145481565b348015610ca257600080fd5b506104b860095481565b348015610cb857600080fd5b506104eb610cc736600461387e565b611eda565b348015610cd857600080fd5b506104eb610ce7366004613899565b611f2e565b348015610cf857600080fd5b506104b860115481565b348015610d0e57600080fd5b506104b8601f5481565b348015610d2457600080fd5b506104b860175481565b348015610d3a57600080fd5b50600a5461055d9062010000900460ff1681565b348015610d5a57600080fd5b506104eb610d69366004613899565b611f5d565b348015610d7a57600080fd5b50600c5461055d9060ff1681565b348015610d9457600080fd5b506104eb610da3366004613899565b611f94565b348015610db457600080fd5b506104b8610dc33660046137cf565b6001600160a01b03918216600090815260246020908152604080832093909416825291909152205490565b348015610dfa57600080fd5b506104eb610e0936600461387e565b611fcb565b348015610e1a57600080fd5b506104b860165481565b348015610e3057600080fd5b506104b8600b5481565b348015610e4657600080fd5b506104eb610e55366004613769565b612015565b348015610e6657600080fd5b506104eb610e75366004613899565b6120ff565b348015610e8657600080fd5b506020546105ac906001600160a01b031681565b348015610ea657600080fd5b506104eb610eb53660046137a3565b612136565b6000546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610ee4906139e7565b60405180910390fd5b6020546001600160a01b0382811691161415610f575760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610ee4565b6020546040516001600160a01b03918216918316907fc4382ee892d64a85fffb798adefd9dd8fcdeb2b1ababe74b46cdae7fe88da4e090600090a3602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fde5760405162461bcd60e51b8152600401610ee4906139e7565b600a805464ff00ff00ff191664010000000117905561100b6103e868327cb2734119d3b7a9601e1b613a89565b600855611025603268327cb2734119d3b7a9601e1b613a89565b600955565b6000611037338484612323565b5060015b92915050565b6000546001600160a01b0316331461106b5760405162461bcd60e51b8152600401610ee4906139e7565b600a80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146110af5760405162461bcd60e51b8152600401610ee4906139e7565b60188190556110bc612457565b50565b6000546001600160a01b031633146110e95760405162461bcd60e51b8152600401610ee4906139e7565b60158190556110bc612485565b60006111038484846124b3565b611155843361115085604051806060016040528060288152602001613b54602891396001600160a01b038a166000908152602460209081526040808320338452909152902054919061297d565b612323565b5060015b9392505050565b6000546001600160a01b0316331461118a5760405162461bcd60e51b8152600401610ee4906139e7565b60006111a28261119c8581898961220d565b9061220d565b9050806064146111fe5760405162461bcd60e51b815260206004820152602160248201527f546f74616c206d75737420626520657175616c20746f203130302028313030256044820152602960f81b6064820152608401610ee4565b50601c93909355601d91909155601e55601f55565b6000546001600160a01b0316331461123d5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03811660009081526027602052604090205460ff166112a55760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ee4565b60005b6028548110156113c657816001600160a01b0316602882815481106112cf576112cf613b28565b6000918252602090912001546001600160a01b031614156113b457602880546112fa90600190613aca565b8154811061130a5761130a613b28565b600091825260209091200154602880546001600160a01b03909216918390811061133657611336613b28565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602382526040808220829055602790925220805460ff19169055602880548061138e5761138e613b12565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113be81613ae1565b9150506112a8565b5050565b3360008181526024602090815260408083206001600160a01b03871684529091528120549091611037918590611150908661220d565b600068327cb2734119d3b7a9601e1b84111561145e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ee4565b6000836114815760006114728660006129b4565b50929550611159945050505050565b8261148e57601b54611492565b601a545b600c5490915060ff1680156114a85750600e5442105b6114b257806114b6565b600d545b905060006114c486836129b4565b50919550611159945050505050565b338061152b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ee4565b6001546001600160a01b03828116911614156115935760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610ee4565b600061159e82611a88565b9050828110156115fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ee4565b600061160f611608612a35565b8590612a58565b6001600160a01b03841660009081526022602052604090205490915061163590826122c7565b6001600160a01b03841660009081526022602090815260408083209390935560279052205460ff161561169f576001600160a01b03831660009081526023602052604090205461168590856122c7565b6001600160a01b0384166000908152602360205260409020555b6116aa838583612ad7565b50505050565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610ee4906139e7565b60198190556110bc612485565b6000546001600160a01b031633146117665760405162461bcd60e51b8152600401610ee4906139e7565b600280546001600160a01b0319166001600160a01b03841617905561178a82612bb9565b6001600160a01b0382166000908152602660205260409020805460ff191660011790556117b681612bb9565b6001600160a01b03166000908152602660205260409020805460ff1916600117905550565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610ee4906139e7565b600a805464ff00ff00ff19166201000017905568327cb2734119d3b7a9601e1b6008819055600955565b6000546001600160a01b031633146118595760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03811660009081526027602052604090205460ff16156118c25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f7420696e636c756465640000000000000000006044820152606401610ee4565b6110bc81612bb9565b6000546001600160a01b031633146118f55760405162461bcd60e51b8152600401610ee4906139e7565b60128190556110bc612457565b6000546001600160a01b0316331461192c5760405162461bcd60e51b8152600401610ee4906139e7565b60138190556110bc612485565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119b85760405162461bcd60e51b8152600401610ee4906139e7565b6004546001600160a01b0382811691161415611a2b5760405162461bcd60e51b815260206004820152602c60248201527f546865204c61756e63687061642077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610ee4565b6004546040516001600160a01b03918216918316907f0345b63eb6b46e7262ed6abe1225a066f75cf7c56a6d38ab6635c2372e4ccf0190600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526027602052604081205460ff1615611ac557506001600160a01b031660009081526023602052604090205490565b6001600160a01b03821660009081526022602052604090205461103b90612c79565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610ee4906139e7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611b855760405162461bcd60e51b8152600401610ee4906139e7565b60148190556110bc612457565b6000546001600160a01b03163314611bbc5760405162461bcd60e51b8152600401610ee4906139e7565b60118190556110bc612485565b6000546001600160a01b03163314611bf35760405162461bcd60e51b8152600401610ee4906139e7565b6005546001600160a01b0382811691161415611c615760405162461bcd60e51b815260206004820152602760248201527f546865205465616d2077616c6c657420697320616c72656164792074686973206044820152666164647265737360c81b6064820152608401610ee4565b6005546040516001600160a01b03918216918316907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce811309590600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ce85760405162461bcd60e51b8152600401610ee4906139e7565b611cfa81670de0b6b3a7640000613aab565b60085550565b6000546001600160a01b03163314611d2a5760405162461bcd60e51b8152600401610ee4906139e7565b611d3c81670de0b6b3a7640000613aab565b60095550565b6000611037338461115085604051806060016040528060258152602001613b7c602591393360009081526024602090815260408083206001600160a01b038d168452909152902054919061297d565b60006110373384846124b3565b6000546001600160a01b03163314611dc85760405162461bcd60e51b8152600401610ee4906139e7565b6003546001600160a01b0382811691161415611e3b5760405162461bcd60e51b815260206004820152602c60248201527f546865204d61726b6574696e672077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610ee4565b6003546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610ee4906139e7565b611ed481670de0b6b3a7640000613aab565b600b5550565b6000546001600160a01b03163314611f045760405162461bcd60e51b8152600401610ee4906139e7565b600c805460ff191682151590811790915560ff16156110bc57611f2842603c613a71565b600e5550565b6000546001600160a01b03163314611f585760405162461bcd60e51b8152600401610ee4906139e7565b600f55565b6000546001600160a01b03163314611f875760405162461bcd60e51b8152600401610ee4906139e7565b60108190556110bc612457565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610ee4906139e7565b60178190556110bc612485565b6000546001600160a01b03163314611ff55760405162461bcd60e51b8152600401610ee4906139e7565b600a80549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b0316331461203f5760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b0381166120a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ee4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121295760405162461bcd60e51b8152600401610ee4906139e7565b60168190556110bc612457565b6000546001600160a01b031633146121605760405162461bcd60e51b8152600401610ee4906139e7565b6001600160a01b0382166121d25760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420776974686472617720746865204554482062616c616e636520604482015272746f20746865207a65726f206164647265737360681b6064820152608401610ee4565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612208573d6000803e3d6000fd5b505050565b60008061221a8385613a71565b9050838110156111595760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ee4565b60008082116122bd5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ee4565b6111598284613a89565b6000828211156123195760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ee4565b6111598284613aca565b6001600160a01b03831661238d5760405162461bcd60e51b815260206004820152602b60248201527f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610ee4565b6001600160a01b0382166123f55760405162461bcd60e51b815260206004820152602960248201527f42617365526669546f6b656e3a20617070726f766520746f20746865207a65726044820152686f206164647265737360b81b6064820152608401610ee4565b6001600160a01b0383811660008181526024602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b61248060185461119c60165461119c60145461119c60125460105461220d90919063ffffffff16565b601b55565b6124ae60195461119c60175461119c60155461119c60135460115461220d90919063ffffffff16565b601a55565b6001600160a01b0383166125175760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ee4565b6001600160a01b0382166125795760405162461bcd60e51b815260206004820152602360248201527f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ee4565b6001546001600160a01b03848116911614156125e55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e3a207472616e736665722066726f6d20746865206275726e206164604482015264647265737360d81b6064820152608401610ee4565b600081116126475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ee4565b600a54610100900460ff166126c45760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610ee4565b6001600160a01b03831660009081526025602052604090205460ff1615801561270657506001600160a01b03821660009081526025602052604090205460ff16155b6127485760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610ee4565b6020546001600160a01b0384811691161480159061277f57506001600160a01b03821660009081526026602052604090205460ff16155b80156127a457506001600160a01b03831660009081526026602052604090205460ff16155b15612817576008548111156128175760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865204d6178206044820152722a3930b739b0b1ba34b7b71020b6b7bab73a1760691b6064820152608401610ee4565b600060095411801561284257506001600160a01b03821660009081526026602052604090205460ff16155b801561286757506001600160a01b03831660009081526026602052604090205460ff16155b801561288157506021546001600160a01b03838116911614155b1561290757600061289183611a88565b6009549091506128a18383613a71565b11156129055760405162461bcd60e51b815260206004820152602d60248201527f4e65772062616c616e636520776f756c642065786365656420746865206d617860448201526c57616c6c657442616c616e636560981b6064820152608401610ee4565b505b600a5460ff808216916201000090041615612920575060005b6001600160a01b03841660009081526026602052604090205460ff168061295f57506001600160a01b03831660009081526026602052604090205460ff165b15612968575060005b61297183612cf6565b6116aa84848484612d93565b600081848411156129a15760405162461bcd60e51b8152600401610ee49190613992565b506129ac8385613aca565b949350505050565b6000806000806000806129dc600f546129d6898b612a5890919063ffffffff16565b9061226c565b905060006129ea89836122c7565b905060006129f6612a35565b90506000612a048b83612a58565b90506000612a128584612a58565b90506000612a2083836122c7565b929d929c9b5093995091975095505050505050565b6000806000612a42612dfa565b9092509050612a51828261226c565b9250505090565b600082612a675750600061103b565b6000612a738385613aab565b905082612a808583613a89565b146111595760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ee4565b6001546001600160a01b0316600090815260226020526040902054612afc908261220d565b600180546001600160a01b03908116600090815260226020908152604080832095909555925490911681526027909152205460ff1615612b77576001546001600160a01b0316600090815260236020526040902054612b5b908361220d565b6001546001600160a01b03166000908152602360205260409020555b6001546040518381526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161244a565b6001600160a01b03811660009081526022602052604090205415612c13576001600160a01b038116600090815260226020526040902054612bf990612c79565b6001600160a01b0382166000908152602360205260409020555b6001600160a01b03166000818152602760205260408120805460ff191660019081179091556028805491820181559091527fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab50180546001600160a01b0319169091179055565b6000600654821115612ce05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ee4565b6000612cea612a35565b9050611159838261226c565b600a5462010000900460ff166110bc576000612d1130611a88565b600b54600a54919250821015906301000000900460ff16158015612d325750805b8015612d485750600a54640100000000900460ff165b8015612d6157506021546001600160a01b038481169116145b1561220857600a805463ff00000019166301000000179055612d81612fab565b600a805463ff00000019169055505050565b601a546021546001906001600160a01b0386811691161415612db7575050601b5460005b600c5460ff168015612dcb5750600e544211155b612dd55781612dd9565b600d545b915082612de557600091505b612df286868685856130dc565b505050505050565b600654600090819068327cb2734119d3b7a9601e1b825b602854811015612f5f57826022600060288481548110612e3357612e33613b28565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e9e5750816023600060288481548110612e7757612e77613b28565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ebd5750506006549368327cb2734119d3b7a9601e1b9350915050565b612f036022600060288481548110612ed757612ed7613b28565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122c7565b9250612f4b6023600060288481548110612f1f57612f1f613b28565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122c7565b915080612f5781613ae1565b915050612e11565b50801580612f845750600654612f819068327cb2734119d3b7a9601e1b61226c565b82105b15612fa25750506006549268327cb2734119d3b7a9601e1b92509050565b90939092509050565b601f54600090612fbc90600261226c565b90506000612fd9600f546129d684612fd330611a88565b90612a58565b90506000612ff082612fea30611a88565b906122c7565b905047612ffc8261316b565b600061300847836122c7565b90506000613027600f546129d6601c5485612a5890919063ffffffff16565b90506000613046600f546129d6601d5486612a5890919063ffffffff16565b90506000613065600f546129d6601e5487612a5890919063ffffffff16565b90506000613082600f546129d68b88612a5890919063ffffffff16565b60035490915061309b906001600160a01b0316856121d2565b6004546130b1906001600160a01b0316846121d2565b6005546130c7906001600160a01b0316836121d2565b6130d1888261330e565b505050505050505050565b60008060008060006130ee88886129b4565b945094509450945094506131068a8a87878787613441565b61311288828989613569565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315791815260200190565b60405180910390a350505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131a0576131a0613b28565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131f357600080fd5b505afa158015613207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322b9190613786565b8160018151811061323e5761323e613b28565b6001600160a01b03928316602091820292909201810191909152546132669130911684612323565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac9479061329f908590600090869030904290600401613a35565b600060405180830381600087803b1580156132b957600080fd5b505af11580156132cd573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613302929190613a1c565b60405180910390a15050565b6020546133269030906001600160a01b031684612323565b602054600090819081906001600160a01b031663f305d71985308885806133556000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f191906138ee565b604080518481526020810184905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be39060600160405180910390a15050505050565b6001600160a01b03861660009081526022602052604090205461346490856122c7565b6001600160a01b038088166000908152602260205260408082209390935590871681522054613493908461220d565b6001600160a01b0380871660009081526022602090815260408083209490945591891681526027909152205460ff1615613504576001600160a01b0386166000908152602360205260409020546134ea90836122c7565b6001600160a01b0387166000908152602360205260409020555b6001600160a01b03851660009081526027602052604090205460ff1615612df2576001600160a01b038516600090815260236020526040902054613548908261220d565b6001600160a01b038616600090815260236020526040902055505050505050565b6000821180156135825750600a5462010000900460ff16155b156116aa57600c5460ff16801561359a5750600e5442105b156135b2576135ad8484600d543061363e565b6116aa565b80156135fd576135c58484601154613708565b6135d384846013543061363e565b6135e184846019543061363e565b6135ef84846015543061363e565b6135ad84846017543061363e565b61360a8484601054613708565b61361884846012543061363e565b61362684846018543061363e565b61363484846014543061363e565b6116aa8484601654305b600f54600090613652906129d68786612a58565b905060006136608286612a58565b6001600160a01b038416600090815260226020526040902054909150613686908261220d565b6001600160a01b03841660009081526022602090815260408083209390935560279052205460ff16156136f0576001600160a01b0383166000908152602360205260409020546136d6908361220d565b6001600160a01b0384166000908152602360205260409020555b6007546136fd908361220d565b600755505050505050565b600f5460009061371c906129d68685612a58565b9050600061372a8285612a58565b60065490915061373a90826122c7565b60065560075461374a908361220d565b6007555050505050565b8035801515811461376457600080fd5b919050565b60006020828403121561377b57600080fd5b813561115981613b3e565b60006020828403121561379857600080fd5b815161115981613b3e565b600080604083850312156137b657600080fd5b82356137c181613b3e565b946020939093013593505050565b600080604083850312156137e257600080fd5b82356137ed81613b3e565b915060208301356137fd81613b3e565b809150509250929050565b60008060006060848603121561381d57600080fd5b833561382881613b3e565b9250602084013561383881613b3e565b929592945050506040919091013590565b6000806040838503121561385c57600080fd5b823561386781613b3e565b915061387560208401613754565b90509250929050565b60006020828403121561389057600080fd5b61115982613754565b6000602082840312156138ab57600080fd5b5035919050565b6000806000606084860312156138c757600080fd5b833592506138d760208501613754565b91506138e560408501613754565b90509250925092565b60008060006060848603121561390357600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561393257600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156139875781516001600160a01b031687529582019590820190600101613962565b509495945050505050565b600060208083528351808285015260005b818110156139bf578581018301518582016040015282016139a3565b818111156139d1576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006129ac604083018461394e565b85815284602082015260a060408201526000613a5460a083018661394e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613a8457613a84613afc565b500190565b600082613aa657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613ac557613ac5613afc565b500290565b600082821015613adc57613adc613afc565b500390565b6000600019821415613af557613af5613afc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146110bc57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206800e2c76d7496879e133741fd0c92d67cf325a04b59b6616bb8923ab1a18fae64736f6c63430008060033

Deployed Bytecode Sourcemap

9541:28561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11818:42;;;;;;;;;;;;;;;;;;;17796:25:1;;;17784:2;17769:18;11818:42:0;;;;;;;;28718:293;;;;;;;;;;-1:-1:-1;28718:293:0;;;;;:::i;:::-;;:::i;:::-;;14115:94;;;;;;;;;;-1:-1:-1;14196:5:0;;;;;;;;;;;;-1:-1:-1;;;14196:5:0;;;;14115:94;;;;;;;:::i;24302:233::-;;;;;;;;;;;;;:::i;15128:167::-;;;;;;;;;;-1:-1:-1;15128:167:0;;;;;:::i;:::-;;:::i;:::-;;;5352:14:1;;5345:22;5327:41;;5315:2;5300:18;15128:167:0;5282:92:1;10629:35:0;;;;;;;;;;-1:-1:-1;10629:35:0;;;;;;;;;;;9745:42;;;;;;;;;;-1:-1:-1;9745:42:0;;;;-1:-1:-1;;;;;9745:42:0;;;;;;-1:-1:-1;;;;;4531:32:1;;;4513:51;;4501:2;4486:18;9745:42:0;4468:102:1;28582:124:0;;;;;;;;;;-1:-1:-1;28582:124:0;;;;;:::i;:::-;;:::i;11587:135::-;;;;;;;;;;;;;;;;14425:102;;;;;;;;;;-1:-1:-1;;;;14425:102:0;;12251:46;;;;;;;;;;-1:-1:-1;12251:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11239:37;;;;;;;;;;;;;;;;26812:137;;;;;;;;;;-1:-1:-1;26812:137:0;;;;;:::i;:::-;;:::i;25744:147::-;;;;;;;;;;-1:-1:-1;25744:147:0;;;;;:::i;:::-;;:::i;15311:318::-;;;;;;;;;;-1:-1:-1;15311:318:0;;;;;:::i;:::-;;:::i;11370:31::-;;;;;;;;;;;;;;;;11099:38;;;;;;;;;;;;;;;;14323:94;;;;;;;;;;-1:-1:-1;14323:94:0;;10160:2;19222:36:1;;19210:2;19195:18;14323:94:0;19177:87:1;27916:539:0;;;;;;;;;;-1:-1:-1;27916:539:0;;;;;:::i;:::-;;:::i;19851:499::-;;;;;;;;;;-1:-1:-1;19851:499:0;;;;;:::i;:::-;;:::i;17251:218::-;;;;;;;;;;-1:-1:-1;17251:218:0;;;;;:::i;:::-;;:::i;18299:665::-;;;;;;;;;;-1:-1:-1;18299:665:0;;;;;:::i;:::-;;:::i;15645:763::-;;;;;;;;;;-1:-1:-1;15645:763:0;;;;;:::i;:::-;;:::i;11408:30::-;;;;;;;;;;;;;;;;10589:33;;;;;;;;;;-1:-1:-1;10589:33:0;;;;;;;;23931:123;;;;;;;;;;-1:-1:-1;23931:123:0;;;;;:::i;:::-;;:::i;26048:134::-;;;;;;;;;;-1:-1:-1;26048:134:0;;;;;:::i;:::-;;:::i;23594:329::-;;;;;;;;;;-1:-1:-1;23594:329:0;;;;;:::i;:::-;;:::i;24063:227::-;;;;;;;;;;;;;:::i;19374:180::-;;;;;;;;;;-1:-1:-1;19374:180:0;;;;;:::i;:::-;;:::i;23457:125::-;;;;;;;;;;-1:-1:-1;23457:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23546:27:0;23521:4;23546:27;;;:18;:27;;;;;;;;;23457:125;26340:150;;;;;;;;;;-1:-1:-1;26340:150:0;;;;;:::i;:::-;;:::i;10373:32::-;;;;;;;;;;;;;;;;9964:70;;;;;;;;;;-1:-1:-1;9964:70:0;;;;-1:-1:-1;;;;;9964:70:0;;;11874:37;;;;;;;;;;;;;;;;25585:147;;;;;;;;;;-1:-1:-1;25585:147:0;;;;;:::i;:::-;;:::i;20362:132::-;;;;;;;;;;-1:-1:-1;20362:132:0;;;;;:::i;:::-;;:::i;27296:323::-;;;;;;;;;;-1:-1:-1;27296:323:0;;;;;:::i;:::-;;:::i;10930:32::-;;;;;;;;;;;;;;;;10743:30;;;;;;;;;;-1:-1:-1;10743:30:0;;;;;;;;;;;14539:225;;;;;;;;;;-1:-1:-1;14539:225:0;;;;;:::i;:::-;;:::i;7551:148::-;;;;;;;;;;;;;:::i;11144:37::-;;;;;;;;;;;;;;;;9800:75;;;;;;;;;;-1:-1:-1;9800:75:0;;;;-1:-1:-1;;;;;9800:75:0;;;26502:150;;;;;;;;;;-1:-1:-1;26502:150:0;;;;;:::i;:::-;;:::i;25438:135::-;;;;;;;;;;-1:-1:-1;25438:135:0;;;;;:::i;:::-;;:::i;11762:42::-;;;;;;;;;;;;;;;;27631:273;;;;;;;;;;-1:-1:-1;27631:273:0;;;;;:::i;:::-;;:::i;24936:115::-;;;;;;;;;;-1:-1:-1;24936:115:0;;;;;:::i;:::-;;:::i;10885:31::-;;;;;;;;;;;;;;;;23312:133;;;;;;;;;;-1:-1:-1;23312:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;23406:31:0;23382:4;23406:31;;;:22;:31;;;;;;;;;23312:133;10416:48;;;;;;;;;;;;;;;;7326:79;;;;;;;;;;-1:-1:-1;7364:7:0;7391:6;-1:-1:-1;;;;;7391:6:0;7326:79;;24801:123;;;;;;;;;;-1:-1:-1;24801:123:0;;;;;:::i;:::-;;:::i;14217:98::-;;;;;;;;;;-1:-1:-1;14300:7:0;;;;;;;;;;;;-1:-1:-1;;;14300:7:0;;;;14217:98;;23194:105;;;;;;;;;;-1:-1:-1;23274:17:0;;23194:105;;11451:129;;;;;;;;;;;;;;;;17481:269;;;;;;;;;;-1:-1:-1;17481:269:0;;;;;:::i;:::-;;:::i;12017:19::-;;;;;;;;;;-1:-1:-1;12017:19:0;;;;-1:-1:-1;;;;;12017:19:0;;;14780:172;;;;;;;;;;-1:-1:-1;14780:172:0;;;;;:::i;:::-;;:::i;11021:32::-;;;;;;;;;;;;;;;;26961:323;;;;;;;;;;-1:-1:-1;26961:323:0;;;;;:::i;:::-;;:::i;9882:75::-;;;;;;;;;;-1:-1:-1;9882:75:0;;;;-1:-1:-1;;;;;9882:75:0;;;24659:130;;;;;;;;;;-1:-1:-1;24659:130:0;;;;;:::i;:::-;;:::i;11194:38::-;;;;;;;;;;;;;;;;10499:51;;;;;;;;;;;;;;;;29019:214;;;;;;;;;;-1:-1:-1;29019:214:0;;;;;:::i;:::-;;:::i;28467:103::-;;;;;;;;;;-1:-1:-1;28467:103:0;;;;;:::i;:::-;;:::i;11060:30::-;;;;;;;;;;;;;;;;11925:35;;;;;;;;;;;;;;;;11325:32;;;;;;;;;;;;;;;;10671:31;;;;;;;;;;-1:-1:-1;10671:31:0;;;;;;;;;;;26190:138;;;;;;;;;;-1:-1:-1;26190:138:0;;;;;:::i;:::-;;:::i;10844:34::-;;;;;;;;;;-1:-1:-1;10844:34:0;;;;;;;;25903:137;;;;;;;;;;-1:-1:-1;25903:137:0;;;;;:::i;:::-;;:::i;14968:148::-;;;;;;;;;;-1:-1:-1;14968:148:0;;;;;:::i;:::-;-1:-1:-1;;;;;15077:18:0;;;15051:7;15077:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14968:148;24547:100;;;;;;;;;;-1:-1:-1;24547:100:0;;;;;:::i;:::-;;:::i;11285:33::-;;;;;;;;;;;;;;;;10780:55;;;;;;;;;;;;;;;;7707:244;;;;;;;;;;-1:-1:-1;7707:244:0;;;;;:::i;:::-;;:::i;26664:140::-;;;;;;;;;;-1:-1:-1;26664:140:0;;;;;:::i;:::-;;:::i;11980:30::-;;;;;;;;;;-1:-1:-1;11980:30:0;;;;-1:-1:-1;;;;;11980:30:0;;;37867:226;;;;;;;;;;-1:-1:-1;37867:226:0;;;;;:::i;:::-;;:::i;28718:293::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;;;;;;;;;28827:6:::1;::::0;-1:-1:-1;;;;;28805:29:0;;::::1;28827:6:::0;::::1;28805:29;;28797:77;;;::::0;-1:-1:-1;;;28797:77:0;;8810:2:1;28797:77:0::1;::::0;::::1;8792:21:1::0;8849:2;8829:18;;;8822:30;8888:34;8868:18;;;8861:62;-1:-1:-1;;;8939:18:1;;;8932:33;8982:19;;28797:77:0::1;8782:225:1::0;28797:77:0::1;28934:6;::::0;28890:52:::1;::::0;-1:-1:-1;;;;;28934:6:0;;::::1;::::0;28890:52;::::1;::::0;::::1;::::0;28934:6:::1;::::0;28890:52:::1;28963:6;:37:::0;;-1:-1:-1;;;;;;28963:37:0::1;-1:-1:-1::0;;;;;28963:37:0;;;::::1;::::0;;;::::1;::::0;;28718:293::o;24302:233::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;24356:14:::1;:21:::0;;-1:-1:-1;;24417:19:0;24388:18;24417:19;;;24461::::1;24476:4;-1:-1:-1::0;;;24461:19:0::1;:::i;:::-;24447:11;:33:::0;24510:17:::1;24525:2;-1:-1:-1::0;;;24510:17:0::1;:::i;:::-;24491:16;:36:::0;24302:233::o;15128:167::-;15205:4;15222:39;3652:10;15245:7;15254:6;15222:8;:39::i;:::-;-1:-1:-1;15279:4:0;15128:167;;;;;:::o;28582:124::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;28666:16:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;28666:32:0;;::::1;::::0;;;::::1;::::0;;28582:124::o;26812:137::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26887:12:::1;:21:::0;;;26919:22:::1;:20;:22::i;:::-;26812:137:::0;:::o;25744:147::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;25824:18:::1;:27:::0;;;25862:21:::1;:19;:21::i;15311:318::-:0;15411:4;15427:36;15437:6;15445:9;15456:6;15427:9;:36::i;:::-;15474:121;15483:6;3652:10;15505:89;15543:6;15505:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15505:19:0;;;;;;:11;:19;;;;;;;;3652:10;15505:33;;;;;;;;;;:37;:89::i;:::-;15474:8;:121::i;:::-;-1:-1:-1;15613:4:0;15311:318;;;;;;:::o;27916:539::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;28084:20:::1;28107:70;28167:9:::0;28107:55:::1;28150:11:::0;28107:55;:16;28128;28107:20:::1;:38::i;:::-;:42:::0;::::1;:55::i;:70::-;28084:93;;28196:12;28212:3;28196:19;28188:65;;;::::0;-1:-1:-1;;;28188:65:0;;14973:2:1;28188:65:0::1;::::0;::::1;14955:21:1::0;15012:2;14992:18;;;14985:30;15051:34;15031:18;;;15024:62;-1:-1:-1;;;15102:18:1;;;15095:31;15143:19;;28188:65:0::1;14945:223:1::0;28188:65:0::1;-1:-1:-1::0;28274:22:0::1;:41:::0;;;;28326:22:::1;:41:::0;;;;28378:17:::1;:31:::0;28420:15:::1;:27:::0;27916:539::o;19851:499::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19933:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;19925:67;;;::::0;-1:-1:-1;;;19925:67:0;;9925:2:1;19925:67:0::1;::::0;::::1;9907:21:1::0;9964:2;9944:18;;;9937:30;10003:25;9983:18;;;9976:53;10046:18;;19925:67:0::1;9897:173:1::0;19925:67:0::1;20008:9;20003:340;20027:9;:16:::0;20023:20;::::1;20003:340;;;20085:7;-1:-1:-1::0;;;;;20069:23:0::1;:9;20079:1;20069:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20069:12:0::1;:23;20065:267;;;20128:9;20138:16:::0;;:20:::1;::::0;20157:1:::1;::::0;20138:20:::1;:::i;:::-;20128:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20113:9:::1;:12:::0;;-1:-1:-1;;;;;20128:31:0;;::::1;::::0;20123:1;;20113:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20113:46:0::1;-1:-1:-1::0;;;;;20113:46:0;;::::1;;::::0;;20178:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:22;;;20219::::1;:31:::0;;;;:39;;-1:-1:-1;;20219:39:0::1;::::0;;20277:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20277:15:0;;;;;-1:-1:-1;;;;;;20277:15:0::1;::::0;;;;;20003:340:::1;19851:499:::0;:::o;20065:267::-:1;20045:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20003:340;;;;19851:499:::0;:::o;17251:218::-;3652:10;17339:4;17388:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17388:34:0;;;;;;;;;;17339:4;;17356:83;;17379:7;;17388:50;;17427:10;17388:38;:50::i;18299:665::-;18406:7;-1:-1:-1;;;18435:7:0;:23;;18427:67;;;;-1:-1:-1;;;18427:67:0;;11036:2:1;18427:67:0;;;11018:21:1;11075:2;11055:18;;;11048:30;11114:33;11094:18;;;11087:61;11165:18;;18427:67:0;11008:181:1;18427:67:0;18505:15;18536:17;18531:426;;18571:15;18594:21;18605:7;18613:1;18594:10;:21::i;:::-;-1:-1:-1;18570:45:0;;-1:-1:-1;18630:14:0;;-1:-1:-1;;;;;18630:14:0;18531:426;18687:8;:45;;18716:16;;18687:45;;;18698:15;;18687:45;18757:14;;18677:55;;-1:-1:-1;18757:14:0;;:53;;;;;18793:17;;18775:15;:35;18757:53;:76;;18826:7;18757:76;;;18813:10;;18757:76;18747:86;;18850:23;18880:28;18891:7;18900;18880:10;:28::i;:::-;-1:-1:-1;18848:60:0;;-1:-1:-1;18923:22:0;;-1:-1:-1;;;;;18923:22:0;15645:763;3652:10;;15737:66;;;;-1:-1:-1;;;15737:66:0;;15375:2:1;15737:66:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453:34;15433:18;;;15426:62;-1:-1:-1;;;15504:18:1;;;15497:31;15545:19;;15737:66:0;15347:223:1;15737:66:0;15840:11;;-1:-1:-1;;;;;15822:30:0;;;15840:11;;15822:30;;15814:76;;;;-1:-1:-1;;;15814:76:0;;13755:2:1;15814:76:0;;;13737:21:1;13794:2;13774:18;;;13767:30;13833:34;13813:18;;;13806:62;-1:-1:-1;;;13884:18:1;;;13877:31;13925:19;;15814:76:0;13727:223:1;15814:76:0;15903:15;15921:17;15931:6;15921:9;:17::i;:::-;15903:35;;15968:6;15957:7;:17;;15949:64;;;;-1:-1:-1;;;15949:64:0;;7233:2:1;15949:64:0;;;7215:21:1;7272:2;7252:18;;;7245:30;7311:34;7291:18;;;7284:62;-1:-1:-1;;;7362:18:1;;;7355:32;7404:19;;15949:64:0;7205:224:1;15949:64:0;16026:23;16052:29;16063:17;:15;:17::i;:::-;16052:6;;:10;:29::i;:::-;-1:-1:-1;;;;;16185:26:0;;;;;;:18;:26;;;;;;16026:55;;-1:-1:-1;16185:47:0;;16026:55;16185:30;:47::i;:::-;-1:-1:-1;;;;;16156:26:0;;;;;;:18;:26;;;;;;;;:76;;;;16247:22;:30;;;;;;16243:98;;;-1:-1:-1;;;;;16312:17:0;;;;;;:9;:17;;;;;;:29;;16334:6;16312:21;:29::i;:::-;-1:-1:-1;;;;;16292:17:0;;;;;;:9;:17;;;;;:49;16243:98;16354:46;16367:6;16375;16383:15;16354:11;:46::i;:::-;15684:724;;;15645:763;:::o;23931:123::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24015:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;24015:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23931:123::o;26048:134::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26122:11:::1;:20:::0;;;26153:21:::1;:19;:21::i;23594:329::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;23697:14:::1;:32:::0;;-1:-1:-1;;;;;;23697:32:0::1;-1:-1:-1::0;;;;;23697:32:0;::::1;;::::0;;23749:25:::1;23697:32:::0;23749:8:::1;:25::i;:::-;-1:-1:-1::0;;;;;23785:35:0;::::1;;::::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;23785:42:0::1;23823:4;23785:42;::::0;;23840:24:::1;23849:14:::0;23840:8:::1;:24::i;:::-;-1:-1:-1::0;;;;;23875:34:0::1;;::::0;;;:18:::1;:34;::::0;;;;:41;;-1:-1:-1;;23875:41:0::1;23912:4;23875:41;::::0;;-1:-1:-1;23594:329:0:o;24063:227::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;24122:14:::1;:22:::0;;-1:-1:-1;;24185:18:0;;::::1;::::0;;-1:-1:-1;;;24214:11:0::1;:26:::0;;;24251:16:::1;:31:::0;24063:227::o;19374:180::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19459:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;19458:32;19450:68;;;::::0;-1:-1:-1;;;19450:68:0;;9214:2:1;19450:68:0::1;::::0;::::1;9196:21:1::0;9253:2;9233:18;;;9226:30;9292:25;9272:18;;;9265:53;9335:18;;19450:68:0::1;9186:173:1::0;19450:68:0::1;19529:17;19538:7;19529:8;:17::i;26340:150::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26421:19:::1;:28:::0;;;26460:22:::1;:20;:22::i;25585:147::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;25665:18:::1;:27:::0;;;25703:21:::1;:19;:21::i;20362:132::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20450:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;20450:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20362:132::o;27296:323::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;27415:15:::1;::::0;-1:-1:-1;;;;;27393:37:0;;::::1;27415:15:::0;::::1;27393:37;;27385:94;;;::::0;-1:-1:-1;;;27385:94:0;;16616:2:1;27385:94:0::1;::::0;::::1;16598:21:1::0;16655:2;16635:18;;;16628:30;16694:34;16674:18;;;16667:62;-1:-1:-1;;;16745:18:1;;;16738:42;16797:19;;27385:94:0::1;16588:234:1::0;27385:94:0::1;27538:15;::::0;27495:59:::1;::::0;-1:-1:-1;;;;;27538:15:0;;::::1;::::0;27495:59;::::1;::::0;::::1;::::0;27538:15:::1;::::0;27495:59:::1;27575:15;:36:::0;;-1:-1:-1;;;;;;27575:36:0::1;-1:-1:-1::0;;;;;27575:36:0;;;::::1;::::0;;;::::1;::::0;;27296:323::o;14539:225::-;-1:-1:-1;;;;;14628:31:0;;14605:7;14628:31;;;:22;:31;;;;;;;;14624:62;;;-1:-1:-1;;;;;;14668:18:0;;;;;:9;:18;;;;;;;14539:225::o;14624:62::-;-1:-1:-1;;;;;14724:27:0;;;;;;:18;:27;;;;;;14704:48;;:19;:48::i;7551:148::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;7658:1:::1;7642:6:::0;;7621:40:::1;::::0;-1:-1:-1;;;;;7642:6:0;;::::1;::::0;7621:40:::1;::::0;7658:1;;7621:40:::1;7689:1;7672:19:::0;;-1:-1:-1;;;;;;7672:19:0::1;::::0;;7551:148::o;26502:150::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26583:19:::1;:28:::0;;;26622:22:::1;:20;:22::i;25438:135::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;25512:12:::1;:21:::0;;;25544::::1;:19;:21::i;27631:273::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;27735:10:::1;::::0;-1:-1:-1;;;;;27718:27:0;;::::1;27735:10:::0;::::1;27718:27;;27710:79;;;::::0;-1:-1:-1;;;27710:79:0;;12164:2:1;27710:79:0::1;::::0;::::1;12146:21:1::0;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:37;12340:19;;27710:79:0::1;12136:229:1::0;27710:79:0::1;27838:10;::::0;27805:44:::1;::::0;-1:-1:-1;;;;;27838:10:0;;::::1;::::0;27805:44;::::1;::::0;::::1;::::0;27838:10:::1;::::0;27805:44:::1;27870:10;:26:::0;;-1:-1:-1;;;;;;27870:26:0::1;-1:-1:-1::0;;;;;27870:26:0;;;::::1;::::0;;;::::1;::::0;;27631:273::o;24936:115::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;25026:17:::1;:6:::0;25036::::1;25026:17;:::i;:::-;25012:11;:31:::0;-1:-1:-1;24936:115:0:o;24801:123::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;24895:21:::1;:10:::0;24909:6:::1;24895:21;:::i;:::-;24876:16;:40:::0;-1:-1:-1;24801:123:0:o;17481:269::-;17574:4;17591:129;3652:10;17614:7;17623:96;17662:15;17623:96;;;;;;;;;;;;;;;;;3652:10;17623:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17623:34:0;;;;;;;;;;;;:38;:96::i;14780:172::-;14860:4;14876:42;3652:10;14900:9;14911:6;14876:9;:42::i;26961:323::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;27080:15:::1;::::0;-1:-1:-1;;;;;27058:37:0;;::::1;27080:15:::0;::::1;27058:37;;27050:94;;;::::0;-1:-1:-1;;;27050:94:0;;17029:2:1;27050:94:0::1;::::0;::::1;17011:21:1::0;17068:2;17048:18;;;17041:30;17107:34;17087:18;;;17080:62;-1:-1:-1;;;17158:18:1;;;17151:42;17210:19;;27050:94:0::1;17001:234:1::0;27050:94:0::1;27203:15;::::0;27160:59:::1;::::0;-1:-1:-1;;;;;27203:15:0;;::::1;::::0;27160:59;::::1;::::0;::::1;::::0;27203:15:::1;::::0;27160:59:::1;27240:15;:36:::0;;-1:-1:-1;;;;;;27240:36:0::1;-1:-1:-1::0;;;;;27240:36:0;;;::::1;::::0;;;::::1;::::0;;26961:323::o;24659:130::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;24759:22:::1;:11:::0;24774:6:::1;24759:22;:::i;:::-;24738:18;:43:::0;-1:-1:-1;24659:130:0:o;29019:214::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;29093:14:::1;:29:::0;;-1:-1:-1;;29093:29:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;29136:14:::0;29133:89:::1;;;29186:20;:15;29204:2;29186:20;:::i;:::-;29166:17;:40:::0;29019:214;:::o;28467:103::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;28540:12:::1;:22:::0;28467:103::o;26190:138::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26265:13:::1;:22:::0;;;26298::::1;:20;:22::i;25903:137::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;25978:13:::1;:22:::0;;;26011:21:::1;:19;:21::i;24547:100::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;24616:11:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;24616:23:0;;::::1;::::0;;;::::1;::::0;;24547:100::o;7707:244::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7796:22:0;::::1;7788:73;;;::::0;-1:-1:-1;;;7788:73:0;;8047:2:1;7788:73:0::1;::::0;::::1;8029:21:1::0;8086:2;8066:18;;;8059:30;8125:34;8105:18;;;8098:62;-1:-1:-1;;;8176:18:1;;;8169:36;8222:19;;7788:73:0::1;8019:228:1::0;7788:73:0::1;7898:6;::::0;;7877:38:::1;::::0;-1:-1:-1;;;;;7877:38:0;;::::1;::::0;7898:6;::::1;::::0;7877:38:::1;::::0;::::1;7926:6;:17:::0;;-1:-1:-1;;;;;;7926:17:0::1;-1:-1:-1::0;;;;;7926:17:0;;;::::1;::::0;;;::::1;::::0;;7707:244::o;26664:140::-;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;26740:14:::1;:23:::0;;;26774:22:::1;:20;:22::i;37867:226::-:0;7460:6;;-1:-1:-1;;;;;7460:6:0;3652:10;7460:22;7452:67;;;;-1:-1:-1;;;7452:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37969:23:0;::::1;37961:87;;;::::0;-1:-1:-1;;;37961:87:0;;12572:2:1;37961:87:0::1;::::0;::::1;12554:21:1::0;12611:2;12591:18;;;12584:30;12650:34;12630:18;;;12623:62;-1:-1:-1;;;12701:18:1;;;12694:49;12760:19;;37961:87:0::1;12544:241:1::0;37961:87:0::1;38059:26;::::0;-1:-1:-1;;;;;38059:18:0;::::1;::::0;:26;::::1;;;::::0;38078:6;;38059:26:::1;::::0;;;38078:6;38059:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37867:226:::0;;:::o;1122:179::-;1180:7;;1212:5;1216:1;1212;:5;:::i;:::-;1200:17;;1241:1;1236;:6;;1228:46;;;;-1:-1:-1;;;1228:46:0;;8454:2:1;1228:46:0;;;8436:21:1;8493:2;8473:18;;;8466:30;8532:29;8512:18;;;8505:57;8579:18;;1228:46:0;8426:177:1;1705:153:0;1763:7;1795:1;1791;:5;1783:44;;;;-1:-1:-1;;;1783:44:0;;10681:2:1;1783:44:0;;;10663:21:1;10720:2;10700:18;;;10693:30;10759:28;10739:18;;;10732:56;10805:18;;1783:44:0;10653:176:1;1783:44:0;1845:5;1849:1;1845;:5;:::i;1309:158::-;1367:7;1400:1;1395;:6;;1387:49;;;;-1:-1:-1;;;1387:49:0;;9566:2:1;1387:49:0;;;9548:21:1;9605:2;9585:18;;;9578:30;9644:32;9624:18;;;9617:60;9694:18;;1387:49:0;9538:180:1;1387:49:0;1454:5;1458:1;1454;:5;:::i;17762:352::-;-1:-1:-1;;;;;17856:19:0;;17848:75;;;;-1:-1:-1;;;17848:75:0;;6415:2:1;17848:75:0;;;6397:21:1;6454:2;6434:18;;;6427:30;6493:34;6473:18;;;6466:62;-1:-1:-1;;;6544:18:1;;;6537:41;6595:19;;17848:75:0;6387:233:1;17848:75:0;-1:-1:-1;;;;;17942:21:0;;17934:75;;;;-1:-1:-1;;;17934:75:0;;17442:2:1;17934:75:0;;;17424:21:1;17481:2;17461:18;;;17454:30;17520:34;17500:18;;;17493:62;-1:-1:-1;;;17571:18:1;;;17564:39;17620:19;;17934:75:0;17414:231:1;17934:75:0;-1:-1:-1;;;;;18022:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18074:32;;17796:25:1;;;18074:32:0;;17769:18:1;18074:32:0;;;;;;;;17762:352;;;:::o;25247:179::-;25317:101;25405:12;;25317:83;25385:14;;25317:63;25360:19;;25317:38;25335:19;;25317:13;;:17;;:38;;;;:::i;:101::-;25298:16;:120;25247:179::o;25063:172::-;25131:96;25215:11;;25131:79;25196:13;;25131:60;25172:18;;25131:36;25148:18;;25131:12;;:16;;:36;;;;:::i;:96::-;25113:15;:114;25063:172::o;32860:1892::-;-1:-1:-1;;;;;32957:20:0;;32949:70;;;;-1:-1:-1;;;32949:70:0;;6827:2:1;32949:70:0;;;6809:21:1;6866:2;6846:18;;;6839:30;6905:34;6885:18;;;6878:62;-1:-1:-1;;;6956:18:1;;;6949:35;7001:19;;32949:70:0;6799:227:1;32949:70:0;-1:-1:-1;;;;;33038:23:0;;33030:71;;;;-1:-1:-1;;;33030:71:0;;10277:2:1;33030:71:0;;;10259:21:1;10316:2;10296:18;;;10289:30;10355:34;10335:18;;;10328:62;-1:-1:-1;;;10406:18:1;;;10399:33;10449:19;;33030:71:0;10249:225:1;33030:71:0;33138:11;;-1:-1:-1;;;;;33120:30:0;;;33138:11;;33120:30;;33112:80;;;;-1:-1:-1;;;33112:80:0;;14567:2:1;33112:80:0;;;14549:21:1;14606:2;14586:18;;;14579:30;14645:34;14625:18;;;14618:62;-1:-1:-1;;;14696:18:1;;;14689:35;14741:19;;33112:80:0;14539:227:1;33112:80:0;33220:1;33211:6;:10;33203:64;;;;-1:-1:-1;;;33203:64:0;;14157:2:1;33203:64:0;;;14139:21:1;14196:2;14176:18;;;14169:30;14235:34;14215:18;;;14208:62;-1:-1:-1;;;14286:18:1;;;14279:39;14335:19;;33203:64:0;14129:231:1;33203:64:0;33296:16;;;;;;;33288:85;;;;-1:-1:-1;;;33288:85:0;;16191:2:1;33288:85:0;;;16173:21:1;16230:2;16210:18;;;16203:30;16269:34;16249:18;;;16242:62;16340:26;16320:18;;;16313:54;16384:19;;33288:85:0;16163:246:1;33288:85:0;-1:-1:-1;;;;;33395:22:0;;;;;;:14;:22;;;;;;;;33394:23;:53;;;;-1:-1:-1;;;;;;33422:25:0;;;;;;:14;:25;;;;;;;;33421:26;33394:53;33386:85;;;;-1:-1:-1;;;33386:85:0;;11396:2:1;33386:85:0;;;11378:21:1;11435:2;11415:18;;;11408:30;-1:-1:-1;;;11454:18:1;;;11447:49;11513:18;;33386:85:0;11368:169:1;33386:85:0;33528:6;;-1:-1:-1;;;;;33510:25:0;;;33528:6;;33510:25;;;;:136;;-1:-1:-1;;;;;;33617:29:0;;;;;;:18;:29;;;;;;;;33616:30;33510:136;:218;;;;-1:-1:-1;;;;;;33702:26:0;;;;;;:18;:26;;;;;;;;33701:27;33510:218;33492:375;;;33774:11;;33764:6;:21;;33756:85;;;;-1:-1:-1;;;33756:85:0;;11744:2:1;33756:85:0;;;11726:21:1;11783:2;11763:18;;;11756:30;11822:34;11802:18;;;11795:62;-1:-1:-1;;;11873:18:1;;;11866:49;11932:19;;33756:85:0;11716:241:1;33756:85:0;33911:1;33892:16;;:20;:54;;;;-1:-1:-1;;;;;;33917:29:0;;;;;;:18;:29;;;;;;;;33916:30;33892:54;:85;;;;-1:-1:-1;;;;;;33951:26:0;;;;;;:18;:26;;;;;;;;33950:27;33892:85;:115;;;;-1:-1:-1;34002:4:0;;-1:-1:-1;;;;;33981:26:0;;;34002:4;;33981:26;;33892:115;33887:327;;;34029:24;34056:20;34066:9;34056;:20::i;:::-;34132:16;;34029:47;;-1:-1:-1;34103:25:0;34122:6;34029:47;34103:25;:::i;:::-;:45;;34095:103;;;;-1:-1:-1;;;34095:103:0;;15777:2:1;34095:103:0;;;15759:21:1;15816:2;15796:18;;;15789:30;15855:34;15835:18;;;15828:62;-1:-1:-1;;;15906:18:1;;;15899:43;15959:19;;34095:103:0;15749:235:1;34095:103:0;34010:204;33887:327;34335:14;;;;;;;34365:11;;;;34360:41;;;-1:-1:-1;34393:5:0;34360:41;-1:-1:-1;;;;;34510:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;34540:29:0;;;;;;:18;:29;;;;;;;;34510:59;34507:111;;;-1:-1:-1;34600:5:0;34507:111;34638:31;34659:9;34638:20;:31::i;:::-;34680:54;34696:6;34704:9;34715:6;34723:10;34680:15;:54::i;2027:200::-;2147:7;2183:12;2175:6;;;;2167:29;;;;-1:-1:-1;;;2167:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2214:5:0;2218:1;2214;:5;:::i;:::-;2207:12;2027:200;-1:-1:-1;;;;2027:200:0:o;20502:585::-;20579:7;20588;20597;20606;20615;20645:18;20666:38;20691:12;;20666:20;20678:7;20666;:11;;:20;;;;:::i;:::-;:24;;:38::i;:::-;20645:59;-1:-1:-1;20715:23:0;20741;:7;20645:59;20741:11;:23::i;:::-;20715:49;;20775:19;20797:17;:15;:17::i;:::-;20775:39;-1:-1:-1;20825:15:0;20843:24;:7;20775:39;20843:11;:24::i;:::-;20825:42;-1:-1:-1;20878:18:0;20899:27;:10;20914:11;20899:14;:27::i;:::-;20878:48;-1:-1:-1;20937:23:0;20963;:7;20878:48;20963:11;:23::i;:::-;21015:7;;;;21041;-1:-1:-1;21050:15:0;;-1:-1:-1;21067:11:0;;-1:-1:-1;20502:585:0;-1:-1:-1;;;;;;20502:585:0:o;21099:171::-;21148:7;21169:15;21186;21205:19;:17;:19::i;:::-;21168:56;;-1:-1:-1;21168:56:0;-1:-1:-1;21242:20:0;21168:56;;21242:11;:20::i;:::-;21235:27;;;;21099:171;:::o;1477:220::-;1535:7;1559:6;1555:20;;-1:-1:-1;1574:1:0;1567:8;;1555:20;1586:9;1598:5;1602:1;1598;:5;:::i;:::-;1586:17;-1:-1:-1;1631:1:0;1622:5;1626:1;1586:17;1622:5;:::i;:::-;:10;1614:56;;;;-1:-1:-1;;;1614:56:0;;12992:2:1;1614:56:0;;;12974:21:1;13031:2;13011:18;;;13004:30;13070:34;13050:18;;;13043:62;-1:-1:-1;;;13121:18:1;;;13114:31;13162:19;;1614:56:0;12964:223:1;16540:699:0;16916:11;;-1:-1:-1;;;;;16916:11:0;16897:31;;;;:18;:31;;;;;;:42;;16933:5;16897:35;:42::i;:::-;16882:11;;;-1:-1:-1;;;;;16882:11:0;;;16863:31;;;;:18;:31;;;;;;;;:76;;;;16977:11;;;;;16954:35;;:22;:35;;;;;;;16950:112;;;17039:11;;-1:-1:-1;;;;;17039:11:0;17029:22;;;;:9;:22;;;;;;:33;;17056:5;17029:26;:33::i;:::-;17014:11;;-1:-1:-1;;;;;17014:11:0;17004:22;;;;:9;:22;;;;;:58;16950:112;17212:11;;17195:36;;17796:25:1;;;-1:-1:-1;;;;;17212:11:0;;;;17195:36;;;;;17784:2:1;17769:18;17195:36:0;17751:76:1;19566:277:0;-1:-1:-1;;;;;19624:27:0;;19654:1;19624:27;;;:18;:27;;;;;;:31;19621:132;;-1:-1:-1;;;;;19713:27:0;;;;;;:18;:27;;;;;;19693:48;;:19;:48::i;:::-;-1:-1:-1;;;;;19672:18:0;;;;;;:9;:18;;;;;:69;19621:132;-1:-1:-1;;;;;19763:31:0;;;;;:22;:31;;;;;:38;;-1:-1:-1;;19763:38:0;19797:4;19763:38;;;;;;19812:9;:23;;;;;;;;;;;;;;-1:-1:-1;;;;;;19812:23:0;;;;;;19566:277::o;19092:270::-;19160:7;19199:16;;19188:7;:27;;19180:82;;;;-1:-1:-1;;;19180:82:0;;7636:2:1;19180:82:0;;;7618:21:1;7675:2;7655:18;;;7648:30;7714:34;7694:18;;;7687:62;-1:-1:-1;;;7765:18:1;;;7758:40;7815:19;;19180:82:0;7608:232:1;19180:82:0;19273:19;19295:17;:15;:17::i;:::-;19273:39;-1:-1:-1;19330:24:0;:7;19273:39;19330:11;:24::i;34764:523::-;34852:11;;;;;;;34846:434;;34880:28;34911:24;34929:4;34911:9;:24::i;:::-;35010:18;;35062:8;;34880:55;;-1:-1:-1;34986:42:0;;;;35062:8;;;;;35061:9;:20;;;;;35074:7;35061:20;:35;;;;-1:-1:-1;35085:11:0;;;;;;;35061:35;:56;;;;-1:-1:-1;35113:4:0;;-1:-1:-1;;;;;35100:17:0;;;35113:4;;35100:17;35061:56;35057:198;;;35138:8;:15;;-1:-1:-1;;35138:15:0;;;;;35190:10;:8;:10::i;:::-;35223:8;:16;;-1:-1:-1;;35223:16:0;;;34865:415;;34764:523;:::o;29743:606::-;29882:15;;29981:4;;29939;;-1:-1:-1;;;;;29968:17:0;;;29981:4;;29968:17;29965:123;;;-1:-1:-1;;30014:16:0;;30071:5;29965:123;30112:14;;;;:54;;;;;30149:17;;30130:15;:36;;30112:54;:79;;30182:9;30112:79;;;30169:10;;30112:79;30100:91;;30218:7;30212:33;;30241:1;30229:13;;30212:33;30265:67;30285:6;30293:9;30304:6;30312:9;30323:8;30265:19;:67::i;:::-;29841:508;;29743:606;;;;:::o;21282:916::-;21380:16;;21333:7;;;;-1:-1:-1;;;21333:7:0;21697:342;21721:9;:16;21717:20;;21697:342;;;21798:7;21763:18;:32;21782:9;21792:1;21782:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21782:12:0;21763:32;;;;;;;;;;;;;:42;;:79;;;21835:7;21809:9;:23;21819:9;21829:1;21819:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21819:12:0;21809:23;;;;;;;;;;;;;:33;21763:79;21759:137;;;-1:-1:-1;;21865:16:0;;;-1:-1:-1;;;10265:24:0;-1:-1:-1;21282:916:0;-1:-1:-1;;21282:916:0:o;21759:137::-;21921:45;21933:18;:32;21952:9;21962:1;21952:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21952:12:0;21933:32;;;;;;;;;;;;;21921:7;;:11;:45::i;:::-;21911:55;;21991:36;22003:9;:23;22013:9;22023:1;22013:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22013:12:0;22003:23;;;;;;;;;;;;;21991:7;;:11;:36::i;:::-;21981:46;-1:-1:-1;21739:3:0;;;;:::i;:::-;;;;21697:342;;;-1:-1:-1;22053:12:0;;;:60;;-1:-1:-1;22079:16:0;;:34;;-1:-1:-1;;;22079:20:0;:34::i;:::-;22069:7;:44;22053:60;22049:105;;;-1:-1:-1;;22123:16:0;;;-1:-1:-1;;;10265:24:0;-1:-1:-1;21282:916:0;-1:-1:-1;21282:916:0:o;22049:105::-;22173:7;;22182;;-1:-1:-1;21282:916:0;-1:-1:-1;21282:916:0:o;35299:1189::-;35370:15;;35338:29;;35370:22;;35390:1;35370:19;:22::i;:::-;35338:54;;35403:23;35429:69;35485:12;;35429:51;35458:21;35429:24;35447:4;35429:9;:24::i;:::-;:28;;:51::i;:69::-;35403:95;;35509:20;35532:45;35561:15;35532:24;35550:4;35532:9;:24::i;:::-;:28;;:45::i;:::-;35509:68;-1:-1:-1;35614:21:0;35656:30;35509:68;35656:16;:30::i;:::-;35699:17;35719:40;:21;35745:13;35719:25;:40::i;:::-;35699:60;;35780:26;35809:55;35851:12;;35809:37;35823:22;;35809:9;:13;;:37;;;;:::i;:55::-;35780:84;;35875:26;35904:55;35946:12;;35904:37;35918:22;;35904:9;:13;;:37;;;;:::i;:55::-;35875:84;;35970:21;35994:50;36031:12;;35994:32;36008:17;;35994:9;:13;;:32;;;;:::i;:50::-;35970:74;;36055:26;36084:54;36125:12;;36084:36;36098:21;36084:9;:13;;:36;;;;:::i;:54::-;36215:15;;36055:83;;-1:-1:-1;36189:63:0;;-1:-1:-1;;;;;36215:15:0;36233:18;36189:17;:63::i;:::-;36289:15;;36263:63;;-1:-1:-1;;;;;36289:15:0;36307:18;36263:17;:63::i;:::-;36363:10;;36337:53;;-1:-1:-1;;;;;36363:10:0;36376:13;36337:17;:53::i;:::-;36430:50;36444:15;36461:18;36430:13;:50::i;:::-;35327:1161;;;;;;;;;35299:1189::o;30361:553::-;30506:15;30523:23;30548:15;30575:23;30600:19;30624:29;30635:6;30643:9;30624:10;:29::i;:::-;30505:148;;;;;;;;;;30675:84;30689:6;30697:9;30708:7;30717:15;30734:7;30743:15;30675:13;:84::i;:::-;30781:51;30791:6;30799:11;30812:9;30823:8;30781:9;:51::i;:::-;30875:9;-1:-1:-1;;;;;30858:44:0;30867:6;-1:-1:-1;;;;;30858:44:0;;30886:15;30858:44;;;;17796:25:1;;17784:2;17769:18;;17751:76;30858:44:0;;;;;;;;30484:430;;;;;30361:553;;;;;:::o;37097:623::-;37247:16;;;37261:1;37247:16;;;;;;;;37223:21;;37247:16;;;;;;;;;;-1:-1:-1;37247:16:0;37223:40;;37292:4;37274;37279:1;37274:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37274:23:0;;;:7;;;;;;;;;;:23;;;;37318:6;;:13;;;-1:-1:-1;;;37318:13:0;;;;:6;;;;;:11;;:13;;;;;37274:7;;37318:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37308:4;37313:1;37308:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37308:23:0;;;:7;;;;;;;;;;:23;;;;37376:6;37344:53;;37361:4;;37376:6;37385:11;37344:8;:53::i;:::-;37436:6;;:215;;-1:-1:-1;;;37436:215:0;;-1:-1:-1;;;;;37436:6:0;;;;:57;;:215;;37508:11;;37436:6;;37578:4;;37605;;37625:15;;37436:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37677:35;37694:11;37707:4;37677:35;;;;;;;:::i;:::-;;;;;;;;37152:568;37097:623;:::o;36496:587::-;36677:6;;36645:53;;36662:4;;-1:-1:-1;;;;;36677:6:0;36686:11;36645:8;:53::i;:::-;36811:6;;36742:23;;;;;;-1:-1:-1;;;;;36811:6:0;:22;36841:9;36874:4;36894:11;36742:23;;36952:7;7364;7391:6;-1:-1:-1;;;;;7391:6:0;;7326:79;36952:7;36811:189;;;;;;-1:-1:-1;;;;;;36811:189:0;;;-1:-1:-1;;;;;4934:15:1;;;36811:189:0;;;4916:34:1;4966:18;;;4959:34;;;;5009:18;;;5002:34;;;;5052:18;;;5045:34;5116:15;;;5095:19;;;5088:44;36974:15:0;5148:19:1;;;5141:35;4850:19;;36811:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37018:57;;;18958:25:1;;;19014:2;18999:18;;18992:34;;;19042:18;;;19035:34;;;36741:259:0;;-1:-1:-1;36741:259:0;;-1:-1:-1;36741:259:0;-1:-1:-1;37018:57:0;;18946:2:1;18931:18;37018:57:0;;;;;;;36567:516;;;36496:587;;:::o;30926:685::-;-1:-1:-1;;;;;31140:26:0;;;;;;:18;:26;;;;;;:39;;31171:7;31140:30;:39::i;:::-;-1:-1:-1;;;;;31111:26:0;;;;;;;:18;:26;;;;;;:68;;;;31222:29;;;;;;;:50;;31256:15;31222:33;:50::i;:::-;-1:-1:-1;;;;;31190:29:0;;;;;;;:18;:29;;;;;;;;:82;;;;31398:30;;;;;:22;:30;;;;;;;31394:91;;;-1:-1:-1;;;;;31452:17:0;;;;;;:9;:17;;;;;;:30;;31474:7;31452:21;:30::i;:::-;-1:-1:-1;;;;;31432:17:0;;;;;;:9;:17;;;;;:50;31394:91;-1:-1:-1;;;;;31499:33:0;;;;;;:22;:33;;;;;;;;31495:109;;;-1:-1:-1;;;;;31560:20:0;;;;;;:9;:20;;;;;;:41;;31585:15;31560:24;:41::i;:::-;-1:-1:-1;;;;;31537:20:0;;;;;;:9;:20;;;;;:64;30926:685;;;;;;:::o;31629:1219::-;31766:1;31754:9;:13;:29;;;;-1:-1:-1;31772:11:0;;;;;;;31771:12;31754:29;31749:1092;;;31803:14;;;;:53;;;;;31839:17;;31821:15;:35;31803:53;31800:1030;;;31877:57;31887:6;31895:11;31908:10;;31928:4;31877:8;:57::i;:::-;31800:1030;;;31976:8;31973:857;;;32005:49;32020:6;32028:11;32041:12;;32005:13;:49::i;:::-;32073:65;32083:6;32091:11;32104:18;;32132:4;32073:8;:65::i;:::-;32157:58;32167:6;32175:11;32188;;32209:4;32157:8;:58::i;:::-;32234:65;32244:6;32252:11;32265:18;;32293:4;32234:8;:65::i;:::-;32318:60;32328:6;32336:11;32349:13;;32372:4;32318:8;:60::i;31973:857::-;32436:50;32451:6;32459:11;32472:13;;32436;:50::i;:::-;32505:66;32515:6;32523:11;32536:19;;32565:4;32505:8;:66::i;:::-;32590:59;32600:6;32608:11;32621:12;;32643:4;32590:8;:59::i;:::-;32668:66;32678:6;32686:11;32699:19;;32728:4;32668:8;:66::i;:::-;32753:61;32763:6;32771:11;32784:14;;32808:4;29245:486;29389:12;;29351:15;;29369:33;;:15;:6;29380:3;29369:10;:15::i;:33::-;29351:51;-1:-1:-1;29413:15:0;29431:24;29351:51;29443:11;29431;:24::i;:::-;-1:-1:-1;;;;;29500:29:0;;;;;;:18;:29;;;;;;29413:42;;-1:-1:-1;29500:42:0;;29413;29500:33;:42::i;:::-;-1:-1:-1;;;;;29468:29:0;;;;;;:18;:29;;;;;;;;:74;;;;29556:22;:33;;;;;;29553:107;;;-1:-1:-1;;;;;29627:20:0;;;;;;:9;:20;;;;;;:33;;29652:7;29627:24;:33::i;:::-;-1:-1:-1;;;;;29604:20:0;;;;;;:9;:20;;;;;:56;29553:107;29693:17;;:30;;29715:7;29693:21;:30::i;:::-;29673:17;:50;-1:-1:-1;;;;;;29245:486:0:o;22540:322::-;22668:12;;22633;;22648:33;;:15;:6;22659:3;22648:10;:15::i;:33::-;22633:48;-1:-1:-1;22692:12:0;22707:21;22633:48;22716:11;22707:8;:21::i;:::-;22760:16;;22692:36;;-1:-1:-1;22760:26:0;;22692:36;22760:20;:26::i;:::-;22741:16;:45;22827:17;;:27;;22849:4;22827:21;:27::i;:::-;22807:17;:47;-1:-1:-1;;;;;22540:322:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:323::-;763:6;771;824:2;812:9;803:7;799:23;795:32;792:2;;;840:1;837;830:12;792:2;879:9;866:23;898:31;923:5;898:31;:::i;:::-;948:5;1000:2;985:18;;;;972:32;;-1:-1:-1;;;782:228:1:o;1015:388::-;1083:6;1091;1144:2;1132:9;1123:7;1119:23;1115:32;1112:2;;;1160:1;1157;1150:12;1112:2;1199:9;1186:23;1218:31;1243:5;1218:31;:::i;:::-;1268:5;-1:-1:-1;1325:2:1;1310:18;;1297:32;1338:33;1297:32;1338:33;:::i;:::-;1390:7;1380:17;;;1102:301;;;;;:::o;1408:456::-;1485:6;1493;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1570:1;1567;1560:12;1522:2;1609:9;1596:23;1628:31;1653:5;1628:31;:::i;:::-;1678:5;-1:-1:-1;1735:2:1;1720:18;;1707:32;1748:33;1707:32;1748:33;:::i;:::-;1512:352;;1800:7;;-1:-1:-1;;;1854:2:1;1839:18;;;;1826:32;;1512:352::o;1869:315::-;1934:6;1942;1995:2;1983:9;1974:7;1970:23;1966:32;1963:2;;;2011:1;2008;2001:12;1963:2;2050:9;2037:23;2069:31;2094:5;2069:31;:::i;:::-;2119:5;-1:-1:-1;2143:35:1;2174:2;2159:18;;2143:35;:::i;:::-;2133:45;;1953:231;;;;;:::o;2509:180::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:2;;;2634:1;2631;2624:12;2586:2;2657:26;2673:9;2657:26;:::i;2694:180::-;2753:6;2806:2;2794:9;2785:7;2781:23;2777:32;2774:2;;;2822:1;2819;2812:12;2774:2;-1:-1:-1;2845:23:1;;2764:110;-1:-1:-1;2764:110:1:o;2879:316::-;2950:6;2958;2966;3019:2;3007:9;2998:7;2994:23;2990:32;2987:2;;;3035:1;3032;3025:12;2987:2;3071:9;3058:23;3048:33;;3100:35;3131:2;3120:9;3116:18;3100:35;:::i;:::-;3090:45;;3154:35;3185:2;3174:9;3170:18;3154:35;:::i;:::-;3144:45;;2977:218;;;;;:::o;3200:306::-;3288:6;3296;3304;3357:2;3345:9;3336:7;3332:23;3328:32;3325:2;;;3373:1;3370;3363:12;3325:2;3402:9;3396:16;3386:26;;3452:2;3441:9;3437:18;3431:25;3421:35;;3496:2;3485:9;3481:18;3475:25;3465:35;;3315:191;;;;;:::o;3511:385::-;3597:6;3605;3613;3621;3674:3;3662:9;3653:7;3649:23;3645:33;3642:2;;;3691:1;3688;3681:12;3642:2;-1:-1:-1;;3714:23:1;;;3784:2;3769:18;;3756:32;;-1:-1:-1;3835:2:1;3820:18;;3807:32;;3886:2;3871:18;3858:32;;-1:-1:-1;3632:264:1;-1:-1:-1;3632:264:1:o;3901:461::-;3954:3;3992:5;3986:12;4019:6;4014:3;4007:19;4045:4;4074:2;4069:3;4065:12;4058:19;;4111:2;4104:5;4100:14;4132:1;4142:195;4156:6;4153:1;4150:13;4142:195;;;4221:13;;-1:-1:-1;;;;;4217:39:1;4205:52;;4277:12;;;;4312:15;;;;4253:1;4171:9;4142:195;;;-1:-1:-1;4353:3:1;;3962:400;-1:-1:-1;;;;;3962:400:1:o;5611:597::-;5723:4;5752:2;5781;5770:9;5763:21;5813:6;5807:13;5856:6;5851:2;5840:9;5836:18;5829:34;5881:1;5891:140;5905:6;5902:1;5899:13;5891:140;;;6000:14;;;5996:23;;5990:30;5966:17;;;5985:2;5962:26;5955:66;5920:10;;5891:140;;;6049:6;6046:1;6043:13;6040:2;;;6119:1;6114:2;6105:6;6094:9;6090:22;6086:31;6079:42;6040:2;-1:-1:-1;6192:2:1;6171:15;-1:-1:-1;;6167:29:1;6152:45;;;;6199:2;6148:54;;5732:476;-1:-1:-1;;;5732:476:1:o;13192:356::-;13394:2;13376:21;;;13413:18;;;13406:30;13472:34;13467:2;13452:18;;13445:62;13539:2;13524:18;;13366:182::o;17832:332::-;18039:6;18028:9;18021:25;18082:2;18077;18066:9;18062:18;18055:30;18002:4;18102:56;18154:2;18143:9;18139:18;18131:6;18102:56;:::i;18169:582::-;18468:6;18457:9;18450:25;18511:6;18506:2;18495:9;18491:18;18484:34;18554:3;18549:2;18538:9;18534:18;18527:31;18431:4;18575:57;18627:3;18616:9;18612:19;18604:6;18575:57;:::i;:::-;-1:-1:-1;;;;;18668:32:1;;;;18663:2;18648:18;;18641:60;-1:-1:-1;18732:3:1;18717:19;18710:35;18567:65;18440:311;-1:-1:-1;;;18440:311:1:o;19269:128::-;19309:3;19340:1;19336:6;19333:1;19330:13;19327:2;;;19346:18;;:::i;:::-;-1:-1:-1;19382:9:1;;19317:80::o;19402:217::-;19442:1;19468;19458:2;;19512:10;19507:3;19503:20;19500:1;19493:31;19547:4;19544:1;19537:15;19575:4;19572:1;19565:15;19458:2;-1:-1:-1;19604:9:1;;19448:171::o;19624:168::-;19664:7;19730:1;19726;19722:6;19718:14;19715:1;19712:21;19707:1;19700:9;19693:17;19689:45;19686:2;;;19737:18;;:::i;:::-;-1:-1:-1;19777:9:1;;19676:116::o;19797:125::-;19837:4;19865:1;19862;19859:8;19856:2;;;19870:18;;:::i;:::-;-1:-1:-1;19907:9:1;;19846:76::o;19927:135::-;19966:3;-1:-1:-1;;19987:17:1;;19984:2;;;20007:18;;:::i;:::-;-1:-1:-1;20054:1:1;20043:13;;19974:88::o;20067:127::-;20128:10;20123:3;20119:20;20116:1;20109:31;20159:4;20156:1;20149:15;20183:4;20180:1;20173:15;20199:127;20260:10;20255:3;20251:20;20248:1;20241:31;20291:4;20288:1;20281:15;20315:4;20312:1;20305:15;20331:127;20392:10;20387:3;20383:20;20380:1;20373:31;20423:4;20420:1;20413:15;20447:4;20444:1;20437:15;20595:131;-1:-1:-1;;;;;20670:31:1;;20660:42;;20650:2;;20716:1;20713;20706:12

Swarm Source

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