ETH Price: $3,485.48 (+2.87%)
Gas: 3 Gwei

Contract

0x0b3337395275d612F444eB67576d9056c93E90A7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201438932024-06-22 1:12:599 days ago1719018779IN
0x0b333739...6c93E90A7
0 ETH0.00012132.58591754
Transfer201398562024-06-21 11:39:599 days ago1718969999IN
0x0b333739...6c93E90A7
0 ETH0.000607985.08527605
Approve197359352024-04-26 0:22:5966 days ago1714090979IN
0x0b333739...6c93E90A7
0 ETH0.000297656.30474791
Approve197172792024-04-23 9:44:4768 days ago1713865487IN
0x0b333739...6c93E90A7
0 ETH0.000234889.44571267
Approve197035482024-04-21 11:42:1170 days ago1713699731IN
0x0b333739...6c93E90A7
0 ETH0.000341177.27471423
Approve195790462024-04-04 1:12:4788 days ago1712193167IN
0x0b333739...6c93E90A7
0 ETH0.0009518120.18644885
Approve195417232024-03-29 19:26:4793 days ago1711740407IN
0x0b333739...6c93E90A7
0 ETH0.0016235434.41537612
Approve190995002024-01-27 17:47:23155 days ago1706377643IN
0x0b333739...6c93E90A7
0 ETH0.0007261115.44692872
Approve190884402024-01-26 4:36:11157 days ago1706243771IN
0x0b333739...6c93E90A7
0 ETH0.0008137717.23695355
Approve189097272024-01-01 2:49:11182 days ago1704077351IN
0x0b333739...6c93E90A7
0 ETH0.0005119910.91703915
Approve185617932023-11-13 8:28:35230 days ago1699864115IN
0x0b333739...6c93E90A7
0 ETH0.0014505630.72515055
Approve185088602023-11-05 22:45:35238 days ago1699224335IN
0x0b333739...6c93E90A7
0 ETH0.0012152825.74151278
Transfer185078062023-11-05 19:12:11238 days ago1699211531IN
0x0b333739...6c93E90A7
0 ETH0.0034206733.91944029
Transfer185077892023-11-05 19:08:47238 days ago1699211327IN
0x0b333739...6c93E90A7
0 ETH0.0006425628.39937986
Approve185049642023-11-05 9:38:11238 days ago1699177091IN
0x0b333739...6c93E90A7
0 ETH0.0009898420.96649621
Approve184429092023-10-27 17:02:59247 days ago1698426179IN
0x0b333739...6c93E90A7
0 ETH0.0007363924.5047107
Approve184242302023-10-25 2:16:59250 days ago1698200219IN
0x0b333739...6c93E90A7
0 ETH0.0009395519.90124276
Approve183948072023-10-20 23:26:35254 days ago1697844395IN
0x0b333739...6c93E90A7
0 ETH0.0002628.8066154
Approve183899212023-10-20 7:02:23254 days ago1697785343IN
0x0b333739...6c93E90A7
0 ETH0.0006306313.35782756
Approve183647762023-10-16 18:38:11258 days ago1697481491IN
0x0b333739...6c93E90A7
0 ETH0.00038112.81152551
Approve183639602023-10-16 15:53:47258 days ago1697471627IN
0x0b333739...6c93E90A7
0 ETH0.0002793511.23407687
Approve183639452023-10-16 15:50:35258 days ago1697471435IN
0x0b333739...6c93E90A7
0 ETH0.0004938310.54314263
Transfer183639392023-10-16 15:49:23258 days ago1697471363IN
0x0b333739...6c93E90A7
0 ETH0.001365611.42333377
Approve183570892023-10-15 16:52:23259 days ago1697388743IN
0x0b333739...6c93E90A7
0 ETH0.0005989112.68590468
Approve183496242023-10-14 15:50:47260 days ago1697298647IN
0x0b333739...6c93E90A7
0 ETH0.000262835.57433932
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
181712962023-09-19 16:58:11285 days ago1695142691
0x0b333739...6c93E90A7
1.46340769 ETH
181703962023-09-19 13:56:47285 days ago1695131807
0x0b333739...6c93E90A7
1.74351382 ETH
181701032023-09-19 12:57:47285 days ago1695128267
0x0b333739...6c93E90A7
0.07357859 ETH
181701032023-09-19 12:57:47285 days ago1695128267
0x0b333739...6c93E90A7
0.22073579 ETH
181697912023-09-19 11:54:59285 days ago1695124499
0x0b333739...6c93E90A7
0.38663608 ETH
181696052023-09-19 11:17:35285 days ago1695122255
0x0b333739...6c93E90A7
0.16844438 ETH
181696052023-09-19 11:17:35285 days ago1695122255
0x0b333739...6c93E90A7
0.50533315 ETH
181691762023-09-19 9:50:35285 days ago1695117035
0x0b333739...6c93E90A7
0.46894295 ETH
181685622023-09-19 7:46:35285 days ago1695109595
0x0b333739...6c93E90A7
0.46830655 ETH
181681232023-09-19 6:17:59286 days ago1695104279
0x0b333739...6c93E90A7
0.17369359 ETH
181681232023-09-19 6:17:59286 days ago1695104279
0x0b333739...6c93E90A7
0.52108077 ETH
181679762023-09-19 5:48:23286 days ago1695102503
0x0b333739...6c93E90A7
0.29829701 ETH
181679762023-09-19 5:48:23286 days ago1695102503
0x0b333739...6c93E90A7
0.89489104 ETH
181679632023-09-19 5:45:47286 days ago1695102347
0x0b333739...6c93E90A7
2.77629736 ETH
181679022023-09-19 5:33:35286 days ago1695101615
0x0b333739...6c93E90A7
0.22691285 ETH
181679022023-09-19 5:33:35286 days ago1695101615
0x0b333739...6c93E90A7
0.68073855 ETH
181673612023-09-19 3:44:11286 days ago1695095051
0x0b333739...6c93E90A7
0.18976374 ETH
181673612023-09-19 3:44:11286 days ago1695095051
0x0b333739...6c93E90A7
0.56929123 ETH
181673432023-09-19 3:40:35286 days ago1695094835
0x0b333739...6c93E90A7
1.90983044 ETH
181670872023-09-19 2:48:59286 days ago1695091739
0x0b333739...6c93E90A7
0.15156353 ETH
181670872023-09-19 2:48:59286 days ago1695091739
0x0b333739...6c93E90A7
0.4546906 ETH
181667462023-09-19 1:39:47286 days ago1695087587
0x0b333739...6c93E90A7
1.10187318 ETH
181661352023-09-18 23:36:11286 days ago1695080171
0x0b333739...6c93E90A7
1.02946938 ETH
181656362023-09-18 21:55:47286 days ago1695074147
0x0b333739...6c93E90A7
0.15923342 ETH
181656362023-09-18 21:55:47286 days ago1695074147
0x0b333739...6c93E90A7
0.47770027 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Mellivora

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : Token.sol
// Mellivora Finance: Redefining Decentralized Finance through Frictionless Yield Protocol (FYP)

// Website: https://mellivora.finance/
// Docs: https://docs.mellivora.finance/
// Twitter: https://twitter.com/MellivoraERC
// Telegram: https://t.me/MellivoraERC

// SPDX-License-Identifier: SEE LICENSE IN LICENSE
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
pragma solidity 0.8.21;

interface IPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function token0() external view returns (address);

    function sync() external;
}

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

interface IUniswapRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

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

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

abstract contract TokenBase is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(string memory _tokenName, string memory _tokenSymbol) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = 9;
    }

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

