ETH Price: $3,153.39 (+0.51%)
Gas: 5 Gwei

Token

BabyMusk (BBMUSK)
 

Overview

Max Total Supply

1,000,000,000,000 BBMUSK

Holders

190

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

BabyMusk is a reflection, charity, and deflationary meme token built on Ethereum.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BabyMusk

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: BabyMusk.sol
import './SafeMath.sol';
import './IER20.sol';
import './IUniswapV2Factory.sol';
import './Context.sol';
import './Ownable.sol';

pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

//  BabyMusk Token Summary
//  3% tax to fund donations 
//  3% tax to support marketing and token growth
//  Please note, donation and marketing wallets can be adjusted as need for the success of this token
contract BabyMusk is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint256 private constant MAX = ~uint256(0);

    // contract info
    uint8 private _decimals = 9;
    string private _name = "BabyMusk";
    string private _symbol = "BBMUSK";
    uint256 private _tTotal = 1000 * 10**9 * 10**uint256(_decimals);

    // % to holders
    uint256 public _defaultTaxFee = 6;
    uint256 public _taxFee = _defaultTaxFee;
    uint256 private _previousTaxFee = _taxFee;

    // % to swap & send to marketing wallet
    uint256 public _marketingFee4Sellers = 3;
    uint256 public _defaultMarketingFee = 0;
    uint256 public _marketingFee = _defaultMarketingFee;
    uint256 private _previousMarketingFee = _marketingFee;

    // % to swap & send to donation wallet
    uint256 public _donationFee4Sellers = 3;
    uint256 public _defaultDonationFee = 0;
    uint256 public _donationFee = _defaultDonationFee;
    uint256 private _previousDonationFee = _donationFee;

    uint256 public _maxTxAmount = _tTotal.div(1).div(100);
    uint256 public _numTokensToExchangeForMarketing = _tTotal.div(50).div(100);
    uint256 private _tFeeTotal;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
        
    bool public _feesOnSellersAndBuyers = true;
    bool private _inSwapAndSend;
    bool public _swapAndSendEnabled = true;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable _uniswapV2Pair;
    address payable public _marketingWallet = payable(0xe5a0E58478fc6F8236A63f4716D601dec293E812);         // marketing wallet
    address payable public _donationWallet = payable(0x838CB573Ef7C8307F60E485f56c4a625445dB6aE);          // donation wallet
    address[] private _excluded;

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

    event SwapAndSendEnabledUpdated(bool enabled);

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

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        // Create a uniswap pair for this new token
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _donationFee == 0) {
            return;
        }

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousDonationFee = _donationFee;

        _taxFee = 0;
        _marketingFee = 0;
        _donationFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _donationFee = _previousDonationFee;
    }

    //To recieve ETH when swaping
    receive() external payable {}

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

    function getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation) = getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = getRValues(tAmount, tFee, tMarketing, tDonation, getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing, tDonation);
    }

    function getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tDonation = calculateDonationFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing).sub(tDonation);
        return (tTransferAmount, tFee, tMarketing, tDonation);
    }

    function getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rDonation = tDonation.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing).sub(rDonation);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
        }
    }

    function takeDonation(uint256 tDonation) private {
        uint256 currentRate =  getRate();
        uint256 rDonation = tDonation.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rDonation);
        if(_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tDonation);
        }
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function calculateDonationFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_donationFee).div(
            10**2
        );
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(from != owner() && to != owner()){
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= _numTokensToExchangeForMarketing;

        if(contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        if (overMinTokenBalance 
            && !_inSwapAndSend 
            && from != _uniswapV2Pair 
            && _swapAndSendEnabled) {
            swapAndSend(contractTokenBalance);
        }

        if(_feesOnSellersAndBuyers) {
            setFees(to);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

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

    function setFees(address recipient) private {
        _taxFee = _defaultTaxFee;
        _marketingFee = _defaultMarketingFee;
        _donationFee = _defaultDonationFee;
        if (recipient == _uniswapV2Pair) {  // This is a sell because it was from Uniswap
            _marketingFee = _marketingFee4Sellers;
            _donationFee = _donationFee4Sellers;
        }
    }

    function swapAndSend(uint256 contractTokenBalance) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractETHBalance = address(this).balance;

        if(contractETHBalance > 0) {
            //Split the balance across the wallets based on fee %
            uint256 totalFeeUnits = _marketingFee.add(_donationFee);
            uint256 amountPerUnit = contractETHBalance.div(totalFeeUnits);
            uint256 marketingETHBalance = amountPerUnit.mul(_marketingFee);
            uint256 donationETHBalance = amountPerUnit.mul(_donationFee);

            if (amountPerUnit >= 1){
                _marketingWallet.transfer(marketingETHBalance);
                _donationWallet.transfer(donationETHBalance);
            }
        }
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee) {
            removeAllFee();
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            transferBothExcluded(sender, recipient, amount);
        } else {
            transferStandard(sender, recipient, amount);
        }

        if(!takeFee) {
            restoreAllFee();
        }
    }

    function transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation) = getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        takeMarketing(tMarketing);
        takeDonation(tDonation);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation) = getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        takeMarketing(tMarketing);
        takeDonation(tDonation);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation) = getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        takeMarketing(tMarketing);
        takeDonation(tDonation);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDonation) = getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        takeMarketing(tMarketing);
        takeDonation(tDonation);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() {
        _defaultMarketingFee = marketingFee;
    }

    function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() {
        _marketingFee4Sellers = marketingFee4Sellers;
    }

    function setDonationFee4Sellers(uint256 donationFee4Sellers) external onlyOwner() {
        _donationFee4Sellers = donationFee4Sellers;
    }

    function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() {
        _feesOnSellersAndBuyers = _enabled;
    }

    function setSwapAndSendEnabled(bool _enabled) public onlyOwner() {
        _swapAndSendEnabled = _enabled;
        emit SwapAndSendEnabledUpdated(_enabled);
    }

    function setNumTokensToExchangeForMarketing(uint256 numTokensToExchangeForMarketing) public onlyOwner() {
        _numTokensToExchangeForMarketing = numTokensToExchangeForMarketing;
    }

    function setMarketingWallet(address payable wallet) external onlyOwner() {
        _marketingWallet = wallet;
    }

    function setDonationWallet(address payable wallet) external onlyOwner() {
        _donationWallet = wallet;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
}

