** Maintenance in progress, block data might not be up to date **

Contract 0x4CcBe073a58A574CAC3eE69649E44728d2e2554c 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8499c2330ab0b5abfe96bd2541538c525ad2140842c297dd06963b94a97e3cd3Approve140657292022-01-04 8:11:0216 days 18 hrs ago0x0d0f86afa2d3fecacaf79406dccc7853f8322a90 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000078263325
0x45d7f7a93c316d392be986611aee500f5a7d713d2887998062bcb0b12f9e0f52Approve140119592022-01-02 11:17:0218 days 15 hrs ago0x5380c1f1a1da07a36afd4147f2d1365306cef7ff IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x18a8b48f00e909f969a6a765c079a9a648f27c25ec395cceeb9eddf3e652a44fApprove139370212021-12-30 20:46:3721 days 5 hrs ago0xd7d9d5a1d3228be298e1ffc9066126fdcdfe6bfa IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000267678
0x5f1f73db1d8a5b6e3f730119f4d9e3dba4cad467eb15aa388bd315d1866ba507Approve138331272021-12-27 6:05:5024 days 20 hrs ago0x2156dee706d2745714afd732fc237dc5d9250f3a IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x6fe0d6268779f03e272850a8dab74c5911648d49ff440653f7fc4f545de57477Approve137423712021-12-24 2:22:2828 days 13 mins ago0xe2f6297b21bdebd0d4dce1fedac0fd3daa1825c6 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000073075
0x5537970e57ed6fec15dbeee0f7cad50b15a0e61fc451d0e818ae11ddcb6e6a3aApprove137151002021-12-23 3:38:1028 days 22 hrs ago0x3b581181c3e5c5e46db9d9d17a5650fcd1bbb138 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0xad9130f55279a96821485c4e6d1c67c3adc599acb0c7aff594468187c4d67e4dApprove136972172021-12-22 12:41:3829 days 13 hrs ago0xfc0772b880a8ba3162e7a61ae059ed3218ba8ed0 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x04954db5125b812380d72a9fece9137f7549d0b737f0fb87aabaf815023868a1Approve136963562021-12-22 11:58:3529 days 14 hrs ago0xdb278d7e9ecc4603f8b1eb605713d06d177f0727 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000073075
0x873234cb2c23eba3490e8f58926b8cdb5273b4c5104e0dca745e7425d178541dApprove136963192021-12-22 11:56:4429 days 14 hrs ago0xdb278d7e9ecc4603f8b1eb605713d06d177f0727 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0xe1ff512e4c0ee286c370472bc7caf1d0ace65e2e6adcc132284c56fa586a89a4Approve136943062021-12-22 10:13:4329 days 16 hrs ago0xfc6a6b7b70f33aa450156bd87dac0ba2d610859d IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000073075
0xaef5c1ce1b96c63ac24d4315140c4791f52f8e0fcb8a4d717e7ed548c69c7e20Approve136802732021-12-21 22:30:5230 days 4 hrs ago0x678558018653e78e3c76dfb1bdd20305aadbf884 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000127065
0x579190510f6b820163ebcd573d6dfbaef297c88414a9fdaf6c68f633cd7017beApprove136802632021-12-21 22:30:2230 days 4 hrs ago0x678558018653e78e3c76dfb1bdd20305aadbf884 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0xc702b52003e819bd4d3b4f2a8886be7a778bdd71e3d5c38d5fa8bdb4cd80d475Approve136797692021-12-21 22:05:4030 days 4 hrs ago0x8cdb7a0e5610d6b8c9386ec11b52edd646097f6c IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000221745
0xcccc33d242631dccb008c469dd17bff92b4846abdff7d4c57ebffe64f522e945Approve136797622021-12-21 22:05:1930 days 4 hrs ago0x90ffd7f713013ccaddc71f40d72cce04f5f2b836 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0xb267a3c12c5473e7c7f458cf97030cb4772506e096f462e12fe778dc3b3945e4Approve136795072021-12-21 21:52:3430 days 4 hrs ago0x13e158a74e63d5c0f521cca7eee887444c5eaa01 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x8c8c8b31acf4315ef5ae573382bcc14dc2fc883fd72d86d5eca30a7611251195Approve136790952021-12-21 21:31:5830 days 5 hrs ago0x13d4bd526f7c09d1a87331e11af249a4fc2ab5eb IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x9949461a1fb8a2c0721beac8b8ea962bcf9428bb67dda5d471ebd5e2eed8bc66Approve136790002021-12-21 21:27:1330 days 5 hrs ago0xccb0f33dc1c60ae74d9f8ed81df3e747b0b628af IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x3b178c807f33c724028518a365cedce629931f506542d1e5aaaf16a4c049897aApprove136789322021-12-21 21:23:4930 days 5 hrs ago0x40648989789ffc6216033662d8045411c3a4727e IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000267678
0x41d5ed3887f44b0c9232367d5c0b9ce0f3a07c804e74e1c72d295f85e7fd1614Approve136789202021-12-21 21:23:1330 days 5 hrs ago0xe870e8385d2c33296e789ad2975bf8476c9b60e7 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000127065
0xf81ad7b08242a587a1ac773aca4a0a27124f8c1dd6a0b3682889bf8c72c9c24dApprove136789032021-12-21 21:22:2230 days 5 hrs ago0xe870e8385d2c33296e789ad2975bf8476c9b60e7 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x5a4d0824419cb23a288d53d476bc3614101c5df506ac924b6bcdd71bcb0a3920Approve136788222021-12-21 21:18:1930 days 5 hrs ago0x53186826512e3a1202b12ab7fcc0c8035dc7bed4 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x61901c9d8c21556786d8c57392c50661ae84fe1c361402b38ca7dbe2a7b463e9Approve136788172021-12-21 21:18:0430 days 5 hrs ago0xee018426fc8297eaa889d5d4ae4d58bf42e4b3be IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x0e525d5e635e1c363587a5ba8245b303bf9091611391278ec4059fb1a57847feApprove136787682021-12-21 21:15:3730 days 5 hrs ago0x7c357d84024428e030af748389a88a06f191e88d IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0x7354640a4f539757631c0cd17e62c94cb24398246e6e719ab3669208cad9c0f6Approve136787572021-12-21 21:15:0430 days 5 hrs ago0xa4f9bfbc0df735f481ad32daa96d1809308e0318 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
0xbe7e37026421ccbbb53e2fdb84ce6338acc75578bfcea8ab85676a2816e69728Approve136787522021-12-21 21:14:4930 days 5 hrs ago0x47fe9ec5145482672bca6b6de0e58cb5c146a3c3 IN  0x4ccbe073a58a574cac3ee69649e44728d2e2554c0 BNB0.000223065
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2dd1d66502fa07c44afd019b492aa5dea7f64d2663948fd9ad56f866a0970a1786191652021-06-26 0:42:38209 days 1 hr ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0xf6b7cd7c3872aa9435e07ef1724bd080813e52814.236637946869711096 BNB
0x2dd1d66502fa07c44afd019b492aa5dea7f64d2663948fd9ad56f866a0970a1786191652021-06-26 0:42:38209 days 1 hr ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c4.236637946869711096 BNB
0x1c572282a7a0ac607ab2db5072605592a6d77609d928c7d294ddb9b285fd155986179632021-06-25 23:42:32209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.147247990944657899 BNB
0x1c572282a7a0ac607ab2db5072605592a6d77609d928c7d294ddb9b285fd155986179632021-06-25 23:42:32209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.147247990944657899 BNB
0x8515f09b3efd1e15c62adad4b579aa0c5a7196456eb5ada732791de18933ece186179602021-06-25 23:42:23209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.147247990944657899 BNB
0x8515f09b3efd1e15c62adad4b579aa0c5a7196456eb5ada732791de18933ece186179602021-06-25 23:42:23209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.147247990944657899 BNB
0xc86f26eaaf1830fa633f183ffff6fdd86b89ced44e5da00d96b13546caaa0c2d86179522021-06-25 23:41:59209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0xc86f26eaaf1830fa633f183ffff6fdd86b89ced44e5da00d96b13546caaa0c2d86179522021-06-25 23:41:59209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0x3812fa1f54b2332336740b7251bfbbd6b8ac6ba6f929212322697832ac14e30486179502021-06-25 23:41:53209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0x3812fa1f54b2332336740b7251bfbbd6b8ac6ba6f929212322697832ac14e30486179502021-06-25 23:41:53209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0x217e8e078002bfb928de5f243c2083876218ce341c1e9bca7f65eb193c23699c86179492021-06-25 23:41:50209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0x217e8e078002bfb928de5f243c2083876218ce341c1e9bca7f65eb193c23699c86179492021-06-25 23:41:50209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0xe56d8dfba1382284683e29368d837546aef018f9368b8323feaa054395e9763a86179492021-06-25 23:41:50209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0xe56d8dfba1382284683e29368d837546aef018f9368b8323feaa054395e9763a86179492021-06-25 23:41:50209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0xab73ec8392e2a30f3d592a86c27c819858f22cb48a4f079217d99962b82fd15f86179482021-06-25 23:41:47209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0xab73ec8392e2a30f3d592a86c27c819858f22cb48a4f079217d99962b82fd15f86179482021-06-25 23:41:47209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0x986d6f69fdf9f2b457fad9ec9094cf61db86c202bf32f32f227cd0907aa3e27786179472021-06-25 23:41:44209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.067917972600322227 BNB
0x986d6f69fdf9f2b457fad9ec9094cf61db86c202bf32f32f227cd0907aa3e27786179472021-06-25 23:41:44209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.067917972600322227 BNB
0x739352c38c3e3fe23f00b06a631299f2ad39367f332699d94cf0552133736f6086179362021-06-25 23:41:11209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.026558443424140738 BNB
0x739352c38c3e3fe23f00b06a631299f2ad39367f332699d94cf0552133736f6086179362021-06-25 23:41:11209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.026558443424140738 BNB
0xbda234e18ab16be7843ee20389e874dc96dade2ea9ee9f5934e99abaa92abfde86179302021-06-25 23:40:53209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.029573805193249343 BNB
0xbda234e18ab16be7843ee20389e874dc96dade2ea9ee9f5934e99abaa92abfde86179302021-06-25 23:40:53209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.029573805193249343 BNB
0xfb8d3be36fa170bdf114571ff07f7d5f0fdc3c564917b92ecc1e44de49d30ba286179282021-06-25 23:40:47209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.050375971918159302 BNB
0xfb8d3be36fa170bdf114571ff07f7d5f0fdc3c564917b92ecc1e44de49d30ba286179282021-06-25 23:40:47209 days 2 hrs ago PancakeSwap: Router v2 0x4ccbe073a58a574cac3ee69649e44728d2e2554c0.050375971918159302 BNB
0xa91f4a948384b5cebe67b853f612710cbdc49cac36a2d6eac9137a12d052562686179232021-06-25 23:40:32209 days 2 hrs ago 0x4ccbe073a58a574cac3ee69649e44728d2e2554c PancakeSwap: Router v20.050375971918159302 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QuickBounty

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 15 : QuickBounty.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