contract Mellivora is TokenBase, Ownable {
    address payable public treasuryAddress;
    address public immutable deadAddress = address(0xDEAD);
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public maxAmount = (_tTotal * 2) / 100; // 2%
    uint256 public maxWallet = (_tTotal * 2) / 100; // 2%

    uint256 private minimumTokensBeforeSwap = _tTotal / 200; // 0.5%

    bool public limitsInEffect = true;
    bool public tradingEnable = false;
    uint256 public latestRocketLaunch;
    uint256 public rocketLaunchCooldown = 2 hours;
    uint256 public launchETHPercent = 5;
    uint256 public launchCount;
    uint256 public totalETHLaunched;

    uint256 private _initTax = 30;
    uint256 private _reduceTaxAt = 30;
    Taxes public _tax = Taxes(2, 2, 2);

    uint256 private _buyCount = 0;
    uint256 private _sellCount = 0;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    struct Taxes {
        uint256 treasury;
        uint256 rewards;
        uint256 launchRocket;
    }

    IUniswapRouter public immutable router;
    address public immutable pair;

    bool inSwap;

    event Distribute(uint256 amount);
    event SwapEnabled();
    event OffLimits();
    event LaunchETH(uint256 amount);

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(address _treasuryAddress) TokenBase("Mellivora", "MLVR") {
        treasuryAddress = payable(_treasuryAddress);
        _rOwned[_msgSender()] = _rTotal;
        router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        pair = IFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );

        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(router)] = true;
        _isExcludedFromFee[deadAddress] = true;

        excludeFromReward(address(this));
        excludeFromReward(deadAddress);
        excludeFromReward(pair);

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

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

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

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

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

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

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

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

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

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

    function reflectionFromToken(
        uint256 tAmount
    ) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        (uint256 rAmount, , , ) = _getValues(tAmount, 0);
        return rAmount;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , ) = _getValues(tAmount, 0);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rTotal = _rTotal - (rAmount);
        _tFeeTotal = _tFeeTotal + (tAmount);
    }

    function enableSwap() external onlyOwner {
        tradingEnable = true;
        emit SwapEnabled();
    }

    function offLimits() external onlyOwner {
        limitsInEffect = false;
        emit OffLimits();
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(
            _treasuryAddress != address(0),
            "Cannot set treasury to zero address"
        );
        treasuryAddress = payable(_treasuryAddress);
    }

    function setLaunchRocketETHPercent(uint256 _launchETHPercent) external onlyOwner {
        require(
            _launchETHPercent < 10 && _launchETHPercent > 1,
            "Invalid percentage"
        );
        launchETHPercent = _launchETHPercent;
    }

    function launchRocket() external {
        require(
            latestRocketLaunch + rocketLaunchCooldown < block.timestamp,
            "Rocket launch cooldown in effect"
        );
        latestRocketLaunch = block.timestamp;
        uint256 amountETH = address(this).balance;
        uint256 amountLimit = IERC20(router.WETH()).balanceOf(pair);

        if (amountETH > (amountLimit * launchETHPercent) / 100) {
            amountETH = (amountLimit * launchETHPercent) / 100;
        }

        launchRocketAndBurn(amountETH);
        totalETHLaunched += amountETH;
        launchCount++;
        emit LaunchETH(amountETH);
    }

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

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

    function calculateTaxFee(
        uint256 _amount,
        address sender,
        address recipient
    ) private view returns (uint256) {
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            return 0;
        }
        if (sender != pair && recipient != pair) {
            return 0;
        }
        if (sender == pair && _buyCount < _reduceTaxAt) {
            return (_amount * _initTax) / 100;
        }
        if (recipient == pair && _sellCount < _reduceTaxAt) {
            return (_amount * _initTax) / 100;
        }
        uint256 _totalTax = _tax.treasury + _tax.rewards + _tax.launchRocket;
        return (_amount * _totalTax) / 100;
    }

    function setMinimumTokensBeforeSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

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

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

    function _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(amount > 0, "Transfer amount must be greater than zero");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!inSwap && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            require(tradingEnable, "Trading not live");
            if (limitsInEffect) {
                if (from == pair || to == pair) {
                    require(amount <= maxAmount, "Max Tx Exceeded");
                }
                if (to != pair) {
                    require(
                        balanceOf(to) + amount <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }

            if (to == pair) {
                _buyCount++;
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= minimumTokensBeforeSwap) {
                    swapTokens(minimumTokensBeforeSwap);
                }
            }
            if (from == pair) {
                _sellCount++;
            }
        }
        _tokenTransfer(from, to, amount);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance - initialBalance;
        uint256 _totalTax = _tax.treasury + _tax.rewards + _tax.launchRocket;
        transferToAddressETH(
            treasuryAddress,
            (transferredBalance / _totalTax) * _tax.treasury
        );
    }

    function launchRocketAndBurn(uint256 amount) private lockTheSwap {
        if (amount > 0) {
            swapETHForTokens(amount);
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 tFee = calculateTaxFee(tAmount, sender, recipient);
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount
        ) = _getValues(tAmount, tFee);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeFee(rFee, tFee, sender);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 tFee = calculateTaxFee(tAmount, sender, recipient);
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount
        ) = _getValues(tAmount, tFee);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeFee(rFee, tFee, sender);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 tFee = calculateTaxFee(tAmount, sender, recipient);

        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount
        ) = _getValues(tAmount, tFee);
        _tOwned[sender] = _tOwned[sender] - (tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeFee(rFee, tFee, sender);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 tFee = calculateTaxFee(tAmount, sender, recipient);
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount
        ) = _getValues(tAmount, tFee);
        _tOwned[sender] = _tOwned[sender] - (tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeFee(rFee, tFee, sender);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeFee(
        uint256 rFeeTotal,
        uint256 tFeeTotal,
        address _from
    ) private {
        uint256 _totalTax = _tax.treasury + _tax.rewards + _tax.launchRocket;
        uint256 rFeeReflect = (rFeeTotal * (_tax.rewards)) / (_totalTax);
        uint256 tFeeReflect = (tFeeTotal * (_tax.rewards)) / (_totalTax);

        // reflect fees
        _rTotal = _rTotal - (rFeeReflect);
        _tFeeTotal = _tFeeTotal + (tFeeReflect);

        // treasury + launchRocket fees
        _rOwned[address(this)] =
            _rOwned[address(this)] +
            (rFeeTotal - rFeeReflect);

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] =
                _tOwned[address(this)] +
                (tFeeTotal - tFeeReflect);
        }
        emit Transfer(_from, address(this), tFeeTotal - tFeeReflect);
        emit Distribute(tFeeReflect);
    }

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

    function _getTValues(
        uint256 tAmount,
        uint256 tFee
    ) private pure returns (uint256) {
        uint256 tTransferAmount = tAmount - (tFee);
        return tTransferAmount;
    }

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

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

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

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

    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        recipient.transfer(amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), _tTotal / 200);
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
    }

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

        // make the swap
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp
        );
    }

    receive() external payable {}
}

File 2 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Distribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LaunchETH","type":"event"},{"anonymous":false,"inputs":[],"name":"OffLimits","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":[],"name":"SwapEnabled","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":"_tax","outputs":[{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"launchRocket","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"deadAddress","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRocketLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchETHPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchRocket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rocketLaunchCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_launchETHPercent","type":"uint256"}],"name":"setLaunchRocketETHPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHLaunched","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250670de0b6b3a76400006007556007545f1962000056919062000dff565b5f1962000064919062000e63565b600855606460026007546200007a919062000e9d565b62000086919062000ee7565b600a55606460026007546200009c919062000e9d565b620000a8919062000ee7565b600b5560c8600754620000bc919062000ee7565b600c556001600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff021916908315150217905550611c20600f556005601055601e601355601e60145560405180606001604052806002815260200160028152602001600281525060155f820151815f0155602082015181600101556040820151816002015550505f6018555f6019553480156200015a575f80fd5b506040516200679538038062006795833981810160405281019062000180919062000f83565b6040518060400160405280600981526020017f4d656c6c69766f726100000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4c565200000000000000000000000000000000000000000000000000000000815250815f9081620001fc91906200120e565b5080600190816200020e91906200120e565b50600960025f6101000a81548160ff021916908360ff16021790555050506200024c62000240620006d960201b60201c565b620006e060201b60201c565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460045f620002a2620006d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000373573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000399919062000f83565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000401573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000427919062000f83565b6040518363ffffffff1660e01b81526004016200044692919062001303565b6020604051808303815f875af115801562000463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000489919062000f83565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250506001601a5f620004d1620006d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601a5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601a5f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200063430620007a560201b60201c565b62000647608051620007a560201b60201c565b6200065a60c051620007a560201b60201c565b6200066a620006d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620006ca91906200133f565b60405180910390a35062001553565b5f33905090565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007b5620009d060201b60201c565b601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562000842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083990620013b8565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156200091857620008d660045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000a6160201b60201c565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6001601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620009e0620006d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a0662000ad360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a569062001426565b60405180910390fd5b565b5f60085482111562000aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa190620014ba565b60405180910390fd5b5f62000abb62000afc60201b60201c565b9050808362000acb919062000ee7565b915050919050565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f805f62000b0f62000b2860201b60201c565b91509150808262000b21919062000ee7565b9250505090565b5f805f60085490505f60075490505f5b601c8054905081101562000d8f578260045f601c848154811062000b615762000b60620014da565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118062000c4a57508160055f601c848154811062000be65762000be5620014da565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b1562000c63576008546007549450945050505062000dc5565b60045f601c838154811062000c7d5762000c7c620014da565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548362000cec919062000e63565b925060055f601c838154811062000d085762000d07620014da565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548262000d77919062000e63565b9150808062000d869062001507565b91505062000b38565b5060075460085462000da2919062000ee7565b82101562000dbc5760085460075493509350505062000dc5565b81819350935050505b9091565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000e0b8262000dc9565b915062000e188362000dc9565b92508262000e2b5762000e2a62000dd2565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e6f8262000dc9565b915062000e7c8362000dc9565b925082820390508181111562000e975762000e9662000e36565b5b92915050565b5f62000ea98262000dc9565b915062000eb68362000dc9565b925082820262000ec68162000dc9565b9150828204841483151762000ee05762000edf62000e36565b5b5092915050565b5f62000ef38262000dc9565b915062000f008362000dc9565b92508262000f135762000f1262000dd2565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f4d8262000f22565b9050919050565b62000f5f8162000f41565b811462000f6a575f80fd5b50565b5f8151905062000f7d8162000f54565b92915050565b5f6020828403121562000f9b5762000f9a62000f1e565b5b5f62000faa8482850162000f6d565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200102f57607f821691505b60208210810362001045576200104462000fea565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620010a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200106c565b620010b586836200106c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620010f6620010f0620010ea8462000dc9565b620010cd565b62000dc9565b9050919050565b5f819050919050565b6200111183620010d6565b620011296200112082620010fd565b84845462001078565b825550505050565b5f90565b6200113f62001131565b6200114c81848462001106565b505050565b5b818110156200117357620011675f8262001135565b60018101905062001152565b5050565b601f821115620011c2576200118c816200104b565b62001197846200105d565b81016020851015620011a7578190505b620011bf620011b6856200105d565b83018262001151565b50505b505050565b5f82821c905092915050565b5f620011e45f1984600802620011c7565b1980831691505092915050565b5f620011fe8383620011d3565b9150826002028217905092915050565b620012198262000fb3565b67ffffffffffffffff81111562001235576200123462000fbd565b5b62001241825462001017565b6200124e82828562001177565b5f60209050601f83116001811462001284575f84156200126f578287015190505b6200127b8582620011f1565b865550620012ea565b601f19841662001294866200104b565b5f5b82811015620012bd5784890151825560018201915060208501945060208101905062001296565b86831015620012dd5784890151620012d9601f891682620011d3565b8355505b6001600288020188555050505b505050505050565b620012fd8162000f41565b82525050565b5f604082019050620013185f830185620012f2565b620013276020830184620012f2565b9392505050565b620013398162000dc9565b82525050565b5f602082019050620013545f8301846200132e565b92915050565b5f82825260208201905092915050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f620013a0601b836200135a565b9150620013ad826200136a565b602082019050919050565b5f6020820190508181035f830152620013d18162001392565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200140e6020836200135a565b91506200141b82620013d8565b602082019050919050565b5f6020820190508181035f8301526200143f8162001400565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f620014a2602a836200135a565b9150620014af8262001446565b604082019050919050565b5f6020820190508181035f830152620014d38162001494565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f620015138262000dc9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362001548576200154762000e36565b5b600182019050919050565b60805160a05160c0516151a0620015f55f395f818161193a01528181611b6701528181612285015281816122da0152818161237501528181612422015281816124af01528181613af101528181613b4801528181613ba60152613c2a01525f8181611abf01528181611e1001528181612cf401528181612e1d01528181612f6a01528181613049015261307e01525f8181610c820152612e5c01526151a05ff3fe60806040526004361061025f575f3560e01c806360290a2e11610143578063abd61c7c116100b5578063dd62ed3e11610079578063dd62ed3e146108d2578063e751d5081461090e578063ea2f0b371461093a578063f2fde38b14610962578063f887ea401461098a578063f8b45b05146109b457610266565b8063abd61c7c1461082c578063ae173c4414610842578063aee50b1e1461086a578063c5f956af14610892578063cb32198a146108bc57610266565b806388f820201161010757806388f82020146106fa5780638da5cb5b1461073657806395d89b4114610760578063a457c2d71461078a578063a8aa1b31146107c6578063a9059cbb146107f057610266565b806360290a2e1461062c5780636605bfda1461065657806370a082311461067e578063715018a6146106ba578063871b5b27146106d057610266565b80632d838119116101dc5780633bd5d173116101a05780633bd5d17314610524578063437823ec1461054c5780634a62bb651461057457806352390c021461059e5780635342acb4146105c65780635f48f3931461060257610266565b80632d83811914610430578063313ce5671461046c57806333e91640146104965780633685d419146104c057806339509351146104e857610266565b806318160ddd1161022357806318160ddd1461036057806323b872dd1461038a57806327c8f835146103c657806327cca59f146103f0578063296914481461041a57610266565b806306fdde031461026a578063095ea7b3146102945780631392c086146102d05780631693e8d41461030c5780631783dacd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109de565b60405161028b9190614038565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906140e9565b610a6d565b6040516102c79190614141565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061415a565b610a8a565b6040516103039190614194565b60405180910390f35b348015610317575f80fd5b50610320610ae9565b60405161032d9190614141565b60405180910390f35b348015610341575f80fd5b5061034a610afc565b6040516103579190614194565b60405180910390f35b34801561036b575f80fd5b50610374610b02565b6040516103819190614194565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab91906141ad565b610b0b565b6040516103bd9190614141565b60405180910390f35b3480156103d1575f80fd5b506103da610c80565b6040516103e7919061420c565b60405180910390f35b3480156103fb575f80fd5b50610404610ca4565b6040516104119190614194565b60405180910390f35b348015610425575f80fd5b5061042e610caa565b005b34801561043b575f80fd5b506104566004803603810190610451919061415a565b610cfb565b6040516104639190614194565b60405180910390f35b348015610477575f80fd5b50610480610d60565b60405161048d9190614240565b60405180910390f35b3480156104a1575f80fd5b506104aa610d75565b6040516104b79190614194565b60405180910390f35b3480156104cb575f80fd5b506104e660048036038101906104e19190614259565b610d7b565b005b3480156104f3575f80fd5b5061050e600480360381019061050991906140e9565b611025565b60405161051b9190614141565b60405180910390f35b34801561052f575f80fd5b5061054a6004803603810190610545919061415a565b6110cc565b005b348015610557575f80fd5b50610572600480360381019061056d9190614259565b611228565b005b34801561057f575f80fd5b50610588611288565b6040516105959190614141565b60405180910390f35b3480156105a9575f80fd5b506105c460048036038101906105bf9190614259565b61129a565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190614259565b6114b1565b6040516105f99190614141565b60405180910390f35b34801561060d575f80fd5b50610616611503565b6040516106239190614194565b60405180910390f35b348015610637575f80fd5b50610640611509565b60405161064d9190614194565b60405180910390f35b348015610661575f80fd5b5061067c60048036038101906106779190614259565b61150f565b005b348015610689575f80fd5b506106a4600480360381019061069f9190614259565b6115c8565b6040516106b19190614194565b60405180910390f35b3480156106c5575f80fd5b506106ce6116ab565b005b3480156106db575f80fd5b506106e46116be565b6040516106f19190614194565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190614259565b6116c4565b60405161072d9190614141565b60405180910390f35b348015610741575f80fd5b5061074a611716565b604051610757919061420c565b60405180910390f35b34801561076b575f80fd5b5061077461173f565b6040516107819190614038565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab91906140e9565b6117cf565b6040516107bd9190614141565b60405180910390f35b3480156107d1575f80fd5b506107da611938565b6040516107e7919061420c565b60405180910390f35b3480156107fb575f80fd5b50610816600480360381019061081191906140e9565b61195c565b6040516108239190614141565b60405180910390f35b348015610837575f80fd5b50610840611979565b005b34801561084d575f80fd5b506108686004803603810190610863919061415a565b6119c8565b005b348015610875575f80fd5b50610890600480360381019061088b919061415a565b611a29565b005b34801561089d575f80fd5b506108a6611a3b565b6040516108b391906142a4565b60405180910390f35b3480156108c7575f80fd5b506108d0611a60565b005b3480156108dd575f80fd5b506108f860048036038101906108f391906142bd565b611c94565b6040516109059190614194565b60405180910390f35b348015610919575f80fd5b50610922611d16565b604051610931939291906142fb565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614259565b611d2d565b005b34801561096d575f80fd5b5061098860048036038101906109839190614259565b611d8c565b005b348015610995575f80fd5b5061099e611e0e565b6040516109ab919061438b565b60405180910390f35b3480156109bf575f80fd5b506109c8611e32565b6040516109d59190614194565b60405180910390f35b60605f80546109ec906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a18906143d1565b8015610a635780601f10610a3a57610100808354040283529160200191610a63565b820191905f5260205f20905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b5f610a80610a79611e38565b8484611e3f565b6001905092915050565b5f600754821115610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac79061444b565b60405180910390fd5b5f610adb835f612002565b505050905080915050919050565b600d60019054906101000a900460ff1681565b60105481565b5f600754905090565b5f610b17848484612047565b8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b5e611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906144d9565b60405180910390fd5b610c7584610be5611e38565b8460065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c2c611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c709190614524565b611e3f565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115481565b610cb2612529565b6001600d60016101000a81548160ff0219169083151502179055507f41c787961cb389554b90a8dbfb700790a3f278f50ba1d330c0b555d884789b5a60405160405180910390a1565b5f600854821115610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d38906145c7565b60405180910390fd5b5f610d4a6125a7565b90508083610d589190614612565b915050919050565b5f60025f9054906101000a900460ff16905090565b600e5481565b610d83612529565b601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061468c565b60405180910390fd5b5f5b601c80549050811015611021578173ffffffffffffffffffffffffffffffffffffffff16601c8281548110610e4657610e456146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361100e57601c6001601c80549050610e9d9190614524565b81548110610eae57610ead6146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c8281548110610eea57610ee96146aa565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c805480610fd757610fd66146d7565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611021565b808061101990614704565b915050610e0e565b5050565b5f6110c2611031611e38565b848460065f61103e611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110bd919061474b565b611e3f565b6001905092915050565b5f6110d5611e38565b9050601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906147ee565b60405180910390fd5b5f61116c835f612002565b50505090508060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111ba9190614524565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806008546112099190614524565b6008819055508260095461121d919061474b565b600981905550505050565b611230612529565b6001601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600d5f9054906101000a900460ff1681565b6112a2612529565b601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561132c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113239061468c565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156113f9576113b760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cfb565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6001601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600a5481565b600f5481565b611517612529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061487c565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561165d5760055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506116a6565b6116a360045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cfb565b90505b919050565b6116b3612529565b6116bc5f6125c9565b565b60125481565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174e906143d1565b80601f016020809104026020016040519081016040528092919081815260200182805461177a906143d1565b80156117c55780601f1061179c576101008083540402835291602001916117c5565b820191905f5260205f20905b8154815290600101906020018083116117a857829003601f168201915b5050505050905090565b5f8160065f6117dc611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118899061490a565b60405180910390fd5b61192e61189d611e38565b848460065f6118aa611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119299190614524565b611e3f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f61196f611968611e38565b8484612047565b6001905092915050565b611981612529565b5f600d5f6101000a81548160ff0219169083151502179055507f1d738cf80c30d28a9187df6aca2bb3b944576e9eb903d81ccd4b344571e58bd960405160405180910390a1565b6119d0612529565b600a811080156119e05750600181115b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614972565b60405180910390fd5b8060108190555050565b611a31612529565b80600c8190555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b42600f54600e54611a71919061474b565b10611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa8906149da565b60405180910390fd5b42600e819055505f4790505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4a9190614a0c565b73ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611ba2919061420c565b602060405180830381865afa158015611bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be19190614a4b565b9050606460105482611bf39190614a76565b611bfd9190614612565b821115611c2157606460105482611c149190614a76565b611c1e9190614612565b91505b611c2a8261268e565b8160125f828254611c3b919061474b565b9250508190555060115f815480929190611c5490614704565b91905055507f8af03e5f2036a997bf5e84865220113833213719e066e8a550793dff03cc9af082604051611c889190614194565b60405180910390a15050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6015805f0154908060010154908060020154905083565b611d35612529565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611d94612529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614b27565b60405180910390fd5b611e0b816125c9565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614bb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614c43565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190614194565b60405180910390a3505050565b5f805f805f61201187876126d6565b90505f805f6120288a8a6120236125a7565b6126f0565b9250925092508282828697509750975097505050505092959194509250565b5f8111612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090614cd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614d5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90614ded565b60405180910390fd5b601d5f9054906101000a900460ff161580156121c85750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561221b5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251957600d60019054906101000a900460ff1661226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614e55565b60405180910390fd5b600d5f9054906101000a900460ff1615612420577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061232857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561237357600a54811115612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614ebd565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461241f57600b54816123d3846115c8565b6123dd919061474b565b111561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614f25565b60405180910390fd5b5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ad5760185f81548092919061248590614704565b91905055505f612494306115c8565b9050600c5481106124ab576124aa600c54612735565b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125185760195f81548092919061251290614704565b91905055505b5b6125248383836127f7565b505050565b612531611e38565b73ffffffffffffffffffffffffffffffffffffffff1661254f611716565b73ffffffffffffffffffffffffffffffffffffffff16146125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c90614f8d565b60405180910390fd5b565b5f805f6125b2612a1f565b9150915080826125c29190614612565b9250505090565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601d5f6101000a81548160ff0219169083151502179055505f8111156126ba576126b981612ca5565b5b5f601d5f6101000a81548160ff02191690831515021790555050565b5f8082846126e49190614524565b90508091505092915050565b5f805f8084876127009190614a76565b90505f858761270f9190614a76565b90505f818361271e9190614524565b905082818395509550955050505093509350939050565b6001601d5f6101000a81548160ff0219169083151502179055505f47905061275c82612ecd565b5f81476127699190614524565b90505f60156002015460156001015460155f0154612787919061474b565b612791919061474b565b90506127d860035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660155f015483856127c99190614612565b6127d39190614a76565b61310e565b5050505f601d5f6101000a81548160ff02191690831515021790555050565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128945750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128a9576128a4838383613156565b612a1a565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129465750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561295b57612956838383613392565b612a19565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129f75750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a0c57612a078383836135ce565b612a18565b612a17838383613894565b5b5b5b505050565b5f805f60085490505f60075490505f5b601c80549050811015612c6f578260045f601c8481548110612a5457612a536146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612b3957508160055f601c8481548110612ad557612ad46146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612b505760085460075494509450505050612ca1565b60045f601c8381548110612b6757612b666146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612bd49190614524565b925060055f601c8381548110612bed57612bec6146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612c5a9190614524565b91508080612c6790614704565b915050612a2f565b50600754600854612c809190614612565b821015612c9857600854600754935093505050612ca1565b81819350935050505b9091565b5f600267ffffffffffffffff811115612cc157612cc0614fab565b5b604051908082528060200260200182016040528015612cef5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d7f9190614a0c565b815f81518110612d9257612d916146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612de157612de06146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95835f847f0000000000000000000000000000000000000000000000000000000000000000426040518663ffffffff1660e01b8152600401612e9b94939291906150c8565b5f604051808303818588803b158015612eb2575f80fd5b505af1158015612ec4573d5f803e3d5ffd5b50505050505050565b5f600267ffffffffffffffff811115612ee957612ee8614fab565b5b604051908082528060200260200182016040528015612f175781602001602082028036833780820191505090505b50905030815f81518110612f2e57612f2d6146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff59190614a0c565b81600181518110613009576130086146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061307c307f000000000000000000000000000000000000000000000000000000000000000060c86007546130779190614612565b611e3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130dd959493929190615112565b5f604051808303815f87803b1580156130f4575f80fd5b505af1158015613106573d5f803e3d5ffd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613151573d5f803e3d5ffd5b505050565b5f613162828585613a46565b90505f805f806131728686612002565b93509350935093508560055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131c39190614524565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461324d9190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132d7919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061332382868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133809190614194565b60405180910390a35050505050505050565b5f61339e828585613a46565b90505f805f806133ae8686612002565b93509350935093508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133ff9190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613489919061474b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613513919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061355f82868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135bc9190614194565b60405180910390a35050505050505050565b5f6135da828585613a46565b90505f805f806135ea8686612002565b93509350935093508560055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461363b9190614524565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546136c59190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461374f919061474b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546137d9919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061382582868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138829190614194565b60405180910390a35050505050505050565b5f6138a0828585613a46565b90505f805f806138b08686612002565b93509350935093508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139019190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461398b919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506139d782868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a349190614194565b60405180910390a35050505050505050565b5f601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613ae25750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613aef575f9050613cf0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b9757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613ba4575f9050613cf0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015613c025750601454601854105b15613c2857606460135485613c179190614a76565b613c219190614612565b9050613cf0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015613c865750601454601954105b15613cac57606460135485613c9b9190614a76565b613ca59190614612565b9050613cf0565b5f60156002015460156001015460155f0154613cc8919061474b565b613cd2919061474b565b905060648186613ce29190614a76565b613cec9190614612565b9150505b9392505050565b5f60156002015460156001015460155f0154613d13919061474b565b613d1d919061474b565b90505f8160156001015486613d329190614a76565b613d3c9190614612565b90505f8260156001015486613d519190614a76565b613d5b9190614612565b905081600854613d6b9190614524565b60088190555080600954613d7f919061474b565b6009819055508186613d919190614524565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613dd9919061474b565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613eff578085613e759190614524565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ebd919061474b565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8388613f5a9190614524565b604051613f679190614194565b60405180910390a37f4def474aca53bf221d07d9ab0f675b3f6d8d2494b8427271bcf43c018ef1eead81604051613f9e9190614194565b60405180910390a1505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613fe5578082015181840152602081019050613fca565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61400a82613fae565b6140148185613fb8565b9350614024818560208601613fc8565b61402d81613ff0565b840191505092915050565b5f6020820190508181035f8301526140508184614000565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140858261405c565b9050919050565b6140958161407b565b811461409f575f80fd5b50565b5f813590506140b08161408c565b92915050565b5f819050919050565b6140c8816140b6565b81146140d2575f80fd5b50565b5f813590506140e3816140bf565b92915050565b5f80604083850312156140ff576140fe614058565b5b5f61410c858286016140a2565b925050602061411d858286016140d5565b9150509250929050565b5f8115159050919050565b61413b81614127565b82525050565b5f6020820190506141545f830184614132565b92915050565b5f6020828403121561416f5761416e614058565b5b5f61417c848285016140d5565b91505092915050565b61418e816140b6565b82525050565b5f6020820190506141a75f830184614185565b92915050565b5f805f606084860312156141c4576141c3614058565b5b5f6141d1868287016140a2565b93505060206141e2868287016140a2565b92505060406141f3868287016140d5565b9150509250925092565b6142068161407b565b82525050565b5f60208201905061421f5f8301846141fd565b92915050565b5f60ff82169050919050565b61423a81614225565b82525050565b5f6020820190506142535f830184614231565b92915050565b5f6020828403121561426e5761426d614058565b5b5f61427b848285016140a2565b91505092915050565b5f61428e8261405c565b9050919050565b61429e81614284565b82525050565b5f6020820190506142b75f830184614295565b92915050565b5f80604083850312156142d3576142d2614058565b5b5f6142e0858286016140a2565b92505060206142f1858286016140a2565b9150509250929050565b5f60608201905061430e5f830186614185565b61431b6020830185614185565b6143286040830184614185565b949350505050565b5f819050919050565b5f61435361434e6143498461405c565b614330565b61405c565b9050919050565b5f61436482614339565b9050919050565b5f6143758261435a565b9050919050565b6143858161436b565b82525050565b5f60208201905061439e5f83018461437c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143e857607f821691505b6020821081036143fb576143fa6143a4565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614435601f83613fb8565b915061444082614401565b602082019050919050565b5f6020820190508181035f83015261446281614429565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6144c3602883613fb8565b91506144ce82614469565b604082019050919050565b5f6020820190508181035f8301526144f0816144b7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61452e826140b6565b9150614539836140b6565b9250828203905081811115614551576145506144f7565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6145b1602a83613fb8565b91506145bc82614557565b604082019050919050565b5f6020820190508181035f8301526145de816145a5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461c826140b6565b9150614627836140b6565b925082614637576146366145e5565b5b828204905092915050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614676601b83613fb8565b915061468182614642565b602082019050919050565b5f6020820190508181035f8301526146a38161466a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61470e826140b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147405761473f6144f7565b5b600182019050919050565b5f614755826140b6565b9150614760836140b6565b9250828201905080821115614778576147776144f7565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6147d8602c83613fb8565b91506147e38261477e565b604082019050919050565b5f6020820190508181035f830152614805816147cc565b9050919050565b7f43616e6e6f742073657420747265617375727920746f207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614866602383613fb8565b91506148718261480c565b604082019050919050565b5f6020820190508181035f8301526148938161485a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6148f4602583613fb8565b91506148ff8261489a565b604082019050919050565b5f6020820190508181035f830152614921816148e8565b9050919050565b7f496e76616c69642070657263656e7461676500000000000000000000000000005f82015250565b5f61495c601283613fb8565b915061496782614928565b602082019050919050565b5f6020820190508181035f83015261498981614950565b9050919050565b7f526f636b6574206c61756e636820636f6f6c646f776e20696e206566666563745f82015250565b5f6149c4602083613fb8565b91506149cf82614990565b602082019050919050565b5f6020820190508181035f8301526149f1816149b8565b9050919050565b5f81519050614a068161408c565b92915050565b5f60208284031215614a2157614a20614058565b5b5f614a2e848285016149f8565b91505092915050565b5f81519050614a45816140bf565b92915050565b5f60208284031215614a6057614a5f614058565b5b5f614a6d84828501614a37565b91505092915050565b5f614a80826140b6565b9150614a8b836140b6565b9250828202614a99816140b6565b91508282048414831517614ab057614aaf6144f7565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614b11602683613fb8565b9150614b1c82614ab7565b604082019050919050565b5f6020820190508181035f830152614b3e81614b05565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b9f602483613fb8565b9150614baa82614b45565b604082019050919050565b5f6020820190508181035f830152614bcc81614b93565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614c2d602283613fb8565b9150614c3882614bd3565b604082019050919050565b5f6020820190508181035f830152614c5a81614c21565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614cbb602983613fb8565b9150614cc682614c61565b604082019050919050565b5f6020820190508181035f830152614ce881614caf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614d49602583613fb8565b9150614d5482614cef565b604082019050919050565b5f6020820190508181035f830152614d7681614d3d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614dd7602383613fb8565b9150614de282614d7d565b604082019050919050565b5f6020820190508181035f830152614e0481614dcb565b9050919050565b7f54726164696e67206e6f74206c697665000000000000000000000000000000005f82015250565b5f614e3f601083613fb8565b9150614e4a82614e0b565b602082019050919050565b5f6020820190508181035f830152614e6c81614e33565b9050919050565b7f4d617820547820457863656564656400000000000000000000000000000000005f82015250565b5f614ea7600f83613fb8565b9150614eb282614e73565b602082019050919050565b5f6020820190508181035f830152614ed481614e9b565b9050919050565b7f4d61782057616c6c6574204578636565646564000000000000000000000000005f82015250565b5f614f0f601383613fb8565b9150614f1a82614edb565b602082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614f77602083613fb8565b9150614f8282614f43565b602082019050919050565b5f6020820190508181035f830152614fa481614f6b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614ffb614ff6614ff184614fd8565b614330565b6140b6565b9050919050565b61500b81614fe1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150438161407b565b82525050565b5f615054838361503a565b60208301905092915050565b5f602082019050919050565b5f61507682615011565b615080818561501b565b935061508b8361502b565b805f5b838110156150bb5781516150a28882615049565b97506150ad83615060565b92505060018101905061508e565b5085935050505092915050565b5f6080820190506150db5f830187615002565b81810360208301526150ed818661506c565b90506150fc60408301856141fd565b6151096060830184614185565b95945050505050565b5f60a0820190506151255f830188614185565b6151326020830187615002565b8181036040830152615144818661506c565b905061515360608301856141fd565b6151606080830184614185565b969550505050505056fea2646970667358221220168e803786f176eaecfbbf5e14e3589c5630ca2ac1c27bdab9de33460db1b75364736f6c63430008150033000000000000000000000000aeb50510fa1e060b39a26b83e3f0e839a373880c

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806360290a2e11610143578063abd61c7c116100b5578063dd62ed3e11610079578063dd62ed3e146108d2578063e751d5081461090e578063ea2f0b371461093a578063f2fde38b14610962578063f887ea401461098a578063f8b45b05146109b457610266565b8063abd61c7c1461082c578063ae173c4414610842578063aee50b1e1461086a578063c5f956af14610892578063cb32198a146108bc57610266565b806388f820201161010757806388f82020146106fa5780638da5cb5b1461073657806395d89b4114610760578063a457c2d71461078a578063a8aa1b31146107c6578063a9059cbb146107f057610266565b806360290a2e1461062c5780636605bfda1461065657806370a082311461067e578063715018a6146106ba578063871b5b27146106d057610266565b80632d838119116101dc5780633bd5d173116101a05780633bd5d17314610524578063437823ec1461054c5780634a62bb651461057457806352390c021461059e5780635342acb4146105c65780635f48f3931461060257610266565b80632d83811914610430578063313ce5671461046c57806333e91640146104965780633685d419146104c057806339509351146104e857610266565b806318160ddd1161022357806318160ddd1461036057806323b872dd1461038a57806327c8f835146103c657806327cca59f146103f0578063296914481461041a57610266565b806306fdde031461026a578063095ea7b3146102945780631392c086146102d05780631693e8d41461030c5780631783dacd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109de565b60405161028b9190614038565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906140e9565b610a6d565b6040516102c79190614141565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061415a565b610a8a565b6040516103039190614194565b60405180910390f35b348015610317575f80fd5b50610320610ae9565b60405161032d9190614141565b60405180910390f35b348015610341575f80fd5b5061034a610afc565b6040516103579190614194565b60405180910390f35b34801561036b575f80fd5b50610374610b02565b6040516103819190614194565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab91906141ad565b610b0b565b6040516103bd9190614141565b60405180910390f35b3480156103d1575f80fd5b506103da610c80565b6040516103e7919061420c565b60405180910390f35b3480156103fb575f80fd5b50610404610ca4565b6040516104119190614194565b60405180910390f35b348015610425575f80fd5b5061042e610caa565b005b34801561043b575f80fd5b506104566004803603810190610451919061415a565b610cfb565b6040516104639190614194565b60405180910390f35b348015610477575f80fd5b50610480610d60565b60405161048d9190614240565b60405180910390f35b3480156104a1575f80fd5b506104aa610d75565b6040516104b79190614194565b60405180910390f35b3480156104cb575f80fd5b506104e660048036038101906104e19190614259565b610d7b565b005b3480156104f3575f80fd5b5061050e600480360381019061050991906140e9565b611025565b60405161051b9190614141565b60405180910390f35b34801561052f575f80fd5b5061054a6004803603810190610545919061415a565b6110cc565b005b348015610557575f80fd5b50610572600480360381019061056d9190614259565b611228565b005b34801561057f575f80fd5b50610588611288565b6040516105959190614141565b60405180910390f35b3480156105a9575f80fd5b506105c460048036038101906105bf9190614259565b61129a565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190614259565b6114b1565b6040516105f99190614141565b60405180910390f35b34801561060d575f80fd5b50610616611503565b6040516106239190614194565b60405180910390f35b348015610637575f80fd5b50610640611509565b60405161064d9190614194565b60405180910390f35b348015610661575f80fd5b5061067c60048036038101906106779190614259565b61150f565b005b348015610689575f80fd5b506106a4600480360381019061069f9190614259565b6115c8565b6040516106b19190614194565b60405180910390f35b3480156106c5575f80fd5b506106ce6116ab565b005b3480156106db575f80fd5b506106e46116be565b6040516106f19190614194565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190614259565b6116c4565b60405161072d9190614141565b60405180910390f35b348015610741575f80fd5b5061074a611716565b604051610757919061420c565b60405180910390f35b34801561076b575f80fd5b5061077461173f565b6040516107819190614038565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab91906140e9565b6117cf565b6040516107bd9190614141565b60405180910390f35b3480156107d1575f80fd5b506107da611938565b6040516107e7919061420c565b60405180910390f35b3480156107fb575f80fd5b50610816600480360381019061081191906140e9565b61195c565b6040516108239190614141565b60405180910390f35b348015610837575f80fd5b50610840611979565b005b34801561084d575f80fd5b506108686004803603810190610863919061415a565b6119c8565b005b348015610875575f80fd5b50610890600480360381019061088b919061415a565b611a29565b005b34801561089d575f80fd5b506108a6611a3b565b6040516108b391906142a4565b60405180910390f35b3480156108c7575f80fd5b506108d0611a60565b005b3480156108dd575f80fd5b506108f860048036038101906108f391906142bd565b611c94565b6040516109059190614194565b60405180910390f35b348015610919575f80fd5b50610922611d16565b604051610931939291906142fb565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614259565b611d2d565b005b34801561096d575f80fd5b5061098860048036038101906109839190614259565b611d8c565b005b348015610995575f80fd5b5061099e611e0e565b6040516109ab919061438b565b60405180910390f35b3480156109bf575f80fd5b506109c8611e32565b6040516109d59190614194565b60405180910390f35b60605f80546109ec906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a18906143d1565b8015610a635780601f10610a3a57610100808354040283529160200191610a63565b820191905f5260205f20905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b5f610a80610a79611e38565b8484611e3f565b6001905092915050565b5f600754821115610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac79061444b565b60405180910390fd5b5f610adb835f612002565b505050905080915050919050565b600d60019054906101000a900460ff1681565b60105481565b5f600754905090565b5f610b17848484612047565b8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b5e611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906144d9565b60405180910390fd5b610c7584610be5611e38565b8460065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c2c611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c709190614524565b611e3f565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60115481565b610cb2612529565b6001600d60016101000a81548160ff0219169083151502179055507f41c787961cb389554b90a8dbfb700790a3f278f50ba1d330c0b555d884789b5a60405160405180910390a1565b5f600854821115610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d38906145c7565b60405180910390fd5b5f610d4a6125a7565b90508083610d589190614612565b915050919050565b5f60025f9054906101000a900460ff16905090565b600e5481565b610d83612529565b601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061468c565b60405180910390fd5b5f5b601c80549050811015611021578173ffffffffffffffffffffffffffffffffffffffff16601c8281548110610e4657610e456146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361100e57601c6001601c80549050610e9d9190614524565b81548110610eae57610ead6146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c8281548110610eea57610ee96146aa565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c805480610fd757610fd66146d7565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611021565b808061101990614704565b915050610e0e565b5050565b5f6110c2611031611e38565b848460065f61103e611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110bd919061474b565b611e3f565b6001905092915050565b5f6110d5611e38565b9050601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906147ee565b60405180910390fd5b5f61116c835f612002565b50505090508060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111ba9190614524565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806008546112099190614524565b6008819055508260095461121d919061474b565b600981905550505050565b611230612529565b6001601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b600d5f9054906101000a900460ff1681565b6112a2612529565b601b5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561132c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113239061468c565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156113f9576113b760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cfb565b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6001601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600a5481565b600f5481565b611517612529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061487c565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561165d5760055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506116a6565b6116a360045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cfb565b90505b919050565b6116b3612529565b6116bc5f6125c9565b565b60125481565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174e906143d1565b80601f016020809104026020016040519081016040528092919081815260200182805461177a906143d1565b80156117c55780601f1061179c576101008083540402835291602001916117c5565b820191905f5260205f20905b8154815290600101906020018083116117a857829003601f168201915b5050505050905090565b5f8160065f6117dc611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118899061490a565b60405180910390fd5b61192e61189d611e38565b848460065f6118aa611e38565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119299190614524565b611e3f565b6001905092915050565b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b581565b5f61196f611968611e38565b8484612047565b6001905092915050565b611981612529565b5f600d5f6101000a81548160ff0219169083151502179055507f1d738cf80c30d28a9187df6aca2bb3b944576e9eb903d81ccd4b344571e58bd960405160405180910390a1565b6119d0612529565b600a811080156119e05750600181115b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1690614972565b60405180910390fd5b8060108190555050565b611a31612529565b80600c8190555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b42600f54600e54611a71919061474b565b10611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa8906149da565b60405180910390fd5b42600e819055505f4790505f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4a9190614a0c565b73ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b56040518263ffffffff1660e01b8152600401611ba2919061420c565b602060405180830381865afa158015611bbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be19190614a4b565b9050606460105482611bf39190614a76565b611bfd9190614612565b821115611c2157606460105482611c149190614a76565b611c1e9190614612565b91505b611c2a8261268e565b8160125f828254611c3b919061474b565b9250508190555060115f815480929190611c5490614704565b91905055507f8af03e5f2036a997bf5e84865220113833213719e066e8a550793dff03cc9af082604051611c889190614194565b60405180910390a15050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6015805f0154908060010154908060020154905083565b611d35612529565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611d94612529565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990614b27565b60405180910390fd5b611e0b816125c9565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614bb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614c43565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff59190614194565b60405180910390a3505050565b5f805f805f61201187876126d6565b90505f805f6120288a8a6120236125a7565b6126f0565b9250925092508282828697509750975097505050505092959194509250565b5f8111612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090614cd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614d5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90614ded565b60405180910390fd5b601d5f9054906101000a900460ff161580156121c85750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561221b5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251957600d60019054906101000a900460ff1661226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614e55565b60405180910390fd5b600d5f9054906101000a900460ff1615612420577f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061232857507f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561237357600a54811115612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614ebd565b60405180910390fd5b5b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461241f57600b54816123d3846115c8565b6123dd919061474b565b111561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614f25565b60405180910390fd5b5b5b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ad5760185f81548092919061248590614704565b91905055505f612494306115c8565b9050600c5481106124ab576124aa600c54612735565b5b505b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125185760195f81548092919061251290614704565b91905055505b5b6125248383836127f7565b505050565b612531611e38565b73ffffffffffffffffffffffffffffffffffffffff1661254f611716565b73ffffffffffffffffffffffffffffffffffffffff16146125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c90614f8d565b60405180910390fd5b565b5f805f6125b2612a1f565b9150915080826125c29190614612565b9250505090565b5f600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601d5f6101000a81548160ff0219169083151502179055505f8111156126ba576126b981612ca5565b5b5f601d5f6101000a81548160ff02191690831515021790555050565b5f8082846126e49190614524565b90508091505092915050565b5f805f8084876127009190614a76565b90505f858761270f9190614a76565b90505f818361271e9190614524565b905082818395509550955050505093509350939050565b6001601d5f6101000a81548160ff0219169083151502179055505f47905061275c82612ecd565b5f81476127699190614524565b90505f60156002015460156001015460155f0154612787919061474b565b612791919061474b565b90506127d860035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660155f015483856127c99190614612565b6127d39190614a76565b61310e565b5050505f601d5f6101000a81548160ff02191690831515021790555050565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128945750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128a9576128a4838383613156565b612a1a565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156129465750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561295b57612956838383613392565b612a19565b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129f75750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a0c57612a078383836135ce565b612a18565b612a17838383613894565b5b5b5b505050565b5f805f60085490505f60075490505f5b601c80549050811015612c6f578260045f601c8481548110612a5457612a536146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612b3957508160055f601c8481548110612ad557612ad46146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612b505760085460075494509450505050612ca1565b60045f601c8381548110612b6757612b666146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612bd49190614524565b925060055f601c8381548110612bed57612bec6146aa565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612c5a9190614524565b91508080612c6790614704565b915050612a2f565b50600754600854612c809190614612565b821015612c9857600854600754935093505050612ca1565b81819350935050505b9091565b5f600267ffffffffffffffff811115612cc157612cc0614fab565b5b604051908082528060200260200182016040528015612cef5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d7f9190614a0c565b815f81518110612d9257612d916146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612de157612de06146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95835f847f000000000000000000000000000000000000000000000000000000000000dead426040518663ffffffff1660e01b8152600401612e9b94939291906150c8565b5f604051808303818588803b158015612eb2575f80fd5b505af1158015612ec4573d5f803e3d5ffd5b50505050505050565b5f600267ffffffffffffffff811115612ee957612ee8614fab565b5b604051908082528060200260200182016040528015612f175781602001602082028036833780820191505090505b50905030815f81518110612f2e57612f2d6146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff59190614a0c565b81600181518110613009576130086146aa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061307c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d60c86007546130779190614612565b611e3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016130dd959493929190615112565b5f604051808303815f87803b1580156130f4575f80fd5b505af1158015613106573d5f803e3d5ffd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613151573d5f803e3d5ffd5b505050565b5f613162828585613a46565b90505f805f806131728686612002565b93509350935093508560055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131c39190614524565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461324d9190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132d7919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061332382868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133809190614194565b60405180910390a35050505050505050565b5f61339e828585613a46565b90505f805f806133ae8686612002565b93509350935093508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133ff9190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613489919061474b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613513919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061355f82868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135bc9190614194565b60405180910390a35050505050505050565b5f6135da828585613a46565b90505f805f806135ea8686612002565b93509350935093508560055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461363b9190614524565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546136c59190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461374f919061474b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546137d9919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061382582868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138829190614194565b60405180910390a35050505050505050565b5f6138a0828585613a46565b90505f805f806138b08686612002565b93509350935093508360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139019190614524565b60045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461398b919061474b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506139d782868a613cf7565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a349190614194565b60405180910390a35050505050505050565b5f601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613ae25750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613aef575f9050613cf0565b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b9757507f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613ba4575f9050613cf0565b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015613c025750601454601854105b15613c2857606460135485613c179190614a76565b613c219190614612565b9050613cf0565b7f0000000000000000000000005c0d29e1de93d3edcb00c977725cdb9db4ecd4b573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015613c865750601454601954105b15613cac57606460135485613c9b9190614a76565b613ca59190614612565b9050613cf0565b5f60156002015460156001015460155f0154613cc8919061474b565b613cd2919061474b565b905060648186613ce29190614a76565b613cec9190614612565b9150505b9392505050565b5f60156002015460156001015460155f0154613d13919061474b565b613d1d919061474b565b90505f8160156001015486613d329190614a76565b613d3c9190614612565b90505f8260156001015486613d519190614a76565b613d5b9190614612565b905081600854613d6b9190614524565b60088190555080600954613d7f919061474b565b6009819055508186613d919190614524565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613dd9919061474b565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613eff578085613e759190614524565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ebd919061474b565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8388613f5a9190614524565b604051613f679190614194565b60405180910390a37f4def474aca53bf221d07d9ab0f675b3f6d8d2494b8427271bcf43c018ef1eead81604051613f9e9190614194565b60405180910390a1505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613fe5578082015181840152602081019050613fca565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61400a82613fae565b6140148185613fb8565b9350614024818560208601613fc8565b61402d81613ff0565b840191505092915050565b5f6020820190508181035f8301526140508184614000565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140858261405c565b9050919050565b6140958161407b565b811461409f575f80fd5b50565b5f813590506140b08161408c565b92915050565b5f819050919050565b6140c8816140b6565b81146140d2575f80fd5b50565b5f813590506140e3816140bf565b92915050565b5f80604083850312156140ff576140fe614058565b5b5f61410c858286016140a2565b925050602061411d858286016140d5565b9150509250929050565b5f8115159050919050565b61413b81614127565b82525050565b5f6020820190506141545f830184614132565b92915050565b5f6020828403121561416f5761416e614058565b5b5f61417c848285016140d5565b91505092915050565b61418e816140b6565b82525050565b5f6020820190506141a75f830184614185565b92915050565b5f805f606084860312156141c4576141c3614058565b5b5f6141d1868287016140a2565b93505060206141e2868287016140a2565b92505060406141f3868287016140d5565b9150509250925092565b6142068161407b565b82525050565b5f60208201905061421f5f8301846141fd565b92915050565b5f60ff82169050919050565b61423a81614225565b82525050565b5f6020820190506142535f830184614231565b92915050565b5f6020828403121561426e5761426d614058565b5b5f61427b848285016140a2565b91505092915050565b5f61428e8261405c565b9050919050565b61429e81614284565b82525050565b5f6020820190506142b75f830184614295565b92915050565b5f80604083850312156142d3576142d2614058565b5b5f6142e0858286016140a2565b92505060206142f1858286016140a2565b9150509250929050565b5f60608201905061430e5f830186614185565b61431b6020830185614185565b6143286040830184614185565b949350505050565b5f819050919050565b5f61435361434e6143498461405c565b614330565b61405c565b9050919050565b5f61436482614339565b9050919050565b5f6143758261435a565b9050919050565b6143858161436b565b82525050565b5f60208201905061439e5f83018461437c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143e857607f821691505b6020821081036143fb576143fa6143a4565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614435601f83613fb8565b915061444082614401565b602082019050919050565b5f6020820190508181035f83015261446281614429565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6144c3602883613fb8565b91506144ce82614469565b604082019050919050565b5f6020820190508181035f8301526144f0816144b7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61452e826140b6565b9150614539836140b6565b9250828203905081811115614551576145506144f7565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6145b1602a83613fb8565b91506145bc82614557565b604082019050919050565b5f6020820190508181035f8301526145de816145a5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461c826140b6565b9150614627836140b6565b925082614637576146366145e5565b5b828204905092915050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614676601b83613fb8565b915061468182614642565b602082019050919050565b5f6020820190508181035f8301526146a38161466a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61470e826140b6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147405761473f6144f7565b5b600182019050919050565b5f614755826140b6565b9150614760836140b6565b9250828201905080821115614778576147776144f7565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6147d8602c83613fb8565b91506147e38261477e565b604082019050919050565b5f6020820190508181035f830152614805816147cc565b9050919050565b7f43616e6e6f742073657420747265617375727920746f207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614866602383613fb8565b91506148718261480c565b604082019050919050565b5f6020820190508181035f8301526148938161485a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6148f4602583613fb8565b91506148ff8261489a565b604082019050919050565b5f6020820190508181035f830152614921816148e8565b9050919050565b7f496e76616c69642070657263656e7461676500000000000000000000000000005f82015250565b5f61495c601283613fb8565b915061496782614928565b602082019050919050565b5f6020820190508181035f83015261498981614950565b9050919050565b7f526f636b6574206c61756e636820636f6f6c646f776e20696e206566666563745f82015250565b5f6149c4602083613fb8565b91506149cf82614990565b602082019050919050565b5f6020820190508181035f8301526149f1816149b8565b9050919050565b5f81519050614a068161408c565b92915050565b5f60208284031215614a2157614a20614058565b5b5f614a2e848285016149f8565b91505092915050565b5f81519050614a45816140bf565b92915050565b5f60208284031215614a6057614a5f614058565b5b5f614a6d84828501614a37565b91505092915050565b5f614a80826140b6565b9150614a8b836140b6565b9250828202614a99816140b6565b91508282048414831517614ab057614aaf6144f7565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614b11602683613fb8565b9150614b1c82614ab7565b604082019050919050565b5f6020820190508181035f830152614b3e81614b05565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b9f602483613fb8565b9150614baa82614b45565b604082019050919050565b5f6020820190508181035f830152614bcc81614b93565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614c2d602283613fb8565b9150614c3882614bd3565b604082019050919050565b5f6020820190508181035f830152614c5a81614c21565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614cbb602983613fb8565b9150614cc682614c61565b604082019050919050565b5f6020820190508181035f830152614ce881614caf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614d49602583613fb8565b9150614d5482614cef565b604082019050919050565b5f6020820190508181035f830152614d7681614d3d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614dd7602383613fb8565b9150614de282614d7d565b604082019050919050565b5f6020820190508181035f830152614e0481614dcb565b9050919050565b7f54726164696e67206e6f74206c697665000000000000000000000000000000005f82015250565b5f614e3f601083613fb8565b9150614e4a82614e0b565b602082019050919050565b5f6020820190508181035f830152614e6c81614e33565b9050919050565b7f4d617820547820457863656564656400000000000000000000000000000000005f82015250565b5f614ea7600f83613fb8565b9150614eb282614e73565b602082019050919050565b5f6020820190508181035f830152614ed481614e9b565b9050919050565b7f4d61782057616c6c6574204578636565646564000000000000000000000000005f82015250565b5f614f0f601383613fb8565b9150614f1a82614edb565b602082019050919050565b5f6020820190508181035f830152614f3c81614f03565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614f77602083613fb8565b9150614f8282614f43565b602082019050919050565b5f6020820190508181035f830152614fa481614f6b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614ffb614ff6614ff184614fd8565b614330565b6140b6565b9050919050565b61500b81614fe1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150438161407b565b82525050565b5f615054838361503a565b60208301905092915050565b5f602082019050919050565b5f61507682615011565b615080818561501b565b935061508b8361502b565b805f5b838110156150bb5781516150a28882615049565b97506150ad83615060565b92505060018101905061508e565b5085935050505092915050565b5f6080820190506150db5f830187615002565b81810360208301526150ed818661506c565b90506150fc60408301856141fd565b6151096060830184614185565b95945050505050565b5f60a0820190506151255f830188614185565b6151326020830187615002565b8181036040830152615144818661506c565b905061515360608301856141fd565b6151606080830184614185565b969550505050505056fea2646970667358221220168e803786f176eaecfbbf5e14e3589c5630ca2ac1c27bdab9de33460db1b75364736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000aeb50510fa1e060b39a26b83e3f0e839a373880c

-----Decoded View---------------
Arg [0] : _treasuryAddress (address): 0xAeB50510Fa1E060B39a26B83e3f0E839A373880C

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aeb50510fa1e060b39a26b83e3f0e839a373880c


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.