ETH Price: $2,513.16 (+0.59%)

Token

Dark Money (DMONEY)
 

Overview

Max Total Supply

500,000,000,000 DMONEY

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,796,697,380.622947222 DMONEY

Value
$0.00
0x69ee42087704e2630b2a6c864789222c0bb8aaa8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DMoney

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : dmoneyd.sol
/*
          ▄ ▄ ▄▄▄▄ ▄ ▒█▀▀▄ ░█▀▀█ ▒█▀▀█ ▒█░▄▀   ▒█▀▄▀█ ▒█▀▀▀█ ▒█▄░▒█ ▒█▀▀▀ ▒█░░▒█  ▄ ▄▄▄▄ ▄  ▄
         ▀ ▄ ▀▄█▀▄██ ▒█░▒█ ▒█▄▄█ ▒█▄▄▀ ▒█▀▄░   ▒█▒█▒█ ▒█░░▒█ ▒█▒█▒█ ▒█▀▀▀ ▒█▄▄▄█ ██▀█▄█▀▄▀▄ ▀
         ▀   ▀▀ ▀ ▀▀ ▒█▄▄▀ ▒█░▒█ ▒█░▒█ ▒█░▒█   ▒█░░▒█ ▒█▄▄▄█ ▒█░░▀█ ▒█▄▄▄ ░░▒█░░ ▀ ▀▀▀ ▀ ▀  ▀

        ▀ ▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀ ▀
        DARK MONEY                  $DMONEY        TOTAL SUPPLY 500M        TAX 1.0 %     
        ▀ ▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀ ▀

        Website:                    https://www.darkmoney.cash
        Documentation:              https://dmoney.gitbook.io/dark-money
        Repositories:               https://github.com/0xDarkMoney/contracts
        Twitter:                    https://twitter.com/0xDARKMONEY
        Community:                  https://t.me/dmoney_portal

        ▀ ▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀ ▀

        ┌─────────────────────────────────────────────────────────────────────────────┐
        │ ATTENTION: In case of any investigation by federal, state, or local         │
        │            authorities may the record show that any activity perpetrated by │
        │            the entity and/or entities behind this account falls under the   │
        │            creative umbrella of corporate surrealist performance art        │
        │            operating on a blanket copyleft license.                         │
        └─────────────────────────────────────────────────────────────────────────────┘
*/

pragma solidity ^0.8.21;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

library Address {
 
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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);
            }
        }
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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");
        _;
    }

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

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

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