import { ERC20 } from '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import { ReentrancyGuard } from '@openzeppelin/contracts/security/ReentrancyGuard.sol';
import { IPancakeRouter02 } from "pancakeswap-peripheral/contracts/interfaces/IPancakeRouter02.sol";
import { IPancakeFactory } from "@pancakeswap-libs/pancake-swap-core/contracts/interfaces/IPancakeFactory.sol";
import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol';
import { TimelockController } from '@openzeppelin/contracts/governance/TimelockController.sol';



contract QuickBounty is ERC20, Ownable, ReentrancyGuard {

    struct PaperHandTaxPools {
        uint256 bounty;
        uint256 liquidity;
        uint256 staking;
        uint256 combined;
    }

    struct Bounty {
        uint256 amountWon;
        address winner;
        uint256 timestamp;
    }

    mapping (address => Bounty) private _bountyWon;

    Bounty[] public _bounties;

    PaperHandTaxPools public allocs;
    PaperHandTaxPools public taxPools;

    bool convertingBounty;
    IPancakeRouter02 private dexRouter;
    address private liquidityPool;
    address public stakingContract;
    address private constant _presaleContract = 0x5FBdB00603c486e025f7d8f6EE597688271B5d4b;

    mapping (address => bool) private _excludedFrom;
    mapping (address => bool) private _excludedTo;

    mapping (address => uint256) private purchaseDate;
    mapping (address => uint256) private _rebalancedTax;

    uint256 public tokensToLiquidateTaxes = 4200 ether;
    uint256 private constant taxDecimals = 10000;
    uint256 private constant _initialTax = 4500;
    uint256 private constant _minTax = 800;
    uint256 private constant _vestingPeriod = 10 days;

    uint256 _timestampDeployed;

    mapping (address => uint256) private _taxDiscount;

    bool private _taxesPaused;
    bool private _jackpotPaused;


    //Jackpot variables
    uint256 public lambda;
    uint256 public delta;

    mapping (address => uint256) private _amtBought;

    event LiquidityAdded(uint256, uint256);
    event Taxation(uint256);
    event JackpotBountyWon(uint256, address, uint256); // Amount won, address, timestamp.
    event JackpotCheck(uint256, uint256); // Your chances + the random.
    event BountyClaimed(uint256, address, uint256); //Amount claimed, address, timestamp.


    //We do this to further prevent circular liquidity issues
    modifier bountyOperation {
        convertingBounty = true;
        _;
        convertingBounty = false;
    }

    constructor(
        string memory name,
        string memory symbol,
        uint256 initialBalance,
        uint256 bountyTax,
        uint256 liquidityTax,
        uint256 stakingTax,
        address dexRouterAddress
    ) ERC20(name, symbol) public {
        dexRouter = IPancakeRouter02(dexRouterAddress);
        liquidityPool = IPancakeFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludedFrom[msg.sender] = true;
        _mint(msg.sender, initialBalance);
        allocs.bounty = bountyTax;
        allocs.staking = stakingTax;
        allocs.liquidity = liquidityTax;
        lambda = 30;
        delta = 1;
        _timestampDeployed = block.timestamp;
        _excludedFrom[address(liquidityPool)] = true;
        _excludedFrom[address(this)] = true;
        _excludedFrom[address(0)] = true;
        purchaseDate[msg.sender] = block.timestamp;
    }


    //Enables receiveing BNB from PCS router when swapping
    receive() external payable {
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 contractTokenBalance = balanceOf(address(this));

        if (
            !convertingBounty && // Same issue avoidance as below
            from != liquidityPool && // Avoid interacting with the pair while interacting with the pair to avoid circular liquidity events.
            from != address(this) && // When we add liquidity we do it from this address, prevents recursive call.
            _getAccumulatedTaxes() >= tokensToLiquidateTaxes && taxPools.liquidity >= tokensToLiquidateTaxes // Should we liquidate?
        ) {
            _addLiquidity();
        }

        if (from == _presaleContract) {
            _taxDiscount[to] = 1500;
        }

        uint256 finalAmount;

        if ((from == address(liquidityPool) || from == _presaleContract) && !_jackpotPaused && to != stakingContract) {
            _huntForBounty(to, amount);
            recalculateTax(amount, _balances[to], to);
            purchaseDate[to] = block.timestamp;
            finalAmount = amount;
        } else if (
            !_taxesPaused &&
            to != stakingContract &&
            !_excludedFrom[from] &&
            from != _presaleContract &&
            !_excludedTo[to] &&
            from != address(this)
        ) {
            PaperHandTaxPools memory taxes = getTaxes(amount, from);
            finalAmount = _applyTax(amount, taxes);
            _distributeTaxes(taxes);
        } else {
            finalAmount = amount;
        }

        _balances[from] = _balances[from] - amount;
        _balances[to] = _balances[to] + finalAmount;
        _balances[address(this)] = _balances[address(this)] + amount - finalAmount;

        emit Transfer(from, to, finalAmount);
        emit Transfer(from, address(this), amount - finalAmount);
    }

    function _applyTax(uint256 amount, PaperHandTaxPools memory taxes) private pure returns (uint256) {
        return amount - taxes.combined;
    }

    function getCurrentFee(address addr) public view returns (uint256) {
        uint256 secondsPassed = block.timestamp - purchaseDate[addr];
        uint256 finalTax;

        if (secondsPassed >= _vestingPeriod)
            secondsPassed = _vestingPeriod;

        uint256 pureTax = _initialTax - (secondsPassed * (_initialTax - _minTax) / _vestingPeriod);

        if ( _rebalancedTax[addr] > pureTax ) {
            finalTax = _minTax;
        } else {
            finalTax = pureTax - _rebalancedTax[addr];
        }


        if (finalTax < _minTax)
            return finalTax = _minTax;


        return _withDiscount(addr, finalTax);
    }

    function _withDiscount(address addr, uint256 baseTax) private view returns(uint256) {
        if (_taxDiscount[addr] > 0)
            return (taxDecimals - _taxDiscount[addr]) * baseTax / taxDecimals;
        else
            return baseTax;
    }

    /**
//    * Calculate tax based on how many days have passed
//    */
    function recalculateTax(uint256 newTokens, uint256 oldTokens, address add) private returns (uint256) {
        uint256 newTaxedTokens = _tokenWithTax(newTokens, _initialTax);
        uint256 oldTaxedTokens = _tokenWithTax(oldTokens, getCurrentFee(add));
        uint256 tcs = oldTaxedTokens + newTaxedTokens;
        uint256 h = 10000;
        uint256 newTax = tcs * h / (oldTokens + newTokens);
        uint256 endTax = h - newTax;
        _rebalancedTax[add] = _initialTax - endTax;
        return _initialTax - endTax;
    }

    function _tokenWithTax(uint256 amt, uint256 fee) private returns (uint256) {
        return amt * (taxDecimals - fee) / taxDecimals;
    }

    // Should return taxes in amount of tokens
    function getTaxes(uint256 amount, address add) public returns (PaperHandTaxPools memory) {
        uint256 totalTax = getCurrentFee(add) * (amount * taxDecimals) / taxDecimals; //45 (Tokens to tax, not %)
        uint256 st = allocs.staking * (totalTax) / 100 / 1e6; //
        uint256 lt = allocs.liquidity * (totalTax) / 100 / 1e6;
        uint256 bt = allocs.bounty * (totalTax) / 100 / 1e6;
        return PaperHandTaxPools(bt,lt,st, bt+st+lt);
    }

    function _getAccumulatedTaxes() private returns(uint256) {
        return _balances[address(this)];
    }

    function _distributeTaxes(PaperHandTaxPools memory taxes) private {
        _handleBountyTaxes(taxes.bounty);
        _handleStakingTaxes(taxes.staking);
        _handleLPTaxes(taxes.liquidity);
        taxPools.combined = taxes.bounty + taxes.liquidity;
    }

    function _handleBountyTaxes(uint256 amount) private {
        taxPools.bounty = taxPools.bounty + amount;
    }

    function _handleLPTaxes(uint256 amount) private {
        taxPools.liquidity = taxPools.liquidity + amount;
    }

    function _handleStakingTaxes(uint256 amount) private {
        _balances[stakingContract] = _balances[stakingContract] + amount;
    }

    //Converts our liquidity vault to BNB
    function _addLiquidity() private bountyOperation {
        _getLP(taxPools.liquidity);
        taxPools.liquidity = 0;
    }

    function _getLP(uint256 tokenAmount) private returns (uint256){
        uint256 half = taxPools.liquidity / 2;
        uint256 otherHalf = tokenAmount - half;
        (uint256 bnbsObtained, uint256 tokensUsed) = getBNB(half);
        addLiquidity(otherHalf, bnbsObtained);
        emit LiquidityAdded(half, otherHalf);
        return tokensUsed;
    }

    function getBNB(uint256 tokenAmount) private returns(uint256, uint256) {
        uint256 initialBalance = address(this).balance;
        uint256 tokenBalance = _balances[address(this)];
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 finalTokenBalance = tokenBalance - _balances[address(this)];
        return (address(this).balance - initialBalance, finalTokenBalance);
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);

        dexRouter.addLiquidityETH{value: bnbAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    //
    function _huntForBounty(address buyer, uint256 amount) private bountyOperation {
        if (taxPools.bounty > 0 && _isJackpotBountyWon(amount)) {
            uint256 b = taxPools.bounty;
            taxPools.bounty = 0;
            Bounty memory oldBounty = _bountyWon[buyer];
            _bountyWon[buyer] = Bounty(_bountyWon[buyer].amountWon + b, buyer, block.timestamp);
            _bounties.push(_bountyWon[buyer]);
            emit JackpotBountyWon(b, buyer, block.timestamp);
        }
    }

    function claimBounty() public nonReentrant {
        require(_bountyWon[msg.sender].amountWon > 0, "You havent won any bounty...");
        uint won = _bountyWon[msg.sender].amountWon;
        _bountyWon[msg.sender].amountWon = 0;
        (uint256 bnb, uint256 tU) = getBNB(won);
        payable(msg.sender).transfer(bnb);
        emit BountyClaimed(won, msg.sender, block.timestamp);
    }

    // Lambda and delta are statistical weights.
    // Lambda regulates how much the size of the purchase affects the probability. The higher the lambda, the higher the chance.
    // Delta regulates how much the size of the jackpot affects the probability. Higher delta = lower the chance.
    // Your probability to win is always how much of the supply the jackpot holds
    function _isJackpotBountyWon(uint256 amountBought) private returns (bool) {
        uint256 random = random(0,1e10, taxPools.bounty);
        uint256 chance = ((amountBought * lambda + (taxPools.bounty / (delta))) / (totalSupply() / 1e10));
        emit JackpotCheck(random, chance);
        return random < chance;
    }


    function readBounty(address add) public view returns (uint256, address) {
        Bounty memory b = _bountyWon[add];
        return (b.amountWon, b.winner);
    }

    function random(uint256 from, uint256 to, uint256 seed) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                    block.number +
                    seed
                )
            )
        );
        return seed % (to - from) + from;
    }

    function getLP() public view returns (address) {
        return liquidityPool;
    }

    function setDiscount(address addr, uint256 amt) public onlyOwner {
        require(amt < taxDecimals, "Discount higher than 100%");
        _taxDiscount[addr] = amt;
    }

    function excludeFrom(address addr, bool val) public onlyOwner {
        _excludedFrom[addr] = val;
    }

    function excludeTo(address addr, bool val) public onlyOwner {
        _excludedTo[addr] = val;
    }

    //TODO Decide where unclaimed bounty actually goes
    function claimUnclaimedBounty(uint256 bountyId) public nonReentrant onlyOwner {
        require(_bounties[bountyId].timestamp + 30 days > block.timestamp, "You can't claim a recent bounty");
        require(_bounties[bountyId].amountWon > 0, "No bounty to claim");
        uint won = _bountyWon[msg.sender].amountWon;
        _bountyWon[msg.sender].amountWon = 0;
        payable(address(this)).transfer(won);
        emit BountyClaimed(won, msg.sender, block.timestamp);
    }

    //Emergency methods.
    function setTaxAllocs(uint256 staking, uint256 bounty, uint256 liquidity) public onlyOwner {
        require(staking+bounty+liquidity == taxDecimals, "Allocs don't add up.");
        allocs.liquidity = liquidity;
        allocs.bounty = bounty;
        allocs.staking = staking;
    }

    function pauseJackpot(bool value) public onlyOwner {
        _jackpotPaused = value;
    }

    function pauseTaxes(bool value) public onlyOwner {
        _taxesPaused = value;
    }

    function setDelta(uint256 value) public onlyOwner {
        require(delta > 0);
        require(delta < 20);
        delta = value;
    }

    function setLambda(uint256 value) public onlyOwner {
        lambda = value;
    }

    function setLPAddress(address lpAddress) public onlyOwner {
        liquidityPool = lpAddress;
    }

    function setDexRouter(IPancakeRouter02 _dexRouter) public onlyOwner {
        dexRouter = _dexRouter;
    }

    function setTokensToLiquidate(uint256 amt) public onlyOwner {
        tokensToLiquidateTaxes = amt;
    }

    function setStakingContract(address _addr) public onlyOwner {
        stakingContract = _addr;
    }
}

