Contract 0xfD6643b3959F4114f39eFa2f4484703fAfc47f00 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7b01f4d4324c6d3371643358b26a9d9f2c1c56c17c02caee0256c99505a7c58dClaim BNB Reward94693852021-10-27 2:35:234 hrs 22 mins ago0xae9968b65636c096ecc3a5dd1b10fd843b6a36d1 IN  Give: GIVE Token0 HT0.00020923252.5
0xbdc4ec87481a8a0ff76e571fb960bac7863c83295fc69065b64a2d4c1ad21101Claim BNB Reward94693622021-10-27 2:34:144 hrs 23 mins ago0xeaa669753c30feaa9d951d9af940a6462036f819 IN  Give: GIVE Token0 HT0.00020923252.5
0xbad7b524967678ac9ef368e2b43b7a554e56ba4a6798b3f6ceb1b19b7c3be29fApprove94676392021-10-27 1:08:055 hrs 49 mins ago0x624802d742233080758dd64b4abd7cb7c791def3 IN  Give: GIVE Token0 HT0.000116752.5
0xa30603e61ab0f86f53ed065f8ba37a7b195297faeb114bbb2115c6aa0a7b16ddClaim BNB Reward94641912021-10-26 22:15:418 hrs 41 mins ago0x76171b9751963cf2e9e411cec5925cd6c03beeb8 IN  Give: GIVE Token0 HT0.00020923252.5
0xe411098b8f278ea5f445193e90ea1a274399d757eeb18bbf7b41364229a8a2a8Claim BNB Reward94618452021-10-26 20:18:2310 hrs 39 mins ago0x51a8cd5ea761d11e5aec9b1c031b68a8620efb20 IN  Give: GIVE Token0 HT0.00020923252.5
0x5f290b29adb5c4a22f5995e07142c4c87d141a9fa604dcad7ff690d0c1ce5754Claim BNB Reward94600172021-10-26 18:46:5912 hrs 10 mins ago0x71effea30c7e9c8bfbbf6ec0a4d678c7c36d3c9a IN  Give: GIVE Token0 HT0.000188309252.25
0xb6297489dee3c51f9a9c31fed6dcc980c56ab1d4fa63e1cbd6dd0d24670f9972Claim BNB Reward94583342021-10-26 17:22:5013 hrs 34 mins ago0xcd4255db67a5b830d93eb5397908c113dff83e10 IN  Give: GIVE Token0 HT0.000188309252.25
0xd3346c9c15dd02e37e8ccf67de1646aa3ef3b645a7e84d2099dcd9f08b9d7077Claim BNB Reward94543072021-10-26 14:01:2916 hrs 55 mins ago0x2478376e3dbb7507f866e68974b801b65b38f1d6 IN  Give: GIVE Token0 HT0.00020923252.5
0x84c7e314ba9f8b8a35d7545b93ee47cbe4bb84c78bbb889f229be49a02f24f30Claim BNB Reward94534712021-10-26 13:19:4017 hrs 37 mins ago0x0c34e395362e717abaa283ac588cb16f94a281d4 IN  Give: GIVE Token0 HT0.000153290252.25
0x7cb63e04ecdff8ef0a4c8a0eb7f8fa9881e96f66f29bbbb8913cbbf87e7b9fd4Claim BNB Reward94531932021-10-26 13:05:4617 hrs 51 mins ago0xb56f03784f8d6c93eb8f8b0403efddd1e2b90dbb IN  Give: GIVE Token0 HT0.00020923252.5
0x90afae2401e066d59d376ec0b65aa464684b893ef616b54b10d9bec0193abfc0Claim BNB Reward94531632021-10-26 13:04:1617 hrs 53 mins ago0x997472d6fed4c7f303678426da187cbb812d2154 IN  Give: GIVE Token0 HT0.000188309252.25
0x01837ae3d1ab83d71b32ba8ad8962b6314eda60101270b1510565915ed7c3f25Claim BNB Reward94501132021-10-26 10:31:4620 hrs 25 mins ago0x779d328c435f695114a2a597b798f20ee3d3fa1d IN  Give: GIVE Token0 HT0.00020923252.5
0x925767e33ebc3bd3d2ce9e1cec92485ded81bde2495443adfa70561e8b047bf0Claim BNB Reward94501032021-10-26 10:31:1620 hrs 26 mins ago0x151f29951acec189817ada80198636ef70848971 IN  Give: GIVE Token0 HT0.00020923252.5
0x9e488f1fcaaebdf20e1d4e7f97fa3a87745ee2887dba77a93b8cf65db4cb061bClaim BNB Reward94495532021-10-26 10:03:4620 hrs 53 mins ago0xf4d95f27bcdd148b929c3594ce944d78c9bcea0b IN  Give: GIVE Token0 HT0.00021143752.5
0x0866f994c910cd97ca2ee974bc215a315f8d4ad18c86bbedea178b68cffd8604Claim BNB Reward94488302021-10-26 9:27:3521 hrs 29 mins ago0x14f09b238d816f39123ed895afc486f1c883b351 IN  Give: GIVE Token0 HT0.000188309252.25
0x3ed2bb59c0f445f477a33b5bf529cd090bcf85605ab2ec6478c42301730132beClaim BNB Reward94481692021-10-26 8:54:3222 hrs 2 mins ago0x344238e079b7a637c3407b81729137ad8912813b IN  Give: GIVE Token0 HT0.00020923252.5
0x7625ef9ce91c40c5cfb071db90b46d4a93f9b4dffb001f4320d35d53c71b53ceApprove94449682021-10-26 6:14:291 day 42 mins ago0xa520fb89ef1b9ab85c144e1c5ec6e1547c59f444 IN  Give: GIVE Token0 HT0.000116812.5
0x4e087efca26398897cc2c4e5209139f51cf0fb188e9728a0de26418db42d0b02Claim BNB Reward94449152021-10-26 6:11:501 day 45 mins ago0x271950d90cc6dc842a09dec4d976b048a980c475 IN  Give: GIVE Token0 HT0.00018830925 2.25
0x574f161f0dfe7ceefd33f90a51df94ce1f66f9f10069b8e91a69fdbdd51949d2Approve94444872021-10-26 5:50:261 day 1 hr ago0xc5021e3bb701967d1f7e6e613f067832a2381b1e IN  Give: GIVE Token0 HT0.000116812.5
0xfc6854055b88657dfd2b90d44594951d379320f92b05da4536eff57bee03ca66Claim BNB Reward94443782021-10-26 5:44:591 day 1 hr ago0x1af28d1e506737f32e91893a7732cd47761cd8ee IN  Give: GIVE Token0 HT0.00020923252.5
0x1f9097e92ccbedf1f8e86b6615224b1f30fdd639903d2680f7c154d9e88af778Claim BNB Reward94440622021-10-26 5:29:111 day 1 hr ago0x3375dde5a957a914195bb2d82a44aa1e9c97a80f IN  Give: GIVE Token0 HT0.00020923252.5
0x3550f53fae3fd84dacd5a25fcff3dd90fc16682475bcc4614d349bd69bb93066Claim BNB Reward94402542021-10-26 2:18:471 day 4 hrs ago0x32e343b8fefb3f267a28f1bbfb2c2269841261f0 IN  Give: GIVE Token0 HT0.00020923252.5
0x67e9a4054cd9f526e3448c71cc5db18cd455632f50d695695225aed4daf17900Claim BNB Reward94384872021-10-26 0:50:261 day 6 hrs ago0x1fc24c96dc2b1e5f9355a73f10e584efededbe70 IN  Give: GIVE Token0 HT0.00020923252.5
0xc22733ea9b8189753f8d91f8701133e243ba35586f299b169a80cd1bf265a38dClaim BNB Reward94384742021-10-26 0:49:471 day 6 hrs ago0xae81c012969302a5e2d889e9d63441b5d7f946ca IN  Give: GIVE Token0 HT0.00020923252.5
0x3d21054bd2600210dadfca9eb372682f97c46195dbe2a52343c357334c907d2fClaim BNB Reward94384552021-10-26 0:48:501 day 6 hrs ago0x2d12d796912de7d3d36aaab84e7f6339fb81b71f IN  Give: GIVE Token0 HT0.00021143752.5
[ Download CSV Export 

OVERVIEW

GIVE is a charity-oriented token that is helping to fight mental illness across the world.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7b01f4d4324c6d3371643358b26a9d9f2c1c56c17c02caee0256c99505a7c58d94693852021-10-27 2:35:234 hrs 22 mins ago Give: GIVE Token0xae9968b65636c096ecc3a5dd1b10fd843b6a36d10.012910788521880723 HT
0xbdc4ec87481a8a0ff76e571fb960bac7863c83295fc69065b64a2d4c1ad2110194693622021-10-27 2:34:144 hrs 23 mins ago Give: GIVE Token0xeaa669753c30feaa9d951d9af940a6462036f8190.022085697722300369 HT
0xa30603e61ab0f86f53ed065f8ba37a7b195297faeb114bbb2115c6aa0a7b16dd94641912021-10-26 22:15:418 hrs 41 mins ago Give: GIVE Token0x76171b9751963cf2e9e411cec5925cd6c03beeb80.000793589762578606 HT
0xe411098b8f278ea5f445193e90ea1a274399d757eeb18bbf7b41364229a8a2a894618452021-10-26 20:18:2310 hrs 39 mins ago Give: GIVE Token0x51a8cd5ea761d11e5aec9b1c031b68a8620efb200.005104206926406017 HT
0x5f290b29adb5c4a22f5995e07142c4c87d141a9fa604dcad7ff690d0c1ce575494600172021-10-26 18:46:5912 hrs 10 mins ago Give: GIVE Token0x71effea30c7e9c8bfbbf6ec0a4d678c7c36d3c9a0.000329103669026786 HT
0xb6297489dee3c51f9a9c31fed6dcc980c56ab1d4fa63e1cbd6dd0d24670f997294583342021-10-26 17:22:5013 hrs 34 mins ago Give: GIVE Token0xcd4255db67a5b830d93eb5397908c113dff83e100.000453672059125659 HT
0x94c3224a1bad05dde460c0e19a5be310571fab54a1fb8f2713924a62b6e1fb4494550172021-10-26 14:36:5916 hrs 20 mins ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.013348725563199106 HT
0x94c3224a1bad05dde460c0e19a5be310571fab54a1fb8f2713924a62b6e1fb4494550172021-10-26 14:36:5916 hrs 20 mins ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.04004617668959732 HT
0xd3346c9c15dd02e37e8ccf67de1646aa3ef3b645a7e84d2099dcd9f08b9d707794543072021-10-26 14:01:2916 hrs 55 mins ago Give: GIVE Token0x2478376e3dbb7507f866e68974b801b65b38f1d60.009958706175676595 HT
0x7cb63e04ecdff8ef0a4c8a0eb7f8fa9881e96f66f29bbbb8913cbbf87e7b9fd494531932021-10-26 13:05:4617 hrs 51 mins ago Give: GIVE Token0xb56f03784f8d6c93eb8f8b0403efddd1e2b90dbb0.036784953646843044 HT
0x90afae2401e066d59d376ec0b65aa464684b893ef616b54b10d9bec0193abfc094531632021-10-26 13:04:1617 hrs 53 mins ago Give: GIVE Token0x997472d6fed4c7f303678426da187cbb812d21540.000073688422531321 HT
0x01837ae3d1ab83d71b32ba8ad8962b6314eda60101270b1510565915ed7c3f2594501132021-10-26 10:31:4620 hrs 25 mins ago Give: GIVE Token0x779d328c435f695114a2a597b798f20ee3d3fa1d0.020178207810543271 HT
0x925767e33ebc3bd3d2ce9e1cec92485ded81bde2495443adfa70561e8b047bf094501032021-10-26 10:31:1620 hrs 26 mins ago Give: GIVE Token0x151f29951acec189817ada80198636ef708489710.093352858277796523 HT
0x9e488f1fcaaebdf20e1d4e7f97fa3a87745ee2887dba77a93b8cf65db4cb061b94495532021-10-26 10:03:4620 hrs 53 mins ago Give: GIVE Token0xf4d95f27bcdd148b929c3594ce944d78c9bcea0b0.005484951518596096 HT
0x0866f994c910cd97ca2ee974bc215a315f8d4ad18c86bbedea178b68cffd860494488302021-10-26 9:27:3521 hrs 29 mins ago Give: GIVE Token0x14f09b238d816f39123ed895afc486f1c883b3510.000000068924571059 HT
0x3ed2bb59c0f445f477a33b5bf529cd090bcf85605ab2ec6478c42301730132be94481692021-10-26 8:54:3222 hrs 2 mins ago Give: GIVE Token0x344238e079b7a637c3407b81729137ad8912813b0.005332648839401184 HT
0x1ea991cb0a3d9e5ef5cbf629d07be1427c486282f39d63df50e8cbf516ba3e5094453372021-10-26 6:32:561 day 24 mins ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.013352648234963646 HT
0x1ea991cb0a3d9e5ef5cbf629d07be1427c486282f39d63df50e8cbf516ba3e5094453372021-10-26 6:32:561 day 24 mins ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.040057944704890938 HT
0x3f31ad8d477944e900ec8f55af5d09824b9cbcc55398e494b8d5970cd92b83a594453332021-10-26 6:32:441 day 24 mins ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.013356934693870285 HT
0x3f31ad8d477944e900ec8f55af5d09824b9cbcc55398e494b8d5970cd92b83a594453332021-10-26 6:32:441 day 24 mins ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.040070804081610856 HT
0xa0ef3f845c5941d5374f8600a75b55fde6540234421fb259c0aa15c33a2111ba94453292021-10-26 6:32:321 day 24 mins ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.013361223231495876 HT
0xa0ef3f845c5941d5374f8600a75b55fde6540234421fb259c0aa15c33a2111ba94453292021-10-26 6:32:321 day 24 mins ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.040083669694487628 HT
0x4e087efca26398897cc2c4e5209139f51cf0fb188e9728a0de26418db42d0b0294449152021-10-26 6:11:501 day 45 mins ago Give: GIVE Token0x271950d90cc6dc842a09dec4d976b048a980c4750.000799410699824232 HT
0x0afb388393a5827a88ad9d2786661d0c648c36d49cf68aec329ac00f33faa1fa94446142021-10-26 5:56:471 day 1 hr ago Give: GIVE Token 0x62de7269d2c99802b732858f9ba6e95cff2c85e40.013364327325730629 HT
0x0afb388393a5827a88ad9d2786661d0c648c36d49cf68aec329ac00f33faa1fa94446142021-10-26 5:56:471 day 1 hr ago 0x62de7269d2c99802b732858f9ba6e95cff2c85e4 Give: GIVE Token0.040092981977191889 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GiveToken

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-06-15
*/

//SPDX-License-Identifier: Unlicensed
/**
 * Source: https://hecoinfo.com/token/0x3587b2f70d5eaaa26a7b6520b9f286b6538d621f
 * Certik Audit: https://github.com/moonshipfinance/audit/blob/main/Moonship%20Smart%20Contract%20Audit%20Report%20-%20QuillAudits.pdf
 * Cooperate with NUT: Using Nut.Money for swap.
*/

pragma solidity >=0.6.11;

interface IBEP20 {

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an BNB balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

    /**
    * @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;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

interface InutRouter02 is InutRouter01 {
    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: contracts/protocols/bep/Utils.sol

pragma solidity >=0.6.11;


library Utils {
    using SafeMath for uint256;

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

    function isLotteryWon(uint256 salty, uint256 winningDoubleRewardPercentage) private view returns (bool) {
        uint256 luckyNumber = random(0, 100, salty);
        uint256 winPercentage = winningDoubleRewardPercentage;
        return luckyNumber <= winPercentage;
    }

    function calculateBNBReward(
        uint256 _tTotal,
        uint256 currentBalance,
        uint256 currentBNBPool,
        uint256 winningDoubleRewardPercentage,
        uint256 totalSupply,
        address ofAddress
    ) public view returns (uint256) {
        uint256 bnbPool = currentBNBPool;

        // calculate reward to send
        bool isLotteryWonOnClaim = isLotteryWon(currentBalance, winningDoubleRewardPercentage);
        uint256 multiplier = 100;

        if (isLotteryWonOnClaim) {
            multiplier = random(150, 200, currentBalance);
        }

        // now calculate reward
        uint256 reward = bnbPool.mul(multiplier).mul(currentBalance).div(100).div(totalSupply);
        
        // disable warning
        _tTotal;
        ofAddress;

        return reward;
    }

    function calculateTopUpClaim(
        uint256 currentRecipientBalance,
        uint256 basedRewardCycleBlock,
        uint256 threshHoldTopUpRate,
        uint256 amount
    ) public view returns (uint256) {
        if (currentRecipientBalance == 0) {
            return block.timestamp + basedRewardCycleBlock;
        }
        else {
            uint256 rate = amount.mul(100).div(currentRecipientBalance);

            if (uint256(rate) >= threshHoldTopUpRate) {
                uint256 incurCycleBlock = basedRewardCycleBlock.mul(uint256(rate)).div(100);

                if (incurCycleBlock >= basedRewardCycleBlock) {
                    incurCycleBlock = basedRewardCycleBlock;
                }

                return incurCycleBlock;
            }

            return 0;
        }
    }

    function swapTokensForEth(
        address routerAddress,
        uint256 tokenAmount
    ) public {
        InutRouter02 nutRouter = InutRouter02(routerAddress);

        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = nutRouter.WETH();

        // make the swap
        nutRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }

    function swapETHForTokens(
        address routerAddress,
        address recipient,
        uint256 ethAmount
    ) public {
        InutRouter02 nutRouter = InutRouter02(routerAddress);

        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = nutRouter.WETH();
        path[1] = address(this);

        // make the swap
        nutRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of BNB
            path,
            address(recipient),
            block.timestamp + 360
        );
    }

    function addLiquidity(
        address routerAddress,
        address owner,
        uint256 tokenAmount,
        uint256 ethAmount
    ) public {
        InutRouter02 nutRouter = InutRouter02(routerAddress);

        // add the liquidity
        nutRouter.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner,
            block.timestamp + 360
        );
    }
}

// File: contracts/protocols/bep/ReentrancyGuard.sol

pragma solidity >=0.6.11;

/**
 * @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 () public {
        _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;
    }

    modifier isHuman() {
        require(tx.origin == msg.sender, "sorry humans only");
        _;
    }
}

// File: contracts/protocols/MoonRat.sol

pragma solidity >=0.6.11;
pragma experimental ABIEncoderV2;



contract GiveToken is Context, IBEP20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isExcludedFromMaxTx;

    address[] private _excluded;

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

    string private _name = "Give Token";
    string private _symbol = "GIVE";
    uint8 private _decimals = 18;

    InutRouter02 public immutable nutRouter;
    address public immutable nutPair;
    address charityAddress;

    bool inSwapAndLiquify = false;

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

    event ClaimBNBSuccessfully(
        address recipient,
        uint256 ethReceived,
        uint256 nextAvailableClaimDate
    );

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

    constructor (
        address payable routerAddress,
        address _charityAddress
    ) public {
        _rOwned[_msgSender()] = _rTotal;

        InutRouter02 _nutRouter = InutRouter02(routerAddress);
        // Create a pancake pair for this new token
        nutPair = IPancakeFactory(_nutRouter.factory())
        .createPair(address(this), _nutRouter.WETH());

        // set the rest of the contract variables
        nutRouter = _nutRouter;
        charityAddress = _charityAddress;

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

        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;
        _isExcludedFromMaxTx[charityAddress] = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee < 33);
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee < 33);
        _liquidityFee = liquidityFee;
    }

    function setChairtyFeePercent(uint256 charityFee) external onlyOwner() {
        require(charityFee < 33);
        _charityFee = charityFee;
    }

    function setCharityAddress(address _charityAddress) external onlyOwner() {
        charityAddress = _charityAddress;
        _isExcludedFromFee[charityAddress] = true;
        _isExcludedFromMaxTx[charityAddress] = true;
    }

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

    //to receive BNB from nutRouter when swapping
    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tCharity = calculateCharityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tCharity);
        return (tTransferAmount, tFee, tLiquidity, tCharity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate = _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[charityAddress] = _rOwned[charityAddress].add(rCharity);
        if (_isExcluded[charityAddress])
            _tOwned[charityAddress] = _tOwned[charityAddress].add(tCharity);
    }

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

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

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

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0 && _charityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousCharityFee = _charityFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _charityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _charityFee = _previousCharityFee;
    }

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

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

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

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

        ensureMaxTxAmount(from, to, amount, value);

        // swap and liquify
        swapAndLiquify(from, to);

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

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

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee)
            removeAllFee();

        // top up claim cycle
        topUpClaimCycleAfterTransfer(recipient, amount);

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

        if (!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    // Innovation for protocol by MoonRat Team
    uint256 public rewardCycleBlock = 7 days;
    uint256 public easyRewardCycleBlock = 1 days;
    uint256 public threshHoldTopUpRate = 2; // 2 percent
    uint256 public _maxTxAmount = _tTotal; // will be set at activateContract() function
    uint256 public disruptiveCoverageFee = 2 ether; // antiwhale
    mapping(address => uint256) public nextAvailableClaimDate;
    bool public swapAndLiquifyEnabled = false; // should be true
    uint256 public disruptiveTransferEnabledFrom = 0;
    uint256 public disableEasyRewardFrom = 0;
    uint256 public winningDoubleRewardPercentage = 5;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _charityFee = 2; // 2% will be sent to charityAddress
    uint256 private _previousCharityFee = _charityFee;

    uint256 public _liquidityFee = 7; // 3.5% will be added pool, 3.5% will be converted to HT
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public rewardThreshold = 1 ether;

    uint256 minTokenNumberToSell = _tTotal.mul(1).div(10000).div(10); // 0.001% max tx amount will trigger swap and add liquidity

    function setMaxTxPercent(uint256 maxTxPercent) public onlyOwner() {
        require(maxTxPercent > 0 && maxTxPercent <= 10000);
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000);
    }

    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner {
        _isExcludedFromMaxTx[_address] = value;
    }

    function calculateBNBReward(address ofAddress) public view returns (uint256) {
        uint256 tSupply = uint256(_tTotal)
        .sub(balanceOf(address(0)))
        .sub(balanceOf(0x000000000000000000000000000000000000dEaD)) // exclude burned wallet
        .sub(balanceOf(address(nutPair)));
        // exclude liquidity wallet

        return Utils.calculateBNBReward(
            _tTotal,
            balanceOf(address(ofAddress)),
            address(this).balance,
            winningDoubleRewardPercentage,
            tSupply,
            ofAddress
        );
    }

    function getRewardCycleBlock() public view returns (uint256) {
        if (block.timestamp >= disableEasyRewardFrom) return rewardCycleBlock;
        return easyRewardCycleBlock;
    }

    function claimBNBReward() isHuman nonReentrant public {
        require(nextAvailableClaimDate[msg.sender] <= block.timestamp, 'Error: next available not reached');
        require(balanceOf(msg.sender) > 0, 'Error: must own GIVE to claim reward');

        uint256 reward = calculateBNBReward(msg.sender);

        // reward threshold
        if (reward >= rewardThreshold) {
            Utils.swapETHForTokens(
                address(nutRouter),
                address(0x000000000000000000000000000000000000dEaD), 
                reward.div(5)
            );
            reward = reward.sub(reward.div(5));
        }

        // update rewardCycleBlock
        nextAvailableClaimDate[msg.sender] = block.timestamp + getRewardCycleBlock();
        emit ClaimBNBSuccessfully(msg.sender, reward, nextAvailableClaimDate[msg.sender]);

        (bool sent,) = address(msg.sender).call{value : reward}("");
        require(sent, 'Error: Cannot withdraw reward');
    }

    function topUpClaimCycleAfterTransfer(address recipient, uint256 amount) private {
        uint256 currentRecipientBalance = balanceOf(recipient);
        uint256 basedRewardCycleBlock = getRewardCycleBlock();

        nextAvailableClaimDate[recipient] = nextAvailableClaimDate[recipient] + Utils.calculateTopUpClaim(
            currentRecipientBalance,
            basedRewardCycleBlock,
            threshHoldTopUpRate,
            amount
        );
    }

    function ensureMaxTxAmount(
        address from,
        address to,
        uint256 amount,
        uint256 value
    ) private view {
        if (
            _isExcludedFromMaxTx[from] == false && // default will be false
            _isExcludedFromMaxTx[to] == false // default will be false
        ) {
            if (value < disruptiveCoverageFee && block.timestamp >= disruptiveTransferEnabledFrom) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }
    }

    function disruptiveTransfer(address recipient, uint256 amount) public payable returns (bool) {
        _transfer(_msgSender(), recipient, amount, msg.value);
        return true;
    }

    function swapAndLiquify(address from, address to) private {
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is pancake pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool shouldSell = contractTokenBalance >= minTokenNumberToSell;

        if (
            !inSwapAndLiquify &&
        shouldSell &&
        from != nutPair &&
        swapAndLiquifyEnabled &&
        !(from == address(this) && to == address(nutPair)) // swap 1 time
        ) {
            // only sell for minTokenNumberToSell, decouple from _maxTxAmount
            contractTokenBalance = minTokenNumberToSell;

            // add liquidity
            // split the contract balance into 3 pieces
            uint256 pooledBNB = contractTokenBalance.div(2);
            uint256 piece = contractTokenBalance.sub(pooledBNB).div(2);
            uint256 otherPiece = contractTokenBalance.sub(piece);

            uint256 tokenAmountToBeSwapped = pooledBNB.add(piece);

            uint256 initialBalance = address(this).balance;

            // now is to lock into staking pool
            Utils.swapTokensForEth(address(nutRouter), tokenAmountToBeSwapped);

            // how much BNB did we just swap into?

            // capture the contract's current BNB balance.
            // this is so that we can capture exactly the amount of BNB that the
            // swap creates, and not make the liquidity event include any BNB that
            // has been manually sent to the contract
            uint256 deltaBalance = address(this).balance.sub(initialBalance);

            uint256 bnbToBeAddedToLiquidity = deltaBalance.div(3);

            // add liquidity to pancake
            Utils.addLiquidity(address(nutRouter), owner(), otherPiece, bnbToBeAddedToLiquidity);

            emit SwapAndLiquify(piece, deltaBalance, otherPiece);
        }
    }

    function activateContract() public onlyOwner {
        // reward claim
        disableEasyRewardFrom = block.timestamp + 1 weeks;
        rewardCycleBlock = 7 days;
        easyRewardCycleBlock = 1 days;

        winningDoubleRewardPercentage = 5;

        // protocol
        disruptiveCoverageFee = 2 ether;
        disruptiveTransferEnabledFrom = block.timestamp;
        setMaxTxPercent(1);
        setSwapAndLiquifyEnabled(true);

        // approve contract
        _approve(address(this), address(nutRouter), 2 ** 256 - 1);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"routerAddress","type":"address"},{"internalType":"address","name":"_charityAddress","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":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"ClaimBNBSuccessfully","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateBNBReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBNBReward","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEasyRewardFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disruptiveCoverageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"disruptiveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disruptiveTransferEnabledFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"easyRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextAvailableClaimDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nutPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nutRouter","outputs":[{"internalType":"contract InutRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setChairtyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshHoldTopUpRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winningDoubleRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6d314dc6448d9338c15b0a00000000600b556d20d190a98096d294893fffffffff19600c55610100604052600a60c08190526923b4bb32902a37b5b2b760b11b60e09081526200005391600e919062000650565b50604080518082019091526004808252634749564560e01b60209092019182526200008191600f9162000650565b5060108054601260ff19918216811760ff60a81b191690925562093a806011556201518090915560026013819055600b546014819055671bc16d674ec8000060155560178054909316909255600060188190556019556005601a556001601b819055601c819055601d829055601e919091556007601f8190556020908155670de0b6b3a76400006021556200014392600a926200012f92612710928492909162000565811b62001b5917901c565b620005b760201b62001b9a1790919060201c565b6022553480156200015357600080fd5b5060405162003d0238038062003d02833981016040819052620001769162000711565b60006200018b6001600160e01b036200060116565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600355600c5460046000620001f46001600160e01b036200060116565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002929190620006f2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003169190620006f2565b6040518363ffffffff1660e01b8152600401620003359291906200074f565b602060405180830381600087803b1580156200035057600080fd5b505af115801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b9190620006f2565b606090811b6001600160601b031990811660a0529082901b1660805260108054610100600160a81b0319166101006001600160a01b03851602179055600160076000620003d762000606565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600790935281832080548516600190811790915560105461010090049091168352908220805490931681179092556009906200044c6001600160e01b036200060616565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260099093528183208054851660019081179091557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548616821790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b805486168217905560105461010090049091168352912080549092161790556200050d6001600160e01b036200060116565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000554919062000800565b60405180910390a350505062000822565b6000826200057657506000620005b1565b828202828482816200058457fe5b0414620005ae5760405162461bcd60e51b8152600401620005a590620007bf565b60405180910390fd5b90505b92915050565b6000620005ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200061560201b60201c565b335b90565b6000546001600160a01b031690565b60008183620006395760405162461bcd60e51b8152600401620005a5919062000769565b5060008385816200064657fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200069357805160ff1916838001178555620006c3565b82800160010185558215620006c3579182015b82811115620006c3578251825591602001919060010190620006a6565b50620006d1929150620006d5565b5090565b6200060391905b80821115620006d15760008155600101620006dc565b60006020828403121562000704578081fd5b8151620005ae8162000809565b6000806040838503121562000724578081fd5b8251620007318162000809565b6020840151909250620007448162000809565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620007975785810183015185820160400152820162000779565b81811115620007a95783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b90815260200190565b6001600160a01b03811681146200081f57600080fd5b50565b60805160601c60a05160601c6134936200086f60003980610b12528061187e5280611f8c5280611feb525080610f9b528061135352806116ad52806120b3528061215552506134936000f3fe6080604052600436106103545760003560e01c80636a40701c116101c65780639bb4dc60116100f7578063c49b9a8011610095578063dd62ed3e1161006f578063dd62ed3e146108e1578063ea2f0b3714610901578063f2fde38b14610921578063fda48a73146109415761035b565b8063c49b9a8014610881578063d543dbeb146108a1578063dd467064146108c15761035b565b8063a9059cbb116100d1578063a9059cbb14610817578063b4524b9914610837578063b47fd5631461084c578063b6c523241461086c5761035b565b80639bb4dc60146107cd578063a457c2d7146107e2578063a69df4b5146108025761035b565b806388f82020116101645780638fda356d1161013e5780638fda356d146107795780638feed79a1461078e57806395ba68d7146107a357806395d89b41146107b85761035b565b806388f82020146107245780638da5cb5b146107445780638ee88c53146107595761035b565b806370a08231116101a057806370a08231146106c5578063715018a6146106e55780637217f4bc146106fa5780637d1db4a51461070f5761035b565b80636a40701c146106865780636bc87c3a1461069b5780636d33a468146106b05761035b565b80633b124fe7116102a05780634a74bb021161023e578063583b8d7f11610218578063583b8d7f1461061c5780635b89029c1461063c5780635e4196ab1461065c5780635ea4d29c146106715761035b565b80634a74bb02146105c757806352390c02146105dc5780635342acb4146105fc5761035b565b80633e49a9411161027a5780633e49a9411461055057806340f8007a14610572578063437823ec146105875780634549b039146105a75761035b565b80633b124fe7146105085780633bd5d1731461051d5780633d87ea751461053d5761035b565b80632060995e1161030d578063313ce567116102e7578063313ce567146104915780633685d419146104b357806337ad7cf5146104d357806339509351146104e85761035b565b80632060995e1461043157806323b872dd146104515780632d838119146104715761035b565b8063061c82d01461036057806306fdde0314610382578063095ea7b3146103ad5780630c9be46d146103da57806313114a9d146103fa57806318160ddd1461041c5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b366004612cd6565b610956565b005b34801561038e57600080fd5b506103976109a6565b6040516103a49190612dd0565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612c90565b610a3d565b6040516103a49190612dc5565b3480156103e657600080fd5b506103806103f5366004612bc6565b610a5b565b34801561040657600080fd5b5061040f610afb565b6040516103a49190613351565b34801561042857600080fd5b5061040f610b01565b34801561043d57600080fd5b5061040f61044c366004612bc6565b610b07565b34801561045d57600080fd5b506103cd61046c366004612c15565b610c14565b34801561047d57600080fd5b5061040f61048c366004612cd6565b610ca3565b34801561049d57600080fd5b506104a6610ce3565b6040516103a491906133bc565b3480156104bf57600080fd5b506103806104ce366004612bc6565b610cec565b3480156104df57600080fd5b5061040f610e55565b3480156104f457600080fd5b506103cd610503366004612c90565b610e5b565b34801561051457600080fd5b5061040f610eaf565b34801561052957600080fd5b50610380610538366004612cd6565b610eb5565b6103cd61054b366004612c90565b610f84565b34801561055c57600080fd5b50610565610f99565b6040516103a49190612d2a565b34801561057e57600080fd5b5061040f610fbd565b34801561059357600080fd5b506103806105a2366004612bc6565b610fc3565b3480156105b357600080fd5b5061040f6105c2366004612d06565b61101c565b3480156105d357600080fd5b506103cd61107b565b3480156105e857600080fd5b506103806105f7366004612bc6565b611084565b34801561060857600080fd5b506103cd610617366004612bc6565b6111b2565b34801561062857600080fd5b50610380610637366004612cd6565b6111d0565b34801561064857600080fd5b50610380610657366004612c55565b611217565b34801561066857600080fd5b5061040f611277565b34801561067d57600080fd5b5061040f61127d565b34801561069257600080fd5b50610380611283565b3480156106a757600080fd5b5061040f6114da565b3480156106bc57600080fd5b5061040f6114e0565b3480156106d157600080fd5b5061040f6106e0366004612bc6565b6114e6565b3480156106f157600080fd5b50610380611548565b34801561070657600080fd5b5061040f6115b5565b34801561071b57600080fd5b5061040f6115bb565b34801561073057600080fd5b506103cd61073f366004612bc6565b6115c1565b34801561075057600080fd5b506105656115df565b34801561076557600080fd5b50610380610774366004612cd6565b6115ee565b34801561078557600080fd5b50610380611635565b34801561079a57600080fd5b5061040f6116d6565b3480156107af57600080fd5b5061040f6116dc565b3480156107c457600080fd5b506103976116e2565b3480156107d957600080fd5b5061040f611743565b3480156107ee57600080fd5b506103cd6107fd366004612c90565b61175e565b34801561080e57600080fd5b506103806117cc565b34801561082357600080fd5b506103cd610832366004612c90565b611866565b34801561084357600080fd5b5061056561187c565b34801561085857600080fd5b5061040f610867366004612bc6565b6118a0565b34801561087857600080fd5b5061040f6118b2565b34801561088d57600080fd5b5061038061089c366004612cba565b6118b8565b3480156108ad57600080fd5b506103806108bc366004612cd6565b611936565b3480156108cd57600080fd5b506103806108dc366004612cd6565b6119b3565b3480156108ed57600080fd5b5061040f6108fc366004612be1565b611a2e565b34801561090d57600080fd5b5061038061091c366004612bc6565b611a59565b34801561092d57600080fd5b5061038061093c366004612bc6565b611aaf565b34801561094d57600080fd5b5061040f611b53565b61095e611bdc565b6000546001600160a01b039081169116146109945760405162461bcd60e51b815260040161098b9061311a565b60405180910390fd5b602181106109a157600080fd5b601b55565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b505050505090505b90565b6000610a51610a4a611bdc565b8484611be0565b5060015b92915050565b610a63611bdc565b6000546001600160a01b03908116911614610a905760405162461bcd60e51b815260040161098b9061311a565b60108054610100600160a81b0319166101006001600160a01b0393841681029190911780835581900483166000908152600760209081526040808320805460ff1990811660019081179092559554949094049095168252600990529290922080549091169091179055565b600d5490565b600b5490565b600080610b6c610b367f00000000000000000000000000000000000000000000000000000000000000006114e6565b610b60610b4461dead6114e6565b610b60610b5160006114e6565b600b549063ffffffff611c9416565b9063ffffffff611c9416565b905073cca52f537443d8909a1c16c529ae7cde777e96ce63163296bc600b54610b94866114e6565b47601a5486896040518763ffffffff1660e01b8152600401610bbb9695949392919061338b565b60206040518083038186803b158015610bd357600080fd5b505af4158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190612cee565b9150505b919050565b6000610c238484846000611cd6565b610c9984610c2f611bdc565b610c94856040518060600160405280602881526020016133f1602891396001600160a01b038a16600090815260066020526040812090610c6d611bdc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611db616565b611be0565b5060019392505050565b6000600c54821115610cc75760405162461bcd60e51b815260040161098b90612f31565b6000610cd1611de2565b9050610c0b838263ffffffff611b9a16565b60105460ff1690565b610cf4611bdc565b6000546001600160a01b03908116911614610d215760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b03811660009081526008602052604090205460ff16610d595760405162461bcd60e51b815260040161098b90612ff8565b60005b600a54811015610e5157816001600160a01b0316600a8281548110610d7d57fe5b6000918252602090912001546001600160a01b03161415610e4957600a80546000198101908110610daa57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610dd057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600a805480610e2257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610e51565b600101610d5c565b5050565b60125481565b6000610a51610e68611bdc565b84610c948560066000610e79611bdc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611e0b16565b601b5481565b6000610ebf611bdc565b6001600160a01b03811660009081526008602052604090205490915060ff1615610efb5760405162461bcd60e51b815260040161098b90613280565b6000610f0683611e30565b5050506001600160a01b038616600090815260046020526040902054939450610f3a9392508491505063ffffffff611c9416565b6001600160a01b038316600090815260046020526040902055600c54610f66908263ffffffff611c9416565b600c55600d54610f7c908463ffffffff611e0b16565b600d55505050565b6000610a51610f91611bdc565b848434611cd6565b7f000000000000000000000000000000000000000000000000000000000000000081565b601d5481565b610fcb611bdc565b6000546001600160a01b03908116911614610ff85760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600b548311156110405760405162461bcd60e51b815260040161098b9061302f565b8161106057600061105084611e30565b50949650610a5595505050505050565b600061106b84611e30565b50939650610a5595505050505050565b60175460ff1681565b61108c611bdc565b6000546001600160a01b039081169116146110b95760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b03811660009081526008602052604090205460ff16156110f25760405162461bcd60e51b815260040161098b90612ff8565b6001600160a01b0381166000908152600460205260409020541561114c576001600160a01b03811660009081526004602052604090205461113290610ca3565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526007602052604090205460ff1690565b6111d8611bdc565b6000546001600160a01b039081169116146112055760405162461bcd60e51b815260040161098b9061311a565b6021811061121257600080fd5b601d55565b61121f611bdc565b6000546001600160a01b0390811691161461124c5760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60185481565b60215481565b3233146112a25760405162461bcd60e51b815260040161098b906130ae565b600260035414156112c55760405162461bcd60e51b815260040161098b90613249565b6002600355336000908152601660205260409020544210156112f95760405162461bcd60e51b815260040161098b90612e23565b6000611304336114e6565b116113215760405162461bcd60e51b815260040161098b90612e64565b600061132c33610b07565b905060215481106113fb5773cca52f537443d8909a1c16c529ae7cde777e96ce63c549d3ae7f000000000000000000000000000000000000000000000000000000000000000061dead61138685600563ffffffff611b9a16565b6040518463ffffffff1660e01b81526004016113a493929190612d5f565b60006040518083038186803b1580156113bc57600080fd5b505af41580156113d0573d6000803e3d6000fd5b505050506113f86113eb600583611b9a90919063ffffffff16565b829063ffffffff611c9416565b90505b611403611743565b3360008181526016602052604090819020429390930192839055517f76a3a606d310d32750e15a3d246d186b789084096189d51661559b0f97f3bec99261144d9291859190612d3e565b60405180910390a16000336001600160a01b03168260405161146e90610a3a565b60006040518083038185875af1925050503d80600081146114ab576040519150601f19603f3d011682016040523d82523d6000602084013e6114b0565b606091505b50509050806114d15760405162461bcd60e51b815260040161098b906131db565b50506001600355565b601f5481565b60155481565b6001600160a01b03811660009081526008602052604081205460ff161561152657506001600160a01b038116600090815260056020526040902054610c0f565b6001600160a01b038216600090815260046020526040902054610a5590610ca3565b611550611bdc565b6000546001600160a01b0390811691161461157d5760405162461bcd60e51b815260040161098b9061311a565b600080546040516001600160a01b0390911690600080516020613419833981519152908390a3600080546001600160a01b0319169055565b60115481565b60145481565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031690565b6115f6611bdc565b6000546001600160a01b039081169116146116235760405162461bcd60e51b815260040161098b9061311a565b6021811061163057600080fd5b601f55565b61163d611bdc565b6000546001600160a01b0390811691161461166a5760405162461bcd60e51b815260040161098b9061311a565b4262093a80818101601955601155620151806012556005601a55671bc16d674ec8000060155560185561169d6001611936565b6116a760016118b8565b6116d4307f0000000000000000000000000000000000000000000000000000000000000000600019611be0565b565b601a5481565b60195481565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a325780601f10610a0757610100808354040283529160200191610a32565b600060195442106117575750601154610a3a565b5060125490565b6000610a5161176b611bdc565b84610c94856040518060600160405280602581526020016134396025913960066000611795611bdc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611db616565b6001546001600160a01b031633146117f65760405162461bcd60e51b815260040161098b9061330e565b60025442116118175760405162461bcd60e51b815260040161098b90613212565b600154600080546040516001600160a01b03938416939091169160008051602061341983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a51611873611bdc565b84846000611cd6565b7f000000000000000000000000000000000000000000000000000000000000000081565b60166020526000908152604090205481565b60025490565b6118c0611bdc565b6000546001600160a01b039081169116146118ed5760405162461bcd60e51b815260040161098b9061311a565b6017805460ff19168215151790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061192b908390612dc5565b60405180910390a150565b61193e611bdc565b6000546001600160a01b0390811691161461196b5760405162461bcd60e51b815260040161098b9061311a565b60008111801561197d57506127108111155b61198657600080fd5b6119ad6127106119a183600b54611b5990919063ffffffff16565b9063ffffffff611b9a16565b60145550565b6119bb611bdc565b6000546001600160a01b039081169116146119e85760405162461bcd60e51b815260040161098b9061311a565b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613419833981519152908290a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611a61611bdc565b6000546001600160a01b03908116911614611a8e5760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b03166000908152600760205260409020805460ff19169055565b611ab7611bdc565b6000546001600160a01b03908116911614611ae45760405162461bcd60e51b815260040161098b9061311a565b6001600160a01b038116611b0a5760405162461bcd60e51b815260040161098b90612f7b565b600080546040516001600160a01b038085169392169160008051602061341983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60135481565b600082611b6857506000610a55565b82820282848281611b7557fe5b0414611b935760405162461bcd60e51b815260040161098b906130d9565b9392505050565b6000611b9383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e8b565b3390565b6001600160a01b038316611c065760405162461bcd60e51b815260040161098b90612eed565b6001600160a01b038216611c2c5760405162461bcd60e51b815260040161098b906132cc565b6001600160a01b0380841660008181526006602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611c87908590613351565b60405180910390a3505050565b6000611b9383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611db6565b6001600160a01b038416611cfc5760405162461bcd60e51b815260040161098b90612ea8565b6001600160a01b038316611d225760405162461bcd60e51b815260040161098b90613198565b60008211611d425760405162461bcd60e51b815260040161098b9061314f565b611d4e84848484611ec2565b611d588484611f49565b6001600160a01b03841660009081526007602052604090205460019060ff1680611d9a57506001600160a01b03841660009081526007602052604090205460ff165b15611da3575060005b611daf85858584612215565b5050505050565b60008184841115611dda5760405162461bcd60e51b815260040161098b9190612dd0565b505050900390565b6000806000611def61233b565b9092509050611e04828263ffffffff611b9a16565b9250505090565b600082820183811015611b935760405162461bcd60e51b815260040161098b90612fc1565b6000806000806000806000806000806000611e4a8c6124b0565b93509350935093506000806000611e6b8f878787611e66611de2565b612505565b919f509d509b509599509397509195509350505050919395979092949650565b60008183611eac5760405162461bcd60e51b815260040161098b9190612dd0565b506000838581611eb857fe5b0495945050505050565b6001600160a01b03841660009081526009602052604090205460ff16158015611f0457506001600160a01b03831660009081526009602052604090205460ff16155b15611f435760155481108015611f1c57506018544210155b15611f4357601454821115611f435760405162461bcd60e51b815260040161098b90613066565b50505050565b6000611f54306114e6565b90506014548110611f6457506014545b6022546010549082101590600160a81b900460ff16158015611f835750805b8015611fc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b8015611fcf575060175460ff165b801561202157506001600160a01b0384163014801561201f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b155b15611f43576022549150600061203e83600263ffffffff611b9a16565b9050600061205760026119a1868563ffffffff611c9416565b9050600061206b858363ffffffff611c9416565b9050600061207f848463ffffffff611e0b16565b6040516356feb11b60e01b8152909150479073cca52f537443d8909a1c16c529ae7cde777e96ce906356feb11b906120dd907f0000000000000000000000000000000000000000000000000000000000000000908690600401612dac565b60006040518083038186803b1580156120f557600080fd5b505af4158015612109573d6000803e3d6000fd5b5050505060006121228247611c9490919063ffffffff16565b9050600061213782600363ffffffff611b9a16565b905073cca52f537443d8909a1c16c529ae7cde777e96ce63cf6c62ea7f000000000000000000000000000000000000000000000000000000000000000061217c6115df565b88856040518563ffffffff1660e01b815260040161219d9493929190612d83565b60006040518083038186803b1580156121b557600080fd5b505af41580156121c9573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618683876040516122009392919061335a565b60405180910390a15050505050505050505050565b8061222257612222612585565b61222c83836125cd565b6001600160a01b03841660009081526008602052604090205460ff16801561226d57506001600160a01b03831660009081526008602052604090205460ff16155b156122825761227d84848461269c565b61232e565b6001600160a01b03841660009081526008602052604090205460ff161580156122c357506001600160a01b03831660009081526008602052604090205460ff165b156122d35761227d8484846127ec565b6001600160a01b03841660009081526008602052604090205460ff16801561231357506001600160a01b03831660009081526008602052604090205460ff165b156123235761227d8484846128b7565b61232e848484612946565b80611f4357611f436129a0565b600c54600b546000918291825b600a54811015612478578260046000600a848154811061236457fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123c957508160056000600a84815481106123a257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123e057600c54600b54945094505050506124ac565b61242660046000600a84815481106123f457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849063ffffffff611c9416565b925061246e60056000600a848154811061243c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611c9416565b9150600101612348565b50600b54600c5461248e9163ffffffff611b9a16565b8210156124a657600c54600b549350935050506124ac565b90925090505b9091565b60008060008060006124c1866129b4565b905060006124ce876129d0565b905060006124db886129ec565b905060006124f582610b6085818d8963ffffffff611c9416565b9993985091965094509092505050565b600080808061251a898663ffffffff611b5916565b9050600061252e898763ffffffff611b5916565b90506000612542898863ffffffff611b5916565b90506000612556898963ffffffff611b5916565b9050600061257082610b608581898963ffffffff611c9416565b949d949c50929a509298505050505050505050565b601b541580156125955750601f54155b80156125a15750601d54155b156125ab576116d4565b601b8054601c55601f8054602055601d8054601e556000928390559082905555565b60006125d8836114e6565b905060006125e4611743565b601354604051638958b5a960e01b815291925073cca52f537443d8909a1c16c529ae7cde777e96ce91638958b5a99161262591869186918990600401613370565b60206040518083038186803b15801561263d57600080fd5b505af4158015612651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126759190612cee565b6001600160a01b039094166000908152601660205260409020805494909401909355505050565b60008060008060008060006126b088611e30565b96509650965096509650965096506126f688600560008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c9490919063ffffffff16565b6001600160a01b038b1660009081526005602090815260408083209390935560049052205461272b908863ffffffff611c9416565b6001600160a01b03808c1660009081526004602052604080822093909355908b1681522054612760908763ffffffff611e0b16565b6001600160a01b038a1660009081526004602052604090205561278281612a08565b61278b82612ae5565b6127958584612b7f565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516127d89190613351565b60405180910390a350505050505050505050565b600080600080600080600061280088611e30565b965096509650965096509650965061284687600460008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c9490919063ffffffff16565b6001600160a01b03808c16600090815260046020908152604080832094909455918c16815260059091522054612882908563ffffffff611e0b16565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612760908763ffffffff611e0b16565b60008060008060008060006128cb88611e30565b965096509650965096509650965061291188600560008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c9490919063ffffffff16565b6001600160a01b038b16600090815260056020908152604080832093909355600490522054612846908863ffffffff611c9416565b600080600080600080600061295a88611e30565b965096509650965096509650965061272b87600460008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611c9490919063ffffffff16565b601c54601b55602054601f55601e54601d55565b6000610a5560646119a1601b5485611b5990919063ffffffff16565b6000610a5560646119a1601f5485611b5990919063ffffffff16565b6000610a5560646119a1601d5485611b5990919063ffffffff16565b6000612a12611de2565b90506000612a26838363ffffffff611b5916565b60105461010090046001600160a01b0316600090815260046020526040902054909150612a539082611e0b565b601080546001600160a01b036101009182900481166000908152600460209081526040808320969096559354929092041681526008909152205460ff1615612ae05760105461010090046001600160a01b0316600090815260056020526040902054612abf9084611e0b565b60105461010090046001600160a01b03166000908152600560205260409020555b505050565b6000612aef611de2565b90506000612b03838363ffffffff611b5916565b30600090815260046020526040902054909150612b26908263ffffffff611e0b16565b3060009081526004602090815260408083209390935560089052205460ff1615612ae05730600090815260056020526040902054612b6a908463ffffffff611e0b16565b30600090815260056020526040902055505050565b600c54612b92908363ffffffff611c9416565b600c55600d54612ba8908263ffffffff611e0b16565b600d555050565b80356001600160a01b0381168114610a5557600080fd5b600060208284031215612bd7578081fd5b611b938383612baf565b60008060408385031215612bf3578081fd5b612bfd8484612baf565b9150612c0c8460208501612baf565b90509250929050565b600080600060608486031215612c29578081fd5b8335612c34816133ca565b92506020840135612c44816133ca565b929592945050506040919091013590565b60008060408385031215612c67578182fd5b612c718484612baf565b915060208301358015158114612c85578182fd5b809150509250929050565b60008060408385031215612ca2578182fd5b612cac8484612baf565b946020939093013593505050565b600060208284031215612ccb578081fd5b8135611b93816133e2565b600060208284031215612ce7578081fd5b5035919050565b600060208284031215612cff578081fd5b5051919050565b60008060408385031215612d18578182fd5b823591506020830135612c85816133e2565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015612dfc57858101830151858201604001528201612de0565b81811115612e0d5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f4572726f723a206e65787420617661696c61626c65206e6f74207265616368656040820152601960fa1b606082015260800190565b60208082526024908201527f4572726f723a206d757374206f776e204749564520746f20636c61696d2072656040820152631dd85c9960e21b606082015260800190565b60208082526025908201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b602080825260119082015270736f7272792068756d616e73206f6e6c7960781b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526023908201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601d908201527f4572726f723a2043616e6e6f7420776974686472617720726577617264000000604082015260600190565b6020808252601f908201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526022908201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526023908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6040820152626f636b60e81b606082015260800190565b90815260200190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b95865260208601949094526040850192909252606084015260808301526001600160a01b031660a082015260c00190565b60ff91909116815260200190565b6001600160a01b03811681146133df57600080fd5b50565b80151581146133df57600080fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7bdd79715fb60e45618658e8959e93307588a7a71c46e3cec31141a1e4a21f764736f6c634300060b003300000000000000000000000062de7269d2c99802b732858f9ba6e95cff2c85e400000000000000000000000000d99653c3e857c2f0f04a4a1a046cab46a824d3

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

00000000000000000000000062de7269d2c99802b732858f9ba6e95cff2c85e400000000000000000000000000d99653c3e857c2f0f04a4a1a046cab46a824d3

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x62de7269d2c99802b732858f9ba6e95cff2c85e4
Arg [1] : _charityAddress (address): 0x00d99653c3e857c2f0f04a4a1a046cab46a824d3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000062de7269d2c99802b732858f9ba6e95cff2c85e4
Arg [1] : 00000000000000000000000000d99653c3e857c2f0f04a4a1a046cab46a824d3


Deployed ByteCode Sourcemap

33092:23979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40637:129;;;;;;;;;;-1:-1:-1;40637:129:0;;;;;:::i;:::-;;:::i;:::-;;35650:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36565:161;;;;;;;;;;-1:-1:-1;36565:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41098:230::-;;;;;;;;;;-1:-1:-1;41098:230:0;;;;;:::i;:::-;;:::i;37689:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35927:95::-;;;;;;;;;;;;;:::i;51267:588::-;;;;;;;;;;-1:-1:-1;51267:588:0;;;;;:::i;:::-;;:::i;36734:316::-;;;;;;;;;;-1:-1:-1;36734:316:0;;;;;:::i;:::-;;:::i;38617:253::-;;;;;;;;;;-1:-1:-1;38617:253:0;;;;;:::i;:::-;;:::i;35836:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39220:479::-;;;;;;;;;;-1:-1:-1;39220:479:0;;;;;:::i;:::-;;:::i;49814:44::-;;;;;;;;;;;;;:::i;37058:218::-;;;;;;;;;;-1:-1:-1;37058:218:0;;;;;:::i;:::-;;:::i;50368:26::-;;;;;;;;;;;;;:::i;37784:378::-;;;;;;;;;;-1:-1:-1;37784:378:0;;;;;:::i;:::-;;:::i;54084:187::-;;;;;;:::i;:::-;;:::i;33934:39::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50451:30::-;;;;;;;;;;;;;:::i;40400:111::-;;;;;;;;;;-1:-1:-1;40400:111:0;;;;;:::i;:::-;;:::i;38170:439::-;;;;;;;;;;-1:-1:-1;38170:439:0;;;;;:::i;:::-;;:::i;50143:41::-;;;;;;;;;;;;;:::i;38878:334::-;;;;;;;;;;-1:-1:-1;38878:334:0;;;;;:::i;:::-;;:::i;45662:124::-;;;;;;;;;;-1:-1:-1;45662:124:0;;;;;:::i;:::-;;:::i;40941:149::-;;;;;;;;;;-1:-1:-1;40941:149:0;;;;;:::i;:::-;;:::i;51126:133::-;;;;;;;;;;-1:-1:-1;51126:133:0;;;;;:::i;:::-;;:::i;50209:48::-;;;;;;;;;;;;;:::i;50739:40::-;;;;;;;;;;;;;:::i;52058:988::-;;;;;;;;;;;;;:::i;50583:32::-;;;;;;;;;;;;;:::i;50013:46::-;;;;;;;;;;;;;:::i;36030:198::-;;;;;;;;;;-1:-1:-1;36030:198:0;;;;;:::i;:::-;;:::i;16483:148::-;;;;;;;;;;;;;:::i;49767:40::-;;;;;;;;;;;;;:::i;49923:37::-;;;;;;;;;;;;;:::i;37561:120::-;;;;;;;;;;-1:-1:-1;37561:120:0;;;;;:::i;:::-;;:::i;15847:79::-;;;;;;;;;;;;;:::i;40774:159::-;;;;;;;;;;-1:-1:-1;40774:159:0;;;;;:::i;:::-;;:::i;56516:552::-;;;;;;;;;;;;;:::i;50311:48::-;;;;;;;;;;;;;:::i;50264:40::-;;;;;;;;;;;;;:::i;35741:87::-;;;;;;;;;;;;;:::i;51863:187::-;;;;;;;;;;;;;:::i;37284:269::-;;;;;;;;;;-1:-1:-1;37284:269:0;;;;;:::i;:::-;;:::i;17489:293::-;;;;;;;;;;;;;:::i;36236:170::-;;;;;;;;;;-1:-1:-1;36236:170:0;;;;;:::i;:::-;;:::i;33980:32::-;;;;;;;;;;;;;:::i;50079:57::-;;;;;;;;;;-1:-1:-1;50079:57:0;;;;;:::i;:::-;;:::i;17038:89::-;;;;;;;;;;;;;:::i;41336:171::-;;;;;;;;;;-1:-1:-1;41336:171:0;;;;;:::i;:::-;;:::i;50921:197::-;;;;;;;;;;-1:-1:-1;50921:197:0;;;;;:::i;:::-;;:::i;17203:214::-;;;;;;;;;;-1:-1:-1;17203:214:0;;;;;:::i;:::-;;:::i;36414:143::-;;;;;;;;;;-1:-1:-1;36414:143:0;;;;;:::i;:::-;;:::i;40519:110::-;;;;;;;;;;-1:-1:-1;40519:110:0;;;;;:::i;:::-;;:::i;16786:244::-;;;;;;;;;;-1:-1:-1;16786:244:0;;;;;:::i;:::-;;:::i;49865:38::-;;;;;;;;;;;;;:::i;40637:129::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;;;;;;;;;40728:2:::1;40719:6;:11;40711:20;;;::::0;::::1;;40742:7;:16:::0;40637:129::o;35650:83::-;35720:5;35713:12;;;;;;;;-1:-1:-1;;35713:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35687:13;;35713:12;;35720:5;;35713:12;;35720:5;35713:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35650:83;;:::o;36565:161::-;36640:4;36657:39;36666:12;:10;:12::i;:::-;36680:7;36689:6;36657:8;:39::i;:::-;-1:-1:-1;36714:4:0;36565:161;;;;;:::o;41098:230::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;41182:14:::1;:32:::0;;-1:-1:-1;;;;;;41182:32:0::1;;-1:-1:-1::0;;;;;41182:32:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41244:14;;::::1;::::0;::::1;-1:-1:-1::0;41225:34:0;;;:18:::1;:34;::::0;;;;;;;:41;;-1:-1:-1;;41225:41:0;;::::1;-1:-1:-1::0;41225:41:0;;::::1;::::0;;;41298:14;;;;;::::1;::::0;;::::1;41277:36:::0;;:20:::1;:36:::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;41098:230::o;37689:87::-;37758:10;;37689:87;:::o;35927:95::-;36007:7;;35927:95;:::o;51267:588::-;51335:7;51355:15;51373:190;51535:27;51553:7;51535:9;:27::i;:::-;51373:122;51441:53;51451:42;51441:9;:53::i;:::-;51373;51404:21;51422:1;51404:9;:21::i;:::-;51381:7;;;51373:53;:30;:53;:::i;:::-;:67;:122;:67;:122;:::i;:190::-;51355:208;;51620:5;:24;51659:7;;51681:29;51699:9;51681;:29::i;:::-;51725:21;51761:29;;51805:7;51827:9;51620:227;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51613:234;;;51267:588;;;;:::o;36734:316::-;36832:4;36849:39;36859:6;36867:9;36878:6;36886:1;36849:9;:39::i;:::-;36899:121;36908:6;36916:12;:10;:12::i;:::-;36930:89;36968:6;36930:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36930:19:0;;;;;;:11;:19;;;;;;36950:12;:10;:12::i;:::-;-1:-1:-1;;;;;36930:33:0;;;;;;;;;;;;-1:-1:-1;36930:33:0;;;:89;;:37;:89;:::i;:::-;36899:8;:121::i;:::-;-1:-1:-1;37038:4:0;36734:316;;;;;:::o;38617:253::-;38684:7;38723;;38712;:18;;38704:73;;;;-1:-1:-1;;;38704:73:0;;;;;;;:::i;:::-;38788:19;38810:10;:8;:10::i;:::-;38788:32;-1:-1:-1;38838:24:0;:7;38788:32;38838:24;:11;:24;:::i;35836:83::-;35902:9;;;;35836:83;:::o;39220:479::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39302:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;39294:60;;;;-1:-1:-1::0;;;39294:60:0::1;;;;;;;:::i;:::-;39370:9;39365:327;39389:9;:16:::0;39385:20;::::1;39365:327;;;39447:7;-1:-1:-1::0;;;;;39431:23:0::1;:9;39441:1;39431:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;39431:12:0::1;:23;39427:254;;;39490:9;39500:16:::0;;-1:-1:-1;;39500:20:0;;;39490:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;39475:9:::1;:12:::0;;-1:-1:-1;;;;;39490:31:0;;::::1;::::0;39485:1;;39475:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;39475:46:0::1;-1:-1:-1::0;;;;;39475:46:0;;::::1;;::::0;;39540:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;39579:11:::1;:20:::0;;;;:28;;-1:-1:-1;;39579:28:0::1;::::0;;39626:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;39626:15:0;;;;;-1:-1:-1;;;;;;39626:15:0::1;::::0;;;;;39660:5:::1;;39427:254;39407:3;;39365:327;;;;39220:479:::0;:::o;49814:44::-;;;;:::o;37058:218::-;37146:4;37163:83;37172:12;:10;:12::i;:::-;37186:7;37195:50;37234:10;37195:11;:25;37207:12;:10;:12::i;:::-;-1:-1:-1;;;;;37195:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37195:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;50368:26::-;;;;:::o;37784:378::-;37836:14;37853:12;:10;:12::i;:::-;-1:-1:-1;;;;;37885:19:0;;;;;;:11;:19;;;;;;37836:29;;-1:-1:-1;37885:19:0;;37884:20;37876:77;;;;-1:-1:-1;;;37876:77:0;;;;;;;:::i;:::-;37965:15;37990:19;38001:7;37990:10;:19::i;:::-;-1:-1:-1;;;;;;;;38038:15:0;;;;;;:7;:15;;;;;;37964:45;;-1:-1:-1;38038:28:0;;:15;-1:-1:-1;37964:45:0;;-1:-1:-1;;38038:28:0;:19;:28;:::i;:::-;-1:-1:-1;;;;;38020:15:0;;;;;;:7;:15;;;;;:46;38087:7;;:20;;38099:7;38087:20;:11;:20;:::i;:::-;38077:7;:30;38131:10;;:23;;38146:7;38131:23;:14;:23;:::i;:::-;38118:10;:36;-1:-1:-1;;;37784:378:0:o;54084:187::-;54171:4;54188:53;54198:12;:10;:12::i;:::-;54212:9;54223:6;54231:9;54188;:53::i;33934:39::-;;;:::o;50451:30::-;;;;:::o;40400:111::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40469:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;40469:34:0::1;40499:4;40469:34;::::0;;40400:111::o;38170:439::-;38261:7;38300;;38289;:18;;38281:62;;;;-1:-1:-1;;;38281:62:0;;;;;;;:::i;:::-;38359:17;38354:248;;38394:15;38419:19;38430:7;38419:10;:19::i;:::-;-1:-1:-1;38393:45:0;;-1:-1:-1;38453:14:0;;-1:-1:-1;;;;;;38453:14:0;38354:248;38502:23;38534:19;38545:7;38534:10;:19::i;:::-;-1:-1:-1;38500:53:0;;-1:-1:-1;38568:22:0;;-1:-1:-1;;;;;;38568:22:0;50143:41;;;;;;:::o;38878:334::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38961:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38960:21;38952:61;;;;-1:-1:-1::0;;;38952:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39028:16:0;::::1;39047:1;39028:16:::0;;;:7:::1;:16;::::0;;;;;:20;39024:109:::1;;-1:-1:-1::0;;;;;39104:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;39084:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;39065:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;39024:109:::1;-1:-1:-1::0;;;;;39143:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;39143:27:0::1;39166:4;39143:27:::0;;::::1;::::0;;;39181:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;39181:23:0::1;::::0;;::::1;::::0;;38878:334::o;45662:124::-;-1:-1:-1;;;;;45751:27:0;45727:4;45751:27;;;:18;:27;;;;;;;;;45662:124::o;40941:149::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;41044:2:::1;41031:10;:15;41023:24;;;::::0;::::1;;41058:11;:24:::0;40941:149::o;51126:133::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51213:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;51213:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51126:133::o;50209:48::-;;;;:::o;50739:40::-;;;;:::o;52058:988::-;32908:9;32921:10;32908:23;32900:53;;;;-1:-1:-1;;;32900:53:0;;;;;;;:::i;:::-;31916:1:::1;32520:7;;:19;;32512:63;;;;-1:-1:-1::0;;;32512:63:0::1;;;;;;;:::i;:::-;31916:1;32653:7;:18:::0;52154:10:::2;52131:34;::::0;;;:22:::2;:34;::::0;;;;;52169:15:::2;-1:-1:-1::0;52131:53:0::2;52123:99;;;;-1:-1:-1::0;;;52123:99:0::2;;;;;;;:::i;:::-;52265:1;52241:21;52251:10;52241:9;:21::i;:::-;:25;52233:74;;;;-1:-1:-1::0;;;52233:74:0::2;;;;;;;:::i;:::-;52320:14;52337:30;52356:10;52337:18;:30::i;:::-;52320:47;;52423:15;;52413:6;:25;52409:284;;52455:5;:22;52504:9;52541:42;52604:13;:6:::0;52615:1:::2;52604:13;:10;:13;:::i;:::-;52455:177;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;52656:25;52667:13;52678:1;52667:6;:10;;:13;;;;:::i;:::-;52656:6:::0;;:25:::2;:10;:25;:::i;:::-;52647:34;;52409:284;52796:21;:19;:21::i;:::-;52764:10;52741:34;::::0;;;:22:::2;:34;::::0;;;;;;52778:15:::2;:39:::0;;;::::2;52741:76:::0;;;;52833;::::2;::::0;::::2;::::0;52764:10;52866:6;;52778:39;52833:76:::2;:::i;:::-;;;;;;;;52923:9;52945:10;-1:-1:-1::0;;;;;52937:24:0::2;52970:6;52937:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52922:59;;;53000:4;52992:46;;;;-1:-1:-1::0;;;52992:46:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;31872:1:0::1;32832:7;:22:::0;52058:988::o;50583:32::-;;;;:::o;50013:46::-;;;;:::o;36030:198::-;-1:-1:-1;;;;;36120:20:0;;36096:7;36120:20;;;:11;:20;;;;;;;;36116:49;;;-1:-1:-1;;;;;;36149:16:0;;;;;;:7;:16;;;;;;36142:23;;36116:49;-1:-1:-1;;;;;36203:16:0;;;;;;:7;:16;;;;;;36183:37;;:19;:37::i;16483:148::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;16590:1:::1;16574:6:::0;;16553:40:::1;::::0;-1:-1:-1;;;;;16574:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16553:40:0;16590:1;;16553:40:::1;16621:1;16604:19:::0;;-1:-1:-1;;;;;;16604:19:0::1;::::0;;16483:148::o;49767:40::-;;;;:::o;49923:37::-;;;;:::o;37561:120::-;-1:-1:-1;;;;;37653:20:0;37629:4;37653:20;;;:11;:20;;;;;;;;;37561:120::o;15847:79::-;15885:7;15912:6;-1:-1:-1;;;;;15912:6:0;15847:79;:::o;40774:159::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;40883:2:::1;40868:12;:17;40860:26;;;::::0;::::1;;40897:13;:28:::0;40774:159::o;56516:552::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;56621:15:::1;56639:7;56621:25:::0;;::::1;56597:21;:49:::0;56657:16:::1;:25:::0;56716:6:::1;56693:20;:29:::0;56767:1:::1;56735:29;:33:::0;56826:7:::1;56802:21;:31:::0;56844:29:::1;:47:::0;56902:18:::1;-1:-1:-1::0;56902:15:0::1;:18::i;:::-;56931:30;56956:4;56931:24;:30::i;:::-;57003:57;57020:4;57035:9;-1:-1:-1::0;;57003:8:0::1;:57::i;:::-;56516:552::o:0;50311:48::-;;;;:::o;50264:40::-;;;;:::o;35741:87::-;35813:7;35806:14;;;;;;;;-1:-1:-1;;35806:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35780:13;;35806:14;;35813:7;;35806:14;;35813:7;35806:14;;;;;;;;;;;;;;;;;;;;;;;;51863:187;51915:7;51958:21;;51939:15;:40;51935:69;;-1:-1:-1;51988:16:0;;51981:23;;51935:69;-1:-1:-1;52022:20:0;;51863:187;:::o;37284:269::-;37377:4;37394:129;37403:12;:10;:12::i;:::-;37417:7;37426:96;37465:15;37426:96;;;;;;;;;;;;;;;;;:11;:25;37438:12;:10;:12::i;:::-;-1:-1:-1;;;;;37426:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;37426:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;17489:293::-;17541:14;;-1:-1:-1;;;;;17541:14:0;17559:10;17541:28;17533:76;;;;-1:-1:-1;;;17533:76:0;;;;;;;:::i;:::-;17634:9;;17628:3;:15;17620:60;;;;-1:-1:-1;;;17620:60:0;;;;;;;:::i;:::-;17725:14;;;17717:6;;17696:44;;-1:-1:-1;;;;;17725:14:0;;;;17717:6;;;;-1:-1:-1;;;;;;;;;;;17696:44:0;;17760:14;;;17751:23;;-1:-1:-1;;;;;;17751:23:0;-1:-1:-1;;;;;17760:14:0;;;17751:23;;;;;;17489:293::o;36236:170::-;36314:4;36331:45;36341:12;:10;:12::i;:::-;36355:9;36366:6;36374:1;36331:9;:45::i;33980:32::-;;;:::o;50079:57::-;;;;;;;;;;;;;:::o;17038:89::-;17110:9;;17038:89;:::o;41336:171::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;41413:21:::1;:32:::0;;-1:-1:-1;;41413:32:0::1;::::0;::::1;;;::::0;;41461:38:::1;::::0;::::1;::::0;::::1;::::0;41413:32;;41461:38:::1;:::i;:::-;;;;;;;;41336:171:::0;:::o;50921:197::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;51021:1:::1;51006:12;:16;:41;;;;;51042:5;51026:12;:21;;51006:41;50998:50;;;::::0;::::1;;51074:36;51104:5;51074:25;51086:12;51074:7;;:11;;:25;;;;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;51059:12;:51:::0;-1:-1:-1;50921:197:0:o;17203:214::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;17284:6:::1;::::0;;;17267:23;;-1:-1:-1;;;;;;17267:23:0;;::::1;-1:-1:-1::0;;;;;17284:6:0;::::1;17267:23;::::0;;;17301:19:::1;::::0;;17343:3:::1;:10:::0;::::1;17331:9;:22:::0;17369:40:::1;::::0;17284:6;;-1:-1:-1;;;;;;;;;;;17369:40:0;17284:6;;17369:40:::1;17203:214:::0;:::o;36414:143::-;-1:-1:-1;;;;;36522:18:0;;;36495:7;36522:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36414:143::o;40519:110::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40586:27:0::1;40616:5;40586:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;40586:35:0::1;::::0;;40519:110::o;16786:244::-;16069:12;:10;:12::i;:::-;16059:6;;-1:-1:-1;;;;;16059:6:0;;;:22;;;16051:67;;;;-1:-1:-1;;;16051:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16875:22:0;::::1;16867:73;;;;-1:-1:-1::0;;;16867:73:0::1;;;;;;;:::i;:::-;16977:6;::::0;;16956:38:::1;::::0;-1:-1:-1;;;;;16956:38:0;;::::1;::::0;16977:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16956:38:0;::::1;17005:6;:17:::0;;-1:-1:-1;;;;;;17005:17:0::1;-1:-1:-1::0;;;;;17005:17:0;;;::::1;::::0;;;::::1;::::0;;16786:244::o;49865:38::-;;;;:::o;5114:471::-;5172:7;5417:6;5413:47;;-1:-1:-1;5447:1:0;5440:8;;5413:47;5484:5;;;5488:1;5484;:5;:1;5508:5;;;;;:10;5500:56;;;;-1:-1:-1;;;5500:56:0;;;;;;;:::i;:::-;5576:1;5114:471;-1:-1:-1;;;5114:471:0:o;6061:132::-;6119:7;6146:39;6150:1;6153;6146:39;;;;;;;;;;;;;;;;;:3;:39::i;8253:106::-;8341:10;8253:106;:::o;45794:337::-;-1:-1:-1;;;;;45887:19:0;;45879:68;;;;-1:-1:-1;;;45879:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45966:21:0;;45958:68;;;;-1:-1:-1;;;45958:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46039:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;46091:32;;;;;46069:6;;46091:32;:::i;:::-;;;;;;;;45794:337;;;:::o;4224:136::-;4282:7;4309:43;4313:1;4316;4309:43;;;;;;;;;;;;;;;;;:3;:43::i;46139:892::-;-1:-1:-1;;;;;46285:18:0;;46277:68;;;;-1:-1:-1;;;46277:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46364:16:0;;46356:64;;;;-1:-1:-1;;;46356:64:0;;;;;;;:::i;:::-;46448:1;46439:6;:10;46431:64;;;;-1:-1:-1;;;46431:64:0;;;;;;;:::i;:::-;46508:42;46526:4;46532:2;46536:6;46544:5;46508:17;:42::i;:::-;46592:24;46607:4;46613:2;46592:14;:24::i;:::-;-1:-1:-1;;;;;46810:24:0;;46690:12;46810:24;;;:18;:24;;;;;;46705:4;;46810:24;;;:50;;-1:-1:-1;;;;;;46838:22:0;;;;;;:18;:22;;;;;;;;46810:50;46806:98;;;-1:-1:-1;46887:5:0;46806:98;46982:41;46997:4;47003:2;47007:6;47015:7;46982:14;:41::i;:::-;46139:892;;;;;:::o;4663:192::-;4749:7;4785:12;4777:6;;;;4769:29;;;;-1:-1:-1;;;4769:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4821:5:0;;;4663:192::o;43185:164::-;43227:7;43248:15;43265;43284:19;:17;:19::i;:::-;43247:56;;-1:-1:-1;43247:56:0;-1:-1:-1;43321:20:0;43247:56;;43321:20;:11;:20;:::i;:::-;43314:27;;;;43185:164;:::o;3760:181::-;3818:7;3850:5;;;3874:6;;;;3866:46;;;;-1:-1:-1;;;3866:46:0;;;;;;;:::i;41758:466::-;41817:7;41826;41835;41844;41853;41862;41871;41892:23;41917:12;41931:18;41951:16;41971:20;41983:7;41971:11;:20::i;:::-;41891:100;;;;;;;;42003:15;42020:23;42045:12;42061:60;42073:7;42082:4;42088:10;42100:8;42110:10;:8;:10::i;:::-;42061:11;:60::i;:::-;42002:119;;-1:-1:-1;42002:119:0;-1:-1:-1;42002:119:0;-1:-1:-1;42172:15:0;;-1:-1:-1;42189:4:0;;-1:-1:-1;42195:10:0;;-1:-1:-1;42207:8:0;-1:-1:-1;;;;41758:466:0;;;;;;;;;:::o;6689:278::-;6775:7;6810:12;6803:5;6795:28;;;;-1:-1:-1;;;6795:28:0;;;;;;;;:::i;:::-;;6834:9;6850:1;6846;:5;;;;;;;6689:278;-1:-1:-1;;;;;6689:278:0:o;53530:546::-;-1:-1:-1;;;;;53699:26:0;;;;;;:20;:26;;;;;;;;:35;;;:110;;-1:-1:-1;;;;;;53776:24:0;;;;;;:20;:24;;;;;;;;:33;53699:110;53681:388;;;53873:21;;53865:5;:29;:81;;;;;53917:29;;53898:15;:48;;53865:81;53861:197;;;53985:12;;53975:6;:22;;53967:75;;;;-1:-1:-1;;;53967:75:0;;;;;;;:::i;:::-;53530:546;;;;:::o;54279:2229::-;54630:28;54661:24;54679:4;54661:9;:24::i;:::-;54630:55;;54726:12;;54702:20;:36;54698:104;;-1:-1:-1;54778:12:0;;54698:104;54856:20;;54908:16;;54832:44;;;;;-1:-1:-1;;;54908:16:0;;;;54907:17;:40;;;;;54937:10;54907:40;:68;;;;;54968:7;-1:-1:-1;;;;;54960:15:0;:4;-1:-1:-1;;;;;54960:15:0;;;54907:68;:102;;;;-1:-1:-1;54988:21:0;;;;54907:102;:165;;;;-1:-1:-1;;;;;;55024:21:0;;55040:4;55024:21;:47;;;;;55063:7;-1:-1:-1;;;;;55049:22:0;:2;-1:-1:-1;;;;;55049:22:0;;55024:47;55022:50;54907:165;54889:1612;;;55216:20;;;-1:-1:-1;55340:17:0;55360:27;55216:20;55385:1;55360:27;:24;:27;:::i;:::-;55340:47;-1:-1:-1;55402:13:0;55418:42;55458:1;55418:35;:20;55340:47;55418:35;:24;:35;:::i;:42::-;55402:58;-1:-1:-1;55475:18:0;55496:31;:20;55402:58;55496:31;:24;:31;:::i;:::-;55475:52;-1:-1:-1;55544:30:0;55577:20;:9;55591:5;55577:20;:13;:20;:::i;:::-;55726:66;;-1:-1:-1;;;55726:66:0;;55544:53;;-1:-1:-1;55639:21:0;;55726:5;;:22;;:66;;55757:9;;55544:53;;55726:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56144:20;56167:41;56193:14;56167:21;:25;;:41;;;;:::i;:::-;56144:64;-1:-1:-1;56225:31:0;56259:19;56144:64;56276:1;56259:19;:16;:19;:::i;:::-;56225:53;;56336:5;:18;56363:9;56375:7;:5;:7::i;:::-;56384:10;56396:23;56336:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56442:47;56457:5;56464:12;56478:10;56442:47;;;;;;;;:::i;:::-;;;;;;;;54889:1612;;;;;;;54279:2229;;;;:::o;47112:782::-;47225:7;47220:41;;47247:14;:12;:14::i;:::-;47305:47;47334:9;47345:6;47305:28;:47::i;:::-;-1:-1:-1;;;;;47369:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;47393:22:0;;;;;;:11;:22;;;;;;;;47392:23;47369:46;47365:467;;;47432:48;47454:6;47462:9;47473:6;47432:21;:48::i;:::-;47365:467;;;-1:-1:-1;;;;;47503:19:0;;;;;;:11;:19;;;;;;;;47502:20;:46;;;;-1:-1:-1;;;;;;47526:22:0;;;;;;:11;:22;;;;;;;;47502:46;47498:334;;;47565:46;47585:6;47593:9;47604:6;47565:19;:46::i;47498:334::-;-1:-1:-1;;;;;47633:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;47656:22:0;;;;;;:11;:22;;;;;;;;47633:45;47629:203;;;47695:48;47717:6;47725:9;47736:6;47695:21;:48::i;47629:203::-;47776:44;47794:6;47802:9;47813:6;47776:17;:44::i;:::-;47849:7;47844:42;;47871:15;:13;:15::i;43357:556::-;43455:7;;43491;;43408;;;;;43509:289;43533:9;:16;43529:20;;43509:289;;;43599:7;43575;:21;43583:9;43593:1;43583:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43583:12:0;43575:21;;;;;;;;;;;;;:31;;:66;;;43634:7;43610;:21;43618:9;43628:1;43618:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43618:12:0;43610:21;;;;;;;;;;;;;:31;43575:66;43571:97;;;43651:7;;43660;;43643:25;;;;;;;;;43571:97;43693:34;43705:7;:21;43713:9;43723:1;43713:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43713:12:0;43705:21;;;;;;;;;;;;;43693:7;;:34;:11;:34;:::i;:::-;43683:44;;43752:34;43764:7;:21;43772:9;43782:1;43772:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43772:12:0;43764:21;;;;;;;;;;;;;43752:7;;:34;:11;:34;:::i;:::-;43742:44;-1:-1:-1;43551:3:0;;43509:289;;;-1:-1:-1;43834:7:0;;43822;;:20;;;:11;:20;:::i;:::-;43812:7;:30;43808:61;;;43852:7;;43861;;43844:25;;;;;;;;43808:61;43888:7;;-1:-1:-1;43897:7:0;-1:-1:-1;43357:556:0;;;:::o;42232:421::-;42292:7;42301;42310;42319;42339:12;42354:24;42370:7;42354:15;:24::i;:::-;42339:39;;42389:18;42410:30;42432:7;42410:21;:30::i;:::-;42389:51;;42451:16;42470:28;42490:7;42470:19;:28::i;:::-;42451:47;-1:-1:-1;42509:23:0;42535:47;42451;42535:33;42557:10;42535:33;:7;42547:4;42535:17;:11;:17;:::i;:47::-;42509:73;42618:4;;-1:-1:-1;42624:10:0;;-1:-1:-1;42624:10:0;-1:-1:-1;42232:421:0;;-1:-1:-1;;;42232:421:0:o;42661:516::-;42794:7;;;;42850:24;:7;42862:11;42850:24;:11;:24;:::i;:::-;42832:42;-1:-1:-1;42885:12:0;42900:21;:4;42909:11;42900:21;:8;:21;:::i;:::-;42885:36;-1:-1:-1;42932:18:0;42953:27;:10;42968:11;42953:27;:14;:27;:::i;:::-;42932:48;-1:-1:-1;42991:16:0;43010:25;:8;43023:11;43010:25;:12;:25;:::i;:::-;42991:44;-1:-1:-1;43046:23:0;43072:47;42991:44;43072:33;43094:10;43072:33;:7;43084:4;43072:17;:11;:17;:::i;:47::-;43138:7;;;;-1:-1:-1;43164:4:0;;-1:-1:-1;42661:516:0;;-1:-1:-1;;;;;;;;;42661:516:0:o;45152:325::-;45199:7;;:12;:34;;;;-1:-1:-1;45215:13:0;;:18;45199:34;:54;;;;-1:-1:-1;45237:11:0;;:16;45199:54;45195:67;;;45255:7;;45195:67;45292:7;;;45274:15;:25;45334:13;;;45310:21;:37;45380:11;;;45358:19;:33;-1:-1:-1;45404:11:0;;;;45426:17;;;;45454:15;45152:325::o;53054:468::-;53146:31;53180:20;53190:9;53180;:20::i;:::-;53146:54;;53211:29;53243:21;:19;:21::i;:::-;53463:19;;53349:165;;-1:-1:-1;;;53349:165:0;;53211:53;;-1:-1:-1;53349:5:0;;:25;;:165;;53389:23;;53211:53;;53497:6;;53349:165;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53313:33:0;;;;;;;:22;:33;;;;;;;:201;;;;53277:237;;;-1:-1:-1;;;53054:468:0:o;49097:614::-;49200:15;49217:23;49242:12;49256:23;49281:12;49295:18;49315:16;49335:19;49346:7;49335:10;:19::i;:::-;49199:155;;;;;;;;;;;;;;49383:28;49403:7;49383;:15;49391:6;-1:-1:-1;;;;;49383:15:0;-1:-1:-1;;;;;49383:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;49365:15:0;;;;;;:7;:15;;;;;;;;:46;;;;49440:7;:15;;;;:28;;49460:7;49440:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;49422:15:0;;;;;;;:7;:15;;;;;;:46;;;;49500:18;;;;;;;:39;;49523:15;49500:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;49479:18:0;;;;;;:7;:18;;;;;:60;49550:22;49563:8;49550:12;:22::i;:::-;49583:26;49598:10;49583:14;:26::i;:::-;49620:23;49632:4;49638;49620:11;:23::i;:::-;49676:9;-1:-1:-1;;;;;49659:44:0;49668:6;-1:-1:-1;;;;;49659:44:0;;49687:15;49659:44;;;;;;:::i;:::-;;;;;;;;49097:614;;;;;;;;;;:::o;48463:626::-;48564:15;48581:23;48606:12;48620:23;48645:12;48659:18;48679:16;48699:19;48710:7;48699:10;:19::i;:::-;48563:155;;;;;;;;;;;;;;48747:28;48767:7;48747;:15;48755:6;-1:-1:-1;;;;;48747:15:0;-1:-1:-1;;;;;48747:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;48729:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48807:18;;;;;:7;:18;;;;;:39;;48830:15;48807:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;48786:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48878:7;:18;;;;:39;;48901:15;48878:39;:22;:39;:::i;39707:685::-;39810:15;39827:23;39852:12;39866:23;39891:12;39905:18;39925:16;39945:19;39956:7;39945:10;:19::i;:::-;39809:155;;;;;;;;;;;;;;39993:28;40013:7;39993;:15;40001:6;-1:-1:-1;;;;;39993:15:0;-1:-1:-1;;;;;39993:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;39975:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40050:7;:15;;;;:28;;40070:7;40050:28;:19;:28;:::i;47902:553::-;48001:15;48018:23;48043:12;48057:23;48082:12;48096:18;48116:16;48136:19;48147:7;48136:10;:19::i;:::-;48000:155;;;;;;;;;;;;;;48184:28;48204:7;48184;:15;48192:6;-1:-1:-1;;;;;48184:15:0;-1:-1:-1;;;;;48184:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;45485:169::-;45539:15;;45529:7;:25;45581:21;;45565:13;:37;45627:19;;45613:11;:33;45485:169::o;44640:156::-;44704:7;44731:57;44770:7;44731:20;44743:7;;44731;:11;;:20;;;;:::i;44804:168::-;44874:7;44901:63;44946:7;44901:26;44913:13;;44901:7;:11;;:26;;;;:::i;44980:164::-;45048:7;45075:61;45118:7;45075:24;45087:11;;45075:7;:11;;:24;;;;:::i;44284:348::-;44343:19;44365:10;:8;:10::i;:::-;44343:32;-1:-1:-1;44386:16:0;44405:25;:8;44343:32;44405:25;:12;:25;:::i;:::-;44475:14;;;;;-1:-1:-1;;;;;44475:14:0;44467:23;;;;:7;:23;;;;;;44386:44;;-1:-1:-1;44467:37:0;;44386:44;44467:27;:37::i;:::-;44449:14;;;-1:-1:-1;;;;;44449:14:0;;;;;;;44441:23;;;;:7;:23;;;;;;;;:63;;;;44531:14;;;;;;;44519:27;;:11;:27;;;;;;;44515:109;;;44595:14;;;;;-1:-1:-1;;;;;44595:14:0;44587:23;;;;:7;:23;;;;;;:37;;44615:8;44587:27;:37::i;:::-;44569:14;;;;;-1:-1:-1;;;;;44569:14:0;44561:23;;;;:7;:23;;;;;:63;44515:109;44284:348;;;:::o;43921:355::-;43984:19;44006:10;:8;:10::i;:::-;43984:32;-1:-1:-1;44027:18:0;44048:27;:10;43984:32;44048:27;:14;:27;:::i;:::-;44127:4;44111:22;;;;:7;:22;;;;;;44027:48;;-1:-1:-1;44111:38:0;;44027:48;44111:38;:26;:38;:::i;:::-;44102:4;44086:22;;;;:7;:22;;;;;;;;:63;;;;44164:11;:26;;;;;;44160:108;;;44246:4;44230:22;;;;:7;:22;;;;;;:38;;44257:10;44230:38;:26;:38;:::i;:::-;44221:4;44205:22;;;;:7;:22;;;;;:63;43921:355;;;:::o;41603:147::-;41681:7;;:17;;41693:4;41681:17;:11;:17;:::i;:::-;41671:7;:27;41722:10;;:20;;41737:4;41722:20;:14;:20;:::i;:::-;41709:10;:33;-1:-1:-1;;41603:147:0:o;5:130:-1:-;72:20;;-1:-1;;;;;28193:54;;29552:35;;29542:2;;29601:1;;29591:12;551:241;;655:2;643:9;634:7;630:23;626:32;623:2;;;-1:-1;;661:12;623:2;723:53;768:7;744:22;723:53;:::i;799:366::-;;;920:2;908:9;899:7;895:23;891:32;888:2;;;-1:-1;;926:12;888:2;988:53;1033:7;1009:22;988:53;:::i;:::-;978:63;;1096:53;1141:7;1078:2;1121:9;1117:22;1096:53;:::i;:::-;1086:63;;882:283;;;;;:::o;1172:491::-;;;;1310:2;1298:9;1289:7;1285:23;1281:32;1278:2;;;-1:-1;;1316:12;1278:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1368:63;-1:-1;1468:2;1507:22;;72:20;97:33;72:20;97:33;:::i;:::-;1272:391;;1476:63;;-1:-1;;;1576:2;1615:22;;;;340:20;;1272:391::o;1670:360::-;;;1788:2;1776:9;1767:7;1763:23;1759:32;1756:2;;;-1:-1;;1794:12;1756:2;1856:53;1901:7;1877:22;1856:53;:::i;:::-;1846:63;;1946:2;1986:9;1982:22;206:20;29698:5;28105:13;28098:21;29676:5;29673:32;29663:2;;-1:-1;;29709:12;29663:2;1954:60;;;;1750:280;;;;;:::o;2037:366::-;;;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;-1:-1;;2164:12;2126:2;2226:53;2271:7;2247:22;2226:53;:::i;:::-;2216:63;2316:2;2355:22;;;;340:20;;-1:-1;;;2120:283::o;2410:235::-;;2511:2;2499:9;2490:7;2486:23;2482:32;2479:2;;;-1:-1;;2517:12;2479:2;219:6;206:20;231:30;255:5;231:30;:::i;2652:241::-;;2756:2;2744:9;2735:7;2731:23;2727:32;2724:2;;;-1:-1;;2762:12;2724:2;-1:-1;340:20;;2718:175;-1:-1;2718:175::o;2900:263::-;;3015:2;3003:9;2994:7;2990:23;2986:32;2983:2;;;-1:-1;;3021:12;2983:2;-1:-1;488:13;;2977:186;-1:-1;2977:186::o;3170:360::-;;;3288:2;3276:9;3267:7;3263:23;3259:32;3256:2;;;-1:-1;;3294:12;3256:2;353:6;340:20;3346:63;;3446:2;3486:9;3482:22;206:20;231:30;255:5;231:30;:::i;13306:222::-;-1:-1;;;;;28193:54;;;;3757:37;;13433:2;13418:18;;13404:124::o;13535:460::-;-1:-1;;;;;28193:54;;;;3616:58;;13898:2;13883:18;;12629:37;;;;13981:2;13966:18;;12629:37;13726:2;13711:18;;13697:298::o;14002:476::-;-1:-1;;;;;28193:54;;;3757:37;;28193:54;;;;14373:2;14358:18;;3757:37;14464:2;14449:18;;12629:37;;;;14193:2;14178:18;;14164:314::o;14485:596::-;-1:-1;;;;;28193:54;;;3757:37;;28193:54;;;;14885:2;14870:18;;3757:37;14976:2;14961:18;;12629:37;15067:2;15052:18;;12629:37;;;;14704:3;14689:19;;14675:406::o;15088:357::-;-1:-1;;;;;28193:54;;;;3757:37;;15431:2;15416:18;;12629:37;15251:2;15236:18;;15222:223::o;15452:210::-;28105:13;;28098:21;3999:34;;15573:2;15558:18;;15544:118::o;15940:310::-;;16087:2;;16108:17;16101:47;4365:5;27575:12;27885:6;16087:2;16076:9;16072:18;27873:19;-1:-1;29184:101;29198:6;29195:1;29192:13;29184:101;;;29265:11;;;;;29259:18;29246:11;;;27913:14;29246:11;29239:39;29213:10;;29184:101;;;29300:6;29297:1;29294:13;29291:2;;;-1:-1;27913:14;29356:6;16076:9;29347:16;;29340:27;29291:2;-1:-1;29472:7;29456:14;-1:-1;;29452:28;4523:39;;;;27913:14;4523:39;;16058:192;-1:-1;;;16058:192::o;16257:416::-;16457:2;16471:47;;;4799:2;16442:18;;;27873:19;4835:34;27913:14;;;4815:55;-1:-1;;;4890:12;;;4883:25;4927:12;;;16428:245::o;16680:416::-;16880:2;16894:47;;;5178:2;16865:18;;;27873:19;5214:34;27913:14;;;5194:55;-1:-1;;;5269:12;;;5262:28;5309:12;;;16851:245::o;17103:416::-;17303:2;17317:47;;;5560:2;17288:18;;;27873:19;5596:34;27913:14;;;5576:55;-1:-1;;;5651:12;;;5644:29;5692:12;;;17274:245::o;17526:416::-;17726:2;17740:47;;;5943:2;17711:18;;;27873:19;5979:34;27913:14;;;5959:55;-1:-1;;;6034:12;;;6027:28;6074:12;;;17697:245::o;17949:416::-;18149:2;18163:47;;;6325:2;18134:18;;;27873:19;6361:34;27913:14;;;6341:55;-1:-1;;;6416:12;;;6409:34;6462:12;;;18120:245::o;18372:416::-;18572:2;18586:47;;;6713:2;18557:18;;;27873:19;6749:34;27913:14;;;6729:55;-1:-1;;;6804:12;;;6797:30;6846:12;;;18543:245::o;18795:416::-;18995:2;19009:47;;;7097:2;18980:18;;;27873:19;7133:29;27913:14;;;7113:50;7182:12;;;18966:245::o;19218:416::-;19418:2;19432:47;;;7433:2;19403:18;;;27873:19;7469:29;27913:14;;;7449:50;7518:12;;;19389:245::o;19641:416::-;19841:2;19855:47;;;7769:2;19826:18;;;27873:19;7805:33;27913:14;;;7785:54;7858:12;;;19812:245::o;20064:416::-;20264:2;20278:47;;;8109:2;20249:18;;;27873:19;8145:34;27913:14;;;8125:55;-1:-1;;;8200:12;;;8193:32;8244:12;;;20235:245::o;20487:416::-;20687:2;20701:47;;;8495:2;20672:18;;;27873:19;-1:-1;;;27913:14;;;8511:40;8570:12;;;20658:245::o;20910:416::-;21110:2;21124:47;;;8821:2;21095:18;;;27873:19;8857:34;27913:14;;;8837:55;-1:-1;;;8912:12;;;8905:25;8949:12;;;21081:245::o;21333:416::-;21533:2;21547:47;;;21518:18;;;27873:19;9236:34;27913:14;;;9216:55;9290:12;;;21504:245::o;21756:416::-;21956:2;21970:47;;;9541:2;21941:18;;;27873:19;9577:34;27913:14;;;9557:55;-1:-1;;;9632:12;;;9625:33;9677:12;;;21927:245::o;22179:416::-;22379:2;22393:47;;;9928:2;22364:18;;;27873:19;9964:34;27913:14;;;9944:55;-1:-1;;;10019:12;;;10012:27;10058:12;;;22350:245::o;22602:416::-;22802:2;22816:47;;;10614:2;22787:18;;;27873:19;10650:31;27913:14;;;10630:52;10701:12;;;22773:245::o;23025:416::-;23225:2;23239:47;;;10952:2;23210:18;;;27873:19;10988:33;27913:14;;;10968:54;11041:12;;;23196:245::o;23448:416::-;23648:2;23662:47;;;11292:2;23633:18;;;27873:19;11328:33;27913:14;;;11308:54;11381:12;;;23619:245::o;23871:416::-;24071:2;24085:47;;;11632:2;24056:18;;;27873:19;11668:34;27913:14;;;11648:55;-1:-1;;;11723:12;;;11716:36;11771:12;;;24042:245::o;24294:416::-;24494:2;24508:47;;;12022:2;24479:18;;;27873:19;12058:34;27913:14;;;12038:55;-1:-1;;;12113:12;;;12106:26;12151:12;;;24465:245::o;24717:416::-;24917:2;24931:47;;;12402:2;24902:18;;;27873:19;12438:34;27913:14;;;12418:55;-1:-1;;;12493:12;;;12486:27;12532:12;;;24888:245::o;25140:222::-;12629:37;;;25267:2;25252:18;;25238:124::o;25369:444::-;12629:37;;;25716:2;25701:18;;12629:37;;;;25799:2;25784:18;;12629:37;25552:2;25537:18;;25523:290::o;25820:596::-;12629:37;;;26220:2;26205:18;;12629:37;;;;26311:2;26296:18;;12629:37;26402:2;26387:18;;12629:37;26039:3;26024:19;;26010:406::o;26423:836::-;12629:37;;;26879:2;26864:18;;12629:37;;;;26970:2;26955:18;;12629:37;;;;27061:2;27046:18;;12629:37;27152:3;27137:19;;12629:37;-1:-1;;;;;28193:54;28204:42;27229:19;;3757:37;26698:3;26683:19;;26669:590::o;27266:214::-;28409:4;28398:16;;;;12873:35;;27389:2;27374:18;;27360:120::o;29493:117::-;-1:-1;;;;;28193:54;;29552:35;;29542:2;;29601:1;;29591:12;29542:2;29536:74;:::o;29617:111::-;29698:5;28105:13;28098:21;29676:5;29673:32;29663:2;;29719:1;;29709:12

Swarm Source

ipfs://a7bdd79715fb60e45618658e8959e93307588a7a71c46e3cec31141a1e4a21f7
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading