Contract 0x2A9893088617CA3630FDC79d39C3928113e62B23

 

Contract Overview

Balance:
3.950686232203937599 BNB

BNB Value:
$1,373.61 (@ $347.69/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc83bcd7c36e70718ff908289527ac132836bd6c452f26e232b05a7ee0c046245Approve110950892021-09-21 1:57:475 days 16 hrs ago0xd7a89328d6d3b543cbdc5541d1c8062c18ca6c0b IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xb6cc478cbad1dbf9f120da6a46a4567f6ad041a914e2cd80dade9fa86a612d57Approve109444712021-09-15 19:58:0810 days 22 hrs ago0x9514ba101da3bbd63c55095763ceb76df536034c IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x2bf4229a2868c54940db4a74b49cc23ff0b7037d12cdcb0180337a2c8afd9cc7Approve109321532021-09-15 9:40:5511 days 8 hrs ago0x5dd7b90509164646c590d2a4df27e6dcfec3a598 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.000101738
0x14a06b0ee3601f11faa657f4711ac5e07ba05638a6adf489633e92253b2acbe5Approve108268992021-09-11 17:39:5115 days 23 mins ago0x4088fc6a462dc78f51fd0279c9b4bf678c2b7a62 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xfa625cf5174abe438f385f62cc5ad84f8a65a6fe7efb4d93ba18de420f0e5089Approve108129382021-09-11 5:57:2415 days 12 hrs ago0xac1df883b1b8987371c330327032684eb39e6ba2 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x369d1a8e3e3bf7e885bf70a13183fb9de4723493bf43a373affd5fc60f87c94fApprove105367782021-09-01 13:27:2325 days 4 hrs ago0x07477b18a1c7020ff2df1253c7c2c45a2b72d963 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x058a5006d91578c86beb2428dfda7bd6dcf1e6bfafaa121119a2dfe21dde3536Approve104596292021-08-29 20:06:1327 days 21 hrs ago0x225e6e13b36e18e9620a1c3acd75e053520560b6 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x5b8092edf938c08fdd35de33b2cd0f9b4f6771052b3793f5bb1060329b38278eApprove104234522021-08-28 13:45:2029 days 4 hrs ago0x9dd54548bcdaf58eeb87f75a6e39940246642f90 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xdf7955e1e925ffdcabd01bf3ff283fd6b627e03de2a2e163b0255497329284fbApprove104187202021-08-28 9:44:4629 days 8 hrs ago0xaa97070074518150f723b32126741addab55637c IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xdf702c1fc78638f73af3b2dc5b6d98bafbba01cf2b45cde10fd439f4c6fbec56Approve102549172021-08-22 15:46:5235 days 2 hrs ago0x15c129e2a0b12e58124fb95cef4b84c842e69463 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x54699ae5f7d5d0c5ba38c8bda07ba749caf03d0fc4bd4a3c1c7665aebe51e6abApprove101973512021-08-20 15:27:2437 days 2 hrs ago0xe1f9aa46e14216d819f2f1a8da6b3e086212bf26 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x386dbb330a40adf241a9f35ba709fabd80d63ea44ad931cc072b12836455fb0dApprove101965652021-08-20 14:47:0537 days 3 hrs ago0x98b4b49c1738fec0e3b66696b849ba61b6355ffb IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x1165974113c0895c219860a386870dca8ac953a50894dcf257bc503f42db6d61Approve101542872021-08-19 3:14:3838 days 14 hrs ago0xb9cc3069916a39c0e3e0d89f265465b9b2f5bf59 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0x9792daeb7fe374a05282d8cc71d9cd055149d988cbc7ad91d9d80c8be8b66947Approve100994382021-08-17 5:28:0640 days 12 hrs ago0xcb1fa250636bd28df3b4d8e3801d4ed1065b5f05 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x22e45a88dc9297bd1750016c65c4d3f02aa191eb1fa96010530be3a5b8e94e81Approve100791012021-08-16 12:26:5041 days 5 hrs ago0x29b9c6dd7fc28dc16c675ea052bae65a69bd9a9b IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x0073603530d4eb51ee28190664163fb1a8f360444a405fbfc78a75b474710578Approve99663962021-08-12 13:37:2745 days 4 hrs ago0xc6a2e02557c7fe99ff96df4c7fddd8b650195029 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xb7f144c45bc59b6c9e3bf79fd00cc7bc59b93691715181ab533e2394b91de6aeApprove99656052021-08-12 12:57:2545 days 5 hrs ago0xed62158e09e615b05b4d2b5e1a39aa081e8b0f18 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x077da157f64c1a87853a5a4067a3226bde0d35e99942b15b8e52aa75551b08a3Transfer99456702021-08-11 19:50:2845 days 22 hrs ago0x6c65610a32a6a9722d8f91d9f62940b69da756f2 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.000428295
0x27619cf2f2f7c9c051f0505adb8a469e4bfa4e6a37f9e4e0f36aa3aa2948634aApprove97918262021-08-06 8:05:0251 days 9 hrs ago0x95e14f8f2fc3102b3cf9c4b9bec3c527251a57c5 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x695a72554f975d4380280d2e013a6a3efb80869dd4b18ba48c3532e3abc3f3e3Approve97529602021-08-04 22:41:5652 days 19 hrs ago0x90b2cf57a796c437181078f0f1f908241ddb006f IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x763cdfbf289b6df444142353d0dab87aa3c911b0b9342676e1db34b84f80d7e4Transfer97507642021-08-04 20:49:4452 days 21 hrs ago0xc15534ea729972fc21aede69cb7ca16d60e8d342 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.000428235
0x5a021e9616e21fddc4b9ebcb562256f10a2e69036565306781f22242d1a5a105Approve96960292021-08-02 21:03:1154 days 21 hrs ago0xe0919b5c379e82a6406dd8c1051346ec82642698 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
0xf6b7312cb6c85b568331f06884d3dfbff33601b421afc455b0ae1e9a982c3e3fApprove96704892021-08-01 23:02:5255 days 19 hrs ago0x5edf9e83a4755e20413fdacf3f5309f945cfbc92 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0x4790079879aabc83cd5520e9c789d2e0e1d3e6cb1f8fb650e7049401a204af23Approve96328692021-07-31 14:31:3357 days 3 hrs ago0xa28b044783bf5a0eddea17d34830cd8695031e2a IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00007267
0xc860a07473d09500c2a931cbdc6f4f1850425de56388c4b5148bbdef57e0a035Approve95701862021-07-29 8:27:4459 days 9 hrs ago0x15447f6a0310c334ca4e0e3b6d41cfe172a5eef8 IN  0x2a9893088617ca3630fdc79d39c3928113e62b230 BNB0.00022226
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2c93f8b6bfbd58c0d22b0526f943f25ef560b4e2f3f5f2d41483afd3cf461bd683735442021-06-17 10:59:07101 days 7 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.021111067935989973 BNB
0x2c93f8b6bfbd58c0d22b0526f943f25ef560b4e2f3f5f2d41483afd3cf461bd683735442021-06-17 10:59:07101 days 7 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.021111067935989973 BNB
0x1e3dcde832a074e79e02a6fec0677bc0bac1a68387652fdd21c7d90203cdaf1783011432021-06-14 22:00:33103 days 20 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.021146506074992843 BNB
0x1e3dcde832a074e79e02a6fec0677bc0bac1a68387652fdd21c7d90203cdaf1783011432021-06-14 22:00:33103 days 20 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.021146506074992843 BNB
0xe6579346392d22b47a8c740504d8744d1587e370a32871e49c95c3c1217e840f80907582021-06-07 13:41:07111 days 4 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.041939998335221804 BNB
0xe6579346392d22b47a8c740504d8744d1587e370a32871e49c95c3c1217e840f80907582021-06-07 13:41:07111 days 4 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.041939998335221804 BNB
0xbbf7e65f1cd1c16a446970b21a4a733836a431ed3cbff1f8542fe3547e60abd880855602021-06-07 9:21:04111 days 8 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.04199408430040531 BNB
0xbbf7e65f1cd1c16a446970b21a4a733836a431ed3cbff1f8542fe3547e60abd880855602021-06-07 9:21:04111 days 8 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.04199408430040531 BNB
0xe7091be3cba385a07e24a02a6fe27297b34ff5cbdc5e78717d2056f3259dc5a280851192021-06-07 8:59:01111 days 9 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.042041666842520748 BNB
0xe7091be3cba385a07e24a02a6fe27297b34ff5cbdc5e78717d2056f3259dc5a280851192021-06-07 8:59:01111 days 9 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.042041666842520748 BNB
0xcb7caa181c0224ee5346cead4815902ed9f1697a7f0e8dcbe139e01c20d9123780831672021-06-07 7:21:25111 days 10 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.04208862147779874 BNB
0xcb7caa181c0224ee5346cead4815902ed9f1697a7f0e8dcbe139e01c20d9123780831672021-06-07 7:21:25111 days 10 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.04208862147779874 BNB
0x9ef28f95143cdca09228889105934852236c959322e06802e05fd595a1bab9d680750342021-06-07 0:34:36111 days 17 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.042387299509177825 BNB
0x9ef28f95143cdca09228889105934852236c959322e06802e05fd595a1bab9d680750342021-06-07 0:34:36111 days 17 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.042387299509177825 BNB
0x10a9ea3fd1f242dbcde7290fee80351423d2e9526a62eb469912468ba5180cc480708512021-06-06 21:05:27111 days 20 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.04237431914735977 BNB
0x10a9ea3fd1f242dbcde7290fee80351423d2e9526a62eb469912468ba5180cc480708512021-06-06 21:05:27111 days 20 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.04237431914735977 BNB
0x24fe1b6e2ad2ae2a1e2d457014f1244697effed8f047e1199c90e693cbc01f8d80147822021-06-04 22:16:05113 days 19 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.051611315812688458 BNB
0x24fe1b6e2ad2ae2a1e2d457014f1244697effed8f047e1199c90e693cbc01f8d80147822021-06-04 22:16:05113 days 19 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.051611315812688458 BNB
0x96c5606673c97ec1074527637e082dcd7e2b0ba26da6fede3e4bf1e63759b62279731202021-06-03 11:26:08115 days 6 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.053169392987097935 BNB
0x96c5606673c97ec1074527637e082dcd7e2b0ba26da6fede3e4bf1e63759b62279731202021-06-03 11:26:08115 days 6 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.053169392987097935 BNB
0x994f094b72bed3a9eb38b88df91948fb30b615b6f91397b093f493adfb9952e179688002021-06-03 7:48:23115 days 10 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.054439279480360724 BNB
0x994f094b72bed3a9eb38b88df91948fb30b615b6f91397b093f493adfb9952e179688002021-06-03 7:48:23115 days 10 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.054439279480360724 BNB
0xad5f27a0596c5c270a9263da11961008cb3e01c8bfddddb585373d75e40a724179685432021-06-03 7:35:32115 days 10 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.054590017946472883 BNB
0xad5f27a0596c5c270a9263da11961008cb3e01c8bfddddb585373d75e40a724179685432021-06-03 7:35:32115 days 10 hrs ago PancakeSwap: Router v2 0x2a9893088617ca3630fdc79d39c3928113e62b230.054590017946472883 BNB
0xec7be08f73ce6f0111417e8fb7a6abf0177884d21f9bdd20d7d27e269e52263179683872021-06-03 7:27:44115 days 10 hrs ago 0x2a9893088617ca3630fdc79d39c3928113e62b23 PancakeSwap: Router v20.054704563766466327 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PinkWinkBSC

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-24
*/

/**
 
 You have just entered through the backdoor, Welcome! To PINKWINK Official
 

*/

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

    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 ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

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

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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


contract PinkWinkBSC is Context, IERC20, Ownable {
    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;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 7870 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "PinkWink";
    string private _symbol = "PINKWINK";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 4;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 6;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 7870 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 3935 * 10**3 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function 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(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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) = _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);        
        _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() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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 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 removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // 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 uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //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);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //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();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _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) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

676d37db4d8e53000060089081556720640fd4b50affff1960095561010060405260c08190526750696e6b57696e6b60c01b60e09081526200004591600b9190620003b1565b506040805180820190915260088082526750494e4b57494e4b60c01b60209092019182526200007791600c91620003b1565b50600d805460ff191660091790556004600e819055600f55600660108190556011556012805461ff001916610100179055676d37db4d8e530000601355660dfadc9530f000601455348015620000cc57600080fd5b506000620000d96200039e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060095460026000620001346200039e565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060007310ed43c718714eb63d5aa57b78b54704e256024e9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d6020811015620001d757600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200022857600080fd5b505afa1580156200023d573d6000803e3d6000fd5b505050506040513d60208110156200025457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002a757600080fd5b505af1158015620002bc573d6000803e3d6000fd5b505050506040513d6020811015620002d357600080fd5b50516001600160601b0319606091821b811660a0529082901b1660805260016005600062000300620003a2565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200034a6200039e565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a3506200044d565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003f457805160ff191683800117855562000424565b8280016001018555821562000424579182015b828111156200042457825182559160200191906001019062000407565b506200043292915062000436565b5090565b5b8082111562000432576000815560010162000437565b60805160601c60a05160601c61280e6200049560003980610e4552806117cd52508061092c5280611f8952806120415280612068528061214e5280612175525061280e6000f3fe6080604052600436106101fd5760003560e01c806352390c021161010d5780638ee88c53116100a0578063c49b9a801161006f578063c49b9a801461071c578063d543dbeb14610748578063dd62ed3e14610772578063ea2f0b37146107ad578063f2fde38b146107e057610204565b80638ee88c531461066b57806395d89b4114610695578063a457c2d7146106aa578063a9059cbb146106e357610204565b8063715018a6116100dc578063715018a6146105f95780637d1db4a51461060e57806388f82020146106235780638da5cb5b1461065657610204565b806352390c021461054b5780635342acb41461057e5780636bc87c3a146105b157806370a08231146105c657610204565b8063313ce567116101905780633bd5d1731161015f5780633bd5d17314610492578063437823ec146104bc5780634549b039146104ef57806349bd5a5e146105215780634a74bb021461053657610204565b8063313ce567146103e65780633685d4191461041157806339509351146104445780633b124fe71461047d57610204565b80631694505e116101cc5780631694505e1461033357806318160ddd1461036457806323b872dd146103795780632d838119146103bc57610204565b8063061c82d01461020957806306fdde0314610235578063095ea7b3146102bf57806313114a9d1461030c57610204565b3661020457005b600080fd5b34801561021557600080fd5b506102336004803603602081101561022c57600080fd5b5035610813565b005b34801561024157600080fd5b5061024a610870565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028457818101518382015260200161026c565b50505050905090810190601f1680156102b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102cb57600080fd5b506102f8600480360360408110156102e257600080fd5b506001600160a01b038135169060200135610906565b604080519115158252519081900360200190f35b34801561031857600080fd5b50610321610924565b60408051918252519081900360200190f35b34801561033f57600080fd5b5061034861092a565b604080516001600160a01b039092168252519081900360200190f35b34801561037057600080fd5b5061032161094e565b34801561038557600080fd5b506102f86004803603606081101561039c57600080fd5b506001600160a01b03813581169160208101359091169060400135610954565b3480156103c857600080fd5b50610321600480360360208110156103df57600080fd5b50356109db565b3480156103f257600080fd5b506103fb610a3d565b6040805160ff9092168252519081900360200190f35b34801561041d57600080fd5b506102336004803603602081101561043457600080fd5b50356001600160a01b0316610a46565b34801561045057600080fd5b506102f86004803603604081101561046757600080fd5b506001600160a01b038135169060200135610c07565b34801561048957600080fd5b50610321610c55565b34801561049e57600080fd5b50610233600480360360208110156104b557600080fd5b5035610c5b565b3480156104c857600080fd5b50610233600480360360208110156104df57600080fd5b50356001600160a01b0316610d35565b3480156104fb57600080fd5b506103216004803603604081101561051257600080fd5b50803590602001351515610db1565b34801561052d57600080fd5b50610348610e43565b34801561054257600080fd5b506102f8610e67565b34801561055757600080fd5b506102336004803603602081101561056e57600080fd5b50356001600160a01b0316610e75565b34801561058a57600080fd5b506102f8600480360360208110156105a157600080fd5b50356001600160a01b0316610ffb565b3480156105bd57600080fd5b50610321611019565b3480156105d257600080fd5b50610321600480360360208110156105e957600080fd5b50356001600160a01b031661101f565b34801561060557600080fd5b50610233611081565b34801561061a57600080fd5b50610321611123565b34801561062f57600080fd5b506102f86004803603602081101561064657600080fd5b50356001600160a01b0316611129565b34801561066257600080fd5b50610348611147565b34801561067757600080fd5b506102336004803603602081101561068e57600080fd5b5035611156565b3480156106a157600080fd5b5061024a6111b3565b3480156106b657600080fd5b506102f8600480360360408110156106cd57600080fd5b506001600160a01b038135169060200135611214565b3480156106ef57600080fd5b506102f86004803603604081101561070657600080fd5b506001600160a01b03813516906020013561127c565b34801561072857600080fd5b506102336004803603602081101561073f57600080fd5b50351515611290565b34801561075457600080fd5b506102336004803603602081101561076b57600080fd5b5035611337565b34801561077e57600080fd5b506103216004803603604081101561079557600080fd5b506001600160a01b03813581169160200135166113b5565b3480156107b957600080fd5b50610233600480360360208110156107d057600080fd5b50356001600160a01b03166113e0565b3480156107ec57600080fd5b506102336004803603602081101561080357600080fd5b50356001600160a01b0316611459565b61081b611551565b6000546001600160a01b0390811691161461086b576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b600e55565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b600061091a610913611551565b8484611555565b5060015b92915050565b600a5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085490565b6000610961848484611641565b6109d18461096d611551565b6109cc856040518060600160405280602881526020016126ce602891396001600160a01b038a166000908152600460205260408120906109ab611551565b6001600160a01b031681526020810191909152604001600020549190611887565b611555565b5060019392505050565b6000600954821115610a1e5760405162461bcd60e51b815260040180806020018281038252602a815260200180612613602a913960400191505060405180910390fd5b6000610a2861191e565b9050610a348382611941565b9150505b919050565b600d5460ff1690565b610a4e611551565b6000546001600160a01b03908116911614610a9e576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16610b0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600754811015610c0357816001600160a01b031660078281548110610b2f57fe5b6000918252602090912001546001600160a01b03161415610bfb57600780546000198101908110610b5c57fe5b600091825260209091200154600780546001600160a01b039092169183908110610b8257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff191690556007805480610bd457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c03565b600101610b0e565b5050565b600061091a610c14611551565b846109cc8560046000610c25611551565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061198a565b600e5481565b6000610c65611551565b6001600160a01b03811660009081526006602052604090205490915060ff1615610cc05760405162461bcd60e51b815260040180806020018281038252602c815260200180612788602c913960400191505060405180910390fd5b6000610ccb836119e4565b505050506001600160a01b038416600090815260026020526040902054919250610cf791905082611a33565b6001600160a01b038316600090815260026020526040902055600954610d1d9082611a33565b600955600a54610d2d908461198a565b600a55505050565b610d3d611551565b6000546001600160a01b03908116911614610d8d576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600854831115610e0a576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81610e29576000610e1a846119e4565b5093955061091e945050505050565b6000610e34846119e4565b5092955061091e945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601254610100900460ff1681565b610e7d611551565b6000546001600160a01b03908116911614610ecd576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615610f3b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526002602052604090205415610f95576001600160a01b038116600090815260026020526040902054610f7b906109db565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b60105481565b6001600160a01b03811660009081526006602052604081205460ff161561105f57506001600160a01b038116600090815260036020526040902054610a38565b6001600160a01b03821660009081526002602052604090205461091e906109db565b611089611551565b6000546001600160a01b039081169116146110d9576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60135481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b61115e611551565b6000546001600160a01b039081169116146111ae576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b601055565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fc5780601f106108d1576101008083540402835291602001916108fc565b600061091a611221611551565b846109cc856040518060600160405280602581526020016127b4602591396004600061124b611551565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611887565b600061091a611289611551565b8484611641565b611298611551565b6000546001600160a01b039081169116146112e8576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b60128054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61133f611551565b6000546001600160a01b0390811691161461138f576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6113af60646113a983600854611a7590919063ffffffff16565b90611941565b60135550565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6113e8611551565b6000546001600160a01b03908116911614611438576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b611461611551565b6000546001600160a01b039081169116146114b1576040805162461bcd60e51b815260206004820181905260248201526000805160206126f6833981519152604482015290519081900360640190fd5b6001600160a01b0381166114f65760405162461bcd60e51b815260040180806020018281038252602681526020018061263d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b03831661159a5760405162461bcd60e51b81526004018080602001828103825260248152602001806127646024913960400191505060405180910390fd5b6001600160a01b0382166115df5760405162461bcd60e51b81526004018080602001828103825260228152602001806126636022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166116865760405162461bcd60e51b815260040180806020018281038252602581526020018061273f6025913960400191505060405180910390fd5b6001600160a01b0382166116cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806125f06023913960400191505060405180910390fd5b6000811161170a5760405162461bcd60e51b81526004018080602001828103825260298152602001806127166029913960400191505060405180910390fd5b611712611147565b6001600160a01b0316836001600160a01b03161415801561174c5750611736611147565b6001600160a01b0316826001600160a01b031614155b15611792576013548111156117925760405162461bcd60e51b81526004018080602001828103825260288152602001806126856028913960400191505060405180910390fd5b600061179d3061101f565b905060135481106117ad57506013545b601454811080159081906117c4575060125460ff16155b801561180257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156118155750601254610100900460ff165b1561182857601454915061182882611ace565b6001600160a01b03851660009081526005602052604090205460019060ff168061186a57506001600160a01b03851660009081526005602052604090205460ff165b15611873575060005b61187f86868684611b6b565b505050505050565b600081848411156119165760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118db5781810151838201526020016118c3565b50505050905090810190601f1680156119085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061192b611cdf565b909250905061193a8282611941565b9250505090565b600061198383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e42565b9392505050565b600082820183811015611983576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006119fb8a611ea7565b9250925092506000806000611a198d8686611a1461191e565b611ee9565b919f909e50909c50959a5093985091965092945050505050565b600061198383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611887565b600082611a845750600061091e565b82820282848281611a9157fe5b04146119835760405162461bcd60e51b81526004018080602001828103825260218152602001806126ad6021913960400191505060405180910390fd5b6012805460ff191660011790556000611ae8826002611941565b90506000611af68383611a33565b905047611b0283611f39565b6000611b0e4783611a33565b9050611b1a8382612148565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506012805460ff19169055505050565b80611b7857611b78612246565b6001600160a01b03841660009081526006602052604090205460ff168015611bb957506001600160a01b03831660009081526006602052604090205460ff16155b15611bce57611bc9848484612278565b611ccc565b6001600160a01b03841660009081526006602052604090205460ff16158015611c0f57506001600160a01b03831660009081526006602052604090205460ff165b15611c1f57611bc984848461239c565b6001600160a01b03841660009081526006602052604090205460ff16158015611c6157506001600160a01b03831660009081526006602052604090205460ff16155b15611c7157611bc9848484612445565b6001600160a01b03841660009081526006602052604090205460ff168015611cb157506001600160a01b03831660009081526006602052604090205460ff165b15611cc157611bc9848484612489565b611ccc848484612445565b80611cd957611cd96124fc565b50505050565b6009546008546000918291825b600754811015611e1057826002600060078481548110611d0857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d6d5750816003600060078481548110611d4657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d845760095460085494509450505050611e3e565b611dc46002600060078481548110611d9857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611a33565b9250611e066003600060078481548110611dda57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611a33565b9150600101611cec565b50600854600954611e2091611941565b821015611e3857600954600854935093505050611e3e565b90925090505b9091565b60008183611e915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118db5781810151838201526020016118c3565b506000838581611e9d57fe5b0495945050505050565b600080600080611eb68561250a565b90506000611ec386612526565b90506000611edb82611ed58986611a33565b90611a33565b979296509094509092505050565b6000808080611ef88886611a75565b90506000611f068887611a75565b90506000611f148888611a75565b90506000611f2682611ed58686611a33565b939b939a50919850919650505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110611f6757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe057600080fd5b505afa158015611ff4573d6000803e3d6000fd5b505050506040513d602081101561200a57600080fd5b505181518290600190811061201b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612066307f000000000000000000000000000000000000000000000000000000000000000084611555565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561210b5781810151838201526020016120f3565b505050509050019650505050505050600060405180830381600087803b15801561213457600080fd5b505af115801561187f573d6000803e3d6000fd5b612173307f000000000000000000000000000000000000000000000000000000000000000084611555565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806121b0611147565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561221b57600080fd5b505af115801561222f573d6000803e3d6000fd5b50505050506040513d6060811015611cd957600080fd5b600e541580156122565750601054155b1561226057612276565b600e8054600f5560108054601155600091829055555b565b60008060008060008061228a876119e4565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506122bc9088611a33565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546122eb9087611a33565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461231a908661198a565b6001600160a01b03891660009081526002602052604090205561233c81612542565b61234684836125cb565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806123ae876119e4565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506123e09087611a33565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054612416908461198a565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461231a908661198a565b600080600080600080612457876119e4565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506122eb9087611a33565b60008060008060008061249b876119e4565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506124cd9088611a33565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546123e09087611a33565b600f54600e55601154601055565b600061091e60646113a9600e5485611a7590919063ffffffff16565b600061091e60646113a960105485611a7590919063ffffffff16565b600061254c61191e565b9050600061255a8383611a75565b30600090815260026020526040902054909150612577908261198a565b3060009081526002602090815260408083209390935560069052205460ff16156125c657306000908152600360205260409020546125b5908461198a565b306000908152600360205260409020555b505050565b6009546125d89083611a33565b600955600a546125e8908261198a565b600a55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220832760195c639b4ae50d4b0c230ddb57ab1331658abb5a06c60de09313e13a7364736f6c634300060c0033

Deployed ByteCode Sourcemap

24920:18349:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32364:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32364:98:0;;:::i;:::-;;27307:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28219:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28219:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;29340:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25878:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;25878:51:0;;;;;;;;;;;;;;27584:95;;;;;;;;;;;;;:::i;28388:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28388:313:0;;;;;;;;;;;;;;;;;:::i;30264:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30264:253:0;;:::i;27493:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30980:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30980:479:0;-1:-1:-1;;;;;30980:479:0;;:::i;28709:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28709:218:0;;;;;;;;:::i;25690:26::-;;;;;;;;;;;;;:::i;29435:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29435:377:0;;:::i;32119:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32119:111:0;-1:-1:-1;;;;;32119:111:0;;:::i;29820:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29820:436:0;;;;;;;;;:::i;25936:38::-;;;;;;;;;;;;;:::i;26015:40::-;;;;;;;;;;;;;:::i;30525:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30525:447:0;-1:-1:-1;;;;;30525:447:0;;:::i;36261:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36261:123:0;-1:-1:-1;;;;;36261:123:0;;:::i;25777:32::-;;;;;;;;;;;;;:::i;27687:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27687:198:0;-1:-1:-1;;;;;27687:198:0;;:::i;16271:148::-;;;;;;;;;;;;;:::i;26068:50::-;;;;;;;;;;;;;:::i;29212:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29212:120:0;-1:-1:-1;;;;;29212:120:0;;:::i;15628:79::-;;;;;;;;;;;;;:::i;32474:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32474:122:0;;:::i;27398:87::-;;;;;;;;;;;;;:::i;28935:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28935:269:0;;;;;;;;:::i;27893:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27893:167:0;;;;;;;;:::i;32777:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32777:171:0;;;;:::i;32607:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32607:162:0;;:::i;28068:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28068:143:0;;;;;;;;;;:::i;32242:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32242:110:0;-1:-1:-1;;;;;32242:110:0;;:::i;16574:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16574:244:0;-1:-1:-1;;;;;16574:244:0;;:::i;32364:98::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;32438:7:::1;:16:::0;32364:98::o;27307:83::-;27377:5;27370:12;;;;;;;;-1:-1:-1;;27370:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27344:13;;27370:12;;27377:5;;27370:12;;27377:5;27370:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27307:83;:::o;28219:161::-;28294:4;28311:39;28320:12;:10;:12::i;:::-;28334:7;28343:6;28311:8;:39::i;:::-;-1:-1:-1;28368:4:0;28219:161;;;;;:::o;29340:87::-;29409:10;;29340:87;:::o;25878:51::-;;;:::o;27584:95::-;27664:7;;27584:95;:::o;28388:313::-;28486:4;28503:36;28513:6;28521:9;28532:6;28503:9;:36::i;:::-;28550:121;28559:6;28567:12;:10;:12::i;:::-;28581:89;28619:6;28581:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28581:19:0;;;;;;:11;:19;;;;;;28601:12;:10;:12::i;:::-;-1:-1:-1;;;;;28581:33:0;;;;;;;;;;;;-1:-1:-1;28581:33:0;;;:89;:37;:89::i;:::-;28550:8;:121::i;:::-;-1:-1:-1;28689:4:0;28388:313;;;;;:::o;30264:253::-;30330:7;30369;;30358;:18;;30350:73;;;;-1:-1:-1;;;30350:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30434:19;30457:10;:8;:10::i;:::-;30434:33;-1:-1:-1;30485:24:0;:7;30434:33;30485:11;:24::i;:::-;30478:31;;;30264:253;;;;:::o;27493:83::-;27559:9;;;;27493:83;:::o;30980:479::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31062:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31054:60;;;::::0;;-1:-1:-1;;;31054:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31130:9;31125:327;31149:9;:16:::0;31145:20;::::1;31125:327;;;31207:7;-1:-1:-1::0;;;;;31191:23:0::1;:9;31201:1;31191:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31191:12:0::1;:23;31187:254;;;31250:9;31260:16:::0;;-1:-1:-1;;31260:20:0;;;31250:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31235:9:::1;:12:::0;;-1:-1:-1;;;;;31250:31:0;;::::1;::::0;31245:1;;31235:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31235:46:0::1;-1:-1:-1::0;;;;;31235:46:0;;::::1;;::::0;;31300:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31339:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31339:28:0::1;::::0;;31386:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31386:15:0;;;;;-1:-1:-1;;;;;;31386:15:0::1;::::0;;;;;31420:5:::1;;31187:254;31167:3;;31125:327;;;;30980:479:::0;:::o;28709:218::-;28797:4;28814:83;28823:12;:10;:12::i;:::-;28837:7;28846:50;28885:10;28846:11;:25;28858:12;:10;:12::i;:::-;-1:-1:-1;;;;;28846:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;28846:25:0;;;:34;;;;;;;;;;;:38;:50::i;25690:26::-;;;;:::o;29435:377::-;29487:14;29504:12;:10;:12::i;:::-;-1:-1:-1;;;;;29536:19:0;;;;;;:11;:19;;;;;;29487:29;;-1:-1:-1;29536:19:0;;29535:20;29527:77;;;;-1:-1:-1;;;29527:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29616:15;29640:19;29651:7;29640:10;:19::i;:::-;-1:-1:-1;;;;;;;;;29688:15:0;;;;;;:7;:15;;;;;;29615:44;;-1:-1:-1;29688:28:0;;:15;-1:-1:-1;29615:44:0;29688:19;:28::i;:::-;-1:-1:-1;;;;;29670:15:0;;;;;;:7;:15;;;;;:46;29737:7;;:20;;29749:7;29737:11;:20::i;:::-;29727:7;:30;29781:10;;:23;;29796:7;29781:14;:23::i;:::-;29768:10;:36;-1:-1:-1;;;29435:377:0:o;32119:111::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32188:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32188:34:0::1;32218:4;32188:34;::::0;;32119:111::o;29820:436::-;29910:7;29949;;29938;:18;;29930:62;;;;;-1:-1:-1;;;29930:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30008:17;30003:246;;30043:15;30067:19;30078:7;30067:10;:19::i;:::-;-1:-1:-1;30042:44:0;;-1:-1:-1;30101:14:0;;-1:-1:-1;;;;;30101:14:0;30003:246;30150:23;30181:19;30192:7;30181:10;:19::i;:::-;-1:-1:-1;30148:52:0;;-1:-1:-1;30215:22:0;;-1:-1:-1;;;;;30215:22:0;25936:38;;;:::o;26015:40::-;;;;;;;;;:::o;30525:447::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30722:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30721:21;30713:61;;;::::0;;-1:-1:-1;;;30713:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30788:16:0;::::1;30807:1;30788:16:::0;;;:7:::1;:16;::::0;;;;;:20;30785:108:::1;;-1:-1:-1::0;;;;;30864:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30844:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30825:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30785:108:::1;-1:-1:-1::0;;;;;30903:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30903:27:0::1;30926:4;30903:27:::0;;::::1;::::0;;;30941:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30941:23:0::1;::::0;;::::1;::::0;;30525:447::o;36261:123::-;-1:-1:-1;;;;;36349:27:0;36325:4;36349:27;;;:18;:27;;;;;;;;;36261:123::o;25777:32::-;;;;:::o;27687:198::-;-1:-1:-1;;;;;27777:20:0;;27753:7;27777:20;;;:11;:20;;;;;;;;27773:49;;;-1:-1:-1;;;;;;27806:16:0;;;;;;:7;:16;;;;;;27799:23;;27773:49;-1:-1:-1;;;;;27860:16:0;;;;;;:7;:16;;;;;;27840:37;;:19;:37::i;16271:148::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;16378:1:::1;16362:6:::0;;16341:40:::1;::::0;-1:-1:-1;;;;;16362:6:0;;::::1;::::0;16341:40:::1;::::0;16378:1;;16341:40:::1;16409:1;16392:19:::0;;-1:-1:-1;;;;;;16392:19:0::1;::::0;;16271:148::o;26068:50::-;;;;:::o;29212:120::-;-1:-1:-1;;;;;29304:20:0;29280:4;29304:20;;;:11;:20;;;;;;;;;29212:120::o;15628:79::-;15666:7;15693:6;-1:-1:-1;;;;;15693:6:0;15628:79;:::o;32474:122::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;32560:13:::1;:28:::0;32474:122::o;27398:87::-;27470:7;27463:14;;;;;;;;-1:-1:-1;;27463:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27437:13;;27463:14;;27470:7;;27463:14;;27470:7;27463:14;;;;;;;;;;;;;;;;;;;;;;;;28935:269;29028:4;29045:129;29054:12;:10;:12::i;:::-;29068:7;29077:96;29116:15;29077:96;;;;;;;;;;;;;;;;;:11;:25;29089:12;:10;:12::i;:::-;-1:-1:-1;;;;;29077:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;29077:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;27893:167::-;27971:4;27988:42;27998:12;:10;:12::i;:::-;28012:9;28023:6;27988:9;:42::i;32777:171::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;32854:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;32854:32:0;;::::1;::::0;;;::::1;::::0;;;32902:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;32777:171:::0;:::o;32607:162::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;32701:60:::1;32745:5;32701:25;32713:12;32701:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;32686:12;:75:::0;-1:-1:-1;32607:162:0:o;28068:143::-;-1:-1:-1;;;;;28176:18:0;;;28149:7;28176:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28068:143::o;32242:110::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32309:27:0::1;32339:5;32309:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32309:35:0::1;::::0;;32242:110::o;16574:244::-;15850:12;:10;:12::i;:::-;15840:6;;-1:-1:-1;;;;;15840:6:0;;;:22;;;15832:67;;;;;-1:-1:-1;;;15832:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15832:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16663:22:0;::::1;16655:73;;;;-1:-1:-1::0;;;16655:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16765:6;::::0;;16744:38:::1;::::0;-1:-1:-1;;;;;16744:38:0;;::::1;::::0;16765:6;::::1;::::0;16744:38:::1;::::0;::::1;16793:6;:17:::0;;-1:-1:-1;;;;;;16793:17:0::1;-1:-1:-1::0;;;;;16793:17:0;;;::::1;::::0;;;::::1;::::0;;16574:244::o;8068:106::-;8156:10;8068:106;:::o;36392:337::-;-1:-1:-1;;;;;36485:19:0;;36477:68;;;;-1:-1:-1;;;36477:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36564:21:0;;36556:68;;;;-1:-1:-1;;;36556:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36637:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36689:32;;;;;;;;;;;;;;;;;36392:337;;;:::o;36737:1813::-;-1:-1:-1;;;;;36859:18:0;;36851:68;;;;-1:-1:-1;;;36851:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36938:16:0;;36930:64;;;;-1:-1:-1;;;36930:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37022:1;37013:6;:10;37005:64;;;;-1:-1:-1;;;37005:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37091:7;:5;:7::i;:::-;-1:-1:-1;;;;;37083:15:0;:4;-1:-1:-1;;;;;37083:15:0;;;:32;;;;;37108:7;:5;:7::i;:::-;-1:-1:-1;;;;;37102:13:0;:2;-1:-1:-1;;;;;37102:13:0;;;37083:32;37080:125;;;37148:12;;37138:6;:22;;37130:75;;;;-1:-1:-1;;;37130:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37500:28;37531:24;37549:4;37531:9;:24::i;:::-;37500:55;;37603:12;;37579:20;:36;37576:112;;-1:-1:-1;37664:12:0;;37576:112;37759:29;;37735:53;;;;;;;37817;;-1:-1:-1;37854:16:0;;;;37853:17;37817:53;:91;;;;;37895:13;-1:-1:-1;;;;;37887:21:0;:4;-1:-1:-1;;;;;37887:21:0;;;37817:91;:129;;;;-1:-1:-1;37925:21:0;;;;;;;37817:129;37799:318;;;37996:29;;37973:52;;38069:36;38084:20;38069:14;:36::i;:::-;-1:-1:-1;;;;;38325:24:0;;38198:12;38325:24;;;:18;:24;;;;;;38213:4;;38325:24;;;:50;;-1:-1:-1;;;;;;38353:22:0;;;;;;:18;:22;;;;;;;;38325:50;38322:96;;;-1:-1:-1;38401:5:0;38322:96;38504:38;38519:4;38524:2;38527:6;38534:7;38504:14;:38::i;:::-;36737:1813;;;;;;:::o;4478:192::-;4564:7;4600:12;4592:6;;;;4584:29;;;;-1:-1:-1;;;4584:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4636:5:0;;;4478:192::o;34411:163::-;34452:7;34473:15;34490;34509:19;:17;:19::i;:::-;34472:56;;-1:-1:-1;34472:56:0;-1:-1:-1;34546:20:0;34472:56;;34546:11;:20::i;:::-;34539:27;;;;34411:163;:::o;5876:132::-;5934:7;5961:39;5965:1;5968;5961:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5954:46;5876:132;-1:-1:-1;;;5876:132:0:o;3575:181::-;3633:7;3665:5;;;3689:6;;;;3681:46;;;;;-1:-1:-1;;;3681:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33209:419;33268:7;33277;33286;33295;33304;33313;33334:23;33359:12;33373:18;33395:20;33407:7;33395:11;:20::i;:::-;33333:82;;;;;;33427:15;33444:23;33469:12;33485:50;33497:7;33506:4;33512:10;33524;:8;:10::i;:::-;33485:11;:50::i;:::-;33426:109;;;;-1:-1:-1;33426:109:0;;-1:-1:-1;33586:15:0;;-1:-1:-1;33603:4:0;;-1:-1:-1;33609:10:0;;-1:-1:-1;33209:419:0;;-1:-1:-1;;;;;33209:419:0:o;4039:136::-;4097:7;4124:43;4128:1;4131;4124:43;;;;;;;;;;;;;;;;;:3;:43::i;4929:471::-;4987:7;5232:6;5228:47;;-1:-1:-1;5262:1:0;5255:8;;5228:47;5299:5;;;5303:1;5299;:5;:1;5323:5;;;;;:10;5315:56;;;;-1:-1:-1;;;5315:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38558:985;26500:16;:23;;-1:-1:-1;;26500:23:0;26519:4;26500:23;;;:16;38709:27:::1;:20:::0;38734:1:::1;38709:24;:27::i;:::-;38694:42:::0;-1:-1:-1;38747:17:0::1;38767:30;:20:::0;38694:42;38767:24:::1;:30::i;:::-;38747:50:::0;-1:-1:-1;39100:21:0::1;39166:22;39183:4:::0;39166:16:::1;:22::i;:::-;39319:18;39340:41;:21;39366:14:::0;39340:25:::1;:41::i;:::-;39319:62;;39431:35;39444:9;39455:10;39431:12;:35::i;:::-;39492:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;26546:16:0;:24;;-1:-1:-1;;26546:24:0;;;-1:-1:-1;;;38558:985:0:o;40742:834::-;40853:7;40849:40;;40875:14;:12;:14::i;:::-;-1:-1:-1;;;;;40914:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40938:22:0;;;;;;:11;:22;;;;;;;;40937:23;40914:46;40910:597;;;40977:48;40999:6;41007:9;41018:6;40977:21;:48::i;:::-;40910:597;;;-1:-1:-1;;;;;41048:19:0;;;;;;:11;:19;;;;;;;;41047:20;:46;;;;-1:-1:-1;;;;;;41071:22:0;;;;;;:11;:22;;;;;;;;41047:46;41043:464;;;41110:46;41130:6;41138:9;41149:6;41110:19;:46::i;41043:464::-;-1:-1:-1;;;;;41179:19:0;;;;;;:11;:19;;;;;;;;41178:20;:47;;;;-1:-1:-1;;;;;;41203:22:0;;;;;;:11;:22;;;;;;;;41202:23;41178:47;41174:333;;;41242:44;41260:6;41268:9;41279:6;41242:17;:44::i;41174:333::-;-1:-1:-1;;;;;41308:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41331:22:0;;;;;;:11;:22;;;;;;;;41308:45;41304:203;;;41370:48;41392:6;41400:9;41411:6;41370:21;:48::i;41304:203::-;41451:44;41469:6;41477:9;41488:6;41451:17;:44::i;:::-;41531:7;41527:41;;41553:15;:13;:15::i;:::-;40742:834;;;;:::o;34582:561::-;34679:7;;34715;;34632;;;;;34739:289;34763:9;:16;34759:20;;34739:289;;;34829:7;34805;:21;34813:9;34823:1;34813:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34813:12:0;34805:21;;;;;;;;;;;;;:31;;:66;;;34864:7;34840;:21;34848:9;34858:1;34848:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34848:12:0;34840:21;;;;;;;;;;;;;:31;34805:66;34801:97;;;34881:7;;34890;;34873:25;;;;;;;;;34801:97;34923:34;34935:7;:21;34943:9;34953:1;34943:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34943:12:0;34935:21;;;;;;;;;;;;;34923:7;;:11;:34::i;:::-;34913:44;;34982:34;34994:7;:21;35002:9;35012:1;35002:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35002:12:0;34994:21;;;;;;;;;;;;;34982:7;;:11;:34::i;:::-;34972:44;-1:-1:-1;34781:3:0;;34739:289;;;-1:-1:-1;35064:7:0;;35052;;:20;;:11;:20::i;:::-;35042:7;:30;35038:61;;;35082:7;;35091;;35074:25;;;;;;;;35038:61;35118:7;;-1:-1:-1;35127:7:0;-1:-1:-1;34582:561:0;;;:::o;6504:278::-;6590:7;6625:12;6618:5;6610:28;;;;-1:-1:-1;;;6610:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6649:9;6665:1;6661;:5;;;;;;;6504:278;-1:-1:-1;;;;;6504:278:0:o;33636:330::-;33696:7;33705;33714;33734:12;33749:24;33765:7;33749:15;:24::i;:::-;33734:39;;33784:18;33805:30;33827:7;33805:21;:30::i;:::-;33784:51;-1:-1:-1;33846:23:0;33872:33;33784:51;33872:17;:7;33884:4;33872:11;:17::i;:::-;:21;;:33::i;:::-;33846:59;33941:4;;-1:-1:-1;33947:10:0;;-1:-1:-1;33636:330:0;;-1:-1:-1;;;33636:330:0:o;33974:429::-;34089:7;;;;34145:24;:7;34157:11;34145;:24::i;:::-;34127:42;-1:-1:-1;34180:12:0;34195:21;:4;34204:11;34195:8;:21::i;:::-;34180:36;-1:-1:-1;34227:18:0;34248:27;:10;34263:11;34248:14;:27::i;:::-;34227:48;-1:-1:-1;34286:23:0;34312:33;34227:48;34312:17;:7;34324:4;34312:11;:17::i;:33::-;34364:7;;;;-1:-1:-1;34390:4:0;;-1:-1:-1;33974:429:0;;-1:-1:-1;;;;;;;33974:429:0:o;39551:589::-;39701:16;;;39715:1;39701:16;;;39677:21;39701:16;;;;;39677:21;39701:16;;;;;;;;;;-1:-1:-1;39701:16:0;39677:40;;39746:4;39728;39733:1;39728:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;39728:23:0;;;-1:-1:-1;;;;;39728:23:0;;;;;39772:15;-1:-1:-1;;;;;39772:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39772:22:0;39762:7;;:4;;39767:1;;39762:7;;;;;;;;;;;:32;-1:-1:-1;;;;;39762:32:0;;;-1:-1:-1;;;;;39762:32:0;;;;;39807:62;39824:4;39839:15;39857:11;39807:8;:62::i;:::-;39908:15;-1:-1:-1;;;;;39908:66:0;;39989:11;40015:1;40059:4;40086;40106:15;39908:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39908:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40148:513;40296:62;40313:4;40328:15;40346:11;40296:8;:62::i;:::-;40401:15;-1:-1:-1;;;;;40401:31:0;;40440:9;40473:4;40493:11;40519:1;40562;40605:7;:5;:7::i;:::-;40627:15;40401:252;;;;;;;;;;;;;-1:-1:-1;;;;;40401:252:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40401:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35862:250;35908:7;;:12;:34;;;;-1:-1:-1;35924:13:0;;:18;35908:34;35905:46;;;35944:7;;35905:46;35989:7;;;35971:15;:25;36031:13;;;36007:21;:37;-1:-1:-1;36065:11:0;;;;36087:17;35862:250;:::o;42688:566::-;42791:15;42808:23;42833:12;42847:23;42872:12;42886:18;42908:19;42919:7;42908:10;:19::i;:::-;-1:-1:-1;;;;;42956:15:0;;;;;;:7;:15;;;;;;42790:137;;-1:-1:-1;42790:137:0;;-1:-1:-1;42790:137:0;;-1:-1:-1;42790:137:0;-1:-1:-1;42790:137:0;-1:-1:-1;42790:137:0;-1:-1:-1;42956:28:0;;42976:7;42956:19;:28::i;:::-;-1:-1:-1;;;;;42938:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43013:7;:15;;;;:28;;43033:7;43013:19;:28::i;:::-;-1:-1:-1;;;;;42995:15:0;;;;;;;:7;:15;;;;;;:46;;;;43073:18;;;;;;;:39;;43096:15;43073:22;:39::i;:::-;-1:-1:-1;;;;;43052:18:0;;;;;;:7;:18;;;;;:60;43126:26;43141:10;43126:14;:26::i;:::-;43163:23;43175:4;43181;43163:11;:23::i;:::-;43219:9;-1:-1:-1;;;;;43202:44:0;43211:6;-1:-1:-1;;;;;43202:44:0;;43230:15;43202:44;;;;;;;;;;;;;;;;;;42688:566;;;;;;;;;:::o;42094:586::-;42195:15;42212:23;42237:12;42251:23;42276:12;42290:18;42312:19;42323:7;42312:10;:19::i;:::-;-1:-1:-1;;;;;42360:15:0;;;;;;:7;:15;;;;;;42194:137;;-1:-1:-1;42194:137:0;;-1:-1:-1;42194:137:0;;-1:-1:-1;42194:137:0;-1:-1:-1;42194:137:0;-1:-1:-1;42194:137:0;-1:-1:-1;42360:28:0;;42194:137;42360:19;:28::i;:::-;-1:-1:-1;;;;;42342:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42420:18;;;;;:7;:18;;;;;:39;;42443:15;42420:22;:39::i;:::-;-1:-1:-1;;;;;42399:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42491:7;:18;;;;:39;;42514:15;42491:22;:39::i;41584:502::-;41683:15;41700:23;41725:12;41739:23;41764:12;41778:18;41800:19;41811:7;41800:10;:19::i;:::-;-1:-1:-1;;;;;41848:15:0;;;;;;:7;:15;;;;;;41682:137;;-1:-1:-1;41682:137:0;;-1:-1:-1;41682:137:0;;-1:-1:-1;41682:137:0;-1:-1:-1;41682:137:0;-1:-1:-1;41682:137:0;-1:-1:-1;41848:28:0;;41682:137;41848:19;:28::i;31465:642::-;31568:15;31585:23;31610:12;31624:23;31649:12;31663:18;31685:19;31696:7;31685:10;:19::i;:::-;-1:-1:-1;;;;;31733:15:0;;;;;;:7;:15;;;;;;31567:137;;-1:-1:-1;31567:137:0;;-1:-1:-1;31567:137:0;;-1:-1:-1;31567:137:0;-1:-1:-1;31567:137:0;-1:-1:-1;31567:137:0;-1:-1:-1;31733:28:0;;31753:7;31733:19;:28::i;:::-;-1:-1:-1;;;;;31715:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31790:7;:15;;;;:28;;31810:7;31790:19;:28::i;36124:125::-;36178:15;;36168:7;:25;36220:21;;36204:13;:37;36124:125::o;35522:154::-;35586:7;35613:55;35652:5;35613:20;35625:7;;35613;:11;;:20;;;;:::i;35684:166::-;35754:7;35781:61;35826:5;35781:26;35793:13;;35781:7;:11;;:26;;;;:::i;35155:355::-;35218:19;35241:10;:8;:10::i;:::-;35218:33;-1:-1:-1;35262:18:0;35283:27;:10;35218:33;35283:14;:27::i;:::-;35362:4;35346:22;;;;:7;:22;;;;;;35262:48;;-1:-1:-1;35346:38:0;;35262:48;35346:26;:38::i;:::-;35337:4;35321:22;;;;:7;:22;;;;;;;;:63;;;;35398:11;:26;;;;;;35395:107;;;35480:4;35464:22;;;;:7;:22;;;;;;:38;;35491:10;35464:26;:38::i;:::-;35455:4;35439:22;;;;:7;:22;;;;;:63;35395:107;35155:355;;;:::o;33054:147::-;33132:7;;:17;;33144:4;33132:11;:17::i;:::-;33122:7;:27;33173:10;;:20;;33188:4;33173:14;:20::i;:::-;33160:10;:33;-1:-1:-1;;33054:147:0:o

Swarm Source

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