File 2 of 15 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping (address => uint256) public _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

File 3 of 15 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 15 : IPancakeRouter02.sol
pragma solidity >=0.6.2;

import './IPancakeRouter01.sol';

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

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

File 5 of 15 : IPancakeFactory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 6 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT

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

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

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

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

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

File 7 of 15 : TimelockController.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../access/AccessControl.sol";

/**
 * @dev Contract module which acts as a timelocked controller. When set as the
 * owner of an `Ownable` smart contract, it enforces a timelock on all
 * `onlyOwner` maintenance operations. This gives time for users of the
 * controlled contract to exit before a potentially dangerous maintenance
 * operation is applied.
 *
 * By default, this contract is self administered, meaning administration tasks
 * have to go through the timelock process. The proposer (resp executor) role
 * is in charge of proposing (resp executing) operations. A common use case is
 * to position this {TimelockController} as the owner of a smart contract, with
 * a multisig or a DAO as the sole proposer.
 *
 * _Available since v3.3._
 */
contract TimelockController is AccessControl {
    bytes32 public constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE");
    bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE");
    bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
    uint256 internal constant _DONE_TIMESTAMP = uint256(1);

    mapping(bytes32 => uint256) private _timestamps;
    uint256 private _minDelay;

    /**
     * @dev Emitted when a call is scheduled as part of operation `id`.
     */
    event CallScheduled(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data, bytes32 predecessor, uint256 delay);

    /**
     * @dev Emitted when a call is performed as part of operation `id`.
     */
    event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);

    /**
     * @dev Emitted when operation `id` is cancelled.
     */
    event Cancelled(bytes32 indexed id);

    /**
     * @dev Emitted when the minimum delay for future operations is modified.
     */
    event MinDelayChange(uint256 oldDuration, uint256 newDuration);

    /**
     * @dev Initializes the contract with a given `minDelay`.
     */
    constructor(uint256 minDelay, address[] memory proposers, address[] memory executors) {
        _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE);
        _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE);
        _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE);

        // deployer + self administration
        _setupRole(TIMELOCK_ADMIN_ROLE, _msgSender());
        _setupRole(TIMELOCK_ADMIN_ROLE, address(this));

        // register proposers
        for (uint256 i = 0; i < proposers.length; ++i) {
            _setupRole(PROPOSER_ROLE, proposers[i]);
        }

        // register executors
        for (uint256 i = 0; i < executors.length; ++i) {
            _setupRole(EXECUTOR_ROLE, executors[i]);
        }

        _minDelay = minDelay;
        emit MinDelayChange(0, minDelay);
    }

    /**
     * @dev Modifier to make a function callable only by a certain role. In
     * addition to checking the sender's role, `address(0)` 's role is also
     * considered. Granting a role to `address(0)` is equivalent to enabling
     * this role for everyone.
     */
    modifier onlyRoleOrOpenRole(bytes32 role) {
        if (!hasRole(role, address(0))) {
            _checkRole(role, _msgSender());
        }
        _;
    }

    /**
     * @dev Contract might receive/hold ETH as part of the maintenance process.
     */
    receive() external payable {}

    /**
     * @dev Returns whether an id correspond to a registered operation. This
     * includes both Pending, Ready and Done operations.
     */
    function isOperation(bytes32 id) public view virtual returns (bool pending) {
        return getTimestamp(id) > 0;
    }

    /**
     * @dev Returns whether an operation is pending or not.
     */
    function isOperationPending(bytes32 id) public view virtual returns (bool pending) {
        return getTimestamp(id) > _DONE_TIMESTAMP;
    }

    /**
     * @dev Returns whether an operation is ready or not.
     */
    function isOperationReady(bytes32 id) public view virtual returns (bool ready) {
        uint256 timestamp = getTimestamp(id);
        // solhint-disable-next-line not-rely-on-time
        return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp;
    }

    /**
     * @dev Returns whether an operation is done or not.
     */
    function isOperationDone(bytes32 id) public view virtual returns (bool done) {
        return getTimestamp(id) == _DONE_TIMESTAMP;
    }

    /**
     * @dev Returns the timestamp at with an operation becomes ready (0 for
     * unset operations, 1 for done operations).
     */
    function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) {
        return _timestamps[id];
    }

    /**
     * @dev Returns the minimum delay for an operation to become valid.
     *
     * This value can be changed by executing an operation that calls `updateDelay`.
     */
    function getMinDelay() public view virtual returns (uint256 duration) {
        return _minDelay;
    }

    /**
     * @dev Returns the identifier of an operation containing a single
     * transaction.
     */
    function hashOperation(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt) public pure virtual returns (bytes32 hash) {
        return keccak256(abi.encode(target, value, data, predecessor, salt));
    }

    /**
     * @dev Returns the identifier of an operation containing a batch of
     * transactions.
     */
    function hashOperationBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt) public pure virtual returns (bytes32 hash) {
        return keccak256(abi.encode(targets, values, datas, predecessor, salt));
    }

    /**
     * @dev Schedule an operation containing a single transaction.
     *
     * Emits a {CallScheduled} event.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function schedule(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt, uint256 delay) public virtual onlyRole(PROPOSER_ROLE) {
        bytes32 id = hashOperation(target, value, data, predecessor, salt);
        _schedule(id, delay);
        emit CallScheduled(id, 0, target, value, data, predecessor, delay);
    }

    /**
     * @dev Schedule an operation containing a batch of transactions.
     *
     * Emits one {CallScheduled} event per transaction in the batch.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function scheduleBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt, uint256 delay) public virtual onlyRole(PROPOSER_ROLE) {
        require(targets.length == values.length, "TimelockController: length mismatch");
        require(targets.length == datas.length, "TimelockController: length mismatch");

        bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
        _schedule(id, delay);
        for (uint256 i = 0; i < targets.length; ++i) {
            emit CallScheduled(id, i, targets[i], values[i], datas[i], predecessor, delay);
        }
    }

    /**
     * @dev Schedule an operation that is to becomes valid after a given delay.
     */
    function _schedule(bytes32 id, uint256 delay) private {
        require(!isOperation(id), "TimelockController: operation already scheduled");
        require(delay >= getMinDelay(), "TimelockController: insufficient delay");
        // solhint-disable-next-line not-rely-on-time
        _timestamps[id] = block.timestamp + delay;
    }

    /**
     * @dev Cancel an operation.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function cancel(bytes32 id) public virtual onlyRole(PROPOSER_ROLE) {
        require(isOperationPending(id), "TimelockController: operation cannot be cancelled");
        delete _timestamps[id];

        emit Cancelled(id);
    }

    /**
     * @dev Execute an (ready) operation containing a single transaction.
     *
     * Emits a {CallExecuted} event.
     *
     * Requirements:
     *
     * - the caller must have the 'executor' role.
     */
    function execute(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
        bytes32 id = hashOperation(target, value, data, predecessor, salt);
        _beforeCall(predecessor);
        _call(id, 0, target, value, data);
        _afterCall(id);
    }

    /**
     * @dev Execute an (ready) operation containing a batch of transactions.
     *
     * Emits one {CallExecuted} event per transaction in the batch.
     *
     * Requirements:
     *
     * - the caller must have the 'executor' role.
     */
    function executeBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
        require(targets.length == values.length, "TimelockController: length mismatch");
        require(targets.length == datas.length, "TimelockController: length mismatch");

        bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
        _beforeCall(predecessor);
        for (uint256 i = 0; i < targets.length; ++i) {
            _call(id, i, targets[i], values[i], datas[i]);
        }
        _afterCall(id);
    }

    /**
     * @dev Checks before execution of an operation's calls.
     */
    function _beforeCall(bytes32 predecessor) private view {
        require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency");
    }

    /**
     * @dev Checks after execution of an operation's calls.
     */
    function _afterCall(bytes32 id) private {
        require(isOperationReady(id), "TimelockController: operation is not ready");
        _timestamps[id] = _DONE_TIMESTAMP;
    }

    /**
     * @dev Execute an operation's call.
     *
     * Emits a {CallExecuted} event.
     */
    function _call(bytes32 id, uint256 index, address target, uint256 value, bytes calldata data) private {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success,) = target.call{value: value}(data);
        require(success, "TimelockController: underlying transaction reverted");

        emit CallExecuted(id, index, target, value, data);
    }

    /**
     * @dev Changes the minimum timelock duration for future operations.
     *
     * Emits a {MinDelayChange} event.
     *
     * Requirements:
     *
     * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing
     * an operation where the timelock is the target and the data is the ABI-encoded call to this function.
     */
    function updateDelay(uint256 newDelay) external virtual {
        require(msg.sender == address(this), "TimelockController: caller must be timelock");
        emit MinDelayChange(_minDelay, newDelay);
        _minDelay = newDelay;
    }
}

