Contract 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e6

 

Contract Overview

Balance:
0.006909084501361224 BNB

BNB Value:
$2.53 (@ $366.90/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x016171d432ce5974777c5e7c475eaeaa4ee802f83c0bdaf66baeb2ad960936aeApprove84387762021-06-19 17:53:1293 days 9 hrs ago0xe9bc8f73d853931fe9f68902880a41448a790401 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x577fc7c2340de72fb387dc1d9c4cf560adecbfcb744ac7870186a6f255d62aa8Approve84387022021-06-19 17:49:3093 days 9 hrs ago0x137c832944482a790d2832ef719dcf7604b04dc2 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xa33ed06588d6af601bcfe463e90c17ea02bc781a78da05a8c98d93bea8a248c5Approve84386612021-06-19 17:47:2793 days 9 hrs ago0xd502158c2f25b004579ade575ff7ca44592837ed IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x4288635e8932e6c06836614befbfa05c7f701b9868d4d73b7d2374c6b980b3dcApprove84385622021-06-19 17:42:3093 days 9 hrs ago0x85cfe8d803fbf61040443299672d5b05324daf89 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x4ee0a6561373098e287bc7f1b264abf8531af4eb597f4c3282330cb44a0c5d18Approve84385052021-06-19 17:39:3993 days 9 hrs ago0xb5f6c29513219d05417cb7877cf1378f1b797a06 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x680f1a25be4db71e9c73df0e93f517705bbd68e169d3341f14c03708148e20a7Approve84385042021-06-19 17:39:3693 days 9 hrs ago0x38ca5e768c46d7aad68276f86bc5ba770e0641c3 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x4bb1442e1fab51fa70c77e4385f393590cc561bf35a47578fbb412f2ec8bce05Approve84384302021-06-19 17:35:5493 days 9 hrs ago0x7aa5bc7c0df96ab0de8f3207f1e2e880fa3f14bd IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xcf5f66531ff82cad8cb4f93646b1e7f67341474d2169b3dada35de5dddf2feb9Approve84384172021-06-19 17:35:1593 days 9 hrs ago0xfd9ad6990db79ef23f039a0f9b42f41c3e804229 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xe578bfd4d30c5cd03ba58dbc4f2d98740a92c4f038854422768302bab7df2534Approve84384172021-06-19 17:35:1593 days 9 hrs ago0x93cab705129519bd5c8243525ac1cbaf43b25324 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x92b89b6c0ce13bda8dd8acba07dc125f43def396d6f4a4e8c1da9e55144cf209Approve84384162021-06-19 17:35:1293 days 9 hrs ago0xf8f4fd576f2af7a43f551fe06d94193f77878f50 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x15ab13f68ee004cd1e94ea0227c98d36bf72001ae26fb7f407625a219e8aebf9Approve84383992021-06-19 17:34:2193 days 9 hrs ago0xf0f5646d8c7feb5f65812d7ea6d22ebbf322b9e7 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x37621fd44683a589d3b51252e7a5e7ba4e5f4130a0725171f4351b82d20acacdApprove84383992021-06-19 17:34:2193 days 9 hrs ago0x5ef9505a310a83ce79d7b93cbddd7432133f92c9 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xc4c51277467a1965942762c69d3f431d566172004f3d44b5751ae4da9356552eApprove84383952021-06-19 17:34:0993 days 9 hrs ago0x215f18cec31cb1dd097aba1fbc7b88423990bfbe IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x438df21a61d8dbdd366fee89cd98babc9e56442842b14b1d73776908259058caApprove84383812021-06-19 17:33:2793 days 9 hrs ago0xecd0fb864ffc0c973d4b3dc468aa62025e6dc59c IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xd6434636a519b82c3a03adbe2d0a621225b20d83542aeb21a4f71b484e912916Approve84383802021-06-19 17:33:2493 days 9 hrs ago0x7ca251edfccd948abc80c10b6a36ee6e84c174ea IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x1d58e8213510465f1592256c78354cfa24991c0d3f3364d707e9fc29b26c7926Approve84383752021-06-19 17:33:0993 days 9 hrs ago0xd28136c988b3b54c0ff90139d534cae9617f8c52 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x7b03b188ce85799252d7793ca59ae3133f954bc494f3eb65d3e8c8aa268eeaa8Approve84383522021-06-19 17:32:0093 days 9 hrs ago0x8e1f1f0631d77ee20b5a66e5a8e9351c17e6305d IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x2cd49c49daeafc80b1ac57a39fd0cab05fe8edc335b087156d2e46168e1f6454Approve84383502021-06-19 17:31:5493 days 9 hrs ago0xeb1fe9ef273015974603c9f55d7038659e9e8d90 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xdd0b024fc087e17d2d320c6bd4876f8b602b8d8f149d5a8c97a71bb9a0fad07cApprove84383362021-06-19 17:31:1293 days 9 hrs ago0xfc407d5d354c31fd7f639ed36bba67c727a30759 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x959adf64a2e5c129af111edfc6825b9840908c15041bc82206b7cd5995fb1d6fApprove84383312021-06-19 17:30:5793 days 9 hrs ago0x1702215f6095e497b29d1f3b8b469704f1b75083 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x18b7e55c74f906fb6d8488ac7cc9e6b3e6608bfb4bbe7af69e692a79514a19c7Approve84383222021-06-19 17:30:3093 days 9 hrs ago0xd3840a07c6510ee17cdec95704776e29b5b7d4d2 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x57f82c197915d5fa098a03b6e4400aeae1e26dd0d1a06b224ae0570d4e546be1Approve84383182021-06-19 17:30:1893 days 9 hrs ago0x0bb88592a0fad5201f2244f7406a06ca65a8c4b6 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x7b9114be2c77f898654780792da3694210bc2cd8ba8b6e298bd52fe384f3c79cApprove84383172021-06-19 17:30:1593 days 9 hrs ago0x9b0b5fe22cdcfb964b1d500ae091fabee3fbc69c IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0xceb06031b54b7bc2e3438e04c83665812b721190e07661694f46d5e0f4612f54Approve84383162021-06-19 17:30:1293 days 9 hrs ago0xab153789f276af705918866c4ce7630b24f238a0 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00022263
0x0a524ed7451cbf50e7c01c671075b4312a3d18a79cc1d1b2dd1bf0f4d1615ecbRenounce Ownersh...84383152021-06-19 17:30:0993 days 9 hrs ago0xaebbc9dd1339a0febc48a076476ab0ea6edf21d4 IN  0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60 BNB0.00007665
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc4ee3a1cf0109f754a4663491fbf8928e93f7c45692e16c014e1dee85ed8f74184667142021-06-20 17:11:4792 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000071311217075271 BNB
0xc4ee3a1cf0109f754a4663491fbf8928e93f7c45692e16c014e1dee85ed8f74184667142021-06-20 17:11:4792 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000118852028458789 BNB
0x549b9e6af99ee504a714c85ef9201776d58b9350a8b6cc0505ece2a602664f8584667122021-06-20 17:11:4192 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000073828018257828 BNB
0x549b9e6af99ee504a714c85ef9201776d58b9350a8b6cc0505ece2a602664f8584667122021-06-20 17:11:4192 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000123046697096381 BNB
0x93f51c07c7788d5797e8c1e6bb7685d075d5c20b694deabeb8e359c85d8108ca84667072021-06-20 17:11:2692 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000076480371660936 BNB
0x93f51c07c7788d5797e8c1e6bb7685d075d5c20b694deabeb8e359c85d8108ca84667072021-06-20 17:11:2692 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000127467286101562 BNB
0x88663d591f6a7b61b9b9230362377719405eff6d14196d1942495a2a8dd50d1484667062021-06-20 17:11:2392 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000079278188931198 BNB
0x88663d591f6a7b61b9b9230362377719405eff6d14196d1942495a2a8dd50d1484667062021-06-20 17:11:2392 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000132130314885332 BNB
0x1d3c9d72eb134bf49167a8ae7b113ce640ee36cf3cc3c41692eca88579f8438384667012021-06-20 17:11:0892 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.00008223230452005 BNB
0x1d3c9d72eb134bf49167a8ae7b113ce640ee36cf3cc3c41692eca88579f8438384667012021-06-20 17:11:0892 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000137053840866752 BNB
0x19323ebf18970dcfad283fb361b4d307375c8b1b322359918d3234e546d6a38984666992021-06-20 17:11:0292 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000085354580740323 BNB
0x19323ebf18970dcfad283fb361b4d307375c8b1b322359918d3234e546d6a38984666992021-06-20 17:11:0292 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000142257634567209 BNB
0xd8295f6a121851f50fb2436238876ff999ad54012be73de1506e31b59078365984666982021-06-20 17:10:5992 days 10 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000088658027046279 BNB
0xd8295f6a121851f50fb2436238876ff999ad54012be73de1506e31b59078365984666982021-06-20 17:10:5992 days 10 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000147763378410468 BNB
0xe0be1da8fbe9dff98798b1baada8a893b1b92222e64f6b90209d24fae302edae84414282021-06-19 20:06:0193 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000091954485270339 BNB
0xe0be1da8fbe9dff98798b1baada8a893b1b92222e64f6b90209d24fae302edae84414282021-06-19 20:06:0193 days 7 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000153257475450569 BNB
0xdc4556f19514bf5368ec15df0bb99afe2b6514f5a20cff1f33b08065b96897a584414062021-06-19 20:04:5593 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000095228057891136 BNB
0xdc4556f19514bf5368ec15df0bb99afe2b6514f5a20cff1f33b08065b96897a584414062021-06-19 20:04:5593 days 7 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.00015871342981856 BNB
0x66ad1930f960bfa42499eea1a70888ac7e97a7980546986fcd596f99f249f2b784413982021-06-19 20:04:3193 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000098904893911131 BNB
0x66ad1930f960bfa42499eea1a70888ac7e97a7980546986fcd596f99f249f2b784413982021-06-19 20:04:3193 days 7 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000164841489851889 BNB
0x71e491e8e39116d3e415574a16e1b326d636fd013b81ae1b38127fba2db05b2984413892021-06-19 20:04:0493 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000103034126296815 BNB
0x71e491e8e39116d3e415574a16e1b326d636fd013b81ae1b38127fba2db05b2984413892021-06-19 20:04:0493 days 7 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000171723543828028 BNB
0x7003b3ec7a341c095c82f6dc2ca25d83a1cd1f351f807bfe98c1e6c7a6e558a484411962021-06-19 19:54:2593 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000107427342600144 BNB
0x7003b3ec7a341c095c82f6dc2ca25d83a1cd1f351f807bfe98c1e6c7a6e558a484411962021-06-19 19:54:2593 days 7 hrs ago PancakeSwap: Router v2 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60.000179045571000242 BNB
0x54fb2f3fca529332f0d2d34cb3e491d10ef282f22ed6d93cb4ce7e77c858adee84411862021-06-19 19:53:5593 days 7 hrs ago 0xe0781d41d32ff512b5822b02a6e59c5e2927b9e60xaebbc9dd1339a0febc48a076476ab0ea6edf21d40.000112107534270483 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DragonLegacy

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-19
*/

/**
    DragonLegacy
    
    I make this #DragonLegacy to hand over it to the community.
    Create the community by yourself if you are interested.   
    I suggest a telegram group name for you to create: https://t.me/DragonLegacyBSC

   Token features:
 * 1) 1% tax is collected and distributed to holders
 * 2) 5% buyback tax is collected, it is used to buyback the tokens and increase liquidity
 * 3) 5% burn tax for constant token burn keeps a high floor price
   
   1,000,000,000,000,000 total supply
   5,000,000,000,000 DragonLegacy max limit for per trade

   5% fee for liquidity will go to an address that the contract creates, 
   and the contract will sell it and add to liquidity automatically, 
   it's the best part of the #DragonLegacy idea, increasing the liquidity pool automatically, 
   help the pool grow from the small init pool.

 */


// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// 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 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 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 DragonLegacy is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xaebbc9dd1339a0fEBC48A076476AB0ea6edf21D4); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    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 = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "DragonLegacy";
    string private _symbol = "DGL";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 5;
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 public marketingDivisor = 3;
    
    uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

    function _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.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
        
    }
    

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

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

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

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    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
        );
    }

    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]) {
            _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);
    }

    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 _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 tBurn = calculateBurnFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tBurn);
        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 _takeBurn(uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn);
        if(_isExcluded[deadAddress])
            _tOwned[deadAddress] = _tOwned[deadAddress].add(tBurn);
    }
    
    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 calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousBurnFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    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 setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        _burnFee = burnFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

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":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600380546001600160a01b03191673aebbc9dd1339a0febc48a076476ab0ea6edf21d41790556ddead00000000000000000000000060805269d3c21bcecceda1000000600a8190556200005a9060001962000534565b6200006890600019620004d3565b600b5560408051808201909152600c8082526b447261676f6e4c656761637960a01b6020909201918252620000a091600d91620003fd565b50604080518082019091526003808252621111d360ea1b6020909201918252620000cd91600e91620003fd565b50600f805460ff19166009179055600160108190556011556005601281905560138190556014819055601555600360165569010f0cf064dd59200000601755680ad78ebc5ac6200000601855670de0b6b3a7640000601955601a80546201010062ffff00199091161790553480156200014557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b815291517310ed43c718714eb63d5aa57b78b54704e256024e93849363c45a0155938181019391829003018186803b158015620001e757600080fd5b505afa158015620001fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002229190620004a3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026b57600080fd5b505afa15801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a69190620004a3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ef57600080fd5b505af115801562000304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032a9190620004a3565b6001600160601b0319606091821b811660c0529082901b1660a0526001600760006200035e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620003a63390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003ee91815260200190565b60405180910390a35062000555565b8280546200040b90620004f7565b90600052602060002090601f0160209004810192826200042f57600085556200047a565b82601f106200044a57805160ff19168380011785556200047a565b828001600101855582156200047a579182015b828111156200047a5782518255916020019190600101906200045d565b50620004889291506200048c565b5090565b5b808211156200048857600081556001016200048d565b600060208284031215620004b5578081fd5b81516001600160a01b0381168114620004cc578182fd5b9392505050565b600082821015620004f257634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200050c57607f821691505b602082108114156200052e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200055057634e487b7160e01b81526012600452602481fd5b500690565b60805160601c60a05160601c60c05160601c612dbd620005bf6000396000818161056f01526119f80152600081816103a20152818161212f0152818161220501528181612241015281816123cb01526124d501526000818161042301526125000152612dbd6000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063a9059cbb116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b371461090f578063ec28438a1461092f578063f0f165af1461094f578063f2fde38b1461096f57600080fd5b8063d6b513cf14610893578063dd467064146108a9578063dd62ed3e146108c957600080fd5b8063a9059cbb146107e8578063b0cb81f114610808578063bdc653ef14610828578063c0b0fda21461083d578063c49b9a8014610853578063cea269581461087357600080fd5b80638ee88c5311610149578063a073d37f11610123578063a073d37f1461077e578063a457c2d714610793578063a5ece941146107b3578063a69df4b5146107d357600080fd5b80638ee88c5314610729578063906e9dd01461074957806395d89b411461076957600080fd5b806370a0823114610667578063715018a6146106875780637d1db4a51461069c57806382d2a4bb146106b257806388f82020146106d25780638da5cb5b1461070b57600080fd5b8063395093511161024f5780634a74bb0211610208578063557ed1ba116101e2578063557ed1ba14610609578063602bc62b1461061c5780636053a0e3146106315780636bc87c3a1461065157600080fd5b80634a74bb021461059157806352390c02146105b05780635342acb4146105d057600080fd5b806339509351146104c75780633b124fe7146104e75780633bd5d173146104fd578063437823ec1461051d5780634549b0391461053d57806349bd5a5e1461055d57600080fd5b806323b872dd116102a157806323b872dd146103f157806327c8f8351461041157806329370cc6146104455780632d83811914610465578063313ce567146104855780633685d419146104a757600080fd5b8063061c82d0146102f457806306fdde0314610316578063095ea7b31461034157806313114a9d146103715780631694505e1461039057806318160ddd146103dc57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612a88565b61098f565b005b34801561032257600080fd5b5061032b6109c7565b6040516103389190612b43565b60405180910390f35b34801561034d57600080fd5b5061036161035c366004612a43565b610a59565b6040519015158152602001610338565b34801561037d57600080fd5b50600c545b604051908152602001610338565b34801561039c57600080fd5b506103c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610338565b3480156103e857600080fd5b50600a54610382565b3480156103fd57600080fd5b5061036161040c366004612a03565b610a70565b34801561041d57600080fd5b506103c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561045157600080fd5b50610314610460366004612a6e565b610ad9565b34801561047157600080fd5b50610382610480366004612a88565b610b59565b34801561049157600080fd5b50600f5460405160ff9091168152602001610338565b3480156104b357600080fd5b506103146104c2366004612993565b610bdd565b3480156104d357600080fd5b506103616104e2366004612a43565b610dcc565b3480156104f357600080fd5b5061038260105481565b34801561050957600080fd5b50610314610518366004612a88565b610e02565b34801561052957600080fd5b50610314610538366004612993565b610eec565b34801561054957600080fd5b50610382610558366004612aa0565b610f3a565b34801561056957600080fd5b506103c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561059d57600080fd5b50601a5461036190610100900460ff1681565b3480156105bc57600080fd5b506103146105cb366004612993565b610fc7565b3480156105dc57600080fd5b506103616105eb366004612993565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561061557600080fd5b5042610382565b34801561062857600080fd5b50600254610382565b34801561063d57600080fd5b50601a546103619062010000900460ff1681565b34801561065d57600080fd5b5061038260125481565b34801561067357600080fd5b50610382610682366004612993565b61111a565b34801561069357600080fd5b50610314611179565b3480156106a857600080fd5b5061038260175481565b3480156106be57600080fd5b506103146106cd366004612a88565b6111db565b3480156106de57600080fd5b506103616106ed366004612993565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561071757600080fd5b506000546001600160a01b03166103c4565b34801561073557600080fd5b50610314610744366004612a88565b61121d565b34801561075557600080fd5b50610314610764366004612993565b61124c565b34801561077557600080fd5b5061032b611298565b34801561078a57600080fd5b50601854610382565b34801561079f57600080fd5b506103616107ae366004612a43565b6112a7565b3480156107bf57600080fd5b506003546103c4906001600160a01b031681565b3480156107df57600080fd5b506103146112f6565b3480156107f457600080fd5b50610361610803366004612a43565b6113fc565b34801561081457600080fd5b50610314610823366004612a88565b611409565b34801561083457600080fd5b50601954610382565b34801561084957600080fd5b5061038260145481565b34801561085f57600080fd5b5061031461086e366004612a6e565b611438565b34801561087f57600080fd5b5061031461088e366004612a88565b6114ab565b34801561089f57600080fd5b5061038260165481565b3480156108b557600080fd5b506103146108c4366004612a88565b6114da565b3480156108d557600080fd5b506103826108e43660046129cb565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561091b57600080fd5b5061031461092a366004612993565b61155f565b34801561093b57600080fd5b5061031461094a366004612a88565b6115aa565b34801561095b57600080fd5b5061031461096a366004612a88565b6115d9565b34801561097b57600080fd5b5061031461098a366004612993565b611608565b6000546001600160a01b031633146109c25760405162461bcd60e51b81526004016109b990612b96565b60405180910390fd5b601055565b6060600d80546109d690612c96565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290612c96565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b6000610a663384846116e0565b5060015b92915050565b6000610a7d848484611804565b610acf8433610aca85604051806060016040528060288152602001612d1b602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611aee565b6116e0565b5060019392505050565b6000546001600160a01b03163314610b035760405162461bcd60e51b81526004016109b990612b96565b601a8054821515620100000262ff0000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610b4e90831515815260200190565b60405180910390a150565b6000600b54821115610bc05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109b9565b6000610bca611b28565b9050610bd68382611b4b565b9392505050565b6000546001600160a01b03163314610c075760405162461bcd60e51b81526004016109b990612b96565b6001600160a01b03811660009081526008602052604090205460ff16610c6f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b9565b60005b600954811015610dc857816001600160a01b031660098281548110610ca757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610db65760098054610cd290600190612c7f565b81548110610cf057634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610d2a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610d9057634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dc081612cd1565b915050610c72565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610a66918590610aca9086611b8d565b3360008181526008602052604090205460ff1615610e775760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109b9565b6000610e8283611bec565b505050506001600160a01b038416600090815260046020526040902054919250610eae91905082611c3b565b6001600160a01b038316600090815260046020526040902055600b54610ed49082611c3b565b600b55600c54610ee49084611b8d565b600c55505050565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526004016109b990612b96565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a54831115610f8e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109b9565b81610fad576000610f9e84611bec565b50939550610a6a945050505050565b6000610fb884611bec565b50929550610a6a945050505050565b6000546001600160a01b03163314610ff15760405162461bcd60e51b81526004016109b990612b96565b6001600160a01b03811660009081526008602052604090205460ff161561105a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109b9565b6001600160a01b038116600090815260046020526040902054156110b4576001600160a01b03811660009081526004602052604090205461109a90610b59565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526008602052604081205460ff161561115757506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610a6a90610b59565b6000546001600160a01b031633146111a35760405162461bcd60e51b81526004016109b990612b96565b600080546040516001600160a01b0390911690600080516020612d43833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112055760405162461bcd60e51b81526004016109b990612b96565b61121781670de0b6b3a7640000612c60565b60195550565b6000546001600160a01b031633146112475760405162461bcd60e51b81526004016109b990612b96565b601255565b6000546001600160a01b031633146112765760405162461bcd60e51b81526004016109b990612b96565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e80546109d690612c96565b6000610a663384610aca85604051806060016040528060258152602001612d63602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611aee565b6001546001600160a01b0316331461135c5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016109b9565b60025442116113ad5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016109b9565b600154600080546040516001600160a01b039384169390911691600080516020612d4383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a66338484611804565b6000546001600160a01b031633146114335760405162461bcd60e51b81526004016109b990612b96565b601655565b6000546001600160a01b031633146114625760405162461bcd60e51b81526004016109b990612b96565b601a80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b4e90831515815260200190565b6000546001600160a01b031633146114d55760405162461bcd60e51b81526004016109b990612b96565b601455565b6000546001600160a01b031633146115045760405162461bcd60e51b81526004016109b990612b96565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556115338142612c28565b600255600080546040516001600160a01b0390911690600080516020612d43833981519152908390a350565b6000546001600160a01b031633146115895760405162461bcd60e51b81526004016109b990612b96565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115d45760405162461bcd60e51b81526004016109b990612b96565b601755565b6000546001600160a01b031633146116035760405162461bcd60e51b81526004016109b990612b96565b601855565b6000546001600160a01b031633146116325760405162461bcd60e51b81526004016109b990612b96565b6001600160a01b0381166116975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b9565b600080546040516001600160a01b0380851693921691600080516020612d4383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b9565b6001600160a01b0382166117a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b9565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109b9565b6001600160a01b0382166118ca5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109b9565b6000811161192c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109b9565b6000546001600160a01b0384811691161480159061195857506000546001600160a01b03838116911614155b156119c0576017548111156119c05760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016109b9565b60006119cb3061111a565b601854601a549192508210159060ff161580156119ef5750601a54610100900460ff165b8015611a2c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15611a8f578015611a45576018549150611a4582611c7d565b601a54479062010000900460ff168015611a665750670de0b6b3a764000081115b15611a8d57601954811115611a7a57506019545b611a8d611a88826064611b4b565b611ce6565b505b6001600160a01b03851660009081526007602052604090205460019060ff1680611ad157506001600160a01b03851660009081526007602052604090205460ff165b15611ada575060005b611ae686868684611d0f565b505050505050565b60008184841115611b125760405162461bcd60e51b81526004016109b99190612b43565b506000611b1f8486612c7f565b95945050505050565b6000806000611b35611e40565b9092509050611b448282611b4b565b9250505090565b6000610bd683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ffa565b600080611b9a8385612c28565b905083811015610bd65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109b9565b6000806000806000806000806000611c038a612028565b9250925092506000806000611c218d8686611c1c611b28565b61207a565b919f909e50909c50959a5093985091965092945050505050565b6000610bd683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611aee565b601a805460ff1916600117905547611c94826120ca565b6000611ca04783611c3b565b600354601654601254929350611cd7926001600160a01b0390921691611cd29190611ccc908690611b4b565b906122ee565b61236d565b5050601a805460ff1916905550565b601a805460ff191660011790558015611d0257611d02816123a8565b50601a805460ff19169055565b80611d1c57611d1c6125ad565b6001600160a01b03841660009081526008602052604090205460ff168015611d5d57506001600160a01b03831660009081526008602052604090205460ff16155b15611d7257611d6d8484846125f2565b611e1e565b6001600160a01b03841660009081526008602052604090205460ff16158015611db357506001600160a01b03831660009081526008602052604090205460ff165b15611dc357611d6d848484612718565b6001600160a01b03841660009081526008602052604090205460ff168015611e0357506001600160a01b03831660009081526008602052604090205460ff165b15611e1357611d6d8484846127c1565b611e1e848484612834565b80611e3a57611e3a601154601055601354601255601554601455565b50505050565b600b54600a546000918291825b600954811015611fca57826004600060098481548110611e7d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ef65750816005600060098481548110611ecf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f0c57600b54600a54945094505050509091565b611f606004600060098481548110611f3457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c3b565b9250611fb66005600060098481548110611f8a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c3b565b915080611fc281612cd1565b915050611e4d565b50600a54600b54611fda91611b4b565b821015611ff157600b54600a549350935050509091565b90939092509050565b6000818361201b5760405162461bcd60e51b81526004016109b99190612b43565b506000611b1f8486612c40565b60008060008061203785612878565b905060006120448661289a565b90506000612051876128b6565b9050600061206b8261206585818c89611c3b565b90611c3b565b98939750919550919350505050565b600080808061208988866122ee565b9050600061209788876122ee565b905060006120a588886122ee565b905060006120b7826120658686611c3b565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061210d57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561218657600080fd5b505afa15801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121be91906129af565b816001815181106121df57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505061222a307f0000000000000000000000000000000000000000000000000000000000000000846116e0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061227f908590600090869030904290600401612bec565b600060405180830381600087803b15801561229957600080fd5b505af11580156122ad573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516122e2929190612bcb565b60405180910390a15050565b6000826122fd57506000610a6a565b60006123098385612c60565b9050826123168583612c40565b14610bd65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109b9565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156123a3573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561242257600080fd5b505afa158015612436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245a91906129af565b8160008151811061247b57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106124bd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061252b4261012c611b8d565b6040518663ffffffff1660e01b815260040161254a9493929190612b0e565b6000604051808303818588803b15801561256357600080fd5b505af1158015612577573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516122e2929190612bcb565b6010541580156125bd5750601254155b80156125c95750601454155b156125d057565b6010805460115560128054601355601480546015556000928390559082905555565b60008060008060008061260487611bec565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506126369088611c3b565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546126659087611c3b565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546126949086611b8d565b6001600160a01b0389166000908152600460205260409020556126b6816128d2565b6126c0848361295a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161270591815260200190565b60405180910390a3505050505050505050565b60008060008060008061272a87611bec565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061275c9087611c3b565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546127929084611b8d565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546126949086611b8d565b6000806000806000806127d387611bec565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506128059088611c3b565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461275c9087611c3b565b60008060008060008061284687611bec565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126659087611c3b565b6000610a6a6064612894601054856122ee90919063ffffffff16565b90611b4b565b6000610a6a6064612894601254856122ee90919063ffffffff16565b6000610a6a6064612894601454856122ee90919063ffffffff16565b60006128dc611b28565b905060006128ea83836122ee565b306000908152600460205260409020549091506129079082611b8d565b3060009081526004602090815260408083209390935560089052205460ff16156123a357306000908152600560205260409020546129459084611b8d565b30600090815260056020526040902055505050565b600b546129679083611c3b565b600b55600c546129779082611b8d565b600c555050565b8035801515811461298e57600080fd5b919050565b6000602082840312156129a4578081fd5b8135610bd681612d02565b6000602082840312156129c0578081fd5b8151610bd681612d02565b600080604083850312156129dd578081fd5b82356129e881612d02565b915060208301356129f881612d02565b809150509250929050565b600080600060608486031215612a17578081fd5b8335612a2281612d02565b92506020840135612a3281612d02565b929592945050506040919091013590565b60008060408385031215612a55578182fd5b8235612a6081612d02565b946020939093013593505050565b600060208284031215612a7f578081fd5b610bd68261297e565b600060208284031215612a99578081fd5b5035919050565b60008060408385031215612ab2578182fd5b82359150612ac26020840161297e565b90509250929050565b6000815180845260208085019450808401835b83811015612b035781516001600160a01b031687529582019590820190600101612ade565b509495945050505050565b848152608060208201526000612b276080830186612acb565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612b6f57858101830151858201604001528201612b53565b81811115612b805783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612be46040830184612acb565b949350505050565b85815284602082015260a060408201526000612c0b60a0830186612acb565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612c3b57612c3b612cec565b500190565b600082612c5b57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612c7a57612c7a612cec565b500290565b600082821015612c9157612c91612cec565b500390565b600181811c90821680612caa57607f821691505b60208210811415612ccb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ce557612ce5612cec565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612d1757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d9b55fa9bfd273940644e25e7763831728ab3ba89644eead21db28f49d9d3cf664736f6c63430008040033