File 2 of 7: Context.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    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");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but performing a static call.
    *
    * _Available since v3.3._
    */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
    * but performing a static call.
    *
    * _Available since v3.3._
    */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but performing a delegate call.
    *
    * _Available since v3.4._
    */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
    * but performing a delegate call.
    *
    * _Available since v3.4._
    */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (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 {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 7: IER20.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 7: IUniswapV2Factory.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

File 5 of 7: Migrations.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
  address public owner = msg.sender;
  uint public last_completed_migration;

  modifier restricted() {
    require(
      msg.sender == owner,
      "This function is restricted to the contract's owner"
    );
    _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }
}

File 6 of 7: Ownable.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

import './Context.sol';

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
    * @dev Transfers ownership of the contract to a new account (`newOwner`).
    * Can only be called by the current owner.
    */
    function transferOwnership(address newOwner) private onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 7 of 7: SafeMath.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: Unlicensed

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
    * @dev Returns the substraction of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
    * @dev Returns the division of two unsigned integers, with a division by zero flag.
    *
    * _Available since v3.4._
    */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
    *
    * _Available since v3.4._
    */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
    * @dev Returns the integer division of two unsigned integers, reverting on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator.
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * reverting when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * CAUTION: This function is deprecated because it requires allocating memory for the error
    * message unnecessarily. For custom revert reasons use {trySub}.
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
    * @dev Returns the integer division of two unsigned integers, reverting with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * reverting with custom message when dividing by zero.
    *
    * CAUTION: This function is deprecated because it requires allocating memory for the error
    * message unnecessarily. For custom revert reasons use {tryMod}.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_defaultDonationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_donationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_donationFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_donationWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"donationFee4Sellers","type":"uint256"}],"name":"setDonationFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setDonationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensToExchangeForMarketing","type":"uint256"}],"name":"setNumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600881526020017f426162794d75736b000000000000000000000000000000000000000000000000815250600190805190602001906200006d92919062000777565b506040518060400160405280600681526020017f42424d55534b000000000000000000000000000000000000000000000000000081525060029080519060200190620000bb92919062000777565b50600060149054906101000a900460ff1660ff16600a620000dd919062000969565b64e8d4a51000620000ef919062000aa6565b600355600660045560045460055560055460065560036007556000600855600854600955600954600a556003600b556000600c55600c54600d55600d54600e556200016660646200015260016003546200072e60201b620022011790919060201c565b6200072e60201b620022011790919060201c565b600f55620001a060646200018c60326003546200072e60201b620022011790919060201c565b6200072e60201b620022011790919060201c565b601055600354600019620001b5919062000bb6565b600019620001c4919062000b07565b6012556001601360006101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555073e5a0e58478fc6f8236a63f4716d601dec293e812601360036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073838cb573ef7c8307f60e485f56c4a625445db6ae601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002b457600080fd5b50620002c56200074660201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360125460166000620003966200074660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043457600080fd5b505afa15801562000449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046f91906200083e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004d257600080fd5b505afa158015620004e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050d91906200083e565b6040518363ffffffff1660e01b81526004016200052c9291906200088c565b602060405180830381600087803b1580156200054757600080fd5b505af11580156200055c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058291906200083e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160196000620006056200074e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006be6200074660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200071f9190620008b9565b60405180910390a35062000ca2565b600081836200073e9190620008d6565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620007859062000b80565b90600052602060002090601f016020900481019282620007a95760008555620007f5565b82601f10620007c457805160ff1916838001178555620007f5565b82800160010185558215620007f5579182015b82811115620007f4578251825591602001919060010190620007d7565b5b50905062000804919062000808565b5090565b5b808211156200082357600081600090555060010162000809565b5090565b600081519050620008388162000c88565b92915050565b6000602082840312156200085157600080fd5b6000620008618482850162000827565b91505092915050565b620008758162000b42565b82525050565b620008868162000b76565b82525050565b6000604082019050620008a360008301856200086a565b620008b260208301846200086a565b9392505050565b6000602082019050620008d060008301846200087b565b92915050565b6000620008e38262000b76565b9150620008f08362000b76565b92508262000903576200090262000c1d565b5b828204905092915050565b6000808291508390505b6001851115620009605780860481111562000938576200093762000bee565b5b6001851615620009485780820291505b8081029050620009588562000c7b565b945062000918565b94509492505050565b6000620009768262000b76565b9150620009838362000b76565b9250620009b27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009ba565b905092915050565b600082620009cc576001905062000a9f565b81620009dc576000905062000a9f565b8160018114620009f5576002811462000a005762000a36565b600191505062000a9f565b60ff84111562000a155762000a1462000bee565b5b8360020a91508482111562000a2f5762000a2e62000bee565b5b5062000a9f565b5060208310610133831016604e8410600b841016171562000a705782820a90508381111562000a6a5762000a6962000bee565b5b62000a9f565b62000a7f84848460016200090e565b9250905081840481111562000a995762000a9862000bee565b5b81810290505b9392505050565b600062000ab38262000b76565b915062000ac08362000b76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000afc5762000afb62000bee565b5b828202905092915050565b600062000b148262000b76565b915062000b218362000b76565b92508282101562000b375762000b3662000bee565b5b828203905092915050565b600062000b4f8262000b56565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000b9957607f821691505b6020821081141562000bb05762000baf62000c4c565b5b50919050565b600062000bc38262000b76565b915062000bd08362000b76565b92508262000be35762000be262000c1d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b62000c938162000b42565b811462000c9f57600080fd5b50565b60805160601c60a05160601c61513662000cf160003960008181611d3a015281816126170152612cd3015260008181610bd70152818161297501528181612a8b0152612ab201526151366000f3fe60806040526004361061028c5760003560e01c80636d165ec61161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610a07578063ea2f0b3714610a44578063ec28438a14610a6d578063ef55e75b14610a96578063f86a0a3f14610ac1578063faf38f6214610aea57610293565b8063a457c2d7146108e3578063a7ccd7b814610920578063a9059cbb1461094b578063bc951f9814610988578063d54994db146109b3578063d5eb3253146109dc57610293565b80638da5cb5b116101135780638da5cb5b146107e357806395d89b411461080e578063962dfc75146108395780639c74daf014610864578063a08f67601461088f578063a37f4ea9146108b857610293565b80636d165ec6146106d157806370a08231146106fc578063715018a6146107395780637d1db4a5146107505780637dd200e51461077b57806388f82020146107a657610293565b80633685d419116101fe57806352390c02116101b757806352390c02146105c55780635342acb4146105ee578063534a2eaa1461062b57806357e0a1d0146106565780635a96cdd71461067f5780635d098b38146106a857610293565b80633685d419146104a557806339509351146104ce5780633b124fe71461050b5780633dee3b7a14610536578063437823ec1461055f5780634549b0391461058857610293565b806318160ddd1161025057806318160ddd1461038157806322976e0d146103ac57806323b872dd146103d75780632663236f146104145780632d8381191461043d578063313ce5671461047a57610293565b806306fdde0314610298578063095ea7b3146102c35780630da138331461030057806313114a9d1461032b5780631694505e1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b15565b6040516102ba919061486e565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906144b3565b610ba7565b6040516102f79190614838565b60405180910390f35b34801561030c57600080fd5b50610315610bc5565b60405161032291906149d0565b60405180910390f35b34801561033757600080fd5b50610340610bcb565b60405161034d91906149d0565b60405180910390f35b34801561036257600080fd5b5061036b610bd5565b6040516103789190614853565b60405180910390f35b34801561038d57600080fd5b50610396610bf9565b6040516103a391906149d0565b60405180910390f35b3480156103b857600080fd5b506103c1610c03565b6040516103ce91906149d0565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190614464565b610c09565b60405161040b9190614838565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906144ef565b610ce2565b005b34801561044957600080fd5b50610464600480360381019061045f9190614518565b610db2565b60405161047191906149d0565b60405180910390f35b34801561048657600080fd5b5061048f610e20565b60405161049c9190614a45565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906143ad565b610e36565b005b3480156104da57600080fd5b506104f560048036038101906104f091906144b3565b611204565b6040516105029190614838565b60405180910390f35b34801561051757600080fd5b506105206112b7565b60405161052d91906149d0565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190614518565b6112bd565b005b34801561056b57600080fd5b50610586600480360381019061058191906143ad565b611343565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614541565b61141a565b6040516105bc91906149d0565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906143ad565b6114a0565b005b3480156105fa57600080fd5b50610615600480360381019061061091906143ad565b61173b565b6040516106229190614838565b60405180910390f35b34801561063757600080fd5b50610640611791565b60405161064d9190614838565b60405180910390f35b34801561066257600080fd5b5061067d600480360381019061067891906144ef565b6117a4565b005b34801561068b57600080fd5b506106a660048036038101906106a191906143ff565b61183d565b005b3480156106b457600080fd5b506106cf60048036038101906106ca91906143ff565b6118fd565b005b3480156106dd57600080fd5b506106e66119bd565b6040516106f391906149d0565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906143ad565b6119c3565b60405161073091906149d0565b60405180910390f35b34801561074557600080fd5b5061074e611aae565b005b34801561075c57600080fd5b50610765611be8565b60405161077291906149d0565b60405180910390f35b34801561078757600080fd5b50610790611bee565b60405161079d9190614838565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c891906143ad565b611c01565b6040516107da9190614838565b60405180910390f35b3480156107ef57600080fd5b506107f8611c57565b6040516108059190614802565b60405180910390f35b34801561081a57600080fd5b50610823611c80565b604051610830919061486e565b60405180910390f35b34801561084557600080fd5b5061084e611d12565b60405161085b919061481d565b60405180910390f35b34801561087057600080fd5b50610879611d38565b6040516108869190614802565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614518565b611d5c565b005b3480156108c457600080fd5b506108cd611de2565b6040516108da919061481d565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906144b3565b611e08565b6040516109179190614838565b60405180910390f35b34801561092c57600080fd5b50610935611ed5565b60405161094291906149d0565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d91906144b3565b611edb565b60405161097f9190614838565b60405180910390f35b34801561099457600080fd5b5061099d611ef9565b6040516109aa91906149d0565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190614518565b611eff565b005b3480156109e857600080fd5b506109f1611f85565b6040516109fe91906149d0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190614428565b611f8b565b604051610a3b91906149d0565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a6691906143ad565b612012565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614518565b6120e9565b005b348015610aa257600080fd5b50610aab61216f565b604051610ab891906149d0565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae39190614518565b612175565b005b348015610af657600080fd5b50610aff6121fb565b604051610b0c91906149d0565b60405180910390f35b606060018054610b2490614c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090614c9a565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bbb610bb4612217565b848461221f565b6001905092915050565b60045481565b6000601154905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b60095481565b6000610c168484846123ea565b610cd784610c22612217565b610cd2856040518060600160405280602881526020016150b460289139601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c88612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127719092919063ffffffff16565b61221f565b600190509392505050565b610cea612217565b73ffffffffffffffffffffffffffffffffffffffff16610d08611c57565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590614950565b60405180910390fd5b80601360026101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610da79190614838565b60405180910390a150565b6000601254821115610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df0906148b0565b60405180910390fd5b6000610e036127c6565b9050610e18818461220190919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e3e612217565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611c57565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614950565b60405180910390fd5b601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f35906148f0565b60405180910390fd5b60005b601580549050811015611200578173ffffffffffffffffffffffffffffffffffffffff1660158281548110610f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111ed5760156001601580549050610ffa9190614b96565b81548110611031577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660158281548110611096577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060158054806111b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611200565b80806111f890614ccc565b915050610f41565b5050565b60006112ad611211612217565b846112a88560186000611222612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b61221f565b6001905092915050565b60055481565b6112c5612217565b73ffffffffffffffffffffffffffffffffffffffff166112e3611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614950565b60405180910390fd5b8060108190555050565b61134b612217565b73ffffffffffffffffffffffffffffffffffffffff16611369611c57565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614950565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890614910565b60405180910390fd5b8161148257600061147184612807565b50505050505090508091505061149a565b600061148d84612807565b5050505050915050809150505b92915050565b6114a8612217565b73ffffffffffffffffffffffffffffffffffffffff166114c6611c57565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614950565b60405180910390fd5b601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906148f0565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561167d57611639601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db2565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b6117ac612217565b73ffffffffffffffffffffffffffffffffffffffff166117ca611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614950565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b611845612217565b73ffffffffffffffffffffffffffffffffffffffff16611863611c57565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614950565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611905612217565b73ffffffffffffffffffffffffffffffffffffffff16611923611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614950565b60405180910390fd5b80601360036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a5e57601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aa9565b611aa6601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db2565b90505b919050565b611ab6612217565b73ffffffffffffffffffffffffffffffffffffffff16611ad4611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614950565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b601360029054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611c8f90614c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbb90614c9a565b8015611d085780601f10611cdd57610100808354040283529160200191611d08565b820191906000526020600020905b815481529060010190602001808311611ceb57829003601f168201915b5050505050905090565b601360039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b611d64612217565b73ffffffffffffffffffffffffffffffffffffffff16611d82611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614950565b60405180910390fd5b8060078190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ecb611e15612217565b84611ec6856040518060600160405280602581526020016150dc6025913960186000611e3f612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127719092919063ffffffff16565b61221f565b6001905092915050565b600c5481565b6000611eef611ee8612217565b84846123ea565b6001905092915050565b60075481565b611f07612217565b73ffffffffffffffffffffffffffffffffffffffff16611f25611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290614950565b60405180910390fd5b8060088190555050565b60105481565b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61201a612217565b73ffffffffffffffffffffffffffffffffffffffff16612038611c57565b73ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614950565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120f1612217565b73ffffffffffffffffffffffffffffffffffffffff1661210f611c57565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90614950565b60405180910390fd5b80600f8190555050565b600b5481565b61217d612217565b73ffffffffffffffffffffffffffffffffffffffff1661219b611c57565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614950565b60405180910390fd5b80600b8190555050565b600d5481565b6000818361220f9190614b0b565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906149b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f6906148d0565b60405180910390fd5b80601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dd91906149d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614990565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190614890565b60405180910390fd5b6000811161250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614970565b60405180910390fd5b612515611c57565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125835750612553611c57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125ce57600f548111156125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c490614930565b60405180910390fd5b5b60006125d9306119c3565b905060006010548210159050600f5482106125f457600f5491505b80801561260e5750601360019054906101000a900460ff16155b801561266657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561267e5750601360029054906101000a900460ff165b1561268d5761268c8261286f565b5b601360009054906101000a900460ff16156126ac576126ab84612cb6565b5b600060019050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127535750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275d57600090505b61276986868684612d3b565b505050505050565b60008383111582906127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b0919061486e565b60405180910390fd5b5082840390509392505050565b60008060006127d361304c565b915091506127ea818361220190919063ffffffff16565b9250505090565b600081836127ff9190614ab5565b905092915050565b60008060008060008060008060008060006128218c613397565b935093509350935060008060006128428f87878761283d6127c6565b613416565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6001601360016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128fb5781602001602082028036833780820191505090505b5090503081600081518110612939577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129d957600080fd5b505afa1580156129ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1191906143d6565b81600181518110612a4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ab0307f00000000000000000000000000000000000000000000000000000000000000008461221f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b129594939291906149eb565b600060405180830381600087803b158015612b2c57600080fd5b505af1158015612b40573d6000803e3d6000fd5b5050505060004790506000811115612c96576000612b6b600d546009546127f190919063ffffffff16565b90506000612b82828461220190919063ffffffff16565b90506000612b9b600954836134ca90919063ffffffff16565b90506000612bb4600d54846134ca90919063ffffffff16565b905060018310612c9157601360039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612c26573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c8f573d6000803e3d6000fd5b505b505050505b50506000601360016101000a81548160ff02191690831515021790555050565b600454600581905550600854600981905550600c54600d819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d3857600754600981905550600b54600d819055505b50565b80612d4957612d486134e0565b5b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dec5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0157612dfc848484613542565b613038565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ea45750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eb957612eb48484846137b0565b613037565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f5d5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7257612f6d848484613a1e565b613036565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130145750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561302957613024848484613bf7565b613035565b613034848484613a1e565b5b5b5b5b8061304657613045613efa565b5b50505050565b600080600060125490506000600354905060005b60158054905081101561335a578260166000601584815481106130ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806131c05750816017600060158481548110613158577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156131d75760125460035494509450505050613393565b61328d6016600060158481548110613218577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613f1790919063ffffffff16565b925061334560176000601584815481106132d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f1790919063ffffffff16565b9150808061335290614ccc565b915050613060565b5061337260035460125461220190919063ffffffff16565b82101561338a57601254600354935093505050613393565b81819350935050505b9091565b60008060008060006133a886613f2d565b905060006133b587613f5e565b905060006133c288613f8f565b905060006133fd826133ef856133e1888e613f1790919063ffffffff16565b613f1790919063ffffffff16565b613f1790919063ffffffff16565b9050808484849750975097509750505050509193509193565b60008060008061342f858a6134ca90919063ffffffff16565b90506000613446868a6134ca90919063ffffffff16565b9050600061345d878a6134ca90919063ffffffff16565b90506000613474888a6134ca90919063ffffffff16565b905060006134af826134a185613493888a613f1790919063ffffffff16565b613f1790919063ffffffff16565b613f1790919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600081836134d89190614b3c565b905092915050565b60006005541480156134f457506000600954145b801561350257506000600d54145b1561350c57613540565b600554600681905550600954600a81905550600d54600e81905550600060058190555060006009819055506000600d819055505b565b600080600080600080600061355688612807565b96509650965096509650965096506135b688601760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364b87601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e086601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372c82613fc0565b61373581614165565b61373f858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161379c91906149d0565b60405180910390a350505050505050505050565b60008060008060008060006137c488612807565b965096509650965096509650965061382487601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b984601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394e86601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a82613fc0565b6139a381614165565b6139ad858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a0a91906149d0565b60405180910390a350505050505050505050565b6000806000806000806000613a3288612807565b9650965096509650965096509650613a9287601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2786601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7382613fc0565b613b7c81614165565b613b86858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613be391906149d0565b60405180910390a350505050505050505050565b6000806000806000806000613c0b88612807565b9650965096509650965096509650613c6b88601760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d0087601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9584601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2a86601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7682613fc0565b613e7f81614165565b613e89858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ee691906149d0565b60405180910390a350505050505050505050565b600654600581905550600a54600981905550600e54600d81905550565b60008183613f259190614b96565b905092915050565b6000613f576064613f49600554856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613f886064613f7a600954856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613fb96064613fab600d54856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613fca6127c6565b90506000613fe182846134ca90919063ffffffff16565b905061403581601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141605761411c83601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061416f6127c6565b9050600061418682846134ca90919063ffffffff16565b90506141da81601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614305576142c183601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61431f82601254613f1790919063ffffffff16565b60128190555061433a816011546127f190919063ffffffff16565b6011819055505050565b60008135905061435381615057565b92915050565b60008151905061436881615057565b92915050565b60008135905061437d8161506e565b92915050565b60008135905061439281615085565b92915050565b6000813590506143a78161509c565b92915050565b6000602082840312156143bf57600080fd5b60006143cd84828501614344565b91505092915050565b6000602082840312156143e857600080fd5b60006143f684828501614359565b91505092915050565b60006020828403121561441157600080fd5b600061441f8482850161436e565b91505092915050565b6000806040838503121561443b57600080fd5b600061444985828601614344565b925050602061445a85828601614344565b9150509250929050565b60008060006060848603121561447957600080fd5b600061448786828701614344565b935050602061449886828701614344565b92505060406144a986828701614398565b9150509250925092565b600080604083850312156144c657600080fd5b60006144d485828601614344565b92505060206144e585828601614398565b9150509250929050565b60006020828403121561450157600080fd5b600061450f84828501614383565b91505092915050565b60006020828403121561452a57600080fd5b600061453884828501614398565b91505092915050565b6000806040838503121561455457600080fd5b600061456285828601614398565b925050602061457385828601614383565b9150509250929050565b600061458983836145a4565b60208301905092915050565b61459e81614bdc565b82525050565b6145ad81614bca565b82525050565b6145bc81614bca565b82525050565b60006145cd82614a70565b6145d78185614a93565b93506145e283614a60565b8060005b838110156146135781516145fa888261457d565b975061460583614a86565b9250506001810190506145e6565b5085935050505092915050565b61462981614bee565b82525050565b61463881614c31565b82525050565b61464781614c55565b82525050565b600061465882614a7b565b6146628185614aa4565b9350614672818560208601614c67565b61467b81614da2565b840191505092915050565b6000614693602383614aa4565b915061469e82614db3565b604082019050919050565b60006146b6602a83614aa4565b91506146c182614e02565b604082019050919050565b60006146d9602283614aa4565b91506146e482614e51565b604082019050919050565b60006146fc601b83614aa4565b915061470782614ea0565b602082019050919050565b600061471f601f83614aa4565b915061472a82614ec9565b602082019050919050565b6000614742602883614aa4565b915061474d82614ef2565b604082019050919050565b6000614765602083614aa4565b915061477082614f41565b602082019050919050565b6000614788602983614aa4565b915061479382614f6a565b604082019050919050565b60006147ab602583614aa4565b91506147b682614fb9565b604082019050919050565b60006147ce602483614aa4565b91506147d982615008565b604082019050919050565b6147ed81614c1a565b82525050565b6147fc81614c24565b82525050565b600060208201905061481760008301846145b3565b92915050565b60006020820190506148326000830184614595565b92915050565b600060208201905061484d6000830184614620565b92915050565b6000602082019050614868600083018461462f565b92915050565b60006020820190508181036000830152614888818461464d565b905092915050565b600060208201905081810360008301526148a981614686565b9050919050565b600060208201905081810360008301526148c9816146a9565b9050919050565b600060208201905081810360008301526148e9816146cc565b9050919050565b60006020820190508181036000830152614909816146ef565b9050919050565b6000602082019050818103600083015261492981614712565b9050919050565b6000602082019050818103600083015261494981614735565b9050919050565b6000602082019050818103600083015261496981614758565b9050919050565b600060208201905081810360008301526149898161477b565b9050919050565b600060208201905081810360008301526149a98161479e565b9050919050565b600060208201905081810360008301526149c9816147c1565b9050919050565b60006020820190506149e560008301846147e4565b92915050565b600060a082019050614a0060008301886147e4565b614a0d602083018761463e565b8181036040830152614a1f81866145c2565b9050614a2e60608301856145b3565b614a3b60808301846147e4565b9695505050505050565b6000602082019050614a5a60008301846147f3565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ac082614c1a565b9150614acb83614c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0057614aff614d15565b5b828201905092915050565b6000614b1682614c1a565b9150614b2183614c1a565b925082614b3157614b30614d44565b5b828204905092915050565b6000614b4782614c1a565b9150614b5283614c1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8b57614b8a614d15565b5b828202905092915050565b6000614ba182614c1a565b9150614bac83614c1a565b925082821015614bbf57614bbe614d15565b5b828203905092915050565b6000614bd582614bfa565b9050919050565b6000614be782614bfa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614c3c82614c43565b9050919050565b6000614c4e82614bfa565b9050919050565b6000614c6082614c1a565b9050919050565b60005b83811015614c85578082015181840152602081019050614c6a565b83811115614c94576000848401525b50505050565b60006002820490506001821680614cb257607f821691505b60208210811415614cc657614cc5614d73565b5b50919050565b6000614cd782614c1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0a57614d09614d15565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61506081614bca565b811461506b57600080fd5b50565b61507781614bdc565b811461508257600080fd5b50565b61508e81614bee565b811461509957600080fd5b50565b6150a581614c1a565b81146150b057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ce72e8dbdd550161e355a94fe0244c78c2fda26a0e99a4c782f2ee7f1cbe6a6164736f6c63430008040033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636d165ec61161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610a07578063ea2f0b3714610a44578063ec28438a14610a6d578063ef55e75b14610a96578063f86a0a3f14610ac1578063faf38f6214610aea57610293565b8063a457c2d7146108e3578063a7ccd7b814610920578063a9059cbb1461094b578063bc951f9814610988578063d54994db146109b3578063d5eb3253146109dc57610293565b80638da5cb5b116101135780638da5cb5b146107e357806395d89b411461080e578063962dfc75146108395780639c74daf014610864578063a08f67601461088f578063a37f4ea9146108b857610293565b80636d165ec6146106d157806370a08231146106fc578063715018a6146107395780637d1db4a5146107505780637dd200e51461077b57806388f82020146107a657610293565b80633685d419116101fe57806352390c02116101b757806352390c02146105c55780635342acb4146105ee578063534a2eaa1461062b57806357e0a1d0146106565780635a96cdd71461067f5780635d098b38146106a857610293565b80633685d419146104a557806339509351146104ce5780633b124fe71461050b5780633dee3b7a14610536578063437823ec1461055f5780634549b0391461058857610293565b806318160ddd1161025057806318160ddd1461038157806322976e0d146103ac57806323b872dd146103d75780632663236f146104145780632d8381191461043d578063313ce5671461047a57610293565b806306fdde0314610298578063095ea7b3146102c35780630da138331461030057806313114a9d1461032b5780631694505e1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b15565b6040516102ba919061486e565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906144b3565b610ba7565b6040516102f79190614838565b60405180910390f35b34801561030c57600080fd5b50610315610bc5565b60405161032291906149d0565b60405180910390f35b34801561033757600080fd5b50610340610bcb565b60405161034d91906149d0565b60405180910390f35b34801561036257600080fd5b5061036b610bd5565b6040516103789190614853565b60405180910390f35b34801561038d57600080fd5b50610396610bf9565b6040516103a391906149d0565b60405180910390f35b3480156103b857600080fd5b506103c1610c03565b6040516103ce91906149d0565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190614464565b610c09565b60405161040b9190614838565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906144ef565b610ce2565b005b34801561044957600080fd5b50610464600480360381019061045f9190614518565b610db2565b60405161047191906149d0565b60405180910390f35b34801561048657600080fd5b5061048f610e20565b60405161049c9190614a45565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906143ad565b610e36565b005b3480156104da57600080fd5b506104f560048036038101906104f091906144b3565b611204565b6040516105029190614838565b60405180910390f35b34801561051757600080fd5b506105206112b7565b60405161052d91906149d0565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190614518565b6112bd565b005b34801561056b57600080fd5b50610586600480360381019061058191906143ad565b611343565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614541565b61141a565b6040516105bc91906149d0565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906143ad565b6114a0565b005b3480156105fa57600080fd5b50610615600480360381019061061091906143ad565b61173b565b6040516106229190614838565b60405180910390f35b34801561063757600080fd5b50610640611791565b60405161064d9190614838565b60405180910390f35b34801561066257600080fd5b5061067d600480360381019061067891906144ef565b6117a4565b005b34801561068b57600080fd5b506106a660048036038101906106a191906143ff565b61183d565b005b3480156106b457600080fd5b506106cf60048036038101906106ca91906143ff565b6118fd565b005b3480156106dd57600080fd5b506106e66119bd565b6040516106f391906149d0565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906143ad565b6119c3565b60405161073091906149d0565b60405180910390f35b34801561074557600080fd5b5061074e611aae565b005b34801561075c57600080fd5b50610765611be8565b60405161077291906149d0565b60405180910390f35b34801561078757600080fd5b50610790611bee565b60405161079d9190614838565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c891906143ad565b611c01565b6040516107da9190614838565b60405180910390f35b3480156107ef57600080fd5b506107f8611c57565b6040516108059190614802565b60405180910390f35b34801561081a57600080fd5b50610823611c80565b604051610830919061486e565b60405180910390f35b34801561084557600080fd5b5061084e611d12565b60405161085b919061481d565b60405180910390f35b34801561087057600080fd5b50610879611d38565b6040516108869190614802565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614518565b611d5c565b005b3480156108c457600080fd5b506108cd611de2565b6040516108da919061481d565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906144b3565b611e08565b6040516109179190614838565b60405180910390f35b34801561092c57600080fd5b50610935611ed5565b60405161094291906149d0565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d91906144b3565b611edb565b60405161097f9190614838565b60405180910390f35b34801561099457600080fd5b5061099d611ef9565b6040516109aa91906149d0565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190614518565b611eff565b005b3480156109e857600080fd5b506109f1611f85565b6040516109fe91906149d0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190614428565b611f8b565b604051610a3b91906149d0565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a6691906143ad565b612012565b005b348015610a7957600080fd5b50610a946004803603810190610a8f9190614518565b6120e9565b005b348015610aa257600080fd5b50610aab61216f565b604051610ab891906149d0565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae39190614518565b612175565b005b348015610af657600080fd5b50610aff6121fb565b604051610b0c91906149d0565b60405180910390f35b606060018054610b2490614c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090614c9a565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bbb610bb4612217565b848461221f565b6001905092915050565b60045481565b6000601154905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b60095481565b6000610c168484846123ea565b610cd784610c22612217565b610cd2856040518060600160405280602881526020016150b460289139601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c88612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127719092919063ffffffff16565b61221f565b600190509392505050565b610cea612217565b73ffffffffffffffffffffffffffffffffffffffff16610d08611c57565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590614950565b60405180910390fd5b80601360026101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610da79190614838565b60405180910390a150565b6000601254821115610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df0906148b0565b60405180910390fd5b6000610e036127c6565b9050610e18818461220190919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e3e612217565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611c57565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990614950565b60405180910390fd5b601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f35906148f0565b60405180910390fd5b60005b601580549050811015611200578173ffffffffffffffffffffffffffffffffffffffff1660158281548110610f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111ed5760156001601580549050610ffa9190614b96565b81548110611031577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660158281548110611096577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060158054806111b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611200565b80806111f890614ccc565b915050610f41565b5050565b60006112ad611211612217565b846112a88560186000611222612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b61221f565b6001905092915050565b60055481565b6112c5612217565b73ffffffffffffffffffffffffffffffffffffffff166112e3611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614950565b60405180910390fd5b8060108190555050565b61134b612217565b73ffffffffffffffffffffffffffffffffffffffff16611369611c57565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614950565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890614910565b60405180910390fd5b8161148257600061147184612807565b50505050505090508091505061149a565b600061148d84612807565b5050505050915050809150505b92915050565b6114a8612217565b73ffffffffffffffffffffffffffffffffffffffff166114c6611c57565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614950565b60405180910390fd5b601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906148f0565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561167d57611639601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db2565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b6117ac612217565b73ffffffffffffffffffffffffffffffffffffffff166117ca611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614950565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b611845612217565b73ffffffffffffffffffffffffffffffffffffffff16611863611c57565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614950565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611905612217565b73ffffffffffffffffffffffffffffffffffffffff16611923611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614950565b60405180910390fd5b80601360036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a5e57601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aa9565b611aa6601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610db2565b90505b919050565b611ab6612217565b73ffffffffffffffffffffffffffffffffffffffff16611ad4611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614950565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5481565b601360029054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611c8f90614c9a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbb90614c9a565b8015611d085780601f10611cdd57610100808354040283529160200191611d08565b820191906000526020600020905b815481529060010190602001808311611ceb57829003601f168201915b5050505050905090565b601360039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000005fec4b8a905ac4755f425bacab4202694c0af00f81565b611d64612217565b73ffffffffffffffffffffffffffffffffffffffff16611d82611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614950565b60405180910390fd5b8060078190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ecb611e15612217565b84611ec6856040518060600160405280602581526020016150dc6025913960186000611e3f612217565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127719092919063ffffffff16565b61221f565b6001905092915050565b600c5481565b6000611eef611ee8612217565b84846123ea565b6001905092915050565b60075481565b611f07612217565b73ffffffffffffffffffffffffffffffffffffffff16611f25611c57565b73ffffffffffffffffffffffffffffffffffffffff1614611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290614950565b60405180910390fd5b8060088190555050565b60105481565b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61201a612217565b73ffffffffffffffffffffffffffffffffffffffff16612038611c57565b73ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614950565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6120f1612217565b73ffffffffffffffffffffffffffffffffffffffff1661210f611c57565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90614950565b60405180910390fd5b80600f8190555050565b600b5481565b61217d612217565b73ffffffffffffffffffffffffffffffffffffffff1661219b611c57565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614950565b60405180910390fd5b80600b8190555050565b600d5481565b6000818361220f9190614b0b565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906149b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f6906148d0565b60405180910390fd5b80601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dd91906149d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614990565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c190614890565b60405180910390fd5b6000811161250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614970565b60405180910390fd5b612515611c57565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125835750612553611c57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125ce57600f548111156125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c490614930565b60405180910390fd5b5b60006125d9306119c3565b905060006010548210159050600f5482106125f457600f5491505b80801561260e5750601360019054906101000a900460ff16155b801561266657507f0000000000000000000000005fec4b8a905ac4755f425bacab4202694c0af00f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561267e5750601360029054906101000a900460ff165b1561268d5761268c8261286f565b5b601360009054906101000a900460ff16156126ac576126ab84612cb6565b5b600060019050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127535750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561275d57600090505b61276986868684612d3b565b505050505050565b60008383111582906127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b0919061486e565b60405180910390fd5b5082840390509392505050565b60008060006127d361304c565b915091506127ea818361220190919063ffffffff16565b9250505090565b600081836127ff9190614ab5565b905092915050565b60008060008060008060008060008060006128218c613397565b935093509350935060008060006128428f87878761283d6127c6565b613416565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6001601360016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156128cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128fb5781602001602082028036833780820191505090505b5090503081600081518110612939577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129d957600080fd5b505afa1580156129ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1191906143d6565b81600181518110612a4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ab0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461221f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b129594939291906149eb565b600060405180830381600087803b158015612b2c57600080fd5b505af1158015612b40573d6000803e3d6000fd5b5050505060004790506000811115612c96576000612b6b600d546009546127f190919063ffffffff16565b90506000612b82828461220190919063ffffffff16565b90506000612b9b600954836134ca90919063ffffffff16565b90506000612bb4600d54846134ca90919063ffffffff16565b905060018310612c9157601360039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612c26573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c8f573d6000803e3d6000fd5b505b505050505b50506000601360016101000a81548160ff02191690831515021790555050565b600454600581905550600854600981905550600c54600d819055507f0000000000000000000000005fec4b8a905ac4755f425bacab4202694c0af00f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d3857600754600981905550600b54600d819055505b50565b80612d4957612d486134e0565b5b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dec5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0157612dfc848484613542565b613038565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ea45750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eb957612eb48484846137b0565b613037565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f5d5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7257612f6d848484613a1e565b613036565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130145750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561302957613024848484613bf7565b613035565b613034848484613a1e565b5b5b5b5b8061304657613045613efa565b5b50505050565b600080600060125490506000600354905060005b60158054905081101561335a578260166000601584815481106130ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806131c05750816017600060158481548110613158577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156131d75760125460035494509450505050613393565b61328d6016600060158481548110613218577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613f1790919063ffffffff16565b925061334560176000601584815481106132d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f1790919063ffffffff16565b9150808061335290614ccc565b915050613060565b5061337260035460125461220190919063ffffffff16565b82101561338a57601254600354935093505050613393565b81819350935050505b9091565b60008060008060006133a886613f2d565b905060006133b587613f5e565b905060006133c288613f8f565b905060006133fd826133ef856133e1888e613f1790919063ffffffff16565b613f1790919063ffffffff16565b613f1790919063ffffffff16565b9050808484849750975097509750505050509193509193565b60008060008061342f858a6134ca90919063ffffffff16565b90506000613446868a6134ca90919063ffffffff16565b9050600061345d878a6134ca90919063ffffffff16565b90506000613474888a6134ca90919063ffffffff16565b905060006134af826134a185613493888a613f1790919063ffffffff16565b613f1790919063ffffffff16565b613f1790919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600081836134d89190614b3c565b905092915050565b60006005541480156134f457506000600954145b801561350257506000600d54145b1561350c57613540565b600554600681905550600954600a81905550600d54600e81905550600060058190555060006009819055506000600d819055505b565b600080600080600080600061355688612807565b96509650965096509650965096506135b688601760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364b87601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e086601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372c82613fc0565b61373581614165565b61373f858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161379c91906149d0565b60405180910390a350505050505050505050565b60008060008060008060006137c488612807565b965096509650965096509650965061382487601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b984601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394e86601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a82613fc0565b6139a381614165565b6139ad858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613a0a91906149d0565b60405180910390a350505050505050505050565b6000806000806000806000613a3288612807565b9650965096509650965096509650613a9287601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2786601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7382613fc0565b613b7c81614165565b613b86858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613be391906149d0565b60405180910390a350505050505050505050565b6000806000806000806000613c0b88612807565b9650965096509650965096509650613c6b88601760008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d0087601660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1790919063ffffffff16565b601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d9584601760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2a86601660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7682613fc0565b613e7f81614165565b613e89858461430a565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ee691906149d0565b60405180910390a350505050505050505050565b600654600581905550600a54600981905550600e54600d81905550565b60008183613f259190614b96565b905092915050565b6000613f576064613f49600554856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613f886064613f7a600954856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613fb96064613fab600d54856134ca90919063ffffffff16565b61220190919063ffffffff16565b9050919050565b6000613fca6127c6565b90506000613fe182846134ca90919063ffffffff16565b905061403581601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141605761411c83601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061416f6127c6565b9050600061418682846134ca90919063ffffffff16565b90506141da81601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614305576142c183601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f190919063ffffffff16565b601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61431f82601254613f1790919063ffffffff16565b60128190555061433a816011546127f190919063ffffffff16565b6011819055505050565b60008135905061435381615057565b92915050565b60008151905061436881615057565b92915050565b60008135905061437d8161506e565b92915050565b60008135905061439281615085565b92915050565b6000813590506143a78161509c565b92915050565b6000602082840312156143bf57600080fd5b60006143cd84828501614344565b91505092915050565b6000602082840312156143e857600080fd5b60006143f684828501614359565b91505092915050565b60006020828403121561441157600080fd5b600061441f8482850161436e565b91505092915050565b6000806040838503121561443b57600080fd5b600061444985828601614344565b925050602061445a85828601614344565b9150509250929050565b60008060006060848603121561447957600080fd5b600061448786828701614344565b935050602061449886828701614344565b92505060406144a986828701614398565b9150509250925092565b600080604083850312156144c657600080fd5b60006144d485828601614344565b92505060206144e585828601614398565b9150509250929050565b60006020828403121561450157600080fd5b600061450f84828501614383565b91505092915050565b60006020828403121561452a57600080fd5b600061453884828501614398565b91505092915050565b6000806040838503121561455457600080fd5b600061456285828601614398565b925050602061457385828601614383565b9150509250929050565b600061458983836145a4565b60208301905092915050565b61459e81614bdc565b82525050565b6145ad81614bca565b82525050565b6145bc81614bca565b82525050565b60006145cd82614a70565b6145d78185614a93565b93506145e283614a60565b8060005b838110156146135781516145fa888261457d565b975061460583614a86565b9250506001810190506145e6565b5085935050505092915050565b61462981614bee565b82525050565b61463881614c31565b82525050565b61464781614c55565b82525050565b600061465882614a7b565b6146628185614aa4565b9350614672818560208601614c67565b61467b81614da2565b840191505092915050565b6000614693602383614aa4565b915061469e82614db3565b604082019050919050565b60006146b6602a83614aa4565b91506146c182614e02565b604082019050919050565b60006146d9602283614aa4565b91506146e482614e51565b604082019050919050565b60006146fc601b83614aa4565b915061470782614ea0565b602082019050919050565b600061471f601f83614aa4565b915061472a82614ec9565b602082019050919050565b6000614742602883614aa4565b915061474d82614ef2565b604082019050919050565b6000614765602083614aa4565b915061477082614f41565b602082019050919050565b6000614788602983614aa4565b915061479382614f6a565b604082019050919050565b60006147ab602583614aa4565b91506147b682614fb9565b604082019050919050565b60006147ce602483614aa4565b91506147d982615008565b604082019050919050565b6147ed81614c1a565b82525050565b6147fc81614c24565b82525050565b600060208201905061481760008301846145b3565b92915050565b60006020820190506148326000830184614595565b92915050565b600060208201905061484d6000830184614620565b92915050565b6000602082019050614868600083018461462f565b92915050565b60006020820190508181036000830152614888818461464d565b905092915050565b600060208201905081810360008301526148a981614686565b9050919050565b600060208201905081810360008301526148c9816146a9565b9050919050565b600060208201905081810360008301526148e9816146cc565b9050919050565b60006020820190508181036000830152614909816146ef565b9050919050565b6000602082019050818103600083015261492981614712565b9050919050565b6000602082019050818103600083015261494981614735565b9050919050565b6000602082019050818103600083015261496981614758565b9050919050565b600060208201905081810360008301526149898161477b565b9050919050565b600060208201905081810360008301526149a98161479e565b9050919050565b600060208201905081810360008301526149c9816147c1565b9050919050565b60006020820190506149e560008301846147e4565b92915050565b600060a082019050614a0060008301886147e4565b614a0d602083018761463e565b8181036040830152614a1f81866145c2565b9050614a2e60608301856145b3565b614a3b60808301846147e4565b9695505050505050565b6000602082019050614a5a60008301846147f3565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ac082614c1a565b9150614acb83614c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0057614aff614d15565b5b828201905092915050565b6000614b1682614c1a565b9150614b2183614c1a565b925082614b3157614b30614d44565b5b828204905092915050565b6000614b4782614c1a565b9150614b5283614c1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8b57614b8a614d15565b5b828202905092915050565b6000614ba182614c1a565b9150614bac83614c1a565b925082821015614bbf57614bbe614d15565b5b828203905092915050565b6000614bd582614bfa565b9050919050565b6000614be782614bfa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614c3c82614c43565b9050919050565b6000614c4e82614bfa565b9050919050565b6000614c6082614c1a565b9050919050565b60005b83811015614c85578082015181840152602081019050614c6a565b83811115614c94576000848401525b50505050565b60006002820490506001821680614cb257607f821691505b60208210811415614cc657614cc5614d73565b5b50919050565b6000614cd782614c1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0a57614d09614d15565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61506081614bca565b811461506b57600080fd5b50565b61507781614bdc565b811461508257600080fd5b50565b61508e81614bee565b811461509957600080fd5b50565b6150a581614c1a565b81146150b057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ce72e8dbdd550161e355a94fe0244c78c2fda26a0e99a4c782f2ee7f1cbe6a6164736f6c63430008040033