File 8 of 15 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 9 of 15 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 10 of 15 : Context.sol
// SPDX-License-Identifier: MIT

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 11 of 15 : IPancakeRouter01.sol
pragma solidity >=0.6.2;

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

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

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

File 12 of 15 : AccessControl.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if(!hasRole(role, account)) {
            revert(string(abi.encodePacked(
                "AccessControl: account ",
                Strings.toHexString(uint160(account), 20),
                " is missing role ",
                Strings.toHexString(uint256(role), 32)
            )));
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

File 13 of 15 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

File 14 of 15 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 15 of 15 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialBalance","type":"uint256"},{"internalType":"uint256","name":"bountyTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"stakingTax","type":"uint256"},{"internalType":"address","name":"dexRouterAddress","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":"","type":"uint256"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"BountyClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"JackpotBountyWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"JackpotCheck","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Taxation","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":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_bounties","outputs":[{"internalType":"uint256","name":"amountWon","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocs","outputs":[{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"staking","type":"uint256"},{"internalType":"uint256","name":"combined","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":"claimBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bountyId","type":"uint256"}],"name":"claimUnclaimedBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"excludeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"excludeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getCurrentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"add","type":"address"}],"name":"getTaxes","outputs":[{"components":[{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"staking","type":"uint256"},{"internalType":"uint256","name":"combined","type":"uint256"}],"internalType":"struct QuickBounty.PaperHandTaxPools","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lambda","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"pauseJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"pauseTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"readBounty","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPancakeRouter02","name":"_dexRouter","type":"address"}],"name":"setDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"setLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLambda","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"staking","type":"uint256"},{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setTaxAllocs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setTokensToLiquidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPools","outputs":[{"internalType":"uint256","name":"bounty","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"staking","type":"uint256"},{"internalType":"uint256","name":"combined","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToLiquidateTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405268e3aeb5737240a000006018553480156200001e57600080fd5b50604051620031fb380380620031fb8339810160408190526200004191620005d6565b8651879087906200005a90600390602085019062000444565b5080516200007090600490602084019062000444565b5050506000620000856200036760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600160065560118054610100600160a81b0319166101006001600160a01b03848116820292909217928390556040805163c45a015560e01b81529051919093049091169163c45a0155916004808301926020929190829003018186803b1580156200013d57600080fd5b505afa15801562000152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001789190620005b2565b6001600160a01b031663c9c6539630601160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d657600080fd5b505afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002119190620005b2565b6040518363ffffffff1660e01b81526004016200023092919062000676565b602060405180830381600087803b1580156200024b57600080fd5b505af115801562000260573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002869190620005b2565b601280546001600160a01b0319166001600160a01b0392909216919091179055336000818152601460205260409020805460ff19166001179055620002cc90866200036b565b50600992909255600b91909155600a555050601e601c55506001601d8190554260198190556012546001600160a01b03166000908152601460209081526040808320805460ff19908116871790915530845281842080548216871790557f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c805490911690951790945533825260169052919091205562000748565b3390565b6001600160a01b0382166200039d5760405162461bcd60e51b8152600401620003949062000690565b60405180910390fd5b620003ab600083836200043f565b8060026000828254620003bf9190620006d0565b90915550506001600160a01b03821660009081526020819052604081208054839290620003ee908490620006d0565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000433908590620006c7565b60405180910390a35050565b505050565b8280546200045290620006f5565b90600052602060002090601f016020900481019282620004765760008555620004c1565b82601f106200049157805160ff1916838001178555620004c1565b82800160010185558215620004c1579182015b82811115620004c1578251825591602001919060010190620004a4565b50620004cf929150620004d3565b5090565b5b80821115620004cf5760008155600101620004d4565b80516001600160a01b03811681146200050257600080fd5b919050565b600082601f83011262000518578081fd5b81516001600160401b038082111562000535576200053562000732565b6040516020601f8401601f19168201810183811183821017156200055d576200055d62000732565b604052838252858401810187101562000574578485fd5b8492505b8383101562000597578583018101518284018201529182019162000578565b83831115620005a857848185840101525b5095945050505050565b600060208284031215620005c4578081fd5b620005cf82620004ea565b9392505050565b600080600080600080600060e0888a031215620005f1578283fd5b87516001600160401b038082111562000608578485fd5b620006168b838c0162000507565b985060208a01519150808211156200062c578485fd5b506200063b8a828b0162000507565b96505060408801519450606088015193506080880151925060a088015191506200066860c08901620004ea565b905092959891949750929550565b6001600160a01b0392831681529116602082015260400190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60008219821115620006f057634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200070a57607f821691505b602082108114156200072c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612aa380620007586000396000f3fe60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063e2aefd8b116100ab578063ee99205c1161006f578063ee99205c146106a2578063f2fde38b146106b7578063f43bc2b1146106d7578063f72f863b146106f7578063fb0bc30d1461071757610246565b8063e2aefd8b146105fe578063ed082fca1461061e578063ed8d550f1461063e578063eda138a31461066d578063ee4be2881461068d57610246565b8063bccdd174116100f2578063bccdd17414610569578063d9dbd59c14610589578063dad0be61146105a9578063dc0101eb146105be578063dd62ed3e146105de57610246565b80638da5cb5b146104df57806395d89b41146104f45780639dd373b914610509578063a457c2d714610529578063a9059cbb1461054957610246565b80632b03d9b6116101bc57806370a082311161018057806370a0823114610453578063715018a6146104735780637a351a1d146104885780637e23017d146104a857806382c428f9146104bd57610246565b80632b03d9b6146103a4578063313ce567146103c457806331c92b24146103e657806339509351146104135780636ebcf6071461043357610246565b806318160ddd1161020357806318160ddd1461030c5780631bc7123d146103215780631e92ffe51461034f5780632156dbad1461036f57806323b872dd1461038457610246565b8063025ff0a51461024b57806306fdde031461026d578063095ea7b31461029857806312b495a8146102c5578063130540fc146102e757610246565b3661024657005b600080fd5b34801561025757600080fd5b5061026b6102663660046123bd565b610737565b005b34801561027957600080fd5b506102826107a2565b60405161028f91906124d1565b60405180910390f35b3480156102a457600080fd5b506102b86102b3366004612378565b610834565b60405161028f91906124c6565b3480156102d157600080fd5b506102da610852565b60405161028f919061246e565b3480156102f357600080fd5b506102fc610858565b60405161028f949392919061294f565b34801561031857600080fd5b506102da610867565b34801561032d57600080fd5b5061034161033c366004612294565b61086d565b60405161028f92919061289b565b34801561035b57600080fd5b5061026b61036a366004612378565b6108b5565b34801561037b57600080fd5b506102da610931565b34801561039057600080fd5b506102b861039f366004612304565b610937565b3480156103b057600080fd5b506102da6103bf366004612294565b6109ce565b3480156103d057600080fd5b506103d9610abc565b60405161028f919061296a565b3480156103f257600080fd5b506104066104013660046123d5565b610ac1565b60405161028f9190612870565b34801561041f57600080fd5b506102b861042e366004612378565b610bc5565b34801561043f57600080fd5b506102da61044e366004612294565b610c14565b34801561045f57600080fd5b506102da61046e366004612294565b610c26565b34801561047f57600080fd5b5061026b610c41565b34801561049457600080fd5b5061026b6104a3366004612294565b610cca565b3480156104b457600080fd5b506102fc610d2b565b3480156104c957600080fd5b506104d2610d3a565b60405161028f9190612477565b3480156104eb57600080fd5b506104d2610d49565b34801561050057600080fd5b50610282610d58565b34801561051557600080fd5b5061026b610524366004612294565b610d67565b34801561053557600080fd5b506102b8610544366004612378565b610dc8565b34801561055557600080fd5b506102b8610564366004612378565b610e43565b34801561057557600080fd5b5061026b610584366004612344565b610e57565b34801561059557600080fd5b5061026b6105a43660046123f9565b610ec1565b3480156105b557600080fd5b506102da610f40565b3480156105ca57600080fd5b5061026b6105d93660046123bd565b610f46565b3480156105ea57600080fd5b506102da6105f93660046122cc565b6110e6565b34801561060a57600080fd5b5061026b6106193660046123a3565b611111565b34801561062a57600080fd5b5061026b6106393660046123bd565b611163565b34801561064a57600080fd5b5061065e6106593660046123bd565b6111a7565b60405161028f939291906128b2565b34801561067957600080fd5b5061026b610688366004612344565b6111e6565b34801561069957600080fd5b5061026b611250565b3480156106ae57600080fd5b506104d261133c565b3480156106c357600080fd5b5061026b6106d2366004612294565b61134b565b3480156106e357600080fd5b5061026b6106f23660046123bd565b61140c565b34801561070357600080fd5b5061026b610712366004612294565b611450565b34801561072357600080fd5b5061026b6107323660046123a3565b6114b7565b61073f611510565b6001600160a01b0316610750610d49565b6001600160a01b03161461077f5760405162461bcd60e51b8152600401610776906126ff565b60405180910390fd5b6000601d541161078e57600080fd5b6014601d541061079d57600080fd5b601d55565b6060600380546107b1906129da565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906129da565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000610848610841611510565b8484611514565b5060015b92915050565b601d5481565b600d54600e54600f5460105484565b60025490565b6001600160a01b039081166000908152600760209081526040918290208251606081018452815480825260018301549095169281018390526002909101549201919091529091565b6108bd611510565b6001600160a01b03166108ce610d49565b6001600160a01b0316146108f45760405162461bcd60e51b8152600401610776906126ff565b61271081106109155760405162461bcd60e51b815260040161077690612680565b6001600160a01b039091166000908152601a6020526040902055565b60185481565b60006109448484846115c8565b6001600160a01b038416600090815260016020526040812081610965611510565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156109a85760405162461bcd60e51b8152600401610776906126b7565b6109c3856109b4611510565b6109be86856129c3565b611514565b506001949350505050565b6001600160a01b03811660009081526016602052604081205481906109f390426129c3565b90506000620d2f008210610a0857620d2f0091505b6000620d2f00610a1c6103206111946129c3565b610a2690856129a4565b610a309190612990565b610a3c906111946129c3565b6001600160a01b038616600090815260176020526040902054909150811015610a69576103209150610a8f565b6001600160a01b038516600090815260176020526040902054610a8c90826129c3565b91505b610320821015610aa757506103209250610ab7915050565b610ab185836119a1565b93505050505b919050565b601290565b610ac961225c565b6000612710610ad881866129a4565b610ae1856109ce565b610aeb91906129a4565b610af59190612990565b90506000620f4240606483600960020154610b1091906129a4565b610b1a9190612990565b610b249190612990565b90506000620f4240606484600960010154610b3f91906129a4565b610b499190612990565b610b539190612990565b90506000620f4240606485600960000154610b6e91906129a4565b610b789190612990565b610b829190612990565b90506040518060800160405280828152602001838152602001848152602001838584610bae9190612978565b610bb89190612978565b9052979650505050505050565b6000610848610bd2611510565b848460016000610be0611510565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546109be9190612978565b60006020819052908152604090205481565b6001600160a01b031660009081526020819052604090205490565b610c49611510565b6001600160a01b0316610c5a610d49565b6001600160a01b031614610c805760405162461bcd60e51b8152600401610776906126ff565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b610cd2611510565b6001600160a01b0316610ce3610d49565b6001600160a01b031614610d095760405162461bcd60e51b8152600401610776906126ff565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600954600a54600b54600c5484565b6012546001600160a01b031690565b6005546001600160a01b031690565b6060600480546107b1906129da565b610d6f611510565b6001600160a01b0316610d80610d49565b6001600160a01b031614610da65760405162461bcd60e51b8152600401610776906126ff565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b60008060016000610dd7611510565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610e235760405162461bcd60e51b81526004016107769061282b565b610e39610e2e611510565b856109be86856129c3565b5060019392505050565b6000610848610e50611510565b84846115c8565b610e5f611510565b6001600160a01b0316610e70610d49565b6001600160a01b031614610e965760405162461bcd60e51b8152600401610776906126ff565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b610ec9611510565b6001600160a01b0316610eda610d49565b6001600160a01b031614610f005760405162461bcd60e51b8152600401610776906126ff565b61271081610f0e8486612978565b610f189190612978565b14610f355760405162461bcd60e51b8152600401610776906125ca565b600a55600955600b55565b601c5481565b60026006541415610f695760405162461bcd60e51b8152600401610776906127f4565b6002600655610f76611510565b6001600160a01b0316610f87610d49565b6001600160a01b031614610fad5760405162461bcd60e51b8152600401610776906126ff565b4260088281548110610fcf57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016002015462278d00610fef9190612978565b1161100c5760405162461bcd60e51b815260040161077690612779565b60006008828154811061102f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600001541161105e5760405162461bcd60e51b81526004016107769061259e565b3360009081526007602052604080822080549083905590519091309183156108fc0291849190818181858888f193505050501580156110a1573d6000803e3d6000fd5b507f23c972d46b3251ae358ad69fb3761ef8f5c38c5131502ed9e9bde9b129da92158133426040516110d5939291906128b2565b60405180910390a150506001600655565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611119611510565b6001600160a01b031661112a610d49565b6001600160a01b0316146111505760405162461bcd60e51b8152600401610776906126ff565b601b805460ff1916911515919091179055565b61116b611510565b6001600160a01b031661117c610d49565b6001600160a01b0316146111a25760405162461bcd60e51b8152600401610776906126ff565b601c55565b600881815481106111b757600080fd5b60009182526020909120600390910201805460018201546002909201549092506001600160a01b039091169083565b6111ee611510565b6001600160a01b03166111ff610d49565b6001600160a01b0316146112255760405162461bcd60e51b8152600401610776906126ff565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600260065414156112735760405162461bcd60e51b8152600401610776906127f4565b6002600655336000908152600760205260409020546112a45760405162461bcd60e51b815260040161077690612524565b33600090815260076020526040812080549082905590806112c483611a0a565b6040519193509150339083156108fc029084906000818181858888f193505050501580156112f6573d6000803e3d6000fd5b507f23c972d46b3251ae358ad69fb3761ef8f5c38c5131502ed9e9bde9b129da921583334260405161132a939291906128b2565b60405180910390a15050600160065550565b6013546001600160a01b031681565b611353611510565b6001600160a01b0316611364610d49565b6001600160a01b03161461138a5760405162461bcd60e51b8152600401610776906126ff565b6001600160a01b0381166113b05760405162461bcd60e51b8152600401610776906125f8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b611414611510565b6001600160a01b0316611425610d49565b6001600160a01b03161461144b5760405162461bcd60e51b8152600401610776906126ff565b601855565b611458611510565b6001600160a01b0316611469610d49565b6001600160a01b03161461148f5760405162461bcd60e51b8152600401610776906126ff565b601180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6114bf611510565b6001600160a01b03166114d0610d49565b6001600160a01b0316146114f65760405162461bcd60e51b8152600401610776906126ff565b601b80549115156101000261ff0019909216919091179055565b3390565b6001600160a01b03831661153a5760405162461bcd60e51b8152600401610776906127b0565b6001600160a01b0382166115605760405162461bcd60e51b81526004016107769061263e565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906115bb90859061246e565b60405180910390a3505050565b6001600160a01b0383166115ee5760405162461bcd60e51b815260040161077690612734565b6001600160a01b0382166116145760405162461bcd60e51b81526004016107769061255b565b600061161f30610c26565b60115490915060ff1615801561164357506012546001600160a01b03858116911614155b801561165857506001600160a01b0384163014155b801561166d575060185461166a611bf4565b10155b801561167d5750601854600e5410155b1561168a5761168a611c07565b6001600160a01b038416735fbdb00603c486e025f7d8f6ee597688271b5d4b14156116cd576001600160a01b0383166000908152601a602052604090206105dc90555b6012546000906001600160a01b038681169116148061170857506001600160a01b038516735fbdb00603c486e025f7d8f6ee597688271b5d4b145b801561171c5750601b54610100900460ff16155b801561173657506013546001600160a01b03858116911614155b1561178d576117458484611c32565b6001600160a01b03841660009081526020819052604090205461176a90849086611df3565b50506001600160a01b038316600090815260166020526040902042905581611867565b601b5460ff161580156117ae57506013546001600160a01b03858116911614155b80156117d357506001600160a01b03851660009081526014602052604090205460ff16155b80156117fc57506001600160a01b038516735fbdb00603c486e025f7d8f6ee597688271b5d4b14155b801561182157506001600160a01b03841660009081526015602052604090205460ff16155b801561183657506001600160a01b0385163014155b156118645760006118478487610ac1565b90506118538482611e9a565b915061185e81611eb3565b50611867565b50815b6001600160a01b03851660009081526020819052604090205461188b9084906129c3565b6001600160a01b0380871660009081526020819052604080822093909355908616815220546118bb908290612978565b6001600160a01b03851660009081526020819052604080822092909255308152205481906118ea908590612978565b6118f491906129c3565b306000908152602081905260409081902091909155516001600160a01b0385811691908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061194790859061246e565b60405180910390a3306001600160a01b0386167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61198584876129c3565b604051611992919061246e565b60405180910390a35050505050565b6001600160a01b0382166000908152601a602052604081205415611a03576001600160a01b0383166000908152601a60205260409020546127109083906119e890836129c3565b6119f291906129a4565b6119fc9190612990565b905061084c565b508061084c565b3060009081526020818152604080832054815160028082526060820184528594479486939291830190803683370190505090503081600081518110611a5f57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601160019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906122b0565b81600181518110611b2657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601154611b5191309161010090041688611514565b60115460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611b8e9089906000908690309042906004016128d1565b600060405180830381600087803b158015611ba857600080fd5b505af1158015611bbc573d6000803e3d6000fd5b505030600090815260208190526040812054909250611bdc9150846129c3565b9050611be884476129c3565b95509350505050915091565b3060009081526020819052604090205490565b6011805460ff19166001179055600e54611c2090611eef565b506000600e556011805460ff19169055565b6011805460ff19166001179055600d5415801590611c545750611c5481611f70565b15611de557600d80546000918290556001600160a01b0380851680845260076020818152604080872081516060808201845282548083526001840154909816828601526002909201548184015282519182019092529390965252919291908190611cbf908590612978565b81526001600160a01b0386811660208084018290524260409485018190526000928352600782528483208651815591860151600180840180546001600160a01b0319908116938816939093178155978701516002850190815560088054928301815590955292547ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360039094029384015595547ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee48301805491909516961695909517909255547ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee590910155517f99fd8c4d43af608c37ea2d1d8aee703842bed422d70e6b6259710a9c9b4256ac91611dda91859188916128b2565b60405180910390a150505b50506011805460ff19169055565b600080611e0285611194612018565b90506000611e1885611e13866109ce565b612018565b90506000611e268383612978565b90506127106000611e378989612978565b611e4183856129a4565b611e4b9190612990565b90506000611e5982846129c3565b9050611e67816111946129c3565b6001600160a01b038916600090815260176020526040902055611e8c816111946129c3565b9a9950505050505050505050565b6000816060015183611eac91906129c3565b9392505050565b8051611ebe9061203b565b611ecb816040015161204f565b611ed88160200151612093565b60208101518151611ee99190612978565b60105550565b6000806002600d60010154611f049190612990565b90506000611f1282856129c3565b9050600080611f2084611a0a565b91509150611f2e83836120a7565b7f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8484604051611f5f929190612941565b60405180910390a195945050505050565b600080611f8960006402540be400600d6000015461215e565b905060006402540be400611f9b610867565b611fa59190612990565b601d54600d54611fb59190612990565b601c54611fc290876129a4565b611fcc9190612978565b611fd69190612990565b90507fdaea292d06f7f95a7072ab47c182e23a594a879084a825a0a66fe62a0b75e6388282604051612009929190612941565b60405180910390a11192915050565b600061271061202783826129c3565b61203190856129a4565b611eac9190612990565b600d54612049908290612978565b600d5550565b6013546001600160a01b0316600090815260208190526040902054612075908290612978565b6013546001600160a01b031660009081526020819052604090205550565b600e546120a1908290612978565b600e5550565b6011546120c490309061010090046001600160a01b031684611514565b60115460405163f305d71960e01b81526101009091046001600160a01b03169063f305d719908390612105903090879060009081908490429060040161248b565b6060604051808303818588803b15801561211e57600080fd5b505af1158015612132573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121579190612424565b5050505050565b600080824342336040516020016121759190612451565b6040516020818303038152906040528051906020012060001c6121989190612990565b4542416040516020016121ab9190612451565b6040516020818303038152906040528051906020012060001c6121ce9190612990565b6121d84442612978565b6121e29190612978565b6121ec9190612978565b6121f69190612978565b6122009190612978565b61220a9190612978565b60405160200161221a919061246e565b60408051601f19818403018152919052805160209091012090508461223f81866129c3565b6122499083612a15565b6122539190612978565b95945050505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b80358015158114610ab757600080fd5b6000602082840312156122a5578081fd5b8135611eac81612a55565b6000602082840312156122c1578081fd5b8151611eac81612a55565b600080604083850312156122de578081fd5b82356122e981612a55565b915060208301356122f981612a55565b809150509250929050565b600080600060608486031215612318578081fd5b833561232381612a55565b9250602084013561233381612a55565b929592945050506040919091013590565b60008060408385031215612356578182fd5b823561236181612a55565b915061236f60208401612284565b90509250929050565b6000806040838503121561238a578182fd5b823561239581612a55565b946020939093013593505050565b6000602082840312156123b4578081fd5b611eac82612284565b6000602082840312156123ce578081fd5b5035919050565b600080604083850312156123e7578182fd5b8235915060208301356122f981612a55565b60008060006060848603121561240d578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612438578283fd5b8351925060208401519150604084015190509250925092565b60609190911b6bffffffffffffffffffffffff1916815260140190565b90815260200190565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156124fd578581018301518582016040015282016124e1565b8181111561250e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f596f7520686176656e7420776f6e20616e7920626f756e74792e2e2e00000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601290820152714e6f20626f756e747920746f20636c61696d60701b604082015260600190565b60208082526014908201527320b63637b1b9903237b713ba1030b232103ab81760611b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526019908201527f446973636f756e7420686967686572207468616e203130302500000000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601f908201527f596f752063616e277420636c61696d206120726563656e7420626f756e747900604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156129205784516001600160a01b0316835293830193918301916001016128fb565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6000821982111561298b5761298b612a29565b500190565b60008261299f5761299f612a3f565b500490565b60008160001904831182151516156129be576129be612a29565b500290565b6000828210156129d5576129d5612a29565b500390565b6002810460018216806129ee57607f821691505b60208210811415612a0f57634e487b7160e01b600052602260045260246000fd5b50919050565b600082612a2457612a24612a3f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0381168114612a6a57600080fd5b5056fea2646970667358221220642b7a4f35dc60fe62e4fe6c650b0d27d2d721d4a17ee2c02839427cf81be73164736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000000000000000000000000000000000000000000b517569636b426f756e747900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025142000000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000000000000000000000000000000000000000000b517569636b426f756e747900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025142000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): QuickBounty
Arg [1] : symbol (string): QB
Arg [2] : initialBalance (uint256): 100000000000000000000000000
Arg [3] : bountyTax (uint256): 1500
Arg [4] : liquidityTax (uint256): 5000
Arg [5] : stakingTax (uint256): 3500
Arg [6] : dexRouterAddress (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000dac
Arg [6] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [8] : 517569636b426f756e7479000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 5142000000000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.