Deployed ByteCode Sourcemap

16045:20408:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34815:98;;;;;;;;;;-1:-1:-1;34815:98:0;;;;;:::i;:::-;;:::i;:::-;;18940:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19852:161;;;;;;;;;;-1:-1:-1;19852:161:0;;;;;:::i;:::-;;:::i;:::-;;;3629:14:1;;3622:22;3604:41;;3592:2;3577:18;19852:161:0;3559:92:1;20973:87:0;;;;;;;;;;-1:-1:-1;21042:10:0;;20973:87;;;11427:25:1;;;11415:2;11400:18;20973:87:0;11382:76:1;17543:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3196:32:1;;;3178:51;;3166:2;3151:18;17543:51:0;3133:102:1;19217:95:0;;;;;;;;;;-1:-1:-1;19297:7:0;;19217:95;;20021:313;;;;;;;;;;-1:-1:-1;20021:313:0;;;;;:::i;:::-;;:::i;16294:81::-;;;;;;;;;;;;;;;36064:150;;;;;;;;;;-1:-1:-1;36064:150:0;;;;;:::i;:::-;;:::i;22157:253::-;;;;;;;;;;-1:-1:-1;22157:253:0;;;;;:::i;:::-;;:::i;19126:83::-;;;;;;;;;;-1:-1:-1;19192:9:0;;19126:83;;19192:9;;;;12529:36:1;;12517:2;12502:18;19126:83:0;12484:87:1;22761:479:0;;;;;;;;;;-1:-1:-1;22761:479:0;;;;;:::i;:::-;;:::i;20342:218::-;;;;;;;;;;-1:-1:-1;20342:218:0;;;;;:::i;:::-;;:::i;17030:26::-;;;;;;;;;;;;;;;;21324:377;;;;;;;;;;-1:-1:-1;21324:377:0;;;;;:::i;:::-;;:::i;34570:111::-;;;;;;;;;;-1:-1:-1;34570:111:0;;;;;:::i;:::-;;:::i;21713:436::-;;;;;;;;;;-1:-1:-1;21713:436:0;;;;;:::i;:::-;;:::i;17601:38::-;;;;;;;;;;;;;;;17680:40;;;;;;;;;;-1:-1:-1;17680:40:0;;;;;;;;;;;22418:335;;;;;;;;;;-1:-1:-1;22418:335:0;;;;;:::i;:::-;;:::i;34435:123::-;;;;;;;;;;-1:-1:-1;34435:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;34523:27:0;34499:4;34523:27;;;:18;:27;;;;;;;;;34435:123;7435:90;;;;;;;;;;-1:-1:-1;7502:15:0;7435:90;;7333;;;;;;;;;;-1:-1:-1;7406:9:0;;7333:90;;17727:33;;;;;;;;;;-1:-1:-1;17727:33:0;;;;;;;;;;;17117:32;;;;;;;;;;;;;;;;19320:198;;;;;;;;;;-1:-1:-1;19320:198:0;;;;;:::i;:::-;;:::i;6925:148::-;;;;;;;;;;;;;:::i;17356:53::-;;;;;;;;;;;;;;;;35591:133;;;;;;;;;;-1:-1:-1;35591:133:0;;;;;:::i;:::-;;:::i;20845:120::-;;;;;;;;;;-1:-1:-1;20845:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20937:20:0;20913:4;20937:20;;;:11;:20;;;;;;;;;20845:120;6700:79;;;;;;;;;;-1:-1:-1;6738:7:0;6765:6;-1:-1:-1;;;;;6765:6:0;6700:79;;34925:122;;;;;;;;;;-1:-1:-1;34925:122:0;;;;;:::i;:::-;;:::i;35732:141::-;;;;;;;;;;-1:-1:-1;35732:141:0;;;;;:::i;:::-;;:::i;19031:87::-;;;;;;;;;;;;;:::i;21072:120::-;;;;;;;;;;-1:-1:-1;21161:23:0;;21072:120;;20568:269;;;;;;;;;;-1:-1:-1;20568:269:0;;;;;:::i;:::-;;:::i;16173:93::-;;;;;;;;;;-1:-1:-1;16173:93:0;;;;-1:-1:-1;;;;;16173:93:0;;;7771:305;;;;;;;;;;;;;:::i;19526:167::-;;;;;;;;;;-1:-1:-1;19526:167:0;;;;;:::i;:::-;;:::i;35292:112::-;;;;;;;;;;-1:-1:-1;35292:112:0;;;;;:::i;:::-;;:::i;21204:108::-;;;;;;;;;;-1:-1:-1;21287:17:0;;21204:108;;17218:27;;;;;;;;;;;;;;;;35881:171;;;;;;;;;;-1:-1:-1;35881:171:0;;;;;:::i;:::-;;:::i;35055:102::-;;;;;;;;;;-1:-1:-1;35055:102:0;;;;;:::i;:::-;;:::i;17308:35::-;;;;;;;;;;;;;;;;7533:226;;;;;;;;;;-1:-1:-1;7533:226:0;;;;;:::i;:::-;;:::i;19701:143::-;;;;;;;;;;-1:-1:-1;19701:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19809:18:0;;;19782:7;19809:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19701:143;34693:110;;;;;;;;;;-1:-1:-1;34693:110:0;;;;;:::i;:::-;;:::i;35169:111::-;;;;;;;;;;-1:-1:-1;35169:111:0;;;;;:::i;:::-;;:::i;35412:166::-;;;;;;;;;;-1:-1:-1;35412:166:0;;;;;:::i;:::-;;:::i;7081:244::-;;;;;;;;;;-1:-1:-1;7081:244:0;;;;;:::i;:::-;;:::i;34815:98::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;;;;;;;;;34889:7:::1;:16:::0;34815:98::o;18940:83::-;18977:13;19010:5;19003:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18940:83;:::o;19852:161::-;19927:4;19944:39;1084:10;19967:7;19976:6;19944:8;:39::i;:::-;-1:-1:-1;20001:4:0;19852:161;;;;;:::o;20021:313::-;20119:4;20136:36;20146:6;20154:9;20165:6;20136:9;:36::i;:::-;20183:121;20192:6;1084:10;20214:89;20252:6;20214:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20214:19:0;;;;;;:11;:19;;;;;;;;1084:10;20214:33;;;;;;;;;;:37;:89::i;:::-;20183:8;:121::i;:::-;-1:-1:-1;20322:4:0;20021:313;;;;;:::o;36064:150::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;36134:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36134:25:0;;::::1;;::::0;;36175:31:::1;::::0;::::1;::::0;::::1;::::0;36151:8;3629:14:1;3622:22;3604:41;;3592:2;3577:18;;3559:92;36175:31:0::1;;;;;;;;36064:150:::0;:::o;22157:253::-;22223:7;22262;;22251;:18;;22243:73;;;;-1:-1:-1;;;22243:73:0;;5620:2:1;22243:73:0;;;5602:21:1;5659:2;5639:18;;;5632:30;5698:34;5678:18;;;5671:62;-1:-1:-1;;;5749:18:1;;;5742:40;5799:19;;22243:73:0;5592:232:1;22243:73:0;22327:19;22350:10;:8;:10::i;:::-;22327:33;-1:-1:-1;22378:24:0;:7;22327:33;22378:11;:24::i;:::-;22371:31;22157:253;-1:-1:-1;;;22157:253:0:o;22761:479::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22843:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22835:60;;;::::0;-1:-1:-1;;;22835:60:0;;7197:2:1;22835:60:0::1;::::0;::::1;7179:21:1::0;7236:2;7216:18;;;7209:30;7275:29;7255:18;;;7248:57;7322:18;;22835:60:0::1;7169:177:1::0;22835:60:0::1;22911:9;22906:327;22930:9;:16:::0;22926:20;::::1;22906:327;;;22988:7;-1:-1:-1::0;;;;;22972:23:0::1;:9;22982:1;22972:12;;;;;;-1:-1:-1::0;;;22972:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22972:12:0::1;:23;22968:254;;;23031:9;23041:16:::0;;:20:::1;::::0;23060:1:::1;::::0;23041:20:::1;:::i;:::-;23031:31;;;;;;-1:-1:-1::0;;;23031:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23016:9:::1;:12:::0;;-1:-1:-1;;;;;23031:31:0;;::::1;::::0;23026:1;;23016:12;::::1;;;-1:-1:-1::0;;;23016:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23016:46:0::1;-1:-1:-1::0;;;;;23016:46:0;;::::1;;::::0;;23081:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23120:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23120:28:0::1;::::0;;23167:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23167:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23167:15:0;;;;;-1:-1:-1;;;;;;23167:15:0::1;::::0;;;;;22906:327:::1;22761:479:::0;:::o;22968:254::-:1;22948:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22906:327;;;;22761:479:::0;:::o;20342:218::-;1084:10;20430:4;20479:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20479:34:0;;;;;;;;;;20430:4;;20447:83;;20470:7;;20479:50;;20518:10;20479:38;:50::i;21324:377::-;1084:10;21376:14;21425:19;;;:11;:19;;;;;;;;21424:20;21416:77;;;;-1:-1:-1;;;21416:77:0;;10666:2:1;21416:77:0;;;10648:21:1;10705:2;10685:18;;;10678:30;10744:34;10724:18;;;10717:62;-1:-1:-1;;;10795:18:1;;;10788:42;10847:19;;21416:77:0;10638:234:1;21416:77:0;21505:15;21529:19;21540:7;21529:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21577:15:0;;;;;;:7;:15;;;;;;21504:44;;-1:-1:-1;21577:28:0;;:15;-1:-1:-1;21504:44:0;21577:19;:28::i;:::-;-1:-1:-1;;;;;21559:15:0;;;;;;:7;:15;;;;;:46;21626:7;;:20;;21638:7;21626:11;:20::i;:::-;21616:7;:30;21670:10;;:23;;21685:7;21670:14;:23::i;:::-;21657:10;:36;-1:-1:-1;;;21324:377:0:o;34570:111::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34639:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34639:34:0::1;34669:4;34639:34;::::0;;34570:111::o;21713:436::-;21803:7;21842;;21831;:18;;21823:62;;;;-1:-1:-1;;;21823:62:0;;7553:2:1;21823:62:0;;;7535:21:1;7592:2;7572:18;;;7565:30;7631:33;7611:18;;;7604:61;7682:18;;21823:62:0;7525:181:1;21823:62:0;21901:17;21896:246;;21936:15;21960:19;21971:7;21960:10;:19::i;:::-;-1:-1:-1;21935:44:0;;-1:-1:-1;21994:14:0;;-1:-1:-1;;;;;21994:14:0;21896:246;22043:23;22074:19;22085:7;22074:10;:19::i;:::-;-1:-1:-1;22041:52:0;;-1:-1:-1;22108:22:0;;-1:-1:-1;;;;;22108:22:0;22418:335;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22503:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22502:21;22494:61;;;::::0;-1:-1:-1;;;22494:61:0;;7197:2:1;22494:61:0::1;::::0;::::1;7179:21:1::0;7236:2;7216:18;;;7209:30;7275:29;7255:18;;;7248:57;7322:18;;22494:61:0::1;7169:177:1::0;22494:61:0::1;-1:-1:-1::0;;;;;22569:16:0;::::1;22588:1;22569:16:::0;;;:7:::1;:16;::::0;;;;;:20;22566:108:::1;;-1:-1:-1::0;;;;;22645:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22625:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22606:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22566:108:::1;-1:-1:-1::0;;;;;22684:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22684:27:0::1;22707:4;22684:27:::0;;::::1;::::0;;;22722:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22722:23:0::1;::::0;;::::1;::::0;;22418:335::o;19320:198::-;-1:-1:-1;;;;;19410:20:0;;19386:7;19410:20;;;:11;:20;;;;;;;;19406:49;;;-1:-1:-1;;;;;;19439:16:0;;;;;:7;:16;;;;;;;19320:198::o;19406:49::-;-1:-1:-1;;;;;19493:16:0;;;;;;:7;:16;;;;;;19473:37;;:19;:37::i;6925:148::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;7032:1:::1;7016:6:::0;;6995:40:::1;::::0;-1:-1:-1;;;;;7016:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6995:40:0;7032:1;;6995:40:::1;7063:1;7046:19:::0;;-1:-1:-1;;;;;;7046:19:0::1;::::0;;6925:148::o;35591:133::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35695:21:::1;:12:::0;35710:6:::1;35695:21;:::i;:::-;35675:17;:41:::0;-1:-1:-1;35591:133:0:o;34925:122::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35011:13:::1;:28:::0;34925:122::o;35732:141::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35820:16:::1;:45:::0;;-1:-1:-1;;;;;;35820:45:0::1;-1:-1:-1::0;;;;;35820:45:0;;;::::1;::::0;;;::::1;::::0;;35732:141::o;19031:87::-;19070:13;19103:7;19096:14;;;;;:::i;20568:269::-;20661:4;20678:129;1084:10;20701:7;20710:96;20749:15;20710:96;;;;;;;;;;;;;;;;;1084:10;20710:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20710:34:0;;;;;;;;;;;;:38;:96::i;7771:305::-;7823:14;;-1:-1:-1;;;;;7823:14:0;7841:10;7823:28;7815:76;;;;-1:-1:-1;;;7815:76:0;;11079:2:1;7815:76:0;;;11061:21:1;11118:2;11098:18;;;11091:30;11157:34;11137:18;;;11130:62;-1:-1:-1;;;11208:18:1;;;11201:33;11251:19;;7815:76:0;11051:225:1;7815:76:0;7928:9;;7910:15;:27;7902:72;;;;-1:-1:-1;;;7902:72:0;;10306:2:1;7902:72:0;;;10288:21:1;10345:2;10325:18;;;10318:30;10384:33;10364:18;;;10357:61;10435:18;;7902:72:0;10278:181:1;7902:72:0;8019:14;;;8011:6;;7990:44;;-1:-1:-1;;;;;8019:14:0;;;;8011:6;;;;-1:-1:-1;;;;;;;;;;;7990:44:0;;8054:14;;;8045:23;;-1:-1:-1;;;;;;8045:23:0;-1:-1:-1;;;;;8054:14:0;;;8045:23;;;;;;7771:305::o;19526:167::-;19604:4;19621:42;1084:10;19645:9;19656:6;19621:9;:42::i;35292:112::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35370:16:::1;:26:::0;35292:112::o;35881:171::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35958:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;35958:32:0;;::::1;;::::0;;36006:38:::1;::::0;::::1;::::0;::::1;::::0;35982:8;3629:14:1;3622:22;3604:41;;3592:2;3577:18;;3559:92;35055:102:0;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35131:8:::1;:18:::0;35055:102::o;7533:226::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;7614:6:::1;::::0;;;7597:23;;-1:-1:-1;;;;;;7597:23:0;;::::1;-1:-1:-1::0;;;;;7614:6:0;::::1;7597:23;::::0;;;7631:19:::1;::::0;;7673:22:::1;7691:4:::0;7673:15:::1;:22;:::i;:::-;7661:9;:34:::0;7748:1:::1;7732:6:::0;;7711:40:::1;::::0;-1:-1:-1;;;;;7732:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7711:40:0;7748:1;;7711:40:::1;7533:226:::0;:::o;34693:110::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34760:27:0::1;34790:5;34760:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34760:35:0::1;::::0;;34693:110::o;35169:111::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35246:12:::1;:26:::0;35169:111::o;35412:166::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;35520:23:::1;:50:::0;35412:166::o;7081:244::-;6834:6;;-1:-1:-1;;;;;6834:6:0;1084:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7170:22:0;::::1;7162:73;;;::::0;-1:-1:-1;;;7162:73:0;;6031:2:1;7162:73:0::1;::::0;::::1;6013:21:1::0;6070:2;6050:18;;;6043:30;6109:34;6089:18;;;6082:62;-1:-1:-1;;;6160:18:1;;;6153:36;6206:19;;7162:73:0::1;6003:228:1::0;7162:73:0::1;7272:6;::::0;;7251:38:::1;::::0;-1:-1:-1;;;;;7251:38:0;;::::1;::::0;7272:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;7251:38:0;::::1;7300:6;:17:::0;;-1:-1:-1;;;;;;7300:17:0::1;-1:-1:-1::0;;;;;7300:17:0;;;::::1;::::0;;;::::1;::::0;;7081:244::o;23248:337::-;-1:-1:-1;;;;;23341:19:0;;23333:68;;;;-1:-1:-1;;;23333:68:0;;9901:2:1;23333:68:0;;;9883:21:1;9940:2;9920:18;;;9913:30;9979:34;9959:18;;;9952:62;-1:-1:-1;;;10030:18:1;;;10023:34;10074:19;;23333:68:0;9873:226:1;23333:68:0;-1:-1:-1;;;;;23420:21:0;;23412:68;;;;-1:-1:-1;;;23412:68:0;;6438:2:1;23412:68:0;;;6420:21:1;6477:2;6457:18;;;6450:30;6516:34;6496:18;;;6489:62;-1:-1:-1;;;6567:18:1;;;6560:32;6609:19;;23412:68:0;6410:224:1;23412:68:0;-1:-1:-1;;;;;23493:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23545:32;;11427:25:1;;;23545:32:0;;11400:18:1;23545:32:0;;;;;;;23248:337;;;:::o;23593:1547::-;-1:-1:-1;;;;;23715:18:0;;23707:68;;;;-1:-1:-1;;;23707:68:0;;9495:2:1;23707:68:0;;;9477:21:1;9534:2;9514:18;;;9507:30;9573:34;9553:18;;;9546:62;-1:-1:-1;;;9624:18:1;;;9617:35;9669:19;;23707:68:0;9467:227:1;23707:68:0;-1:-1:-1;;;;;23794:16:0;;23786:64;;;;-1:-1:-1;;;23786:64:0;;5216:2:1;23786:64:0;;;5198:21:1;5255:2;5235:18;;;5228:30;5294:34;5274:18;;;5267:62;-1:-1:-1;;;5345:18:1;;;5338:33;5388:19;;23786:64:0;5188:225:1;23786:64:0;23878:1;23869:6;:10;23861:64;;;;-1:-1:-1;;;23861:64:0;;9085:2:1;23861:64:0;;;9067:21:1;9124:2;9104:18;;;9097:30;9163:34;9143:18;;;9136:62;-1:-1:-1;;;9214:18:1;;;9207:39;9263:19;;23861:64:0;9057:231:1;23861:64:0;6738:7;6765:6;-1:-1:-1;;;;;23939:15:0;;;6765:6;;23939:15;;;;:32;;-1:-1:-1;6738:7:0;6765:6;-1:-1:-1;;;;;23958:13:0;;;6765:6;;23958:13;;23939:32;23936:139;;;24006:12;;23996:6;:22;;23988:75;;;;-1:-1:-1;;;23988:75:0;;7913:2:1;23988:75:0;;;7895:21:1;7952:2;7932:18;;;7925:30;7991:34;7971:18;;;7964:62;-1:-1:-1;;;8042:18:1;;;8035:38;8090:19;;23988:75:0;7885:230:1;23988:75:0;24087:28;24118:24;24136:4;24118:9;:24::i;:::-;24208:23;;24257:16;;24087:55;;-1:-1:-1;24184:47:0;;;;24257:16;;24256:17;:42;;;;-1:-1:-1;24277:21:0;;;;;;;24256:42;:65;;;;;24308:13;-1:-1:-1;;;;;24302:19:0;:2;-1:-1:-1;;;;;24302:19:0;;24256:65;24252:582;;;24342:23;24338:165;;;24409:23;;24386:46;;24451:32;24462:20;24451:10;:32::i;:::-;24572:14;;24532:21;;24572:14;;;;;:47;;;;;24608:10;24590:7;:29;24572:47;24568:255;;;24672:17;;24662:7;:27;24658:81;;;-1:-1:-1;24722:17:0;;24658:81;24776:31;24790:16;:7;24802:3;24790:11;:16::i;:::-;24776:13;:31::i;:::-;24252:582;;-1:-1:-1;;;;;24981:24:0;;24854:12;24981:24;;;:18;:24;;;;;;24869:4;;24981:24;;;:50;;-1:-1:-1;;;;;;25009:22:0;;;;;;:18;:22;;;;;;;;24981:50;24978:96;;;-1:-1:-1;25057:5:0;24978:96;25094:38;25109:4;25114:2;25117:6;25124:7;25094:14;:38::i;:::-;23593:1547;;;;;;:::o;2399:192::-;2485:7;2521:12;2513:6;;;;2505:29;;;;-1:-1:-1;;;2505:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2545:9:0;2557:5;2561:1;2557;:5;:::i;:::-;2545:17;2399:192;-1:-1:-1;;;;;2399:192:0:o;31982:163::-;32023:7;32044:15;32061;32080:19;:17;:19::i;:::-;32043:56;;-1:-1:-1;32043:56:0;-1:-1:-1;32117:20:0;32043:56;;32117:11;:20::i;:::-;32110:27;;;;31982:163;:::o;2859:132::-;2917:7;2944:39;2948:1;2951;2944:39;;;;;;;;;;;;;;;;;:3;:39::i;2066:181::-;2124:7;;2156:5;2160:1;2156;:5;:::i;:::-;2144:17;;2185:1;2180;:6;;2172:46;;;;-1:-1:-1;;;2172:46:0;;6841:2:1;2172:46:0;;;6823:21:1;6880:2;6860:18;;;6853:30;6919:29;6899:18;;;6892:57;6966:18;;2172:46:0;6813:177:1;30717:419:0;30776:7;30785;30794;30803;30812;30821;30842:23;30867:12;30881:18;30903:20;30915:7;30903:11;:20::i;:::-;30841:82;;;;;;30935:15;30952:23;30977:12;30993:50;31005:7;31014:4;31020:10;31032;:8;:10::i;:::-;30993:11;:50::i;:::-;30934:109;;;;-1:-1:-1;30934:109:0;;-1:-1:-1;31094:15:0;;-1:-1:-1;31111:4:0;;-1:-1:-1;31117:10:0;;-1:-1:-1;30717:419:0;;-1:-1:-1;;;;;30717:419:0:o;2255:136::-;2313:7;2340:43;2344:1;2347;2340:43;;;;;;;;;;;;;;;;;:3;:43::i;25148:433::-;18295:16;:23;;-1:-1:-1;;18295:23:0;18314:4;18295:23;;;25263:21:::1;25295:38;25312:20:::0;25295:16:::1;:38::i;:::-;25344:26;25373:41;:21;25399:14:::0;25373:25:::1;:41::i;:::-;25485:16;::::0;25545::::1;::::0;25526:13:::1;::::0;25344:70;;-1:-1:-1;25464:99:0::1;::::0;-1:-1:-1;;;;;25485:16:0;;::::1;::::0;25503:59:::1;::::0;25545:16;25503:37:::1;::::0;25344:70;;25503:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;:::-;25464:20;:99::i;:::-;-1:-1:-1::0;;18341:16:0;:24;;-1:-1:-1;;18341:24:0;;;-1:-1:-1;25148:433:0:o;25595:135::-;18295:16;:23;;-1:-1:-1;;18295:23:0;18314:4;18295:23;;;25666:10;;25662:61:::1;;25690:24;25707:6;25690:16;:24::i;:::-;-1:-1:-1::0;18341:16:0;:24;;-1:-1:-1;;18341:24:0;;;25595:135::o;27531:704::-;27642:7;27638:40;;27664:14;:12;:14::i;:::-;-1:-1:-1;;;;;27703:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27727:22:0;;;;;;:11;:22;;;;;;;;27726:23;27703:46;27699:467;;;27766:48;27788:6;27796:9;27807:6;27766:21;:48::i;:::-;27699:467;;;-1:-1:-1;;;;;27837:19:0;;;;;;:11;:19;;;;;;;;27836:20;:46;;;;-1:-1:-1;;;;;;27860:22:0;;;;;;:11;:22;;;;;;;;27836:46;27832:334;;;27899:46;27919:6;27927:9;27938:6;27899:19;:46::i;27832:334::-;-1:-1:-1;;;;;27967:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27990:22:0;;;;;;:11;:22;;;;;;;;27967:45;27963:203;;;28029:48;28051:6;28059:9;28070:6;28029:21;:48::i;27963:203::-;28110:44;28128:6;28136:9;28147:6;28110:17;:44::i;:::-;28190:7;28186:41;;28212:15;34318;;34308:7;:25;34360:21;;34344:13;:37;34403:16;;34392:8;:27;34264:163;28212:15;27531:704;;;;:::o;32153:561::-;32250:7;;32286;;32203;;;;;32310:289;32334:9;:16;32330:20;;32310:289;;;32400:7;32376;:21;32384:9;32394:1;32384:12;;;;;;-1:-1:-1;;;32384:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32384:12:0;32376:21;;;;;;;;;;;;;:31;;:66;;;32435:7;32411;:21;32419:9;32429:1;32419:12;;;;;;-1:-1:-1;;;32419:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32419:12:0;32411:21;;;;;;;;;;;;;:31;32376:66;32372:97;;;32452:7;;32461;;32444:25;;;;;;;32153:561;;:::o;32372:97::-;32494:34;32506:7;:21;32514:9;32524:1;32514:12;;;;;;-1:-1:-1;;;32514:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32514:12:0;32506:21;;;;;;;;;;;;;32494:7;;:11;:34::i;:::-;32484:44;;32553:34;32565:7;:21;32573:9;32583:1;32573:12;;;;;;-1:-1:-1;;;32573:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32573:12:0;32565:21;;;;;;;;;;;;;32553:7;;:11;:34::i;:::-;32543:44;-1:-1:-1;32352:3:0;;;;:::i;:::-;;;;32310:289;;;-1:-1:-1;32635:7:0;;32623;;:20;;:11;:20::i;:::-;32613:7;:30;32609:61;;;32653:7;;32662;;32645:25;;;;;;32153:561;;:::o;32609:61::-;32689:7;;32698;;-1:-1:-1;32153:561:0;-1:-1:-1;32153:561:0:o;2999:278::-;3085:7;3120:12;3113:5;3105:28;;;;-1:-1:-1;;;3105:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3144:9:0;3156:5;3160:1;3156;:5;:::i;31144:393::-;31204:7;31213;31222;31242:12;31257:24;31273:7;31257:15;:24::i;:::-;31242:39;;31292:18;31313:30;31335:7;31313:21;:30::i;:::-;31292:51;;31354:13;31370:25;31387:7;31370:16;:25::i;:::-;31354:41;-1:-1:-1;31406:23:0;31432:44;31354:41;31432:33;31454:10;31432:33;:7;31444:4;31432:11;:17::i;:::-;:21;;:33::i;:44::-;31406:70;31512:4;;-1:-1:-1;31518:10:0;;-1:-1:-1;31144:393:0;;-1:-1:-1;;;;31144:393:0:o;31545:429::-;31660:7;;;;31716:24;:7;31728:11;31716;:24::i;:::-;31698:42;-1:-1:-1;31751:12:0;31766:21;:4;31775:11;31766:8;:21::i;:::-;31751:36;-1:-1:-1;31798:18:0;31819:27;:10;31834:11;31819:14;:27::i;:::-;31798:48;-1:-1:-1;31857:23:0;31883:33;31798:48;31883:17;:7;31895:4;31883:11;:17::i;:33::-;31935:7;;;;-1:-1:-1;31961:4:0;;-1:-1:-1;31545:429:0;;-1:-1:-1;;;;;;;31545:429:0:o;25742:666::-;25892:16;;;25906:1;25892:16;;;;;;;;25868:21;;25892:16;;;;;;;;;;-1:-1:-1;25892:16:0;25868:40;;25937:4;25919;25924:1;25919:7;;;;;;-1:-1:-1;;;25919:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;25919:23:0;;;-1:-1:-1;;;;;25919:23:0;;;;;25963:15;-1:-1:-1;;;;;25963:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25953:4;25958:1;25953:7;;;;;;-1:-1:-1;;;25953:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;25953:32:0;;;-1:-1:-1;;;;;25953:32:0;;;;;25998:62;26015:4;26030:15;26048:11;25998:8;:62::i;:::-;26099:240;;-1:-1:-1;;;26099:240:0;;-1:-1:-1;;;;;26099:15:0;:66;;;;:240;;26180:11;;26206:1;;26250:4;;26277;;26313:15;;26099:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26365:35;26382:11;26395:4;26365:35;;;;;;;:::i;:::-;;;;;;;;25742:666;;:::o;2599:250::-;2657:7;2681:6;2677:47;;-1:-1:-1;2711:1:0;2704:8;;2677:47;2736:9;2748:5;2752:1;2748;:5;:::i;:::-;2736:17;-1:-1:-1;2781:1:0;2772:5;2776:1;2736:17;2772:5;:::i;:::-;:10;2764:56;;;;-1:-1:-1;;;2764:56:0;;8322:2:1;2764:56:0;;;8304:21:1;8361:2;8341:18;;;8334:30;8400:34;8380:18;;;8373:62;-1:-1:-1;;;8451:18:1;;;8444:31;8492:19;;2764:56:0;8294:223:1;36226:126:0;36318:26;;-1:-1:-1;;;;;36318:18:0;;;:26;;;;;36337:6;;36318:26;;;;36337:6;36318:18;:26;;;;;;;;;;;;;;;;;;;;;36226:126;;:::o;26420:578::-;26565:16;;;26579:1;26565:16;;;;;;;;26541:21;;26565:16;;;;;;;;;;-1:-1:-1;26565:16:0;26541:40;;26602:15;-1:-1:-1;;;;;26602:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26592:4;26597:1;26592:7;;;;;;-1:-1:-1;;;26592:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;26592:32:0;;;-1:-1:-1;;;;;26592:32:0;;;;;26653:4;26635;26640:1;26635:7;;;;;;-1:-1:-1;;;26635:7:0;;;;;;;;;-1:-1:-1;;;;;26635:23:0;;;:7;;;;;;;;;:23;26695:15;:66;;26769:6;26791:1;26838:4;26857:11;26899:24;:15;26919:3;26899:19;:24::i;:::-;26695:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26960:30;26977:6;26985:4;26960:30;;;;;;;:::i;33924:328::-;33970:7;;:12;:34;;;;-1:-1:-1;33986:13:0;;:18;33970:34;:51;;;;-1:-1:-1;34008:8:0;;:13;33970:51;33967:63;;;33924:328::o;33967:63::-;34068:7;;;34050:15;:25;34110:13;;;34086:21;:37;34153:8;;;34134:16;:27;-1:-1:-1;34182:11:0;;;;34204:17;;;;34232:12;33924:328::o;29344:563::-;29447:15;29464:23;29489:12;29503:23;29528:12;29542:18;29564:19;29575:7;29564:10;:19::i;:::-;-1:-1:-1;;;;;29609:15:0;;;;;;:7;:15;;;;;;29446:137;;-1:-1:-1;29446:137:0;;-1:-1:-1;29446:137:0;;-1:-1:-1;29446:137:0;-1:-1:-1;29446:137:0;-1:-1:-1;29446:137:0;-1:-1:-1;29609:28:0;;29629:7;29609:19;:28::i;:::-;-1:-1:-1;;;;;29591:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29666:7;:15;;;;:28;;29686:7;29666:19;:28::i;:::-;-1:-1:-1;;;;;29648:15:0;;;;;;;:7;:15;;;;;;:46;;;;29726:18;;;;;;;:39;;29749:15;29726:22;:39::i;:::-;-1:-1:-1;;;;;29705:18:0;;;;;;:7;:18;;;;;:60;29779:26;29794:10;29779:14;:26::i;:::-;29816:23;29828:4;29834;29816:11;:23::i;:::-;29872:9;-1:-1:-1;;;;;29855:44:0;29864:6;-1:-1:-1;;;;;29855:44:0;;29883:15;29855:44;;;;11427:25:1;;11415:2;11400:18;;11382:76;29855:44:0;;;;;;;;29344:563;;;;;;;;;:::o;28753:583::-;28854:15;28871:23;28896:12;28910:23;28935:12;28949:18;28971:19;28982:7;28971:10;:19::i;:::-;-1:-1:-1;;;;;29016:15:0;;;;;;:7;:15;;;;;;28853:137;;-1:-1:-1;28853:137:0;;-1:-1:-1;28853:137:0;;-1:-1:-1;28853:137:0;-1:-1:-1;28853:137:0;-1:-1:-1;28853:137:0;-1:-1:-1;29016:28:0;;28853:137;29016:19;:28::i;:::-;-1:-1:-1;;;;;28998:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29076:18;;;;;:7;:18;;;;;:39;;29099:15;29076:22;:39::i;:::-;-1:-1:-1;;;;;29055:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29147:7;:18;;;;:39;;29170:15;29147:22;:39::i;29915:639::-;30018:15;30035:23;30060:12;30074:23;30099:12;30113:18;30135:19;30146:7;30135:10;:19::i;:::-;-1:-1:-1;;;;;30180:15:0;;;;;;:7;:15;;;;;;30017:137;;-1:-1:-1;30017:137:0;;-1:-1:-1;30017:137:0;;-1:-1:-1;30017:137:0;-1:-1:-1;30017:137:0;-1:-1:-1;30017:137:0;-1:-1:-1;30180:28:0;;30200:7;30180:19;:28::i;:::-;-1:-1:-1;;;;;30162:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30237:7;:15;;;;:28;;30257:7;30237:19;:28::i;28243:502::-;28342:15;28359:23;28384:12;28398:23;28423:12;28437:18;28459:19;28470:7;28459:10;:19::i;:::-;-1:-1:-1;;;;;28507:15:0;;;;;;:7;:15;;;;;;28341:137;;-1:-1:-1;28341:137:0;;-1:-1:-1;28341:137:0;;-1:-1:-1;28341:137:0;-1:-1:-1;28341:137:0;-1:-1:-1;28341:137:0;-1:-1:-1;28507:28:0;;28341:137;28507:19;:28::i;33416:154::-;33480:7;33507:55;33546:5;33507:20;33519:7;;33507;:11;;:20;;;;:::i;:::-;:24;;:55::i;33582:166::-;33652:7;33679:61;33724:5;33679:26;33691:13;;33679:7;:11;;:26;;;;:::i;33756:156::-;33821:7;33848:56;33888:5;33848:21;33860:8;;33848:7;:11;;:21;;;;:::i;32726:355::-;32789:19;32812:10;:8;:10::i;:::-;32789:33;-1:-1:-1;32833:18:0;32854:27;:10;32789:33;32854:14;:27::i;:::-;32933:4;32917:22;;;;:7;:22;;;;;;32833:48;;-1:-1:-1;32917:38:0;;32833:48;32917:26;:38::i;:::-;32908:4;32892:22;;;;:7;:22;;;;;;;;:63;;;;32969:11;:26;;;;;;32966:107;;;33051:4;33035:22;;;;:7;:22;;;;;;:38;;33062:10;33035:26;:38::i;:::-;33026:4;33010:22;;;;:7;:22;;;;;:63;32726:355;;;:::o;30562:147::-;30640:7;;:17;;30652:4;30640:11;:17::i;:::-;30630:7;:27;30681:10;;:20;;30696:4;30681:14;:20::i;:::-;30668:10;:33;-1:-1:-1;;30562:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;2165:6;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;2366:6;2374;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:463::-;2617:3;2655:5;2649:12;2682:6;2677:3;2670:19;2708:4;2737:2;2732:3;2728:12;2721:19;;2774:2;2767:5;2763:14;2795:3;2807:195;2821:6;2818:1;2815:13;2807:195;;;2886:13;;-1:-1:-1;;;;;2882:39:1;2870:52;;2942:12;;;;2977:15;;;;2918:1;2836:9;2807:195;;;-1:-1:-1;3018:3:1;;2625:402;-1:-1:-1;;;;;2625:402:1:o;3891:510::-;4162:6;4151:9;4144:25;4205:3;4200:2;4189:9;4185:18;4178:31;4125:4;4226:57;4278:3;4267:9;4263:19;4255:6;4226:57;:::i;:::-;-1:-1:-1;;;;;4319:32:1;;;;4314:2;4299:18;;4292:60;-1:-1:-1;4383:2:1;4368:18;4361:34;4218:65;4134:267;-1:-1:-1;;4134:267:1:o;4406:603::-;4518:4;4547:2;4576;4565:9;4558:21;4608:6;4602:13;4651:6;4646:2;4635:9;4631:18;4624:34;4676:4;4689:140;4703:6;4700:1;4697:13;4689:140;;;4798:14;;;4794:23;;4788:30;4764:17;;;4783:2;4760:26;4753:66;4718:10;;4689:140;;;4847:6;4844:1;4841:13;4838:2;;;4917:4;4912:2;4903:6;4892:9;4888:22;4884:31;4877:45;4838:2;-1:-1:-1;4993:2:1;4972:15;-1:-1:-1;;4968:29:1;4953:45;;;;5000:2;4949:54;;4527:482;-1:-1:-1;;;4527:482:1:o;8522:356::-;8724:2;8706:21;;;8743:18;;;8736:30;8802:34;8797:2;8782:18;;8775:62;8869:2;8854:18;;8696:182::o;11463:332::-;11670:6;11659:9;11652:25;11713:2;11708;11697:9;11693:18;11686:30;11633:4;11733:56;11785:2;11774:9;11770:18;11762:6;11733:56;:::i;:::-;11725:64;11642:153;-1:-1:-1;;;;11642:153:1:o;11800:582::-;12099:6;12088:9;12081:25;12142:6;12137:2;12126:9;12122:18;12115:34;12185:3;12180:2;12169:9;12165:18;12158:31;12062:4;12206:57;12258:3;12247:9;12243:19;12235:6;12206:57;:::i;:::-;-1:-1:-1;;;;;12299:32:1;;;;12294:2;12279:18;;12272:60;-1:-1:-1;12363:3:1;12348:19;12341:35;12198:65;12071:311;-1:-1:-1;;;12071:311:1:o;12576:128::-;12616:3;12647:1;12643:6;12640:1;12637:13;12634:2;;;12653:18;;:::i;:::-;-1:-1:-1;12689:9:1;;12624:80::o;12709:217::-;12749:1;12775;12765:2;;-1:-1:-1;;;12800:31:1;;12854:4;12851:1;12844:15;12882:4;12807:1;12872:15;12765:2;-1:-1:-1;12911:9:1;;12755:171::o;12931:168::-;12971:7;13037:1;13033;13029:6;13025:14;13022:1;13019:21;13014:1;13007:9;13000:17;12996:45;12993:2;;;13044:18;;:::i;:::-;-1:-1:-1;13084:9:1;;12983:116::o;13104:125::-;13144:4;13172:1;13169;13166:8;13163:2;;;13177:18;;:::i;:::-;-1:-1:-1;13214:9:1;;13153:76::o;13234:380::-;13313:1;13309:12;;;;13356;;;13377:2;;13431:4;13423:6;13419:17;13409:27;;13377:2;13484;13476:6;13473:14;13453:18;13450:38;13447:2;;;13530:10;13525:3;13521:20;13518:1;13511:31;13565:4;13562:1;13555:15;13593:4;13590:1;13583:15;13447:2;;13289:325;;;:::o;13619:135::-;13658:3;-1:-1:-1;;13679:17:1;;13676:2;;;13699:18;;:::i;:::-;-1:-1:-1;13746:1:1;13735:13;;13666:88::o;13759:127::-;13820:10;13815:3;13811:20;13808:1;13801:31;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13891:131;-1:-1:-1;;;;;13966:31:1;;13956:42;;13946:2;;14012:1;14009;14002:12;13946:2;13936:86;:::o

Swarm Source

ipfs://d9b55fa9bfd273940644e25e7763831728ab3ba89644eead21db28f49d9d3cf6
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.