Deployed Bytecode Sourcemap

402:18709:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3290:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4196:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;789:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5292:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1779:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3555:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1056:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4360:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18399:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5816:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3468:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6402:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4675:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;828:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18567:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6876:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5383:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6070:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11241:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1653:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18273:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18881:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18760:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1011:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3654:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1646:145:5;;;;;;;;;;;;;:::i;:::-;;1418:53:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1734:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5168:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1022:85:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3377::0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1881:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1836:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17975:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2008:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4896:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1261:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3879:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;965:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17842:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1477:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4049:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6993:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19000:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1216:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18126:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1305:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3290:81;3327:13;3359:5;3352:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3290:81;:::o;4196:158::-;4271:4;4287:39;4296:12;:10;:12::i;:::-;4310:7;4319:6;4287:8;:39::i;:::-;4343:4;4336:11;;4196:158;;;;:::o;789:33::-;;;;:::o;5292:85::-;5334:7;5360:10;;5353:17;;5292:85;:::o;1779:51::-;;;:::o;3555:93::-;3608:7;3634;;3627:14;;3555:93;:::o;1056:51::-;;;;:::o;4360:309::-;4458:4;4474:36;4484:6;4492:9;4503:6;4474:9;:36::i;:::-;4520:121;4529:6;4537:12;:10;:12::i;:::-;4551:89;4589:6;4551:89;;;;;;;;;;;;;;;;;:11;:19;4563:6;4551:19;;;;;;;;;;;;;;;:33;4571:12;:10;:12::i;:::-;4551:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4520:8;:121::i;:::-;4658:4;4651:11;;4360:309;;;;;:::o;18399:162::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18496:8:0::1;18474:19;;:30;;;;;;;;;;;;;;;;;;18519:35;18545:8;18519:35;;;;;;:::i;:::-;;;;;;;;18399:162:::0;:::o;5816:248::-;5882:7;5920;;5909;:18;;5901:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5984:19;6007:9;:7;:9::i;:::-;5984:32;;6033:24;6045:11;6033:7;:11;;:24;;;;:::i;:::-;6026:31;;;5816:248;;;:::o;3468:81::-;3509:5;3533:9;;;;;;;;;;;3526:16;;3468:81;:::o;6402:468::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6483:11:0::1;:20;6495:7;6483:20;;;;;;;;;;;;;;;;;;;;;;;;;6475:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6550:9;6545:319;6569:9;:16;;;;6565:1;:20;6545:319;;;6626:7;6610:23;;:9;6620:1;6610:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;6606:248;;;6668:9;6697:1;6678:9;:16;;;;:20;;;;:::i;:::-;6668:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6653:9;6663:1;6653:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;6736:1;6717:7;:16;6725:7;6717:16;;;;;;;;;;;;;;;:20;;;;6778:5;6755:11;:20;6767:7;6755:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6801:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6834:5;;6606:248;6587:3;;;;;:::i;:::-;;;;6545:319;;;;6402:468:::0;:::o;4675:215::-;4763:4;4779:83;4788:12;:10;:12::i;:::-;4802:7;4811:50;4850:10;4811:11;:25;4823:12;:10;:12::i;:::-;4811:25;;;;;;;;;;;;;;;:34;4837:7;4811:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4779:8;:83::i;:::-;4879:4;4872:11;;4675:215;;;;:::o;828:39::-;;;;:::o;18567:187::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18716:31:0::1;18681:32;:66;;;;18567:187:::0;:::o;6876:111::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6976:4:0::1;6946:18;:27;6965:7;6946:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;6876:111:::0;:::o;5383:427::-;5473:7;5511;;5500;:18;;5492:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5569:17;5564:240;;5603:15;5628:18;5638:7;5628:9;:18::i;:::-;5602:44;;;;;;;;5667:7;5660:14;;;;;5564:240;5707:23;5739:18;5749:7;5739:9;:18::i;:::-;5705:52;;;;;;;;5778:15;5771:22;;;5383:427;;;;;:::o;6070:326::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6152:11:0::1;:20;6164:7;6152:20;;;;;;;;;;;;;;;;;;;;;;;;;6151:21;6143:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6236:1;6217:7;:16;6225:7;6217:16;;;;;;;;;;;;;;;;:20;6214:106;;;6272:37;6292:7;:16;6300:7;6292:16;;;;;;;;;;;;;;;;6272:19;:37::i;:::-;6253:7;:16;6261:7;6253:16;;;;;;;;;;;;;;;:56;;;;6214:106;6352:4;6329:11;:20;6341:7;6329:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;6366:9;6381:7;6366:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6070:326:::0;:::o;11241:121::-;11305:4;11328:18;:27;11347:7;11328:27;;;;;;;;;;;;;;;;;;;;;;;;;11321:34;;11241:121;;;:::o;1653:42::-;;;;;;;;;;;;;:::o;18273:120::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18378:8:0::1;18352:23;;:34;;;;;;;;;;;;;;;;;;18273:120:::0;:::o;18881:113::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18981:6:0::1;18963:15;;:24;;;;;;;;;;;;;;;;;;18881:113:::0;:::o;18760:115::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18862:6:0::1;18843:16;;:25;;;;;;;;;;;;;;;;;;18760:115:::0;:::o;1011:39::-;;;;:::o;3654:219::-;3720:7;3743:11;:20;3755:7;3743:20;;;;;;;;;;;;;;;;;;;;;;;;;3739:74;;;3786:7;:16;3794:7;3786:16;;;;;;;;;;;;;;;;3779:23;;;;3739:74;3829:37;3849:7;:16;3857:7;3849:16;;;;;;;;;;;;;;;;3829:19;:37::i;:::-;3822:44;;3654:219;;;;:::o;1646:145:5:-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1752:1:::1;1715:40;;1736:6;::::0;::::1;;;;;;;;1715:40;;;;;;;;;;;;1782:1;1765:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1646:145::o:0;1418:53:0:-;;;;:::o;1734:38::-;;;;;;;;;;;;;:::o;5168:118::-;5236:4;5259:11;:20;5271:7;5259:20;;;;;;;;;;;;;;;;;;;;;;;;;5252:27;;5168:118;;;:::o;1022:85:5:-;1068:7;1094:6;;;;;;;;;;;1087:13;;1022:85;:::o;3377::0:-;3416:13;3448:7;3441:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3377:85;:::o;1881:93::-;;;;;;;;;;;;;:::o;1836:39::-;;;:::o;17975:145::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18093:20:0::1;18069:21;:44;;;;17975:145:::0;:::o;2008:92::-;;;;;;;;;;;;;:::o;4896:266::-;4989:4;5005:129;5014:12;:10;:12::i;:::-;5028:7;5037:96;5076:15;5037:96;;;;;;;;;;;;;;;;;:11;:25;5049:12;:10;:12::i;:::-;5037:25;;;;;;;;;;;;;;;:34;5063:7;5037:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;5005:8;:129::i;:::-;5151:4;5144:11;;4896:266;;;;:::o;1261:38::-;;;;:::o;3879:164::-;3957:4;3973:42;3983:12;:10;:12::i;:::-;3997:9;4008:6;3973:9;:42::i;:::-;4032:4;4025:11;;3879:164;;;;:::o;965:40::-;;;;:::o;17842:127::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17950:12:0::1;17927:20;:35;;;;17842:127:::0;:::o;1477:74::-;;;;:::o;4049:141::-;4130:7;4156:11;:18;4168:5;4156:18;;;;;;;;;;;;;;;:27;4175:7;4156:27;;;;;;;;;;;;;;;;4149:34;;4049:141;;;;:::o;6993:110::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7091:5:0::1;7061:18;:27;7080:7;7061:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;6993:110:::0;:::o;19000:109::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19091:11:0::1;19076:12;:26;;;;19000:109:::0;:::o;1216:39::-;;;;:::o;18126:141::-;1243:12:5;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18241:19:0::1;18218:20;:42;;;;18126:141:::0;:::o;1305:49::-;;;;:::o;3717:96:6:-;3775:7;3805:1;3801;:5;;;;:::i;:::-;3794:12;;3717:96;;;;:::o;593::1:-;646:7;672:10;665:17;;593:96;:::o;11368:331:0:-;11477:1;11460:19;;:5;:19;;;;11452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11557:1;11538:21;;:7;:21;;;;11530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11639:6;11609:11;:18;11621:5;11609:18;;;;;;;;;;;;;;;:27;11628:7;11609:27;;;;;;;;;;;;;;;:36;;;;11676:7;11660:32;;11669:5;11660:32;;;11685:6;11660:32;;;;;;:::i;:::-;;;;;;;;11368:331;;;:::o;11705:1319::-;11808:1;11792:18;;:4;:18;;;;11784:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11884:1;11870:16;;:2;:16;;;;11862:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11953:1;11944:6;:10;11936:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12022:7;:5;:7::i;:::-;12014:15;;:4;:15;;;;:32;;;;;12039:7;:5;:7::i;:::-;12033:13;;:2;:13;;;;12014:32;12011:136;;;12079:12;;12069:6;:22;;12061:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12011:136;12157:28;12188:24;12206:4;12188:9;:24::i;:::-;12157:55;;12222:24;12273:32;;12249:20;:56;;12222:83;;12343:12;;12319:20;:36;12316:101;;12394:12;;12371:35;;12316:101;12431:19;:51;;;;;12468:14;;;;;;;;;;;12467:15;12431:51;:90;;;;;12507:14;12499:22;;:4;:22;;;;12431:90;:126;;;;;12538:19;;;;;;;;;;;12431:126;12427:190;;;12573:33;12585:20;12573:11;:33::i;:::-;12427:190;12630:23;;;;;;;;;;;12627:64;;;12669:11;12677:2;12669:7;:11::i;:::-;12627:64;12761:12;12776:4;12761:19;;12877:18;:24;12896:4;12877:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;12905:18;:22;12924:2;12905:22;;;;;;;;;;;;;;;;;;;;;;;;;12877:50;12874:95;;;12953:5;12943:15;;12874:95;12979:38;12994:4;12999:2;13002:6;13009:7;12979:14;:38::i;:::-;11705:1319;;;;;;:::o;4803:201:6:-;4889:7;4945:1;4940;:6;;4948:12;4932:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4986:1;4982;:5;4975:12;;4803:201;;;;;:::o;9257:158:0:-;9297:7;9317:15;9334;9353:18;:16;:18::i;:::-;9316:55;;;;9388:20;9400:7;9388;:11;;:20;;;;:::i;:::-;9381:27;;;;9257:158;:::o;2649:96:6:-;2707:7;2737:1;2733;:5;;;;:::i;:::-;2726:12;;2649:96;;;;:::o;7848:461:0:-;7906:7;7915;7924;7933;7942;7951;7960;7980:23;8005:12;8019:18;8039:17;8060:19;8071:7;8060:10;:19::i;:::-;7979:100;;;;;;;;8090:15;8107:23;8132:12;8148:59;8159:7;8168:4;8174:10;8186:9;8197;:7;:9::i;:::-;8148:10;:59::i;:::-;8089:118;;;;;;8225:7;8234:15;8251:4;8257:15;8274:4;8280:10;8292:9;8217:85;;;;;;;;;;;;;;;;;;;;;7848:461;;;;;;;;;:::o;13411:1142::-;2553:4;2536:14;;:21;;;;;;;;;;;;;;;;;;13492::::1;13530:1;13516:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13492:40;;13560:4;13542;13547:1;13542:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;13585:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13575:4;13580:1;13575:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;13618:71;13635:4;13650:15;13668:20;13618:8;:71::i;:::-;13700:15;:66;;;13780:20;13814:1;13829:4;13855;13874:15;13700:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13910:26;13939:21;13910:50;;13995:1;13974:18;:22;13971:576;;;14078:21;14102:31;14120:12;;14102:13;;:17;;:31;;;;:::i;:::-;14078:55;;14147:21;14171:37;14194:13;14171:18;:22;;:37;;;;:::i;:::-;14147:61;;14222:27;14252:32;14270:13;;14252;:17;;:32;;;;:::i;:::-;14222:62;;14298:26;14327:31;14345:12;;14327:13;:17;;:31;;;;:::i;:::-;14298:60;;14394:1;14377:13;:18;14373:164;;14414:16;;;;;;;;;;;:25;;:46;14440:19;14414:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14478:15;;;;;;;;;;;:24;;:44;14503:18;14478:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14373:164;13971:576;;;;;2567:1;;2595:5:::0;2578:14;;:22;;;;;;;;;;;;;;;;;;13411:1142;:::o;13030:375::-;13094:14;;13084:7;:24;;;;13134:20;;13118:13;:36;;;;13179:19;;13164:12;:34;;;;13225:14;13212:27;;:9;:27;;;13208:191;;;13318:21;;13302:13;:37;;;;13368:20;;13353:12;:35;;;;13208:191;13030:375;:::o;14559:819::-;14669:7;14665:52;;14692:14;:12;:14::i;:::-;14665:52;14731:11;:19;14743:6;14731:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;14755:11;:22;14767:9;14755:22;;;;;;;;;;;;;;;;;;;;;;;;;14754:23;14731:46;14727:582;;;14793:47;14814:6;14822:9;14833:6;14793:20;:47::i;:::-;14727:582;;;14862:11;:19;14874:6;14862:19;;;;;;;;;;;;;;;;;;;;;;;;;14861:20;:46;;;;;14885:11;:22;14897:9;14885:22;;;;;;;;;;;;;;;;;;;;;;;;;14861:46;14857:452;;;14923:45;14942:6;14950:9;14961:6;14923:18;:45::i;:::-;14857:452;;;14990:11;:19;15002:6;14990:19;;;;;;;;;;;;;;;;;;;;;;;;;14989:20;:47;;;;;15014:11;:22;15026:9;15014:22;;;;;;;;;;;;;;;;;;;;;;;;;15013:23;14989:47;14985:324;;;15052:43;15069:6;15077:9;15088:6;15052:16;:43::i;:::-;14985:324;;;15116:11;:19;15128:6;15116:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;15139:11;:22;15151:9;15139:22;;;;;;;;;;;;;;;;;;;;;;;;;15116:45;15112:197;;;15177:47;15198:6;15206:9;15217:6;15177:20;:47::i;:::-;15112:197;;;15255:43;15272:6;15280:9;15291:6;15255:16;:43::i;:::-;15112:197;14985:324;14857:452;14727:582;15323:7;15319:53;;15346:15;:13;:15::i;:::-;15319:53;14559:819;;;;:::o;9421:600::-;9470:7;9479;9498:15;9516:7;;9498:25;;9533:15;9551:7;;9533:25;;9573:9;9568:317;9592:9;:16;;;;9588:1;:20;9568:317;;;9657:7;9633;:21;9641:9;9651:1;9641:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9633:21;;;;;;;;;;;;;;;;:31;:66;;;;9692:7;9668;:21;9676:9;9686:1;9676:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9668:21;;;;;;;;;;;;;;;;:31;9633:66;9629:130;;;9727:7;;9736;;9719:25;;;;;;;;;9629:130;9782:34;9794:7;:21;9802:9;9812:1;9802:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9794:21;;;;;;;;;;;;;;;;9782:7;:11;;:34;;;;:::i;:::-;9772:44;;9840:34;9852:7;:21;9860:9;9870:1;9860:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9852:21;;;;;;;;;;;;;;;;9840:7;:11;;:34;;;;:::i;:::-;9830:44;;9610:3;;;;;:::i;:::-;;;;9568:317;;;;9908:20;9920:7;;9908;;:11;;:20;;;;:::i;:::-;9898:7;:30;9894:86;;;9952:7;;9961;;9944:25;;;;;;;;9894:86;9997:7;10006;9989:25;;;;;;9421:600;;;:::o;8315:418::-;8374:7;8383;8392;8401;8420:12;8435:24;8451:7;8435:15;:24::i;:::-;8420:39;;8469:18;8490:30;8512:7;8490:21;:30::i;:::-;8469:51;;8530:17;8550:29;8571:7;8550:20;:29::i;:::-;8530:49;;8589:23;8615:48;8653:9;8615:33;8637:10;8615:17;8627:4;8615:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:48;;;;:::i;:::-;8589:74;;8681:15;8698:4;8704:10;8716:9;8673:53;;;;;;;;;;;;8315:418;;;;;:::o;8739:512::-;8872:7;8881;8890;8909:15;8927:24;8939:11;8927:7;:11;;:24;;;;:::i;:::-;8909:42;;8961:12;8976:21;8985:11;8976:4;:8;;:21;;;;:::i;:::-;8961:36;;9007:18;9028:27;9043:11;9028:10;:14;;:27;;;;:::i;:::-;9007:48;;9065:17;9085:26;9099:11;9085:9;:13;;:26;;;;:::i;:::-;9065:46;;9121:23;9147:48;9185:9;9147:33;9169:10;9147:17;9159:4;9147:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:48;;;;:::i;:::-;9121:74;;9213:7;9222:15;9239:4;9205:39;;;;;;;;;;;8739:512;;;;;;;;;:::o;3341:96:6:-;3399:7;3429:1;3425;:5;;;;:::i;:::-;3418:12;;3341:96;;;;:::o;7109:342:0:-;7165:1;7154:7;;:12;:34;;;;;7187:1;7170:13;;:18;7154:34;:55;;;;;7208:1;7192:12;;:17;7154:55;7151:91;;;7225:7;;7151:91;7270:7;;7252:15;:25;;;;7311:13;;7287:21;:37;;;;7357:12;;7334:20;:35;;;;7390:1;7380:7;:11;;;;7417:1;7401:13;:17;;;;7443:1;7428:12;:16;;;;7109:342;:::o;16554:603::-;16655:15;16672:23;16697:12;16711:23;16736:12;16750:18;16770:17;16791:18;16801:7;16791:9;:18::i;:::-;16654:155;;;;;;;;;;;;;;16837:28;16857:7;16837;:15;16845:6;16837:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16819:7;:15;16827:6;16819:15;;;;;;;;;;;;;;;:46;;;;16893:28;16913:7;16893;:15;16901:6;16893:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16875:7;:15;16883:6;16875:15;;;;;;;;;;;;;;;:46;;;;16952:39;16975:15;16952:7;:18;16960:9;16952:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;16931:7;:18;16939:9;16931:18;;;;;;;;;;;;;;;:60;;;;17001:25;17015:10;17001:13;:25::i;:::-;17036:23;17049:9;17036:12;:23::i;:::-;17069:22;17080:4;17086;17069:10;:22::i;:::-;17123:9;17106:44;;17115:6;17106:44;;;17134:15;17106:44;;;;;;:::i;:::-;;;;;;;;16554:603;;;;;;;;;;:::o;15933:615::-;16032:15;16049:23;16074:12;16088:23;16113:12;16127:18;16147:17;16168:18;16178:7;16168:9;:18::i;:::-;16031:155;;;;;;;;;;;;;;16214:28;16234:7;16214;:15;16222:6;16214:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16196:7;:15;16204:6;16196:15;;;;;;;;;;;;;;;:46;;;;16273:39;16296:15;16273:7;:18;16281:9;16273:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;16252:7;:18;16260:9;16252:18;;;;;;;;;;;;;;;:60;;;;16343:39;16366:15;16343:7;:18;16351:9;16343:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;16322:7;:18;16330:9;16322:18;;;;;;;;;;;;;;;:60;;;;16392:25;16406:10;16392:13;:25::i;:::-;16427:23;16440:9;16427:12;:23::i;:::-;16460:22;16471:4;16477;16460:10;:22::i;:::-;16514:9;16497:44;;16506:6;16497:44;;;16525:15;16497:44;;;;;;:::i;:::-;;;;;;;;15933:615;;;;;;;;;;:::o;15384:543::-;15481:15;15498:23;15523:12;15537:23;15562:12;15576:18;15596:17;15617:18;15627:7;15617:9;:18::i;:::-;15480:155;;;;;;;;;;;;;;15663:28;15683:7;15663;:15;15671:6;15663:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;15645:7;:15;15653:6;15645:15;;;;;;;;;;;;;;;:46;;;;15722:39;15745:15;15722:7;:18;15730:9;15722:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;15701:7;:18;15709:9;15701:18;;;;;;;;;;;;;;;:60;;;;15771:25;15785:10;15771:13;:25::i;:::-;15806:23;15819:9;15806:12;:23::i;:::-;15839:22;15850:4;15856;15839:10;:22::i;:::-;15893:9;15876:44;;15885:6;15876:44;;;15904:15;15876:44;;;;;;:::i;:::-;;;;;;;;15384:543;;;;;;;;;;:::o;17163:673::-;17264:15;17281:23;17306:12;17320:23;17345:12;17359:18;17379:17;17400:18;17410:7;17400:9;:18::i;:::-;17263:155;;;;;;;;;;;;;;17446:28;17466:7;17446;:15;17454:6;17446:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17428:7;:15;17436:6;17428:15;;;;;;;;;;;;;;;:46;;;;17502:28;17522:7;17502;:15;17510:6;17502:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17484:7;:15;17492:6;17484:15;;;;;;;;;;;;;;;:46;;;;17561:39;17584:15;17561:7;:18;17569:9;17561:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;17540:7;:18;17548:9;17540:18;;;;;;;;;;;;;;;:60;;;;17631:39;17654:15;17631:7;:18;17639:9;17631:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;17610:7;:18;17618:9;17610:18;;;;;;;;;;;;;;;:60;;;;17680:25;17694:10;17680:13;:25::i;:::-;17715:23;17728:9;17715:12;:23::i;:::-;17748:22;17759:4;17765;17748:10;:22::i;:::-;17802:9;17785:44;;17794:6;17785:44;;;17813:15;17785:44;;;;;;:::i;:::-;;;;;;;;17163:673;;;;;;;;;;:::o;7457:167::-;7510:15;;7500:7;:25;;;;7551:21;;7535:13;:37;;;;7597:20;;7582:12;:35;;;;7457:167::o;3007:96:6:-;3065:7;3095:1;3091;:5;;;;:::i;:::-;3084:12;;3007:96;;;;:::o;10751:150:0:-;10815:7;10841:53;10879:5;10841:20;10853:7;;10841;:11;;:20;;;;:::i;:::-;:24;;:53;;;;:::i;:::-;10834:60;;10751:150;;;:::o;10907:162::-;10977:7;11003:59;11047:5;11003:26;11015:13;;11003:7;:11;;:26;;;;:::i;:::-;:30;;:59;;;;:::i;:::-;10996:66;;10907:162;;;:::o;11075:160::-;11144:7;11170:58;11213:5;11170:25;11182:12;;11170:7;:11;;:25;;;;:::i;:::-;:29;;:58;;;;:::i;:::-;11163:65;;11075:160;;;:::o;10027:359::-;10088:19;10111:9;:7;:9::i;:::-;10088:32;;10130:18;10151:27;10166:11;10151:10;:14;;:27;;;;:::i;:::-;10130:48;;10213:38;10240:10;10213:7;:22;10229:4;10213:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;10188:7;:22;10204:4;10188:22;;;;;;;;;;;;;;;:63;;;;10264:11;:26;10284:4;10264:26;;;;;;;;;;;;;;;;;;;;;;;;;10261:119;;;10331:38;10358:10;10331:7;:22;10347:4;10331:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;10306:7;:22;10322:4;10306:22;;;;;;;;;;;;;;;:63;;;;10261:119;10027:359;;;:::o;10392:353::-;10451:19;10474:9;:7;:9::i;:::-;10451:32;;10493:17;10513:26;10527:11;10513:9;:13;;:26;;;;:::i;:::-;10493:46;;10574:37;10601:9;10574:7;:22;10590:4;10574:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;10549:7;:22;10565:4;10549:22;;;;;;;;;;;;;;;:62;;;;10624:11;:26;10644:4;10624:26;;;;;;;;;;;;;;;;;;;;;;;;;10621:118;;;10691:37;10718:9;10691:7;:22;10707:4;10691:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;10666:7;:22;10682:4;10666:22;;;;;;;;;;;;;;;:62;;;;10621:118;10392:353;;;:::o;7699:143::-;7775:17;7787:4;7775:7;;:11;;:17;;;;:::i;:::-;7765:7;:27;;;;7815:20;7830:4;7815:10;;:14;;:20;;;;:::i;:::-;7802:10;:33;;;;7699:143;;:::o;7:139:7:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;653:87;;;;:::o;746:262::-;805:6;854:2;842:9;833:7;829:23;825:32;822:2;;;870:1;867;860:12;822:2;913:1;938:53;983:7;974:6;963:9;959:22;938:53;:::i;:::-;928:63;;884:117;812:196;;;;:::o;1014:284::-;1084:6;1133:2;1121:9;1112:7;1108:23;1104:32;1101:2;;;1149:1;1146;1139:12;1101:2;1192:1;1217:64;1273:7;1264:6;1253:9;1249:22;1217:64;:::i;:::-;1207:74;;1163:128;1091:207;;;;:::o;1304:278::-;1371:6;1420:2;1408:9;1399:7;1395:23;1391:32;1388:2;;;1436:1;1433;1426:12;1388:2;1479:1;1504:61;1557:7;1548:6;1537:9;1533:22;1504:61;:::i;:::-;1494:71;;1450:125;1378:204;;;;:::o;1588:407::-;1656:6;1664;1713:2;1701:9;1692:7;1688:23;1684:32;1681:2;;;1729:1;1726;1719:12;1681:2;1772:1;1797:53;1842:7;1833:6;1822:9;1818:22;1797:53;:::i;:::-;1787:63;;1743:117;1899:2;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1870:118;1671:324;;;;;:::o;2001:552::-;2078:6;2086;2094;2143:2;2131:9;2122:7;2118:23;2114:32;2111:2;;;2159:1;2156;2149:12;2111:2;2202:1;2227:53;2272:7;2263:6;2252:9;2248:22;2227:53;:::i;:::-;2217:63;;2173:117;2329:2;2355:53;2400:7;2391:6;2380:9;2376:22;2355:53;:::i;:::-;2345:63;;2300:118;2457:2;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2428:118;2101:452;;;;;:::o;2559:407::-;2627:6;2635;2684:2;2672:9;2663:7;2659:23;2655:32;2652:2;;;2700:1;2697;2690:12;2652:2;2743:1;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2714:117;2870:2;2896:53;2941:7;2932:6;2921:9;2917:22;2896:53;:::i;:::-;2886:63;;2841:118;2642:324;;;;;:::o;2972:256::-;3028:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:2;;;3093:1;3090;3083:12;3045:2;3136:1;3161:50;3203:7;3194:6;3183:9;3179:22;3161:50;:::i;:::-;3151:60;;3107:114;3035:193;;;;:::o;3234:262::-;3293:6;3342:2;3330:9;3321:7;3317:23;3313:32;3310:2;;;3358:1;3355;3348:12;3310:2;3401:1;3426:53;3471:7;3462:6;3451:9;3447:22;3426:53;:::i;:::-;3416:63;;3372:117;3300:196;;;;:::o;3502:401::-;3567:6;3575;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;3640:1;3637;3630:12;3592:2;3683:1;3708:53;3753:7;3744:6;3733:9;3729:22;3708:53;:::i;:::-;3698:63;;3654:117;3810:2;3836:50;3878:7;3869:6;3858:9;3854:22;3836:50;:::i;:::-;3826:60;;3781:115;3582:321;;;;;:::o;3909:179::-;3978:10;3999:46;4041:3;4033:6;3999:46;:::i;:::-;4077:4;4072:3;4068:14;4054:28;;3989:99;;;;:::o;4094:142::-;4197:32;4223:5;4197:32;:::i;:::-;4192:3;4185:45;4175:61;;:::o;4242:108::-;4319:24;4337:5;4319:24;:::i;:::-;4314:3;4307:37;4297:53;;:::o;4356:118::-;4443:24;4461:5;4443:24;:::i;:::-;4438:3;4431:37;4421:53;;:::o;4510:732::-;4629:3;4658:54;4706:5;4658:54;:::i;:::-;4728:86;4807:6;4802:3;4728:86;:::i;:::-;4721:93;;4838:56;4888:5;4838:56;:::i;:::-;4917:7;4948:1;4933:284;4958:6;4955:1;4952:13;4933:284;;;5034:6;5028:13;5061:63;5120:3;5105:13;5061:63;:::i;:::-;5054:70;;5147:60;5200:6;5147:60;:::i;:::-;5137:70;;4993:224;4980:1;4977;4973:9;4968:14;;4933:284;;;4937:14;5233:3;5226:10;;4634:608;;;;;;;:::o;5248:109::-;5329:21;5344:5;5329:21;:::i;:::-;5324:3;5317:34;5307:50;;:::o;5363:185::-;5477:64;5535:5;5477:64;:::i;:::-;5472:3;5465:77;5455:93;;:::o;5554:147::-;5649:45;5688:5;5649:45;:::i;:::-;5644:3;5637:58;5627:74;;:::o;5707:364::-;5795:3;5823:39;5856:5;5823:39;:::i;:::-;5878:71;5942:6;5937:3;5878:71;:::i;:::-;5871:78;;5958:52;6003:6;5998:3;5991:4;5984:5;5980:16;5958:52;:::i;:::-;6035:29;6057:6;6035:29;:::i;:::-;6030:3;6026:39;6019:46;;5799:272;;;;;:::o;6077:366::-;6219:3;6240:67;6304:2;6299:3;6240:67;:::i;:::-;6233:74;;6316:93;6405:3;6316:93;:::i;:::-;6434:2;6429:3;6425:12;6418:19;;6223:220;;;:::o;6449:366::-;6591:3;6612:67;6676:2;6671:3;6612:67;:::i;:::-;6605:74;;6688:93;6777:3;6688:93;:::i;:::-;6806:2;6801:3;6797:12;6790:19;;6595:220;;;:::o;6821:366::-;6963:3;6984:67;7048:2;7043:3;6984:67;:::i;:::-;6977:74;;7060:93;7149:3;7060:93;:::i;:::-;7178:2;7173:3;7169:12;7162:19;;6967:220;;;:::o;7193:366::-;7335:3;7356:67;7420:2;7415:3;7356:67;:::i;:::-;7349:74;;7432:93;7521:3;7432:93;:::i;:::-;7550:2;7545:3;7541:12;7534:19;;7339:220;;;:::o;7565:366::-;7707:3;7728:67;7792:2;7787:3;7728:67;:::i;:::-;7721:74;;7804:93;7893:3;7804:93;:::i;:::-;7922:2;7917:3;7913:12;7906:19;;7711:220;;;:::o;7937:366::-;8079:3;8100:67;8164:2;8159:3;8100:67;:::i;:::-;8093:74;;8176:93;8265:3;8176:93;:::i;:::-;8294:2;8289:3;8285:12;8278:19;;8083:220;;;:::o;8309:366::-;8451:3;8472:67;8536:2;8531:3;8472:67;:::i;:::-;8465:74;;8548:93;8637:3;8548:93;:::i;:::-;8666:2;8661:3;8657:12;8650:19;;8455:220;;;:::o;8681:366::-;8823:3;8844:67;8908:2;8903:3;8844:67;:::i;:::-;8837:74;;8920:93;9009:3;8920:93;:::i;:::-;9038:2;9033:3;9029:12;9022:19;;8827:220;;;:::o;9053:366::-;9195:3;9216:67;9280:2;9275:3;9216:67;:::i;:::-;9209:74;;9292:93;9381:3;9292:93;:::i;:::-;9410:2;9405:3;9401:12;9394:19;;9199:220;;;:::o;9425:366::-;9567:3;9588:67;9652:2;9647:3;9588:67;:::i;:::-;9581:74;;9664:93;9753:3;9664:93;:::i;:::-;9782:2;9777:3;9773:12;9766:19;;9571:220;;;:::o;9797:118::-;9884:24;9902:5;9884:24;:::i;:::-;9879:3;9872:37;9862:53;;:::o;9921:112::-;10004:22;10020:5;10004:22;:::i;:::-;9999:3;9992:35;9982:51;;:::o;10039:222::-;10132:4;10170:2;10159:9;10155:18;10147:26;;10183:71;10251:1;10240:9;10236:17;10227:6;10183:71;:::i;:::-;10137:124;;;;:::o;10267:254::-;10376:4;10414:2;10403:9;10399:18;10391:26;;10427:87;10511:1;10500:9;10496:17;10487:6;10427:87;:::i;:::-;10381:140;;;;:::o;10527:210::-;10614:4;10652:2;10641:9;10637:18;10629:26;;10665:65;10727:1;10716:9;10712:17;10703:6;10665:65;:::i;:::-;10619:118;;;;:::o;10743:276::-;10863:4;10901:2;10890:9;10886:18;10878:26;;10914:98;11009:1;10998:9;10994:17;10985:6;10914:98;:::i;:::-;10868:151;;;;:::o;11025:313::-;11138:4;11176:2;11165:9;11161:18;11153:26;;11225:9;11219:4;11215:20;11211:1;11200:9;11196:17;11189:47;11253:78;11326:4;11317:6;11253:78;:::i;:::-;11245:86;;11143:195;;;;:::o;11344:419::-;11510:4;11548:2;11537:9;11533:18;11525:26;;11597:9;11591:4;11587:20;11583:1;11572:9;11568:17;11561:47;11625:131;11751:4;11625:131;:::i;:::-;11617:139;;11515:248;;;:::o;11769:419::-;11935:4;11973:2;11962:9;11958:18;11950:26;;12022:9;12016:4;12012:20;12008:1;11997:9;11993:17;11986:47;12050:131;12176:4;12050:131;:::i;:::-;12042:139;;11940:248;;;:::o;12194:419::-;12360:4;12398:2;12387:9;12383:18;12375:26;;12447:9;12441:4;12437:20;12433:1;12422:9;12418:17;12411:47;12475:131;12601:4;12475:131;:::i;:::-;12467:139;;12365:248;;;:::o;12619:419::-;12785:4;12823:2;12812:9;12808:18;12800:26;;12872:9;12866:4;12862:20;12858:1;12847:9;12843:17;12836:47;12900:131;13026:4;12900:131;:::i;:::-;12892:139;;12790:248;;;:::o;13044:419::-;13210:4;13248:2;13237:9;13233:18;13225:26;;13297:9;13291:4;13287:20;13283:1;13272:9;13268:17;13261:47;13325:131;13451:4;13325:131;:::i;:::-;13317:139;;13215:248;;;:::o;13469:419::-;13635:4;13673:2;13662:9;13658:18;13650:26;;13722:9;13716:4;13712:20;13708:1;13697:9;13693:17;13686:47;13750:131;13876:4;13750:131;:::i;:::-;13742:139;;13640:248;;;:::o;13894:419::-;14060:4;14098:2;14087:9;14083:18;14075:26;;14147:9;14141:4;14137:20;14133:1;14122:9;14118:17;14111:47;14175:131;14301:4;14175:131;:::i;:::-;14167:139;;14065:248;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14490:248;;;:::o;14744:419::-;14910:4;14948:2;14937:9;14933:18;14925:26;;14997:9;14991:4;14987:20;14983:1;14972:9;14968:17;14961:47;15025:131;15151:4;15025:131;:::i;:::-;15017:139;;14915:248;;;:::o;15169:419::-;15335:4;15373:2;15362:9;15358:18;15350:26;;15422:9;15416:4;15412:20;15408:1;15397:9;15393:17;15386:47;15450:131;15576:4;15450:131;:::i;:::-;15442:139;;15340:248;;;:::o;15594:222::-;15687:4;15725:2;15714:9;15710:18;15702:26;;15738:71;15806:1;15795:9;15791:17;15782:6;15738:71;:::i;:::-;15692:124;;;;:::o;15822:831::-;16085:4;16123:3;16112:9;16108:19;16100:27;;16137:71;16205:1;16194:9;16190:17;16181:6;16137:71;:::i;:::-;16218:80;16294:2;16283:9;16279:18;16270:6;16218:80;:::i;:::-;16345:9;16339:4;16335:20;16330:2;16319:9;16315:18;16308:48;16373:108;16476:4;16467:6;16373:108;:::i;:::-;16365:116;;16491:72;16559:2;16548:9;16544:18;16535:6;16491:72;:::i;:::-;16573:73;16641:3;16630:9;16626:19;16617:6;16573:73;:::i;:::-;16090:563;;;;;;;;:::o;16659:214::-;16748:4;16786:2;16775:9;16771:18;16763:26;;16799:67;16863:1;16852:9;16848:17;16839:6;16799:67;:::i;:::-;16753:120;;;;:::o;16879:132::-;16946:4;16969:3;16961:11;;16999:4;16994:3;16990:14;16982:22;;16951:60;;;:::o;17017:114::-;17084:6;17118:5;17112:12;17102:22;;17091:40;;;:::o;17137:99::-;17189:6;17223:5;17217:12;17207:22;;17196:40;;;:::o;17242:113::-;17312:4;17344;17339:3;17335:14;17327:22;;17317:38;;;:::o;17361:184::-;17460:11;17494:6;17489:3;17482:19;17534:4;17529:3;17525:14;17510:29;;17472:73;;;;:::o;17551:169::-;17635:11;17669:6;17664:3;17657:19;17709:4;17704:3;17700:14;17685:29;;17647:73;;;;:::o;17726:305::-;17766:3;17785:20;17803:1;17785:20;:::i;:::-;17780:25;;17819:20;17837:1;17819:20;:::i;:::-;17814:25;;17973:1;17905:66;17901:74;17898:1;17895:81;17892:2;;;17979:18;;:::i;:::-;17892:2;18023:1;18020;18016:9;18009:16;;17770:261;;;;:::o;18037:185::-;18077:1;18094:20;18112:1;18094:20;:::i;:::-;18089:25;;18128:20;18146:1;18128:20;:::i;:::-;18123:25;;18167:1;18157:2;;18172:18;;:::i;:::-;18157:2;18214:1;18211;18207:9;18202:14;;18079:143;;;;:::o;18228:348::-;18268:7;18291:20;18309:1;18291:20;:::i;:::-;18286:25;;18325:20;18343:1;18325:20;:::i;:::-;18320:25;;18513:1;18445:66;18441:74;18438:1;18435:81;18430:1;18423:9;18416:17;18412:105;18409:2;;;18520:18;;:::i;:::-;18409:2;18568:1;18565;18561:9;18550:20;;18276:300;;;;:::o;18582:191::-;18622:4;18642:20;18660:1;18642:20;:::i;:::-;18637:25;;18676:20;18694:1;18676:20;:::i;:::-;18671:25;;18715:1;18712;18709:8;18706:2;;;18720:18;;:::i;:::-;18706:2;18765:1;18762;18758:9;18750:17;;18627:146;;;;:::o;18779:96::-;18816:7;18845:24;18863:5;18845:24;:::i;:::-;18834:35;;18824:51;;;:::o;18881:104::-;18926:7;18955:24;18973:5;18955:24;:::i;:::-;18944:35;;18934:51;;;:::o;18991:90::-;19025:7;19068:5;19061:13;19054:21;19043:32;;19033:48;;;:::o;19087:126::-;19124:7;19164:42;19157:5;19153:54;19142:65;;19132:81;;;:::o;19219:77::-;19256:7;19285:5;19274:16;;19264:32;;;:::o;19302:86::-;19337:7;19377:4;19370:5;19366:16;19355:27;;19345:43;;;:::o;19394:180::-;19471:9;19504:64;19562:5;19504:64;:::i;:::-;19491:77;;19481:93;;;:::o;19580:140::-;19657:9;19690:24;19708:5;19690:24;:::i;:::-;19677:37;;19667:53;;;:::o;19726:121::-;19784:9;19817:24;19835:5;19817:24;:::i;:::-;19804:37;;19794:53;;;:::o;19853:307::-;19921:1;19931:113;19945:6;19942:1;19939:13;19931:113;;;20030:1;20025:3;20021:11;20015:18;20011:1;20006:3;20002:11;19995:39;19967:2;19964:1;19960:10;19955:15;;19931:113;;;20062:6;20059:1;20056:13;20053:2;;;20142:1;20133:6;20128:3;20124:16;20117:27;20053:2;19902:258;;;;:::o;20166:320::-;20210:6;20247:1;20241:4;20237:12;20227:22;;20294:1;20288:4;20284:12;20315:18;20305:2;;20371:4;20363:6;20359:17;20349:27;;20305:2;20433;20425:6;20422:14;20402:18;20399:38;20396:2;;;20452:18;;:::i;:::-;20396:2;20217:269;;;;:::o;20492:233::-;20531:3;20554:24;20572:5;20554:24;:::i;:::-;20545:33;;20600:66;20593:5;20590:77;20587:2;;;20670:18;;:::i;:::-;20587:2;20717:1;20710:5;20706:13;20699:20;;20535:190;;;:::o;20731:180::-;20779:77;20776:1;20769:88;20876:4;20873:1;20866:15;20900:4;20897:1;20890:15;20917:180;20965:77;20962:1;20955:88;21062:4;21059:1;21052:15;21086:4;21083:1;21076:15;21103:180;21151:77;21148:1;21141:88;21248:4;21245:1;21238:15;21272:4;21269:1;21262:15;21289:102;21330:6;21381:2;21377:7;21372:2;21365:5;21361:14;21357:28;21347:38;;21337:54;;;:::o;21397:222::-;21537:34;21533:1;21525:6;21521:14;21514:58;21606:5;21601:2;21593:6;21589:15;21582:30;21503:116;:::o;21625:229::-;21765:34;21761:1;21753:6;21749:14;21742:58;21834:12;21829:2;21821:6;21817:15;21810:37;21731:123;:::o;21860:221::-;22000:34;21996:1;21988:6;21984:14;21977:58;22069:4;22064:2;22056:6;22052:15;22045:29;21966:115;:::o;22087:177::-;22227:29;22223:1;22215:6;22211:14;22204:53;22193:71;:::o;22270:181::-;22410:33;22406:1;22398:6;22394:14;22387:57;22376:75;:::o;22457:227::-;22597:34;22593:1;22585:6;22581:14;22574:58;22666:10;22661:2;22653:6;22649:15;22642:35;22563:121;:::o;22690:182::-;22830:34;22826:1;22818:6;22814:14;22807:58;22796:76;:::o;22878:228::-;23018:34;23014:1;23006:6;23002:14;22995:58;23087:11;23082:2;23074:6;23070:15;23063:36;22984:122;:::o;23112:224::-;23252:34;23248:1;23240:6;23236:14;23229:58;23321:7;23316:2;23308:6;23304:15;23297:32;23218:118;:::o;23342:223::-;23482:34;23478:1;23470:6;23466:14;23459:58;23551:6;23546:2;23538:6;23534:15;23527:31;23448:117;:::o;23571:122::-;23644:24;23662:5;23644:24;:::i;:::-;23637:5;23634:35;23624:2;;23683:1;23680;23673:12;23624:2;23614:79;:::o;23699:138::-;23780:32;23806:5;23780:32;:::i;:::-;23773:5;23770:43;23760:2;;23827:1;23824;23817:12;23760:2;23750:87;:::o;23843:116::-;23913:21;23928:5;23913:21;:::i;:::-;23906:5;23903:32;23893:2;;23949:1;23946;23939:12;23893:2;23883:76;:::o;23965:122::-;24038:24;24056:5;24038:24;:::i;:::-;24031:5;24028:35;24018:2;;24077:1;24074;24067:12;24018:2;24008:79;:::o

Swarm Source

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