contract DMoney is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "Dark Money";
    string private _symbol = "DMONEY";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 500000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 45000000000 * 10** _decimals; // 0.9% TX
    uint256 public ethPriceToSwap = 50000000000000000; //.05 ETH
    uint public ethSellAmount = 50000000000000000;  //.05 ETH
    uint256 public _maxWalletAmount = 45000000000 * 10** _decimals; // 0.9% MW
    address public buyBackAddress = 0x92328fEB128Ac3167d18E5a33bB7d9181f720B18;
    address public marketingAddress = 0x92328fEB128Ac3167d18E5a33bB7d9181f720B18;
    address public devAddress = 0x92328fEB128Ac3167d18E5a33bB7d9181f720B18;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    
    
    struct Distribution {
        uint256 devTeam;
        uint256 marketing;
        uint256 dividend;
        uint256 buyBack;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 largeSellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DMoneyTracker private dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[buyBackAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[marketingAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[buyBackAddress] = true;
        _isExcludedFromRewards[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;

        taxFees = TaxFees(5,10,0);
        distribution = Distribution(25, 50, 25, 0);
        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) {
        return _balances[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 setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner {
        _addRemoveExchange(addresses, isAddExchange);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
        ethPriceToSwap = ethPriceToSwap_;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }
    function _addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() {
        _maxBuyAmount = maxBuyAmount * 10**9;
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
    }

    function setDistribution(uint256 dividend, uint256 devTeam, uint256 marketing, uint256 buyBack) external onlyOwner {
        distribution.dividend = dividend;
        distribution.devTeam = devTeam;
        distribution.marketing = marketing;
        distribution.buyBack = buyBack;
    }

    function setWalletAddresses(address devAddr, address buyBack, address marketingAddr) external onlyOwner {
        devAddress = devAddr;
        buyBackAddress = buyBack;
        marketingAddress = marketingAddr;
    }

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

    receive() external payable {}

    function getEthPrice(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }

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

    function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
        isTaxFreeTransfer = enableDisable;
    }

    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");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
            // dividendTracker.calculateDividendDistribution();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            takeFees = isTaxFreeTransfer ? false : true;
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getEthPrice(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets marketing and dev
                distributeShares(contractTokenBalance);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100);
        payable(marketingAddress).transfer(marketingShare);
        sendEthDividends(dividendShare);
        payable(devAddress).transfer(devTeamShare);
        payable(buyBackAddress).transfer(buyBackShare);

    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DMoneyTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if(takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
            if(taxFees.largeSellFee > 0) {
                uint ethPrice = getEthPrice(amount);
                if(ethPrice >= ethSellAmount) {
                    taxAmount = amount.mul(taxFees.largeSellFee).div(100);
                }
            }
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DMoneyTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "DMONEY TRACKER";
    string private _symbol = "DMT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 1500000000 * 10 **  _decimals; // 0.3%
    DMoney private dmoney;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

    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 _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) 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 setTokenBalance(address account) external {
        uint256 balance = dmoney.balanceOf(account);
        if(!dmoney.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        dmoney = DMoney(payable(contractAddr));
    }

    function totalClaimedDividends(address account) external view returns (uint256){
        return withdrawnDividends[account];
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}("");
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }

        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600a81526020017f4461726b204d6f6e65790000000000000000000000000000000000000000000081525060099081620000de919062000cda565b506040518060400160405280600681526020017f444d4f4e45590000000000000000000000000000000000000000000000000000815250600a908162000125919062000cda565b506009600b5f6101000a81548160ff021916908360ff160217905550600b5f9054906101000a900460ff16600a6200015e919062000f47565b64746a52880062000170919062000f97565b600c556001600d60016101000a81548160ff0219169083151502179055505f600d60026101000a81548160ff021916908315150217905550600b5f9054906101000a900460ff16600a620001c5919062000f47565b640a7a358200620001d7919062000f97565b600e5566b1a2bc2ec50000600f5566b1a2bc2ec50000601055600b5f9054906101000a900460ff16600a6200020d919062000f47565b640a7a3582006200021f919062000f97565b6011557392328feb128ac3167d18e5a33bb7d9181f720b1860125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507392328feb128ac3167d18e5a33bb7d9181f720b1860135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507392328feb128ac3167d18e5a33bb7d9181f720b1860145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c35060165534801562000372575f80fd5b505f6200038462000a4860201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460035f6200043662000a4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160065f6200048862000a4f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f620004ec62000a4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f6200072862000a4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f6200078c62000a4f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550604051806060016040528060058152602001600a81526020015f81525060185f820151815f0155602082015181600101556040820151816002015590505060405180608001604052806019815260200160328152602001601981526020015f815250601b5f820151815f0155602082015181600101556040820151816002015560608201518160030155905050620009da62000a4860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000a3a919062000ff2565b60405180910390a36200100d565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000af257607f821691505b60208210810362000b085762000b0762000aad565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b6c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b2f565b62000b78868362000b2f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bc262000bbc62000bb68462000b90565b62000b99565b62000b90565b9050919050565b5f819050919050565b62000bdd8362000ba2565b62000bf562000bec8262000bc9565b84845462000b3b565b825550505050565b5f90565b62000c0b62000bfd565b62000c1881848462000bd2565b505050565b5b8181101562000c3f5762000c335f8262000c01565b60018101905062000c1e565b5050565b601f82111562000c8e5762000c588162000b0e565b62000c638462000b20565b8101602085101562000c73578190505b62000c8b62000c828562000b20565b83018262000c1d565b50505b505050565b5f82821c905092915050565b5f62000cb05f198460080262000c93565b1980831691505092915050565b5f62000cca838362000c9f565b9150826002028217905092915050565b62000ce58262000a76565b67ffffffffffffffff81111562000d015762000d0062000a80565b5b62000d0d825462000ada565b62000d1a82828562000c43565b5f60209050601f83116001811462000d50575f841562000d3b578287015190505b62000d47858262000cbd565b86555062000db6565b601f19841662000d608662000b0e565b5f5b8281101562000d895784890151825560018201915060208501945060208101905062000d62565b8683101562000da9578489015162000da5601f89168262000c9f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000e485780860481111562000e205762000e1f62000dbe565b5b600185161562000e305780820291505b808102905062000e408562000deb565b945062000e00565b94509492505050565b5f8262000e62576001905062000f34565b8162000e71575f905062000f34565b816001811462000e8a576002811462000e955762000ecb565b600191505062000f34565b60ff84111562000eaa5762000ea962000dbe565b5b8360020a91508482111562000ec45762000ec362000dbe565b5b5062000f34565b5060208310610133831016604e8410600b841016171562000f055782820a90508381111562000eff5762000efe62000dbe565b5b62000f34565b62000f14848484600162000df7565b9250905081840481111562000f2e5762000f2d62000dbe565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000f538262000b90565b915062000f608362000f3b565b925062000f8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e51565b905092915050565b5f62000fa38262000b90565b915062000fb08362000b90565b925082820262000fc08162000b90565b9150828204841483151762000fda5762000fd962000dbe565b5b5092915050565b62000fec8162000b90565b82525050565b5f602082019050620010075f83018462000fe1565b92915050565b615203806200101b5f395ff3fe608060405260043610610275575f3560e01c8063715018a61161014e5780639758f61d116100c0578063b6a9987211610079578063b6a9987214610965578063c49b9a801461097b578063dd62ed3e146109a3578063f2fde38b146109df578063f34eb0b814610a07578063fb6287d214610a2f5761027c565b80639758f61d1461084957806398acb5d8146108715780639c1b8af514610899578063a457c2d7146108c3578063a5ece941146108ff578063a9059cbb146109295761027c565b8063870d365d11610112578063870d365d1461073f578063871c128d1461077b5780638da5cb5b146107a357806391142cb3146107cd57806395d89b41146107f757806396848136146108215761027c565b8063715018a61461068557806371cd56af1461069b578063783478ad146106c35780637bde92bc146106ed57806385141a77146107155761027c565b806339509351116101e75780634e781233116101ab5780634e781233146105645780635342acb41461058c57806354a5df1f146105c85780635ee58efc146105f25780636c0a24eb1461061f57806370a08231146106495761027c565b806339509351146104825780633ad10ef6146104be578063441d801f146104e857806349bd5a5e146105105780634a74bb021461053a5761027c565b80630fc709e5116102395780630fc709e5146103785780631694505e146103a057806318160ddd146103ca57806323b872dd146103f457806327a14fc214610430578063313ce567146104585761027c565b80630492f0551461028057806306fdde03146102aa578063095ea7b3146102d45780630ddc0976146103105780630e8322731461033c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a57565b6040516102a19190613d54565b60405180910390f35b3480156102b5575f80fd5b506102be610a5d565b6040516102cb9190613df7565b60405180910390f35b3480156102df575f80fd5b506102fa60048036038101906102f59190613eac565b610aed565b6040516103079190613f04565b60405180910390f35b34801561031b575f80fd5b50610324610b0a565b60405161033393929190613f1d565b60405180910390f35b348015610347575f80fd5b50610362600480360381019061035d9190613f52565b610b21565b60405161036f9190613f04565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190613f7d565b610b73565b005b3480156103ab575f80fd5b506103b4610c34565b6040516103c1919061403c565b60405180910390f35b3480156103d5575f80fd5b506103de610c59565b6040516103eb9190613d54565b60405180910390f35b3480156103ff575f80fd5b5061041a60048036038101906104159190614055565b610c62565b6040516104279190613f04565b60405180910390f35b34801561043b575f80fd5b50610456600480360381019061045191906140a5565b610d36565b005b348015610463575f80fd5b5061046c610de3565b60405161047991906140eb565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613eac565b610df8565b6040516104b59190613f04565b60405180910390f35b3480156104c9575f80fd5b506104d2610ea6565b6040516104df9190614113565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906141b7565b610ecb565b005b34801561051b575f80fd5b50610524610f6f565b6040516105319190614113565b60405180910390f35b348015610545575f80fd5b5061054e610f94565b60405161055b9190613f04565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190614214565b610fa7565b005b348015610597575f80fd5b506105b260048036038101906105ad9190613f52565b611058565b6040516105bf9190613f04565b60405180910390f35b3480156105d3575f80fd5b506105dc6110aa565b6040516105e99190613d54565b60405180910390f35b3480156105fd575f80fd5b506106066110b0565b604051610616949392919061423f565b60405180910390f35b34801561062a575f80fd5b506106336110cd565b6040516106409190613d54565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a9190613f52565b6110d3565b60405161067c9190613d54565b60405180910390f35b348015610690575f80fd5b50610699611119565b005b3480156106a6575f80fd5b506106c160048036038101906106bc91906141b7565b611267565b005b3480156106ce575f80fd5b506106d761130b565b6040516106e49190614113565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e9190614282565b611330565b005b348015610720575f80fd5b506107296113d6565b6040516107369190614113565b60405180910390f35b34801561074a575f80fd5b50610765600480360381019061076091906140a5565b6113fb565b6040516107729190613d54565b60405180910390f35b348015610786575f80fd5b506107a1600480360381019061079c91906140a5565b611634565b005b3480156107ae575f80fd5b506107b7611716565b6040516107c49190614113565b60405180910390f35b3480156107d8575f80fd5b506107e161173d565b6040516107ee9190613d54565b60405180910390f35b348015610802575f80fd5b5061080b611743565b6040516108189190613df7565b60405180910390f35b34801561082c575f80fd5b50610847600480360381019061084291906141b7565b6117d3565b005b348015610854575f80fd5b5061086f600480360381019061086a91906142c0565b611877565b005b34801561087c575f80fd5b5061089760048036038101906108929190613f52565b61192d565b005b3480156108a4575f80fd5b506108ad611a04565b6040516108ba9190613d54565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e49190613eac565b611a0a565b6040516108f69190613f04565b60405180910390f35b34801561090a575f80fd5b50610913611ad2565b6040516109209190614113565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613eac565b611af7565b60405161095c9190613f04565b60405180910390f35b348015610970575f80fd5b50610979611b14565b005b348015610986575f80fd5b506109a1600480360381019061099c9190614214565b611e83565b005b3480156109ae575f80fd5b506109c960048036038101906109c49190614310565b611f6b565b6040516109d69190613d54565b60405180910390f35b3480156109ea575f80fd5b50610a056004803603810190610a009190613f52565b611fed565b005b348015610a12575f80fd5b50610a2d6004803603810190610a2891906140a5565b6121aa565b005b348015610a3a575f80fd5b50610a556004803603810190610a50919061434e565b612257565b005b600e5481565b606060098054610a6c906143cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a98906143cb565b8015610ae35780601f10610aba57610100808354040283529160200191610ae3565b820191905f5260205f20905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b5f610b00610af96123b0565b84846123b7565b6001905092915050565b6018805f0154908060010154908060020154905083565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610b7b6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614445565b60405180910390fd5b83601b6002018190555082601b5f018190555081601b6001018190555080601b6003018190555050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600c54905090565b5f610c6e84848461257a565b610d2b84610c7a6123b0565b610d26856040518060600160405280602881526020016151816028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cdd6123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e789092919063ffffffff16565b6123b7565b600190509392505050565b610d3e6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190614445565b60405180910390fd5b633b9aca0081610dda9190614490565b60118190555050565b5f600b5f9054906101000a900460ff16905090565b5f610e9c610e046123b0565b84610e978560045f610e146123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b6123b7565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed36123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690614445565b60405180910390fd5b610f6a838383612f37565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610faf6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290614445565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b601b805f0154908060010154908060020154908060030154905084565b60115481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111216123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61126f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614445565b60405180910390fd5b611306838383612fdd565b505050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113386123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614445565b60405180910390fd5b8160108190555080600f819055505050565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80600267ffffffffffffffff811115611418576114176144d1565b5b6040519080825280602002602001820160405280156114465781602001602082028036833780820191505090505b50905030815f8151811061145d5761145c6144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611501573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611525919061453f565b81600181518110611539576115386144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016115cf929190614621565b5f60405180830381865afa1580156115e9573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611611919061476e565b600181518110611624576116236144fe565b5b6020026020010151915050919050565b61163c6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90614445565b60405180910390fd5b601654810361170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614825565b60405180910390fd5b8060168190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a8054611752906143cb565b80601f016020809104026020016040519081016040528092919081815260200182805461177e906143cb565b80156117c95780601f106117a0576101008083540402835291602001916117c9565b820191905f5260205f20905b8154815290600101906020018083116117ac57829003601f168201915b5050505050905090565b6117db6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90614445565b60405180910390fd5b611872838383613083565b505050565b61187f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614445565b60405180910390fd5b8260185f01819055508160186001018190555080601860020181905550505050565b6119356123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614445565b60405180910390fd5b80601f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f611ac8611a166123b0565b84611ac3856040518060600160405280602581526020016151a96025913960045f611a3f6123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e789092919063ffffffff16565b6123b7565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b0a611b036123b0565b848461257a565b6001905092915050565b611b1c6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906148b3565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc5919061453f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6f919061453f565b6040518363ffffffff1660e01b8152600401611d8c9291906148d1565b6020604051808303815f875af1158015611da8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dcc919061453f565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b611e8b6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614445565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f609190613f04565b60405180910390a150565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ff56123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614968565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121b26123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614445565b60405180910390fd5b633b9aca008161224e9190614490565b600e8190555050565b61225f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614445565b60405180910390fd5b8260145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c906149f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a90614a84565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161256d9190613d54565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614b12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614ba0565b60405180910390fd5b5f8111612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614c2e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e90614c96565b60405180910390fd5b5f8060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127c7575060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561280657506127d6611716565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128455750612815611716565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90505f61286384612855876110d3565b612eda90919063ffffffff16565b905061286d611716565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128db57506128ab611716565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612934575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612a175760055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129d7575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614d24565b60405180910390fd5b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612ab8575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b4857600e54841115612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990614db2565b60405180910390fd5b601154811115612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90614e40565b60405180910390fd5b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612bf1575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612c95575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c94575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b5b15612ca75760019250612ca6613129565b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d51575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612da4575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612df7575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e6157600d60029054906101000a900460ff16612e17576001612e19565b5f5b9150601154811115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5790614e40565b60405180910390fd5b5b612e7086868685876001613193565b505050505050565b5f838311158290612ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb69190613df7565b60405180910390fd5b505f8385612ecd9190614e5e565b9050809150509392505050565b5f808284612ee89190614e91565b905083811015612f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2490614f0e565b60405180910390fd5b8091505092915050565b5f5b83839050811015612fd7575f848483818110612f5857612f576144fe565b5b9050602002016020810190612f6d9190613f52565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550508080612fcf90614f2c565b915050612f39565b50505050565b5f5b8383905081101561307d575f848483818110612ffe57612ffd6144fe565b5b90506020020160208101906130139190613f52565b90508260085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061307590614f2c565b915050612fdf565b50505050565b5f5b83839050811015613123575f8484838181106130a4576130a36144fe565b5b90506020020160208101906130b99190613f52565b90508260075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061311b90614f2c565b915050613085565b50505050565b5f613133306110d3565b90505f811115613190575f613147826113fb565b9050600f5481101580156131675750600d5f9054906101000a900460ff16155b801561317f5750600d60019054906101000a900460ff165b1561318e5761318d8261369a565b5b505b50565b5f8361319f575f6131ca565b6131c960646131bb60185f0154886138d190919063ffffffff16565b61394890919063ffffffff16565b5b90508380156131d65750825b1561325b5761320660646131f8601860010154886138d190919063ffffffff16565b61394890919063ffffffff16565b90505f601860020154111561325a575f61321f866113fb565b90506010548110613258576132556064613247601860020154896138d190919063ffffffff16565b61394890919063ffffffff16565b91505b505b5b5f61326f828761399190919063ffffffff16565b90506132c18660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461399190919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133528160035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133e38260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516134819190613d54565b60405180910390a3821561369057601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b81526004016134e99190614113565b5f604051808303815f87803b158015613500575f80fd5b505af1925050508015613511575060015b50601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b815260040161356c9190614113565b5f604051808303815f87803b158015613583575f80fd5b505af1925050508015613594575060015b50601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b81526004016135f19190613d54565b6060604051808303815f875af192505050801561362c57506040513d601f19601f820116820180604052508101906136299190614f73565b60015b1561368f573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613683949392919061423f565b60405180910390a35050505b5b5050505050505050565b6001600d5f6101000a81548160ff0219169083151502179055506136bd816139da565b5f4790505f6136ed60646136df601b60010154856138d190919063ffffffff16565b61394890919063ffffffff16565b90505f61371b606461370d601b60020154866138d190919063ffffffff16565b61394890919063ffffffff16565b90505f613748606461373a601b5f0154876138d190919063ffffffff16565b61394890919063ffffffff16565b90505f6137766064613768601b60030154886138d190919063ffffffff16565b61394890919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156137dc573d5f803e3d5ffd5b506137e683613c10565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561384a573d5f803e3d5ffd5b5060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156138af573d5f803e3d5ffd5b5050505050505f600d5f6101000a81548160ff02191690831515021790555050565b5f8083036138e1575f9050613942565b5f82846138ee9190614490565b90508284826138fd9190614ff0565b1461393d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393490615090565b60405180910390fd5b809150505b92915050565b5f61398983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cdb565b905092915050565b5f6139d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e78565b905092915050565b5f600267ffffffffffffffff8111156139f6576139f56144d1565b5b604051908082528060200260200182016040528015613a245781602001602082028036833780820191505090505b50905030815f81518110613a3b57613a3a6144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613adf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b03919061453f565b81600181518110613b1757613b166144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b7d3060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123b7565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613bdf9594939291906150e7565b5f604051808303815f87803b158015613bf6575f80fd5b505af1158015613c08573d5f803e3d5ffd5b505050505050565b5f601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c569061516c565b5f6040518083038185875af1925050503d805f8114613c90576040519150601f19603f3d011682016040523d82523d5f602084013e613c95565b606091505b505090508015613cd7577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051613cce9190613d54565b60405180910390a15b5050565b5f8083118290613d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d189190613df7565b60405180910390fd5b505f8385613d2f9190614ff0565b9050809150509392505050565b5f819050919050565b613d4e81613d3c565b82525050565b5f602082019050613d675f830184613d45565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613da4578082015181840152602081019050613d89565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613dc982613d6d565b613dd38185613d77565b9350613de3818560208601613d87565b613dec81613daf565b840191505092915050565b5f6020820190508181035f830152613e0f8184613dbf565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e5182613e28565b9050919050565b613e6181613e47565b8114613e6b575f80fd5b50565b5f81359050613e7c81613e58565b92915050565b613e8b81613d3c565b8114613e95575f80fd5b50565b5f81359050613ea681613e82565b92915050565b5f8060408385031215613ec257613ec1613e20565b5b5f613ecf85828601613e6e565b9250506020613ee085828601613e98565b9150509250929050565b5f8115159050919050565b613efe81613eea565b82525050565b5f602082019050613f175f830184613ef5565b92915050565b5f606082019050613f305f830186613d45565b613f3d6020830185613d45565b613f4a6040830184613d45565b949350505050565b5f60208284031215613f6757613f66613e20565b5b5f613f7484828501613e6e565b91505092915050565b5f805f8060808587031215613f9557613f94613e20565b5b5f613fa287828801613e98565b9450506020613fb387828801613e98565b9350506040613fc487828801613e98565b9250506060613fd587828801613e98565b91505092959194509250565b5f819050919050565b5f614004613fff613ffa84613e28565b613fe1565b613e28565b9050919050565b5f61401582613fea565b9050919050565b5f6140268261400b565b9050919050565b6140368161401c565b82525050565b5f60208201905061404f5f83018461402d565b92915050565b5f805f6060848603121561406c5761406b613e20565b5b5f61407986828701613e6e565b935050602061408a86828701613e6e565b925050604061409b86828701613e98565b9150509250925092565b5f602082840312156140ba576140b9613e20565b5b5f6140c784828501613e98565b91505092915050565b5f60ff82169050919050565b6140e5816140d0565b82525050565b5f6020820190506140fe5f8301846140dc565b92915050565b61410d81613e47565b82525050565b5f6020820190506141265f830184614104565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261414d5761414c61412c565b5b8235905067ffffffffffffffff81111561416a57614169614130565b5b60208301915083602082028301111561418657614185614134565b5b9250929050565b61419681613eea565b81146141a0575f80fd5b50565b5f813590506141b18161418d565b92915050565b5f805f604084860312156141ce576141cd613e20565b5b5f84013567ffffffffffffffff8111156141eb576141ea613e24565b5b6141f786828701614138565b9350935050602061420a868287016141a3565b9150509250925092565b5f6020828403121561422957614228613e20565b5b5f614236848285016141a3565b91505092915050565b5f6080820190506142525f830187613d45565b61425f6020830186613d45565b61426c6040830185613d45565b6142796060830184613d45565b95945050505050565b5f806040838503121561429857614297613e20565b5b5f6142a585828601613e98565b92505060206142b685828601613e98565b9150509250929050565b5f805f606084860312156142d7576142d6613e20565b5b5f6142e486828701613e98565b93505060206142f586828701613e98565b925050604061430686828701613e98565b9150509250925092565b5f806040838503121561432657614325613e20565b5b5f61433385828601613e6e565b925050602061434485828601613e6e565b9150509250929050565b5f805f6060848603121561436557614364613e20565b5b5f61437286828701613e6e565b935050602061438386828701613e6e565b925050604061439486828701613e6e565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143e257607f821691505b6020821081036143f5576143f461439e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61442f602083613d77565b915061443a826143fb565b602082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61449a82613d3c565b91506144a583613d3c565b92508282026144b381613d3c565b915082820484148315176144ca576144c9614463565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061453981613e58565b92915050565b5f6020828403121561455457614553613e20565b5b5f6145618482850161452b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61459c81613e47565b82525050565b5f6145ad8383614593565b60208301905092915050565b5f602082019050919050565b5f6145cf8261456a565b6145d98185614574565b93506145e483614584565b805f5b838110156146145781516145fb88826145a2565b9750614606836145b9565b9250506001810190506145e7565b5085935050505092915050565b5f6040820190506146345f830185613d45565b818103602083015261464681846145c5565b90509392505050565b61465882613daf565b810181811067ffffffffffffffff82111715614677576146766144d1565b5b80604052505050565b5f614689613e17565b9050614695828261464f565b919050565b5f67ffffffffffffffff8211156146b4576146b36144d1565b5b602082029050602081019050919050565b5f815190506146d381613e82565b92915050565b5f6146eb6146e68461469a565b614680565b9050808382526020820190506020840283018581111561470e5761470d614134565b5b835b81811015614737578061472388826146c5565b845260208401935050602081019050614710565b5050509392505050565b5f82601f8301126147555761475461412c565b5b81516147658482602086016146d9565b91505092915050565b5f6020828403121561478357614782613e20565b5b5f82015167ffffffffffffffff8111156147a05761479f613e24565b5b6147ac84828501614741565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e6720745f8201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b5f61480f602c83613d77565b915061481a826147b5565b604082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e20735f8201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b5f61489d602283613d77565b91506148a882614843565b604082019050919050565b5f6020820190508181035f8301526148ca81614891565b9050919050565b5f6040820190506148e45f830185614104565b6148f16020830184614104565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614952602683613d77565b915061495d826148f8565b604082019050919050565b5f6020820190508181035f83015261497f81614946565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149e0602483613d77565b91506149eb82614986565b604082019050919050565b5f6020820190508181035f830152614a0d816149d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a6e602283613d77565b9150614a7982614a14565b604082019050919050565b5f6020820190508181035f830152614a9b81614a62565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614afc602583613d77565b9150614b0782614aa2565b604082019050919050565b5f6020820190508181035f830152614b2981614af0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b8a602383613d77565b9150614b9582614b30565b604082019050919050565b5f6020820190508181035f830152614bb781614b7e565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614c18602983613d77565b9150614c2382614bbe565b604082019050919050565b5f6020820190508181035f830152614c4581614c0c565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e2073657400005f82015250565b5f614c80601e83613d77565b9150614c8b82614c4c565b602082019050919050565b5f6020820190508181035f830152614cad81614c74565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f72205f8201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b5f614d0e602f83613d77565b9150614d1982614cb4565b604082019050919050565b5f6020820190508181035f830152614d3b81614d02565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614d9c602883613d77565b9150614da782614d42565b604082019050919050565b5f6020820190508181035f830152614dc981614d90565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574205f8201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b5f614e2a602583613d77565b9150614e3582614dd0565b604082019050919050565b5f6020820190508181035f830152614e5781614e1e565b9050919050565b5f614e6882613d3c565b9150614e7383613d3c565b9250828203905081811115614e8b57614e8a614463565b5b92915050565b5f614e9b82613d3c565b9150614ea683613d3c565b9250828201905080821115614ebe57614ebd614463565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614ef8601b83613d77565b9150614f0382614ec4565b602082019050919050565b5f6020820190508181035f830152614f2581614eec565b9050919050565b5f614f3682613d3c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f6857614f67614463565b5b600182019050919050565b5f805f60608486031215614f8a57614f89613e20565b5b5f614f97868287016146c5565b9350506020614fa8868287016146c5565b9250506040614fb9868287016146c5565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ffa82613d3c565b915061500583613d3c565b92508261501557615014614fc3565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61507a602183613d77565b915061508582615020565b604082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b5f819050919050565b5f6150d16150cc6150c7846150ae565b613fe1565b613d3c565b9050919050565b6150e1816150b7565b82525050565b5f60a0820190506150fa5f830188613d45565b61510760208301876150d8565b818103604083015261511981866145c5565b90506151286060830185614104565b6151356080830184613d45565b9695505050505050565b5f81905092915050565b50565b5f6151575f8361513f565b915061516282615149565b5f82019050919050565b5f6151768261514c565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220449b320b33a807446296dd2b3c0d754e50a3a1f491b56c0489be01de9fa7b18064736f6c63430008150033

Deployed Bytecode

0x608060405260043610610275575f3560e01c8063715018a61161014e5780639758f61d116100c0578063b6a9987211610079578063b6a9987214610965578063c49b9a801461097b578063dd62ed3e146109a3578063f2fde38b146109df578063f34eb0b814610a07578063fb6287d214610a2f5761027c565b80639758f61d1461084957806398acb5d8146108715780639c1b8af514610899578063a457c2d7146108c3578063a5ece941146108ff578063a9059cbb146109295761027c565b8063870d365d11610112578063870d365d1461073f578063871c128d1461077b5780638da5cb5b146107a357806391142cb3146107cd57806395d89b41146107f757806396848136146108215761027c565b8063715018a61461068557806371cd56af1461069b578063783478ad146106c35780637bde92bc146106ed57806385141a77146107155761027c565b806339509351116101e75780634e781233116101ab5780634e781233146105645780635342acb41461058c57806354a5df1f146105c85780635ee58efc146105f25780636c0a24eb1461061f57806370a08231146106495761027c565b806339509351146104825780633ad10ef6146104be578063441d801f146104e857806349bd5a5e146105105780634a74bb021461053a5761027c565b80630fc709e5116102395780630fc709e5146103785780631694505e146103a057806318160ddd146103ca57806323b872dd146103f457806327a14fc214610430578063313ce567146104585761027c565b80630492f0551461028057806306fdde03146102aa578063095ea7b3146102d45780630ddc0976146103105780630e8322731461033c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a57565b6040516102a19190613d54565b60405180910390f35b3480156102b5575f80fd5b506102be610a5d565b6040516102cb9190613df7565b60405180910390f35b3480156102df575f80fd5b506102fa60048036038101906102f59190613eac565b610aed565b6040516103079190613f04565b60405180910390f35b34801561031b575f80fd5b50610324610b0a565b60405161033393929190613f1d565b60405180910390f35b348015610347575f80fd5b50610362600480360381019061035d9190613f52565b610b21565b60405161036f9190613f04565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190613f7d565b610b73565b005b3480156103ab575f80fd5b506103b4610c34565b6040516103c1919061403c565b60405180910390f35b3480156103d5575f80fd5b506103de610c59565b6040516103eb9190613d54565b60405180910390f35b3480156103ff575f80fd5b5061041a60048036038101906104159190614055565b610c62565b6040516104279190613f04565b60405180910390f35b34801561043b575f80fd5b50610456600480360381019061045191906140a5565b610d36565b005b348015610463575f80fd5b5061046c610de3565b60405161047991906140eb565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613eac565b610df8565b6040516104b59190613f04565b60405180910390f35b3480156104c9575f80fd5b506104d2610ea6565b6040516104df9190614113565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906141b7565b610ecb565b005b34801561051b575f80fd5b50610524610f6f565b6040516105319190614113565b60405180910390f35b348015610545575f80fd5b5061054e610f94565b60405161055b9190613f04565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190614214565b610fa7565b005b348015610597575f80fd5b506105b260048036038101906105ad9190613f52565b611058565b6040516105bf9190613f04565b60405180910390f35b3480156105d3575f80fd5b506105dc6110aa565b6040516105e99190613d54565b60405180910390f35b3480156105fd575f80fd5b506106066110b0565b604051610616949392919061423f565b60405180910390f35b34801561062a575f80fd5b506106336110cd565b6040516106409190613d54565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a9190613f52565b6110d3565b60405161067c9190613d54565b60405180910390f35b348015610690575f80fd5b50610699611119565b005b3480156106a6575f80fd5b506106c160048036038101906106bc91906141b7565b611267565b005b3480156106ce575f80fd5b506106d761130b565b6040516106e49190614113565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e9190614282565b611330565b005b348015610720575f80fd5b506107296113d6565b6040516107369190614113565b60405180910390f35b34801561074a575f80fd5b50610765600480360381019061076091906140a5565b6113fb565b6040516107729190613d54565b60405180910390f35b348015610786575f80fd5b506107a1600480360381019061079c91906140a5565b611634565b005b3480156107ae575f80fd5b506107b7611716565b6040516107c49190614113565b60405180910390f35b3480156107d8575f80fd5b506107e161173d565b6040516107ee9190613d54565b60405180910390f35b348015610802575f80fd5b5061080b611743565b6040516108189190613df7565b60405180910390f35b34801561082c575f80fd5b50610847600480360381019061084291906141b7565b6117d3565b005b348015610854575f80fd5b5061086f600480360381019061086a91906142c0565b611877565b005b34801561087c575f80fd5b5061089760048036038101906108929190613f52565b61192d565b005b3480156108a4575f80fd5b506108ad611a04565b6040516108ba9190613d54565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e49190613eac565b611a0a565b6040516108f69190613f04565b60405180910390f35b34801561090a575f80fd5b50610913611ad2565b6040516109209190614113565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613eac565b611af7565b60405161095c9190613f04565b60405180910390f35b348015610970575f80fd5b50610979611b14565b005b348015610986575f80fd5b506109a1600480360381019061099c9190614214565b611e83565b005b3480156109ae575f80fd5b506109c960048036038101906109c49190614310565b611f6b565b6040516109d69190613d54565b60405180910390f35b3480156109ea575f80fd5b50610a056004803603810190610a009190613f52565b611fed565b005b348015610a12575f80fd5b50610a2d6004803603810190610a2891906140a5565b6121aa565b005b348015610a3a575f80fd5b50610a556004803603810190610a50919061434e565b612257565b005b600e5481565b606060098054610a6c906143cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a98906143cb565b8015610ae35780601f10610aba57610100808354040283529160200191610ae3565b820191905f5260205f20905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b5f610b00610af96123b0565b84846123b7565b6001905092915050565b6018805f0154908060010154908060020154905083565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610b7b6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614445565b60405180910390fd5b83601b6002018190555082601b5f018190555081601b6001018190555080601b6003018190555050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600c54905090565b5f610c6e84848461257a565b610d2b84610c7a6123b0565b610d26856040518060600160405280602881526020016151816028913960045f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cdd6123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e789092919063ffffffff16565b6123b7565b600190509392505050565b610d3e6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190614445565b60405180910390fd5b633b9aca0081610dda9190614490565b60118190555050565b5f600b5f9054906101000a900460ff16905090565b5f610e9c610e046123b0565b84610e978560045f610e146123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b6123b7565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed36123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690614445565b60405180910390fd5b610f6a838383612f37565b505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610faf6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290614445565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b601b805f0154908060010154908060020154908060030154905084565b60115481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111216123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61126f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614445565b60405180910390fd5b611306838383612fdd565b505050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113386123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614445565b60405180910390fd5b8160108190555080600f819055505050565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80600267ffffffffffffffff811115611418576114176144d1565b5b6040519080825280602002602001820160405280156114465781602001602082028036833780820191505090505b50905030815f8151811061145d5761145c6144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611501573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611525919061453f565b81600181518110611539576115386144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016115cf929190614621565b5f60405180830381865afa1580156115e9573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611611919061476e565b600181518110611624576116236144fe565b5b6020026020010151915050919050565b61163c6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90614445565b60405180910390fd5b601654810361170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614825565b60405180910390fd5b8060168190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a8054611752906143cb565b80601f016020809104026020016040519081016040528092919081815260200182805461177e906143cb565b80156117c95780601f106117a0576101008083540402835291602001916117c9565b820191905f5260205f20905b8154815290600101906020018083116117ac57829003601f168201915b5050505050905090565b6117db6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90614445565b60405180910390fd5b611872838383613083565b505050565b61187f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614445565b60405180910390fd5b8260185f01819055508160186001018190555080601860020181905550505050565b6119356123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614445565b60405180910390fd5b80601f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f611ac8611a166123b0565b84611ac3856040518060600160405280602581526020016151a96025913960045f611a3f6123b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e789092919063ffffffff16565b6123b7565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b0a611b036123b0565b848461257a565b6001905092915050565b611b1c6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906148b3565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc5919061453f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6f919061453f565b6040518363ffffffff1660e01b8152600401611d8c9291906148d1565b6020604051808303815f875af1158015611da8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dcc919061453f565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550565b611e8b6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90614445565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f609190613f04565b60405180910390a150565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ff56123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614445565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614968565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121b26123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614445565b60405180910390fd5b633b9aca008161224e9190614490565b600e8190555050565b61225f6123b0565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290614445565b60405180910390fd5b8260145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c906149f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a90614a84565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161256d9190613d54565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614b12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264d90614ba0565b60405180910390fd5b5f8111612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614c2e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e90614c96565b60405180910390fd5b5f8060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127c7575060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561280657506127d6611716565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128455750612815611716565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90505f61286384612855876110d3565b612eda90919063ffffffff16565b905061286d611716565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128db57506128ab611716565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612934575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612a175760055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129d7575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614d24565b60405180910390fd5b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612ab8575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b4857600e54841115612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990614db2565b60405180910390fd5b601154811115612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90614e40565b60405180910390fd5b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612bf1575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612c95575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c94575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b5b15612ca75760019250612ca6613129565b5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d51575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612da4575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612df7575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612e6157600d60029054906101000a900460ff16612e17576001612e19565b5f5b9150601154811115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5790614e40565b60405180910390fd5b5b612e7086868685876001613193565b505050505050565b5f838311158290612ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb69190613df7565b60405180910390fd5b505f8385612ecd9190614e5e565b9050809150509392505050565b5f808284612ee89190614e91565b905083811015612f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2490614f0e565b60405180910390fd5b8091505092915050565b5f5b83839050811015612fd7575f848483818110612f5857612f576144fe565b5b9050602002016020810190612f6d9190613f52565b90508260065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550508080612fcf90614f2c565b915050612f39565b50505050565b5f5b8383905081101561307d575f848483818110612ffe57612ffd6144fe565b5b90506020020160208101906130139190613f52565b90508260085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061307590614f2c565b915050612fdf565b50505050565b5f5b83839050811015613123575f8484838181106130a4576130a36144fe565b5b90506020020160208101906130b99190613f52565b90508260075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050808061311b90614f2c565b915050613085565b50505050565b5f613133306110d3565b90505f811115613190575f613147826113fb565b9050600f5481101580156131675750600d5f9054906101000a900460ff16155b801561317f5750600d60019054906101000a900460ff165b1561318e5761318d8261369a565b5b505b50565b5f8361319f575f6131ca565b6131c960646131bb60185f0154886138d190919063ffffffff16565b61394890919063ffffffff16565b5b90508380156131d65750825b1561325b5761320660646131f8601860010154886138d190919063ffffffff16565b61394890919063ffffffff16565b90505f601860020154111561325a575f61321f866113fb565b90506010548110613258576132556064613247601860020154896138d190919063ffffffff16565b61394890919063ffffffff16565b91505b505b5b5f61326f828761399190919063ffffffff16565b90506132c18660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461399190919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133528160035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133e38260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612eda90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516134819190613d54565b60405180910390a3821561369057601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b81526004016134e99190614113565b5f604051808303815f87803b158015613500575f80fd5b505af1925050508015613511575060015b50601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b815260040161356c9190614113565b5f604051808303815f87803b158015613583575f80fd5b505af1925050508015613594575060015b50601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b81526004016135f19190613d54565b6060604051808303815f875af192505050801561362c57506040513d601f19601f820116820180604052508101906136299190614f73565b60015b1561368f573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613683949392919061423f565b60405180910390a35050505b5b5050505050505050565b6001600d5f6101000a81548160ff0219169083151502179055506136bd816139da565b5f4790505f6136ed60646136df601b60010154856138d190919063ffffffff16565b61394890919063ffffffff16565b90505f61371b606461370d601b60020154866138d190919063ffffffff16565b61394890919063ffffffff16565b90505f613748606461373a601b5f0154876138d190919063ffffffff16565b61394890919063ffffffff16565b90505f6137766064613768601b60030154886138d190919063ffffffff16565b61394890919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156137dc573d5f803e3d5ffd5b506137e683613c10565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505015801561384a573d5f803e3d5ffd5b5060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156138af573d5f803e3d5ffd5b5050505050505f600d5f6101000a81548160ff02191690831515021790555050565b5f8083036138e1575f9050613942565b5f82846138ee9190614490565b90508284826138fd9190614ff0565b1461393d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393490615090565b60405180910390fd5b809150505b92915050565b5f61398983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cdb565b905092915050565b5f6139d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e78565b905092915050565b5f600267ffffffffffffffff8111156139f6576139f56144d1565b5b604051908082528060200260200182016040528015613a245781602001602082028036833780820191505090505b50905030815f81518110613a3b57613a3a6144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613adf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b03919061453f565b81600181518110613b1757613b166144fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b7d3060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846123b7565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613bdf9594939291906150e7565b5f604051808303815f87803b158015613bf6575f80fd5b505af1158015613c08573d5f803e3d5ffd5b505050505050565b5f601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c569061516c565b5f6040518083038185875af1925050503d805f8114613c90576040519150601f19603f3d011682016040523d82523d5f602084013e613c95565b606091505b505090508015613cd7577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051613cce9190613d54565b60405180910390a15b5050565b5f8083118290613d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d189190613df7565b60405180910390fd5b505f8385613d2f9190614ff0565b9050809150509392505050565b5f819050919050565b613d4e81613d3c565b82525050565b5f602082019050613d675f830184613d45565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613da4578082015181840152602081019050613d89565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613dc982613d6d565b613dd38185613d77565b9350613de3818560208601613d87565b613dec81613daf565b840191505092915050565b5f6020820190508181035f830152613e0f8184613dbf565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e5182613e28565b9050919050565b613e6181613e47565b8114613e6b575f80fd5b50565b5f81359050613e7c81613e58565b92915050565b613e8b81613d3c565b8114613e95575f80fd5b50565b5f81359050613ea681613e82565b92915050565b5f8060408385031215613ec257613ec1613e20565b5b5f613ecf85828601613e6e565b9250506020613ee085828601613e98565b9150509250929050565b5f8115159050919050565b613efe81613eea565b82525050565b5f602082019050613f175f830184613ef5565b92915050565b5f606082019050613f305f830186613d45565b613f3d6020830185613d45565b613f4a6040830184613d45565b949350505050565b5f60208284031215613f6757613f66613e20565b5b5f613f7484828501613e6e565b91505092915050565b5f805f8060808587031215613f9557613f94613e20565b5b5f613fa287828801613e98565b9450506020613fb387828801613e98565b9350506040613fc487828801613e98565b9250506060613fd587828801613e98565b91505092959194509250565b5f819050919050565b5f614004613fff613ffa84613e28565b613fe1565b613e28565b9050919050565b5f61401582613fea565b9050919050565b5f6140268261400b565b9050919050565b6140368161401c565b82525050565b5f60208201905061404f5f83018461402d565b92915050565b5f805f6060848603121561406c5761406b613e20565b5b5f61407986828701613e6e565b935050602061408a86828701613e6e565b925050604061409b86828701613e98565b9150509250925092565b5f602082840312156140ba576140b9613e20565b5b5f6140c784828501613e98565b91505092915050565b5f60ff82169050919050565b6140e5816140d0565b82525050565b5f6020820190506140fe5f8301846140dc565b92915050565b61410d81613e47565b82525050565b5f6020820190506141265f830184614104565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261414d5761414c61412c565b5b8235905067ffffffffffffffff81111561416a57614169614130565b5b60208301915083602082028301111561418657614185614134565b5b9250929050565b61419681613eea565b81146141a0575f80fd5b50565b5f813590506141b18161418d565b92915050565b5f805f604084860312156141ce576141cd613e20565b5b5f84013567ffffffffffffffff8111156141eb576141ea613e24565b5b6141f786828701614138565b9350935050602061420a868287016141a3565b9150509250925092565b5f6020828403121561422957614228613e20565b5b5f614236848285016141a3565b91505092915050565b5f6080820190506142525f830187613d45565b61425f6020830186613d45565b61426c6040830185613d45565b6142796060830184613d45565b95945050505050565b5f806040838503121561429857614297613e20565b5b5f6142a585828601613e98565b92505060206142b685828601613e98565b9150509250929050565b5f805f606084860312156142d7576142d6613e20565b5b5f6142e486828701613e98565b93505060206142f586828701613e98565b925050604061430686828701613e98565b9150509250925092565b5f806040838503121561432657614325613e20565b5b5f61433385828601613e6e565b925050602061434485828601613e6e565b9150509250929050565b5f805f6060848603121561436557614364613e20565b5b5f61437286828701613e6e565b935050602061438386828701613e6e565b925050604061439486828701613e6e565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143e257607f821691505b6020821081036143f5576143f461439e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61442f602083613d77565b915061443a826143fb565b602082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61449a82613d3c565b91506144a583613d3c565b92508282026144b381613d3c565b915082820484148315176144ca576144c9614463565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061453981613e58565b92915050565b5f6020828403121561455457614553613e20565b5b5f6145618482850161452b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61459c81613e47565b82525050565b5f6145ad8383614593565b60208301905092915050565b5f602082019050919050565b5f6145cf8261456a565b6145d98185614574565b93506145e483614584565b805f5b838110156146145781516145fb88826145a2565b9750614606836145b9565b9250506001810190506145e7565b5085935050505092915050565b5f6040820190506146345f830185613d45565b818103602083015261464681846145c5565b90509392505050565b61465882613daf565b810181811067ffffffffffffffff82111715614677576146766144d1565b5b80604052505050565b5f614689613e17565b9050614695828261464f565b919050565b5f67ffffffffffffffff8211156146b4576146b36144d1565b5b602082029050602081019050919050565b5f815190506146d381613e82565b92915050565b5f6146eb6146e68461469a565b614680565b9050808382526020820190506020840283018581111561470e5761470d614134565b5b835b81811015614737578061472388826146c5565b845260208401935050602081019050614710565b5050509392505050565b5f82601f8301126147555761475461412c565b5b81516147658482602086016146d9565b91505092915050565b5f6020828403121561478357614782613e20565b5b5f82015167ffffffffffffffff8111156147a05761479f613e24565b5b6147ac84828501614741565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e6720745f8201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b5f61480f602c83613d77565b915061481a826147b5565b604082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e20735f8201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b5f61489d602283613d77565b91506148a882614843565b604082019050919050565b5f6020820190508181035f8301526148ca81614891565b9050919050565b5f6040820190506148e45f830185614104565b6148f16020830184614104565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614952602683613d77565b915061495d826148f8565b604082019050919050565b5f6020820190508181035f83015261497f81614946565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6149e0602483613d77565b91506149eb82614986565b604082019050919050565b5f6020820190508181035f830152614a0d816149d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a6e602283613d77565b9150614a7982614a14565b604082019050919050565b5f6020820190508181035f830152614a9b81614a62565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614afc602583613d77565b9150614b0782614aa2565b604082019050919050565b5f6020820190508181035f830152614b2981614af0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b8a602383613d77565b9150614b9582614b30565b604082019050919050565b5f6020820190508181035f830152614bb781614b7e565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614c18602983613d77565b9150614c2382614bbe565b604082019050919050565b5f6020820190508181035f830152614c4581614c0c565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e2073657400005f82015250565b5f614c80601e83613d77565b9150614c8b82614c4c565b602082019050919050565b5f6020820190508181035f830152614cad81614c74565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f72205f8201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b5f614d0e602f83613d77565b9150614d1982614cb4565b604082019050919050565b5f6020820190508181035f830152614d3b81614d02565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614d9c602883613d77565b9150614da782614d42565b604082019050919050565b5f6020820190508181035f830152614dc981614d90565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574205f8201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b5f614e2a602583613d77565b9150614e3582614dd0565b604082019050919050565b5f6020820190508181035f830152614e5781614e1e565b9050919050565b5f614e6882613d3c565b9150614e7383613d3c565b9250828203905081811115614e8b57614e8a614463565b5b92915050565b5f614e9b82613d3c565b9150614ea683613d3c565b9250828201905080821115614ebe57614ebd614463565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614ef8601b83613d77565b9150614f0382614ec4565b602082019050919050565b5f6020820190508181035f830152614f2581614eec565b9050919050565b5f614f3682613d3c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f6857614f67614463565b5b600182019050919050565b5f805f60608486031215614f8a57614f89613e20565b5b5f614f97868287016146c5565b9350506020614fa8868287016146c5565b9250506040614fb9868287016146c5565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ffa82613d3c565b915061500583613d3c565b92508261501557615014614fc3565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61507a602183613d77565b915061508582615020565b604082019050919050565b5f6020820190508181035f8301526150a78161506e565b9050919050565b5f819050919050565b5f6150d16150cc6150c7846150ae565b613fe1565b613d3c565b9050919050565b6150e1816150b7565b82525050565b5f60a0820190506150fa5f830188613d45565b61510760208301876150d8565b818103604083015261511981866145c5565b90506151286060830185614104565b6151356080830184613d45565b9695505050505050565b5f81905092915050565b50565b5f6151575f8361513f565b915061516282615149565b5f82019050919050565b5f6151768261514c565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220449b320b33a807446296dd2b3c0d754e50a3a1f491b56c0489be01de9fa7b18064736f6c63430008150033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.