Contract 0x147Fb3D817107f13ee8E1d7feC0f71D54838656B

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x1b96587d4eb49b7ebce936a6d8ba3c0446dd60169ff1d1a3ec4a8a61de7f5fe183205682021-06-15 14:28:311 hr 10 mins ago0xdbe590ec65e9cf351a167634b49e4d48e65801e7 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x5197e66b3ffaada0d62564e8e83ccdca40a0197f8ed44ef6c4f14ecb657e11f183204822021-06-15 14:24:111 hr 15 mins ago0xfdf3cc27dcbd24a14e389985f201f66e03f43b74 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x1ffaffbff7980b237cc0b4f9818a900ea71bbed46899d94ebbbe948bf256d39b83157062021-06-15 10:19:335 hrs 19 mins ago0xfd9d690097a58018718272f5a236510c518ac6f8 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.002316855
0xb0b0b9a721319350dc1f53ca56dd8c2a5665dcd8c48d3090f035e0c98d6e78b183156512021-06-15 10:16:305 hrs 22 mins ago0xfd9d690097a58018718272f5a236510c518ac6f8 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00072
0xd26fc43ed1af7a542b4c10758ee78c3e45a333edea3e45b84c77b143624b691982925012021-06-14 14:43:491 day 55 mins ago0x0b4b828a696348ae54888f22d7b7baac535ee288 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.000072615
0x4206978f5da94c894058d939caf045c9f84e74c9a15737aa8f12a135a3396c6e82888002021-06-14 11:37:141 day 4 hrs ago0xcf037e5fd65ac94fb614b9644ef76bdba3231537 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.000978985
0x33af9e90725544cb10555c03d68287d85c4bb6c9338e6e64db04e45e9d72ccb782887932021-06-14 11:36:531 day 4 hrs ago0xcf037e5fd65ac94fb614b9644ef76bdba3231537 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00105404
0xd027586adf8e922aa3647a2d819bf97d5675873643e8295e4a4746c38114a72b82887852021-06-14 11:36:291 day 4 hrs ago0xcf037e5fd65ac94fb614b9644ef76bdba3231537 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.000978985
0xd37de36dab133f53d03fb8937dbcc5ec195f417186e95792beb9165e142bc4a582887752021-06-14 11:35:591 day 4 hrs ago0xcf037e5fd65ac94fb614b9644ef76bdba3231537 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.001053985
0x82824e2f285631d3b6ba06d54c7db5eaeb04dabae3bc1535b453b8d35d91194882887562021-06-14 11:35:021 day 4 hrs ago0xd1b538d183ee6885aafe5b69c93b13c5b5215e68 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.000978985
0x39bf80fa83855c17b4af968827faf9f7c86d21e194de3b48f264998938efc1f782845142021-06-14 8:00:021 day 7 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00138796
0x67e0db023c0f71a300567a971bb0447550d22a10c67fedb228c952022355a68882681262021-06-13 18:07:121 day 21 hrs ago0x0b4b828a696348ae54888f22d7b7baac535ee288 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x2a8e5be75f08f183661fdadf56578b096b5f79a9c4216a5bc836a6b20a41fe1b82574912021-06-13 9:10:202 days 6 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.032287665
0x16db34d992be7e4e393689520bf57ca20ae6c0dc2675651df66bcc7c14bb7e3882562152021-06-13 8:05:252 days 7 hrs ago0x9da4dda0e5195c9fc44c1a9c03372355b665b12b IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00138796
0x0a5e654e809b71eaf5df3e68114376b08dfa98f838e6be427f7fd766efea2b9f82512022021-06-13 3:52:452 days 11 hrs ago0x05a869e2d967341f293c669c63432d2f5726aa43 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0xd5eb267548c782c4e672a6f5e9f58e13d282cb685b6d293a51b3c57b5f221f6d82351652021-06-12 14:24:443 days 1 hr ago0x77959326c819dddb1c1f9ff2c2f1deb737675cd9 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0xbb0e67621882c9276ddf5ae2f1b84e2aceab4334db6871128773a0afa6930ce582215162021-06-12 3:00:563 days 12 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00732904
0x9c630bc50efac32200783b99dbd81b23dd425c53a8a50cf5e733ba49548bb1d782210822021-06-12 2:38:363 days 13 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00138796
0xb565d4c12b8dfe3afa8e45b4ac65826b1f291a4e35bcd9a9f8141a70bbefb88682020642021-06-11 10:43:574 days 4 hrs ago0x5345f713f03fa2bc4ac4c4595b93493fe31fce51 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0xba962d10f6d6c40331a79af71edac09ed7bfa996835b0891997cc1548f83262d82007662021-06-11 9:39:034 days 6 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00223745
0x695768cfce582ca9ab6c1c06c4cd75971de05060595abbb898476f67c311a08881782002021-06-10 14:45:175 days 54 mins ago0x6651d2919ffdee643d81ff5a43130673e1c7ec70 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x9800381c27808d2f7495ef2692efce6be2fa814814bfd69377b16a8c49f3398b81556442021-06-09 19:55:145 days 19 hrs ago0xe5081f3b75d46fcd3e492213b2a7b59d21191c31 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x12f44141709c4d15f6a78638b3402b9feed4488e81c4020afc7071b6edb51d4881470252021-06-09 12:41:406 days 2 hrs ago0xd3785fa6f833d56e7b8496c74afd78cd5b9f2640 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0xe6e752ace99e71157cb363299d7e471e3f1cf6bf8898c502b0fcf270b2e430b781464902021-06-09 12:14:556 days 3 hrs ago0x7c4103a8c348ab1b468a518f6f1522854ef0d286 IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00022215
0x433972d588681c3269184af127e1e629aa0759bfd889aec031433d9fddeeb3d381432742021-06-09 9:33:456 days 6 hrs ago0x5c8f9b64de05ac97a0e230bd7731b1a713cd08eb IN  0x147fb3d817107f13ee8e1d7fec0f71d54838656b0 BNB0.00138796
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x01f3b9f87a57810e457cf4377addd27c07e1ba52e615c6f6c3ed8f42f7e4535a83204962021-06-15 14:24:531 hr 14 mins ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.001920696658232972 BNB
0x01f3b9f87a57810e457cf4377addd27c07e1ba52e615c6f6c3ed8f42f7e4535a83204962021-06-15 14:24:531 hr 14 mins ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.001920696658232972 BNB
0xe2b84ee207f968983ece103581f98bc70781a78a73ddac8ba5cf68d738295e4782681322021-06-13 18:07:301 day 21 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.004470167036156834 BNB
0xe2b84ee207f968983ece103581f98bc70781a78a73ddac8ba5cf68d738295e4782681322021-06-13 18:07:301 day 21 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.004470167036156834 BNB
0xfe2fb131e85c4316ea48d5625515d36d0f38b660802a7922f9f8a72a1c1b35e782578812021-06-13 9:30:022 days 6 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.019881559121220889 BNB
0xfe2fb131e85c4316ea48d5625515d36d0f38b660802a7922f9f8a72a1c1b35e782578812021-06-13 9:30:022 days 6 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.019881559121220889 BNB
0x52bd90c46679d299ef06afdab5c7ba67fb8cb92798980aab768097d3b19d363682512092021-06-13 3:53:062 days 11 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.007192982261465513 BNB
0x52bd90c46679d299ef06afdab5c7ba67fb8cb92798980aab768097d3b19d363682512092021-06-13 3:53:062 days 11 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.007192982261465513 BNB
0x1625f0913425afc18dbbd728185104821f303442394490a9e634349eef58af7a82463142021-06-12 23:46:502 days 15 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.003171535761439833 BNB
0x1625f0913425afc18dbbd728185104821f303442394490a9e634349eef58af7a82463142021-06-12 23:46:502 days 15 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.003171535761439833 BNB
0x12811db10ed6553784b70b43bf21a0770e9d669c2e5e580af8040a9b6d8a265482352032021-06-12 14:26:383 days 1 hr ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.009063261351849287 BNB
0x12811db10ed6553784b70b43bf21a0770e9d669c2e5e580af8040a9b6d8a265482352032021-06-12 14:26:383 days 1 hr ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.009063261351849287 BNB
0xee69051f39d278e35d2556873bc0f7e40a0c2266eae6adeae4c756458cf63e1b82275862021-06-12 8:04:393 days 7 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.011189279462408316 BNB
0xee69051f39d278e35d2556873bc0f7e40a0c2266eae6adeae4c756458cf63e1b82275862021-06-12 8:04:393 days 7 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.011189279462408316 BNB
0x90490ba70db987aa0aa596d75a1b74652c8c03b54f16d8a518f996b16ad364eb82202412021-06-12 1:56:323 days 13 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.009980458012182802 BNB
0x90490ba70db987aa0aa596d75a1b74652c8c03b54f16d8a518f996b16ad364eb82202412021-06-12 1:56:323 days 13 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.009980458012182802 BNB
0x221c73c14f17e8a81ed7edf921902d9a37cd0cd172e606828f1da44543bd7d0782202242021-06-12 1:55:413 days 13 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.008431049093698535 BNB
0x221c73c14f17e8a81ed7edf921902d9a37cd0cd172e606828f1da44543bd7d0782202242021-06-12 1:55:413 days 13 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.008431049093698535 BNB
0xae517aa5e901341911003f4b4b953859a0cc3623f2bbec587e0afdde6b26999b81894092021-06-11 0:10:054 days 15 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.00288249921272009 BNB
0xae517aa5e901341911003f4b4b953859a0cc3623f2bbec587e0afdde6b26999b81894092021-06-11 0:10:054 days 15 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.00288249921272009 BNB
0x86a781b70830a9931f164bfcf9fa1c5a11afe2ea7d34715c57c9bda0e7b20a5f81782312021-06-10 14:46:505 days 52 mins ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.011088418337960602 BNB
0x86a781b70830a9931f164bfcf9fa1c5a11afe2ea7d34715c57c9bda0e7b20a5f81782312021-06-10 14:46:505 days 52 mins ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.011088418337960602 BNB
0x5347344a9e86e8f32f1fe38bbc8ac468f4ec0e1d10ed02fba6540c63954b332981695352021-06-10 7:31:105 days 8 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.003077008538057644 BNB
0x5347344a9e86e8f32f1fe38bbc8ac468f4ec0e1d10ed02fba6540c63954b332981695352021-06-10 7:31:105 days 8 hrs ago PancakeSwap: Router v2 0x147fb3d817107f13ee8e1d7fec0f71d54838656b0.003077008538057644 BNB
0x3a58d35ff89fa38d20e2a41b96c25bb4584403efa3859f2770c939054170ee9b81465202021-06-09 12:16:256 days 3 hrs ago 0x147fb3d817107f13ee8e1d7fec0f71d54838656b PancakeSwap: Router v20.003255034460896721 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AutoBurnYieldV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

ABY = AutoBurnYield
Deflationary. Passive yield. Daily boost.

AutoBurnYield token has decreasing supply and increasing price achieved by 2% burn, 2% yield 
and 2% added to liquidity on each transaction except wallet to wallet transactions (non-contract).

Price is driven up every day by burning 1% and redistributing 2% of ABY from liquidity pool while keeping 
WBNB there intact. Wallet and other pool balances increase, are not daily burnt, only WETH-ABY pool is affected.

Net size of a single transaction is not limited, no limit on balances
and no limit for wallet to wallet transactions (non-contract).

If you get "error:undefined" on swap or "confirm" button is dead:
Check slippage, increase to 7-11%.
Set exact amount for ABY, not for the counterparty.

Disclaimer: This is an experimental project. DYOR and read contract code thoroughly before trading.
Check holder structure, liquidity distribution and lock duration.
Deployer has no liability, direct or indirectly implied, of any loss or damage caused by bugs in
code or EVM, Solidity vulnerabilities, bot activity or malicious behavior of token holders.

*/


//SPDX-License-Identifier: UNLICENSED

pragma solidity =0.6.12;

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

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

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");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

interface IWETH {
    function deposit() external payable;
    function balanceOf(address _owner) external returns (uint256);
    function transfer(address _to, uint256 _value) external returns (bool);
    function withdraw(uint256 _amount) external;
}


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

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

    constructor () internal {
        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 geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract ownership is locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
        //The following line avoids exploiting previous lock/unlock to regain ownership
        _previousOwner = address(0);
    }
}

contract AutoBurnYieldV2 is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromReward;
    address[] private _excludedAddressesFromReward;
   
    string private _name = "AutoBurnYield";
    string private _symbol = "ABY";
    uint256 private _decimals = 6;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10**5 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _liquidityFee = _taxFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public _burnFee = _taxFee;
    uint256 private _previousBurnFee = _burnFee;

    IUniswapV2Router02 public immutable uniswapV2RouterObject;
    address public immutable uniswapV2wETHAddr;
    address public immutable uniswapV2PairAddr;
    address public immutable uniswapV2RouterAddr;
    address private _blackholeZero = address(0);
    address private _blackholeDead = 0x000000000000000000000000000000000000dEaD;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = _tTotal; //No much effect on bsc
    
    uint256 public lastPoolBurnTime;
    uint256 public epoch;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() public {
        _rOwned[_msgSender()] = _rTotal;
        address _uniswapV2RouterAddr=0x10ED43C718714eb63d5aA57B78B54704E256024E; //BNB v2
        //address _uniswapV2RouterAddr=0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F; //BNB v1
        //address _uniswapV2RouterAddr=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //All ETH chains
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_uniswapV2RouterAddr);
        uniswapV2RouterAddr = _uniswapV2RouterAddr;
		uniswapV2wETHAddr = _uniswapV2Router.WETH();
         // Create a uniswap pair for this new token
        uniswapV2PairAddr = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // set the rest of the contract variables
        uniswapV2RouterObject = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_uniswapV2RouterAddr] = true; //unstake own liquidity to BNB directly possible with this
        emit Transfer(_blackholeZero, _msgSender(), _tTotal);
        epoch = 86400;
        lastPoolBurnTime = block.timestamp.div(epoch).mul(epoch); //set time part to midnight UTC
    }

    function countdownPoolBurnDue() public view returns (uint256) {
          return ((lastPoolBurnTime.add(epoch))>block.timestamp?(lastPoolBurnTime.add(epoch).sub(block.timestamp)):0);
    }


    function PoolBurnAndSync() public returns (bool) {
        //Checks pool address and time since last pool burn
        if (countdownPoolBurnDue() == 0) {
            uint256 amount = balanceOf(uniswapV2PairAddr); 
            lastPoolBurnTime = lastPoolBurnTime.add(epoch);
            //Processes 3% from pool address
            if (amount > 100) {
                _tokenTransfer(uniswapV2PairAddr,uniswapV2PairAddr,amount,2);
               //Calls sync anytime it's not a swap. Swaps sync at the end automatically.
                IUniswapV2Pair(uniswapV2PairAddr).sync(); //important to reflect updated price
            }
            return true;
        }
        return false;
    }


    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 uint8(_decimals);
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcludedFromReward[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) {
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        _transfer(sender, recipient, amount);
        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 _isExcludedFromReward[account];
    }

    function isFeelessP2P(address account1, address account2) public view returns (bool) {
        return !(account1.isContract() || account2.isContract());
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcludedFromReward[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) external 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);
    }

    //exclude the remainder left in presale contract if too big
    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcludedFromReward[account], "Account is already excluded");
        require(_excludedAddressesFromReward.length <= 10, "ExcludedFromReward limit reached");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcludedFromReward[account] = true;
        _excludedAddressesFromReward.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromReward[account], "Account is already excluded");
        for (uint256 i = 0; i < _excludedAddressesFromReward.length; i++) {
            if (_excludedAddressesFromReward[i] == account) {
                _excludedAddressesFromReward[i] = _excludedAddressesFromReward[_excludedAddressesFromReward.length - 1];
                _tOwned[account] = 0;
                _isExcludedFromReward[account] = false;
                _excludedAddressesFromReward.pop();
                break;
            }
        }
    }
    
    //Allow excluding from fee certain contracts, usually lock or payment contracts, but not the router or the pool.
    function excludeFromFee(address account) public onlyOwner {
        if (account.isContract() && account != uniswapV2PairAddr)
        _isExcludedFromFee[account] = true;
    }
    // Do not include back this contract. Owner can renounce being feeless.
    function includeInFee(address account) public onlyOwner {
        if (account != address(this))
        _isExcludedFromFee[account] = false;
    }
  
// Fee and limit manipulation functions DEACTIVATED. Owner cannot call them and therefore does not need to renounce.

/*    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
*/    
    
     //to recieve ETH from uniswapV2Router when swapping --> use rescueWei to recover ether
    receive() external payable {}

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

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).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 < _excludedAddressesFromReward.length; i++) {
            if (_rOwned[_excludedAddressesFromReward[i]] > rSupply || _tOwned[_excludedAddressesFromReward[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excludedAddressesFromReward[i]]);
            tSupply = tSupply.sub(_tOwned[_excludedAddressesFromReward[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(_isExcludedFromReward[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _burnFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _liquidityFee = _previousLiquidityFee;
    }

    //Daily burn burns 1%, redistributes 2% and boosts price by 3%.
    function setBoostFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0) return;
        if(_taxFee == 2 && _liquidityFee == 0 && _burnFee == 1) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 2;
        _burnFee = 1;
        _liquidityFee = 0;
    }
    

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

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

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

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

        //indicates if fee should be deducted from transfer
        uint8 takeFee = 1;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = 0;
        }

        //feeless p2p transfer
        if(isFeelessP2P(from, to)){
            PoolBurnAndSync();
            takeFee = 0;
        }
        

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 numTokensSellToAddToLiquidity = (_tTotal.div(10**5)<100 ? 100 : _tTotal.div(10**5));
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2PairAddr &&
            swapAndLiquifyEnabled &&
			takeFee == 1 //avoid costly liquify on p2p sends and to/from the presale
        ) {
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function bulkTransfer(address payable[] calldata addrs, uint256[] calldata amounts) external returns(bool) {
        for (uint256 i = 0; i < addrs.length; i++) {
            _transfer(_msgSender(), addrs[i], amounts[i]);
        }
        return true;
    }

    function bulkTransferFrom(address payable[] calldata addrsFrom, address payable[] calldata addrsTo, uint256[] calldata amounts) external returns(bool) {
        address _currentOwner = _msgSender();
        for (uint256 i = 0; i < addrsFrom.length; i++) {
           _currentOwner = addrsFrom[i];
           if (_currentOwner != _msgSender()) {
               _approve(_currentOwner, _msgSender(), _allowances[_currentOwner][_msgSender()].sub(amounts[i], "ERC20: some transfer amount in bulkTransferFrom exceeds allowance"));
           }
           _transfer(_currentOwner, addrsTo[i], amounts[i]);
        }
        return true;
    }

	function getContractBalanceETH() public view returns (uint256) {
	    return address(this).balance;
	}
 
    //collect the dust from liquify which is always done a bit cheaper. Can be used as promotion or buyback funds or donated to liquidity.
    function rescueWei(address payable To) external onlyOwner returns (bool) {
		uint256 bal = getContractBalanceETH();
		if (bal == 0) return false;
		if (To == uniswapV2PairAddr) {
		    IWETH(uniswapV2wETHAddr).deposit{value: bal}();
		    IWETH(uniswapV2wETHAddr).transfer(To,bal);
		    IUniswapV2Pair(uniswapV2PairAddr).sync(); //avoid skimming from liquidity
		} else
		    require(To.send(bal),"Send dust reverted probably due to recipient not being EOA");
		return true;
	}
	
    // Function to allow owner to claim *other* tokens sent to this contract (by mistake)
    // Owner cannot transfer out ABY tokens from this smart contract
    function rescueOtherTokens(address _tokenAddr, address _to, uint _amount) external onlyOwner {
        require(_tokenAddr != address(this), "Cannot transfer out from swap queue!");
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

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

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

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

        // how much ETH did we just swap into?
        uint256 ETHBalanceFromSwap = getContractBalanceETH().sub(initialETHBalance);

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

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,uint8 feePlan) private {
        if(feePlan == 0) //no fees
            removeAllFee();
        if(feePlan == 2) //daily boost
            setBoostFee();
        
        if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(feePlan != 1) //restore standard fees
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 currentRate =  _getRate();
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tBurn > 0) emit Transfer(sender, _blackholeZero, tBurn); 
        if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); 
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 currentRate =  _getRate();
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tBurn > 0) emit Transfer(sender, _blackholeZero, tBurn); 
        if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); 
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 currentRate =  _getRate();
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tBurn > 0) emit Transfer(sender, _blackholeZero, tBurn); 
        if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); 
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 currentRate =  _getRate();
        uint256 rBurn =  tBurn.mul(currentRate);
        _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, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tBurn > 0) emit Transfer(sender, _blackholeZero, tBurn); 
        if (tLiquidity > 0) emit Transfer(sender, address(this), tLiquidity); 
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PoolBurnAndSync","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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":[{"internalType":"address payable[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"bulkTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"addrsFrom","type":"address[]"},{"internalType":"address payable[]","name":"addrsTo","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"bulkTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countdownPoolBurnDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalanceETH","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":"address","name":"account1","type":"address"},{"internalType":"address","name":"account2","type":"address"}],"name":"isFeelessP2P","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPoolBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"To","type":"address"}],"name":"rescueWei","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2PairAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterObject","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2wETHAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610140604052600d6101008190526c105d5d1bd09d5c9b965a595b19609a1b610120908152620000339160099190620005fb565b506040805180820190915260038082526241425960e81b60209092019182526200006091600a91620005fb565b506006600b5564174876e800600c81905564030e9667ff19600d55600260108190556011819055601281905560138190556014819055601555601680546001600160a01b03199081169091556017805460ff60a81b19921661dead1791909116600160a81b179055601855348015620000d857600080fd5b506000620000e562000490565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d54600360006200014062000490565b6001600160a01b031681526020808201929092526040908101600020929092557f10ed43c718714eb63d5aa57b78b54704e256024e00000000000000000000000060e05281516315ab88c960e31b815291517310ed43c718714eb63d5aa57b78b54704e256024e928392839263ad5c4648926004808201939291829003018186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d6020811015620001fb57600080fd5b505160601b6001600160601b03191660a0526040805163c45a015560e01b815290516001600160a01b0383169163c45a0155916004808301926020929190829003018186803b1580156200024e57600080fd5b505afa15801562000263573d6000803e3d6000fd5b505050506040513d60208110156200027a57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d6020811015620002f757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200034a57600080fd5b505af11580156200035f573d6000803e3d6000fd5b505050506040513d60208110156200037657600080fd5b50516001600160601b0319606091821b811660c0529082901b16608052600160066000620003a362000494565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260069093528183208054851660019081179091559086168352912080549092161790556200040162000490565b601654600c5460408051918252516001600160a01b039384169392909216917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a362015180601a8190556200048490620004704282620004a3602090811b6200204417901c565b620004f660201b6200208d1790919060201c565b60195550620006979050565b3390565b6000546001600160a01b031690565b6000620004ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200055460201b60201c565b90505b92915050565b6000826200050757506000620004f0565b828202828482816200051557fe5b0414620004ed5760405162461bcd60e51b815260040180806020018281038252602181526020018062003cd16021913960400191505060405180910390fd5b60008183620005e45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005a85781810151838201526020016200058e565b50505050905090810190601f168015620005d65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620005f157fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063e57805160ff19168380011785556200066e565b828001600101855582156200066e579182015b828111156200066e57825182559160200191906001019062000651565b506200067c92915062000680565b5090565b5b808211156200067c576000815560010162000681565b60805160601c60a05160601c60c05160601c60e05160601c6135ad6200072460003980611cf55280612fa952806130be525080610c9c5280610dc65280610e145280610e355280610e5e5280611378528061145052806115bc528061238352508061148a52806114fe528061196e5280612f57525080611ac35280612fd0528061312952506135ad6000f3fe6080604052600436106102815760003560e01c80635ceb62d71161014f578063a457c2d7116100c1578063cea208511161007a578063cea2085114610985578063dd4670641461099a578063dd62ed3e146109c4578063e8050052146109ff578063ea2f0b3714610b1a578063f2fde38b14610b4d57610288565b8063a457c2d714610899578063a69df4b5146108d2578063a9059cbb146108e7578063b6c5232414610920578063bc51803a14610935578063c0b0fda21461097057610288565b80637d1db4a5116101135780637d1db4a5146107fd57806388f82020146108125780638da5cb5b14610845578063900cf0cf1461085a57806394e6a8391461086f57806395d89b411461088457610288565b80635ceb62d7146107765780635fe876651461078b5780636bc87c3a146107a057806370a08231146107b5578063715018a6146107e857610288565b80633685d419116101f3578063437823ec116101ac578063437823ec14610663578063442a8031146106965780634549b039146106c95780634a74bb02146106fb57806352390c02146107105780635342acb41461074357610288565b80633685d4191461055e5780633793675c1461059357806338d4d589146105a857806339509351146105eb5780633b124fe7146106245780633bd5d1731461063957610288565b806318160ddd1161024557806318160ddd1461048757806323b872dd1461049c5780632b65c824146104df5780632d838119146104f4578063303308f21461051e578063313ce5671461053357610288565b806306fdde031461028d578063095ea7b31461031757806313114a9d14610364578063153a1f3e1461038b5780631811eea61461045657610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610b80565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102dc5781810151838201526020016102c4565b50505050905090810190601f1680156103095780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032357600080fd5b506103506004803603604081101561033a57600080fd5b506001600160a01b038135169060200135610c17565b604080519115158252519081900360200190f35b34801561037057600080fd5b50610379610c35565b60408051918252519081900360200190f35b34801561039757600080fd5b50610350600480360360408110156103ae57600080fd5b810190602081018135600160201b8111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460208302840111600160201b831117156103fb57600080fd5b919390929091602081019035600160201b81111561041857600080fd5b82018360208201111561042a57600080fd5b803590602001918460208302840111600160201b8311171561044b57600080fd5b509092509050610c3b565b34801561046257600080fd5b5061046b610c9a565b604080516001600160a01b039092168252519081900360200190f35b34801561049357600080fd5b50610379610cbe565b3480156104a857600080fd5b50610350600480360360608110156104bf57600080fd5b506001600160a01b03813581169160208101359091169060400135610cc4565b3480156104eb57600080fd5b50610379610d4b565b34801561050057600080fd5b506103796004803603602081101561051757600080fd5b5035610d4f565b34801561052a57600080fd5b50610350610db1565b34801561053f57600080fd5b50610548610ee0565b6040805160ff9092168252519081900360200190f35b34801561056a57600080fd5b506105916004803603602081101561058157600080fd5b50356001600160a01b0316610ee6565b005b34801561059f57600080fd5b506103796110a7565b3480156105b457600080fd5b50610591600480360360608110156105cb57600080fd5b506001600160a01b038135811691602081013590911690604001356110ad565b3480156105f757600080fd5b506103506004803603604081101561060e57600080fd5b506001600160a01b0381351690602001356111d5565b34801561063057600080fd5b50610379611223565b34801561064557600080fd5b506105916004803603602081101561065c57600080fd5b5035611229565b34801561066f57600080fd5b506105916004803603602081101561068657600080fd5b50356001600160a01b0316611305565b3480156106a257600080fd5b50610350600480360360208110156106b957600080fd5b50356001600160a01b03166113d9565b3480156106d557600080fd5b50610379600480360360408110156106ec57600080fd5b50803590602001351515611680565b34801561070757600080fd5b50610350611714565b34801561071c57600080fd5b506105916004803603602081101561073357600080fd5b50356001600160a01b0316611724565b34801561074f57600080fd5b506103506004803603602081101561076657600080fd5b50356001600160a01b0316611902565b34801561078257600080fd5b50610379611920565b34801561079757600080fd5b5061046b61196c565b3480156107ac57600080fd5b50610379611990565b3480156107c157600080fd5b50610379600480360360208110156107d857600080fd5b50356001600160a01b0316611996565b3480156107f457600080fd5b506105916119f8565b34801561080957600080fd5b50610379611a88565b34801561081e57600080fd5b506103506004803603602081101561083557600080fd5b50356001600160a01b0316611a8e565b34801561085157600080fd5b5061046b611aac565b34801561086657600080fd5b50610379611abb565b34801561087b57600080fd5b5061046b611ac1565b34801561089057600080fd5b506102a2611ae5565b3480156108a557600080fd5b50610350600480360360408110156108bc57600080fd5b506001600160a01b038135169060200135611b46565b3480156108de57600080fd5b50610591611bae565b3480156108f357600080fd5b506103506004803603604081101561090a57600080fd5b506001600160a01b038135169060200135611c9f565b34801561092c57600080fd5b50610379611cb3565b34801561094157600080fd5b506103506004803603604081101561095857600080fd5b506001600160a01b0381358116916020013516611cb9565b34801561097c57600080fd5b50610379611ced565b34801561099157600080fd5b5061046b611cf3565b3480156109a657600080fd5b50610591600480360360208110156109bd57600080fd5b5035611d17565b3480156109d057600080fd5b50610379600480360360408110156109e757600080fd5b506001600160a01b0381358116916020013516611db5565b348015610a0b57600080fd5b5061035060048036036060811015610a2257600080fd5b810190602081018135600160201b811115610a3c57600080fd5b820183602082011115610a4e57600080fd5b803590602001918460208302840111600160201b83111715610a6f57600080fd5b919390929091602081019035600160201b811115610a8c57600080fd5b820183602082011115610a9e57600080fd5b803590602001918460208302840111600160201b83111715610abf57600080fd5b919390929091602081019035600160201b811115610adc57600080fd5b820183602082011115610aee57600080fd5b803590602001918460208302840111600160201b83111715610b0f57600080fd5b509092509050611de0565b348015610b2657600080fd5b5061059160048036036020811015610b3d57600080fd5b50356001600160a01b0316611ed5565b348015610b5957600080fd5b5061059160048036036020811015610b7057600080fd5b50356001600160a01b0316611f5e565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c0c5780601f10610be157610100808354040283529160200191610c0c565b820191906000526020600020905b815481529060010190602001808311610bef57829003601f168201915b505050505090505b90565b6000610c2b610c246120e6565b84846120ea565b5060015b92915050565b600e5490565b6000805b84811015610c8e57610c86610c526120e6565b878784818110610c5e57fe5b905060200201356001600160a01b0316868685818110610c7a57fe5b905060200201356121d6565b600101610c3f565b50600195945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5490565b6000610d3684610cd26120e6565b610d31856040518060600160405280602881526020016133af602891396001600160a01b038a16600090815260056020526040812090610d106120e6565b6001600160a01b0316815260208101919091526040016000205491906123ff565b6120ea565b610d418484846121d6565b5060019392505050565b4790565b6000600d54821115610d925760405162461bcd60e51b815260040180806020018281038252602a81526020018061331c602a913960400191505060405180910390fd5b6000610d9c612496565b9050610da88382612044565b9150505b919050565b6000610dbb611920565b610eda576000610dea7f0000000000000000000000000000000000000000000000000000000000000000611996565b9050610e03601a546019546124b990919063ffffffff16565b6019556064811115610ed057610e5c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836002612513565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610eb757600080fd5b505af1158015610ecb573d6000803e3d6000fd5b505050505b6001915050610c14565b50600090565b600b5490565b610eee6120e6565b6000546001600160a01b03908116911614610f3e576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610fab576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b6008548110156110a357816001600160a01b031660088281548110610fcf57fe5b6000918252602090912001546001600160a01b0316141561109b57600880546000198101908110610ffc57fe5b600091825260209091200154600880546001600160a01b03909216918390811061102257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061107457fe5b600082815260209020810160001990810180546001600160a01b03191690550190556110a3565b600101610fae565b5050565b60195481565b6110b56120e6565b6000546001600160a01b03908116911614611105576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b6001600160a01b03831630141561114d5760405162461bcd60e51b81526004018080602001828103825260248152602001806132d56024913960400191505060405180910390fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156111a457600080fd5b505af11580156111b8573d6000803e3d6000fd5b505050506040513d60208110156111ce57600080fd5b5050505050565b6000610c2b6111e26120e6565b84610d3185600560006111f36120e6565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906124b9565b60105481565b60006112336120e6565b6001600160a01b03811660009081526007602052604090205490915060ff161561128e5760405162461bcd60e51b815260040180806020018281038252602c815260200180613504602c913960400191505060405180910390fd5b6000611299836126a4565b5050506001600160a01b0386166000908152600360205260409020549394506112c7939250849150506126ff565b6001600160a01b038316600090815260036020526040902055600d546112ed90826126ff565b600d55600e546112fd90846124b9565b600e55505050565b61130d6120e6565b6000546001600160a01b0390811691161461135d576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b61136f816001600160a01b0316612741565b80156113ad57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b156113d6576001600160a01b0381166000908152600660205260409020805460ff191660011790555b50565b60006113e36120e6565b6000546001600160a01b03908116911614611433576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b600061143d610d4b565b90508061144e576000915050610dac565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415611620577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561157357600080fd5b505af1158015611587573d6000803e3d6000fd5b505050506040513d602081101561159d57600080fd5b50506040805160016209351760e01b0319815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163fff6cae991600480830192600092919082900301818387803b15801561160357600080fd5b505af1158015611617573d6000803e3d6000fd5b50505050610c2b565b6040516001600160a01b0384169082156108fc029083906000818181858888f19350505050610c2b5760405162461bcd60e51b815260040180806020018281038252603a8152602001806134ca603a913960400191505060405180910390fd5b6000600c548311156116d9576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816116f95760006116e9846126a4565b50949650610c2f95505050505050565b6000611704846126a4565b50939650610c2f95505050505050565b601754600160a81b900460ff1681565b61172c6120e6565b6000546001600160a01b0390811691161461177c576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156117ea576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b600854600a1015611842576040805162461bcd60e51b815260206004820181905260248201527f4578636c7564656446726f6d526577617264206c696d69742072656163686564604482015290519081900360640190fd5b6001600160a01b0381166000908152600360205260409020541561189c576001600160a01b03811660009081526003602052604090205461188290610d4f565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b60004261193a601a546019546124b990919063ffffffff16565b11611946576000611967565b61196742611961601a546019546124b990919063ffffffff16565b906126ff565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b6001600160a01b03811660009081526007602052604081205460ff16156119d657506001600160a01b038116600090815260046020526040902054610dac565b6001600160a01b038216600090815260036020526040902054610c2f90610d4f565b611a006120e6565b6000546001600160a01b03908116911614611a50576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116906000805160206133f7833981519152908390a3600080546001600160a01b0319169055565b60185481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b601a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c0c5780601f10610be157610100808354040283529160200191610c0c565b6000610c2b611b536120e6565b84610d31856040518060600160405280602581526020016135536025913960056000611b7d6120e6565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123ff565b6001546001600160a01b03163314611bf75760405162461bcd60e51b81526004018080602001828103825260238152602001806135306023913960400191505060405180910390fd5b6002544211611c4d576040805162461bcd60e51b815260206004820152601c60248201527f436f6e7472616374206f776e657273686970206973206c6f636b656400000000604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116916000805160206133f783398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610c2b611cac6120e6565b84846121d6565b60025490565b6000611ccd836001600160a01b0316612741565b80611ce55750611ce5826001600160a01b0316612741565b159392505050565b60145481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611d1f6120e6565b6000546001600160a01b03908116911614611d6f576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815542820160025560405181906000805160206133f7833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b600080611deb6120e6565b905060005b87811015611ec657888882818110611e0457fe5b905060200201356001600160a01b03169150611e1e6120e6565b6001600160a01b0316826001600160a01b031614611e9257611e9282611e426120e6565b610d31888886818110611e5157fe5b90506020020135604051806080016040528060418152602001613440604191396001600160a01b038816600090815260056020526040812090610d106120e6565b611ebe82888884818110611ea257fe5b905060200201356001600160a01b0316878785818110610c7a57fe5b600101611df0565b50600198975050505050505050565b611edd6120e6565b6000546001600160a01b03908116911614611f2d576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b6001600160a01b03811630146113d6576001600160a01b03166000908152600660205260409020805460ff19169055565b611f666120e6565b6000546001600160a01b03908116911614611fb6576040805162461bcd60e51b815260206004820181905260248201526000805160206133d7833981519152604482015290519081900360640190fd5b6001600160a01b038116611ffb5760405162461bcd60e51b81526004018080602001828103825260268152602001806133466026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206133f783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061208683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061277d565b9392505050565b60008261209c57506000610c2f565b828202828482816120a957fe5b04146120865760405162461bcd60e51b815260040180806020018281038252602181526020018061338e6021913960400191505060405180910390fd5b3390565b6001600160a01b03831661212f5760405162461bcd60e51b81526004018080602001828103825260248152602001806134a66024913960400191505060405180910390fd5b6001600160a01b0382166121745760405162461bcd60e51b815260040180806020018281038252602281526020018061336c6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661221b5760405162461bcd60e51b81526004018080602001828103825260258152602001806134816025913960400191505060405180910390fd5b6001600160a01b0382166122605760405162461bcd60e51b81526004018080602001828103825260238152602001806132f96023913960400191505060405180910390fd5b6000811161229f5760405162461bcd60e51b81526004018080602001828103825260298152602001806134176029913960400191505060405180910390fd5b6001600160a01b03831660009081526006602052604090205460019060ff16806122e157506001600160a01b03831660009081526006602052604090205460ff165b156122ea575060005b6122f48484611cb9565b1561230757612301610db1565b50600090505b600061231230611996565b905060006064612330620186a0600c5461204490919063ffffffff16565b1061234a57600c5461234590620186a0612044565b61234d565b60645b9050601854821061235e5760185491505b808210801590819061237a5750601754600160a01b900460ff16155b80156123b857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b80156123cd5750601754600160a81b900460ff165b80156123dc57508360ff166001145b156123ea576123ea836127e2565b6123f687878787612513565b50505050505050565b6000818484111561248e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561245357818101518382015260200161243b565b50505050905090810190601f1680156124805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006124a3612895565b90925090506124b28282612044565b9250505090565b600082820183811015612086576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60ff8116612523576125236129f8565b8060ff166002141561253757612537612a41565b6001600160a01b03841660009081526007602052604090205460ff16801561257857506001600160a01b03831660009081526007602052604090205460ff16155b1561258d57612588848484612ab5565b61268b565b6001600160a01b03841660009081526007602052604090205460ff161580156125ce57506001600160a01b03831660009081526007602052604090205460ff165b156125de57612588848484612c8e565b6001600160a01b03841660009081526007602052604090205460ff1615801561262057506001600160a01b03831660009081526007602052604090205460ff16155b1561263057612588848484612d53565b6001600160a01b03841660009081526007602052604090205460ff16801561267057506001600160a01b03831660009081526007602052604090205460ff165b1561268057612588848484612db3565b61268b848484612d53565b8060ff1660011461269e5761269e612e42565b50505050565b60008060008060008060008060008060006126be8c612e56565b935093509350935060008060006126df8f8787876126da612496565b612ea5565b919f509d509b509599509397509195509350505050919395979092949650565b600061208683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123ff565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061277557508115155b949350505050565b600081836127cc5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561245357818101518382015260200161243b565b5060008385816127d857fe5b0495945050505050565b6017805460ff60a01b1916600160a01b1790556000612802826002612044565b9050600061281083836126ff565b9050600061281c610d4b565b905061282783612f07565b600061283582611961610d4b565b905061284183826130b8565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506017805460ff60a01b19169055505050565b600d54600c546000918291825b6008548110156129c6578260036000600884815481106128be57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061292357508160046000600884815481106128fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561293a57600d54600c54945094505050506129f4565b61297a600360006008848154811061294e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126ff565b92506129bc600460006008848154811061299057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126ff565b91506001016128a2565b50600c54600d546129d691612044565b8210156129ee57600d54600c549350935050506129f4565b90925090505b9091565b601054158015612a085750601254155b8015612a145750601454155b15612a1e57612a3f565b60108054601155601480546015556012805460135560009283905590829055555b565b601054158015612a515750601254155b8015612a5d5750601454155b15612a6757612a3f565b6010546002148015612a795750601254155b8015612a8757506014546001145b15612a9157612a3f565b60108054601155601480546015556012805460135560029092556001905560009055565b6000806000806000806000612ac9886126a4565b96509650965096509650965096506000612ae1612496565b90506000612aef848361208d565b6001600160a01b038d16600090815260046020526040902054909150612b15908b6126ff565b6001600160a01b038d16600090815260046020908152604080832093909355600390522054612b44908a6126ff565b6001600160a01b03808e1660009081526003602052604080822093909355908d1681522054612b7390896124b9565b6001600160a01b038c16600090815260036020526040902055612b958361319f565b612ba187828787613228565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a38315612c39576016546040805186815290516001600160a01b03928316928f16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35b8215612c805760408051848152905130916001600160a01b038f16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35b505050505050505050505050565b6000806000806000806000612ca2886126a4565b96509650965096509650965096506000612cba612496565b90506000612cc8848361208d565b6001600160a01b038d16600090815260036020526040902054909150612cee908a6126ff565b6001600160a01b03808e16600090815260036020908152604080832094909455918e16815260049091522054612d2490876124b9565b6001600160a01b038c16600090815260046020908152604080832093909355600390522054612b7390896124b9565b6000806000806000806000612d67886126a4565b96509650965096509650965096506000612d7f612496565b90506000612d8d848361208d565b6001600160a01b038d16600090815260036020526040902054909150612b44908a6126ff565b6000806000806000806000612dc7886126a4565b96509650965096509650965096506000612ddf612496565b90506000612ded848361208d565b6001600160a01b038d16600090815260046020526040902054909150612e13908b6126ff565b6001600160a01b038d16600090815260046020908152604080832093909355600390522054612cee908a6126ff565b601154601055601554601455601354601255565b6000806000806000612e678661327a565b90506000612e748761329c565b90506000612e81886132b8565b90506000612e958261196185818d896126ff565b9993985091965094509092505050565b6000808080612eb4898661208d565b90506000612ec2898761208d565b90506000612ed0898861208d565b90506000612ede898961208d565b90506000612ef282611961858189896126ff565b949d949c50929a509298505050505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612f3557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612f8357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612fce307f0000000000000000000000000000000000000000000000000000000000000000846120ea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561307357818101518382015260200161305b565b505050509050019650505050505050600060405180830381600087803b15801561309c57600080fd5b505af11580156130b0573d6000803e3d6000fd5b505050505050565b6130e3307f0000000000000000000000000000000000000000000000000000000000000000846120ea565b6017546040805163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0392831660848201524260a482015290517f00000000000000000000000000000000000000000000000000000000000000009092169163f305d71991849160c480830192606092919082900301818588803b15801561317457600080fd5b505af1158015613188573d6000803e3d6000fd5b50505050506040513d606081101561269e57600080fd5b60006131a9612496565b905060006131b7838361208d565b306000908152600360205260409020549091506131d490826124b9565b3060009081526003602090815260408083209390935560079052205460ff1615613223573060009081526004602052604090205461321290846124b9565b306000908152600460205260409020555b505050565b6132418361196186600d546126ff90919063ffffffff16565b600d55600e5461325190836124b9565b600e55600f5461326190826124b9565b600f55600c5461327190826126ff565b600c5550505050565b6000610c2f60646132966010548561208d90919063ffffffff16565b90612044565b6000610c2f60646132966014548561208d90919063ffffffff16565b6000610c2f60646132966012548561208d90919063ffffffff1656fe43616e6e6f74207472616e73666572206f75742066726f6d20737761702071756575652145524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a20736f6d65207472616e7366657220616d6f756e7420696e2062756c6b5472616e7366657246726f6d206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737353656e6420647573742072657665727465642070726f6261626c792064756520746f20726563697069656e74206e6f74206265696e6720454f414578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fb56052760561834d3fa0d13f54cb22494b07630a7f99dee40f9d4fec029692964736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed ByteCode Sourcemap

16863:26169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21162:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22091:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22091:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23390:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34205:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34205:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34205:262:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34205:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34205:262:0;;;;;;;;;;-1:-1:-1;34205:262:0;;-1:-1:-1;34205:262:0;-1:-1:-1;34205:262:0;:::i;18088:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18088:42:0;;;;;;;;;;;;;;21446:95;;;;;;;;;;;;;:::i;22260:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22260:313:0;;;;;;;;;;;;;;;;;:::i;35126:104::-;;;;;;;;;;;;;:::i;24329:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24329:253:0;;:::i;20448:704::-;;;;;;;;;;;;;:::i;21348:90::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25246:613;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25246:613:0;-1:-1:-1;;;;;25246:613:0;;:::i;:::-;;18481:31;;;;;;;;;;;;;:::i;36037:240::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36037:240:0;;;;;;;;;;;;;;;;;:::i;22581:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22581:218:0;;;;;;;;:::i;17697:26::-;;;;;;;;;;;;;:::i;23485:388::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23485:388:0;;:::i;25989:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25989:178:0;-1:-1:-1;;;;;25989:178:0;;:::i;35379:488::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35379:488:0;-1:-1:-1;;;;;35379:488:0;;:::i;23881:440::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23881:440:0;;;;;;;;;:::i;18354:40::-;;;;;;;;;;;;;:::i;24655:583::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24655:583:0;-1:-1:-1;;;;;24655:583:0;;:::i;31659:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31659:123:0;-1:-1:-1;;;;;31659:123:0;;:::i;20248:190::-;;;;;;;;;;;;;:::i;18039:42::-;;;;;;;;;;;;;:::i;17778:38::-;;;;;;;;;;;;;:::i;21549:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21549:208:0;-1:-1:-1;;;;;21549:208:0;;:::i;15588:148::-;;;;;;;;;;;;;:::i;18407:37::-;;;;;;;;;;;;;:::i;23084:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23084:130:0;-1:-1:-1;;;;;23084:130:0;;:::i;15378:79::-;;;;;;;;;;;;;:::i;18519:20::-;;;;;;;;;;;;;:::i;17975:57::-;;;;;;;;;;;;;:::i;21253:87::-;;;;;;;;;;;;;:::i;22807:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22807:269:0;;;;;;;;:::i;16439:417::-;;;;;;;;;;;;;:::i;21765:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21765:167:0;;;;;;;;:::i;15992:89::-;;;;;;;;;;;;;:::i;23222:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23222:160:0;;;;;;;;;;:::i;17883:33::-;;;;;;;;;;;;;:::i;18137:44::-;;;;;;;;;;;;;:::i;16155:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16155:214:0;;:::i;21940:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21940:143:0;;;;;;;;;;:::i;34475:646::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34475:646:0;;;;;;;;;;-1:-1:-1;34475:646:0;;-1:-1:-1;34475:646:0;-1:-1:-1;34475:646:0;:::i;26250:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26250:149:0;-1:-1:-1;;;;;26250:149:0;;:::i;15742:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15742:244:0;-1:-1:-1;;;;;15742:244:0;;:::i;21162:83::-;21232:5;21225:12;;;;;;;;-1:-1:-1;;21225:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21199:13;;21225:12;;21232:5;;21225:12;;21232:5;21225:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21162:83;;:::o;22091:161::-;22166:4;22183:39;22192:12;:10;:12::i;:::-;22206:7;22215:6;22183:8;:39::i;:::-;-1:-1:-1;22240:4:0;22091:161;;;;;:::o;23390:87::-;23459:10;;23390:87;:::o;34205:262::-;34306:4;;34323:115;34343:16;;;34323:115;;;34381:45;34391:12;:10;:12::i;:::-;34405:5;;34411:1;34405:8;;;;;;;;;;;;;-1:-1:-1;;;;;34405:8:0;34415:7;;34423:1;34415:10;;;;;;;;;;;;;34381:9;:45::i;:::-;34361:3;;34323:115;;;-1:-1:-1;34455:4:0;;34205:262;-1:-1:-1;;;;;34205:262:0:o;18088:42::-;;;:::o;21446:95::-;21526:7;;21446:95;:::o;22260:313::-;22358:4;22375:121;22384:6;22392:12;:10;:12::i;:::-;22406:89;22444:6;22406:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22406:19:0;;;;;;:11;:19;;;;;;22426:12;:10;:12::i;:::-;-1:-1:-1;;;;;22406:33:0;;;;;;;;;;;;-1:-1:-1;22406:33:0;;;:89;:37;:89::i;:::-;22375:8;:121::i;:::-;22507:36;22517:6;22525:9;22536:6;22507:9;:36::i;:::-;-1:-1:-1;22561:4:0;22260:313;;;;;:::o;35126:104::-;35204:21;35126:104;:::o;24329:253::-;24395:7;24434;;24423;:18;;24415:73;;;;-1:-1:-1;;;24415:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24499:19;24522:10;:8;:10::i;:::-;24499:33;-1:-1:-1;24550:24:0;:7;24499:33;24550:11;:24::i;:::-;24543:31;;;24329:253;;;;:::o;20448:704::-;20491:4;20573:22;:20;:22::i;:::-;20569:553;;20617:14;20634:28;20644:17;20634:9;:28::i;:::-;20617:45;;20697:27;20718:5;;20697:16;;:20;;:27;;;;:::i;:::-;20678:16;:46;20798:3;20789:12;;20785:300;;;20822:60;20837:17;20855;20873:6;20880:1;20822:14;:60::i;:::-;21007:17;-1:-1:-1;;;;;20992:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20785:300;21106:4;21099:11;;;;;20569:553;-1:-1:-1;21139:5:0;20448:704;:::o;21348:90::-;21420:9;;21348:90;:::o;25246:613::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25328:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;25320:70;;;::::0;;-1:-1:-1;;;25320:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25406:9;25401:451;25425:28;:35:::0;25421:39;::::1;25401:451;;;25521:7;-1:-1:-1::0;;;;;25486:42:0::1;:28;25515:1;25486:31;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25486:31:0::1;:42;25482:359;;;25583:28;25612:35:::0;;-1:-1:-1;;25612:39:0;;;25583:69;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25549:28:::1;:31:::0;;-1:-1:-1;;;;;25583:69:0;;::::1;::::0;25578:1;;25549:31;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:103:::0;;-1:-1:-1;;;;;;25549:103:0::1;-1:-1:-1::0;;;;;25549:103:0;;::::1;;::::0;;25671:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25710:21:::1;:30:::0;;;;:38;;-1:-1:-1;;25710:38:0::1;::::0;;25767:28:::1;:34:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25767:34:0;;;;;-1:-1:-1;;;;;;25767:34:0::1;::::0;;;;;25820:5:::1;;25482:359;25462:3;;25401:451;;;;25246:613:::0;:::o;18481:31::-;;;;:::o;36037:240::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36149:27:0;::::1;36171:4;36149:27;;36141:76;;;;-1:-1:-1::0;;;36141:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36235:10;-1:-1:-1::0;;;;;36228:27:0::1;;36256:3;36261:7;36228:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;36228:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;36037:240:0:o;22581:218::-;22669:4;22686:83;22695:12;:10;:12::i;:::-;22709:7;22718:50;22757:10;22718:11;:25;22730:12;:10;:12::i;:::-;-1:-1:-1;;;;;22718:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22718:25:0;;;:34;;;;;;;;;;;:38;:50::i;17697:26::-;;;;:::o;23485:388::-;23537:14;23554:12;:10;:12::i;:::-;-1:-1:-1;;;;;23586:29:0;;;;;;:21;:29;;;;;;23537;;-1:-1:-1;23586:29:0;;23585:30;23577:87;;;;-1:-1:-1;;;23577:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23676:15;23701:19;23712:7;23701:10;:19::i;:::-;-1:-1:-1;;;;;;;;23749:15:0;;;;;;:7;:15;;;;;;23675:45;;-1:-1:-1;23749:28:0;;:15;-1:-1:-1;23675:45:0;;-1:-1:-1;;23749:19:0;:28::i;:::-;-1:-1:-1;;;;;23731:15:0;;;;;;:7;:15;;;;;:46;23798:7;;:20;;23810:7;23798:11;:20::i;:::-;23788:7;:30;23842:10;;:23;;23857:7;23842:14;:23::i;:::-;23829:10;:36;-1:-1:-1;;;23485:388:0:o;25989:178::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;26062:20:::1;:7;-1:-1:-1::0;;;;;26062:18:0::1;;:20::i;:::-;:52;;;;;26097:17;-1:-1:-1::0;;;;;26086:28:0::1;:7;-1:-1:-1::0;;;;;26086:28:0::1;;;26062:52;26058:101;;;-1:-1:-1::0;;;;;26125:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26125:34:0::1;26155:4;26125:34;::::0;;26058:101:::1;25989:178:::0;:::o;35379:488::-;35446:4;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;35457:11:::1;35471:23;:21;:23::i;:::-;35457:37:::0;-1:-1:-1;35503:8:0;35499:26:::1;;35520:5;35513:12;;;;;35499:26;35540:17;-1:-1:-1::0;;;;;35534:23:0::1;:2;-1:-1:-1::0;;;;;35534:23:0::1;;35530:316;;;35574:17;-1:-1:-1::0;;;;;35568:32:0::1;;35608:3;35568:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35629:17;-1:-1:-1::0;;;;;35623:33:0::1;;35657:2;35660:3;35623:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;35623:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;35673:40:0::1;::::0;;-1:-1:-1;;;;;;35673:40:0;;;;-1:-1:-1;;;;;35688:17:0::1;35673:38;::::0;::::1;::::0;:40:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:38;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35530:316;;;35772:12;::::0;-1:-1:-1;;;;;35772:7:0;::::1;::::0;:12;::::1;;;::::0;35780:3;;35772:12:::1;::::0;;;35780:3;35772:7;:12;::::1;;;;;;35764:82;;;;-1:-1:-1::0;;;35764:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23881:440:::0;23973:7;24012;;24001;:18;;23993:62;;;;;-1:-1:-1;;;23993:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24071:17;24066:248;;24106:15;24131:19;24142:7;24131:10;:19::i;:::-;-1:-1:-1;24105:45:0;;-1:-1:-1;24165:14:0;;-1:-1:-1;;;;;;24165:14:0;24066:248;24214:23;24246:19;24257:7;24246:10;:19::i;:::-;-1:-1:-1;24212:53:0;;-1:-1:-1;24280:22:0;;-1:-1:-1;;;;;;24280:22:0;18354:40;;;-1:-1:-1;;;18354:40:0;;;;;:::o;24655:583::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24852:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;24851:31;24843:71;;;::::0;;-1:-1:-1;;;24843:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24933:28;:35:::0;24972:2:::1;-1:-1:-1::0;24933:41:0::1;24925:86;;;::::0;;-1:-1:-1;;;24925:86:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25025:16:0;::::1;25044:1;25025:16:::0;;;:7:::1;:16;::::0;;;;;:20;25022:108:::1;;-1:-1:-1::0;;;;;25101:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25081:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25062:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25022:108:::1;-1:-1:-1::0;;;;;25140:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;25140:37:0::1;25173:4;25140:37:::0;;::::1;::::0;;;25188:28:::1;:42:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25188:42:0::1;::::0;;::::1;::::0;;24655:583::o;31659:123::-;-1:-1:-1;;;;;31747:27:0;31723:4;31747:27;;;:18;:27;;;;;;;;;31659:123::o;20248:190::-;20301:7;20361:15;20332:27;20353:5;;20332:16;;:20;;:27;;;;:::i;:::-;20331:45;:98;;20428:1;20331:98;;;20378:48;20410:15;20378:27;20399:5;;20378:16;;:20;;:27;;;;:::i;:::-;:31;;:48::i;:::-;20323:107;;20248:190;:::o;18039:42::-;;;:::o;17778:38::-;;;;:::o;21549:208::-;-1:-1:-1;;;;;21639:30:0;;21615:7;21639:30;;;:21;:30;;;;;;;;21635:59;;;-1:-1:-1;;;;;;21678:16:0;;;;;;:7;:16;;;;;;21671:23;;21635:59;-1:-1:-1;;;;;21732:16:0;;;;;;:7;:16;;;;;;21712:37;;:19;:37::i;15588:148::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;15695:1:::1;15679:6:::0;;15658:40:::1;::::0;-1:-1:-1;;;;;15679:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;15658:40:0;15695:1;;15658:40:::1;15726:1;15709:19:::0;;-1:-1:-1;;;;;;15709:19:0::1;::::0;;15588:148::o;18407:37::-;;;;:::o;23084:130::-;-1:-1:-1;;;;;23176:30:0;23152:4;23176:30;;;:21;:30;;;;;;;;;23084:130::o;15378:79::-;15416:7;15443:6;-1:-1:-1;;;;;15443:6:0;15378:79;:::o;18519:20::-;;;;:::o;17975:57::-;;;:::o;21253:87::-;21325:7;21318:14;;;;;;;;-1:-1:-1;;21318:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21292:13;;21318:14;;21325:7;;21318:14;;21325:7;21318:14;;;;;;;;;;;;;;;;;;;;;;;;22807:269;22900:4;22917:129;22926:12;:10;:12::i;:::-;22940:7;22949:96;22988:15;22949:96;;;;;;;;;;;;;;;;;:11;:25;22961:12;:10;:12::i;:::-;-1:-1:-1;;;;;22949:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22949:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;16439:417::-;16491:14;;-1:-1:-1;;;;;16491:14:0;16509:10;16491:28;16483:76;;;;-1:-1:-1;;;16483:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16584:9;;16578:3;:15;16570:57;;;;;-1:-1:-1;;;16570:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16672:14;;;16664:6;;16643:44;;-1:-1:-1;;;;;16672:14:0;;;;16664:6;;;;-1:-1:-1;;;;;;;;;;;16643:44:0;;16707:14;;;;16698:23;;-1:-1:-1;;;;;;16698:23:0;;;-1:-1:-1;;;;;16707:14:0;;16698:23;;;;16821:27;;;16439:417::o;21765:167::-;21843:4;21860:42;21870:12;:10;:12::i;:::-;21884:9;21895:6;21860:9;:42::i;15992:89::-;16064:9;;15992:89;:::o;23222:160::-;23301:4;23327:21;:8;-1:-1:-1;;;;;23327:19:0;;:21::i;:::-;:46;;;;23352:21;:8;-1:-1:-1;;;;;23352:19:0;;:21::i;:::-;23325:49;;23222:160;-1:-1:-1;;;23222:160:0:o;17883:33::-;;;;:::o;18137:44::-;;;:::o;16155:214::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;16236:6:::1;::::0;;;16219:23;;-1:-1:-1;;;;;;16219:23:0;;::::1;-1:-1:-1::0;;;;;16236:6:0;::::1;16219:23;::::0;;;16253:19:::1;::::0;;16295:3:::1;:10:::0;::::1;16283:9;:22:::0;16321:40:::1;::::0;16236:6;;-1:-1:-1;;;;;;;;;;;16321:40:0;16236:6;;16321:40:::1;16155:214:::0;:::o;21940:143::-;-1:-1:-1;;;;;22048:18:0;;;22021:7;22048:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21940:143::o;34475:646::-;34620:4;34637:21;34661:12;:10;:12::i;:::-;34637:36;;34689:9;34684:408;34704:20;;;34684:408;;;34761:9;;34771:1;34761:12;;;;;;;;;;;;;-1:-1:-1;;;;;34761:12:0;34745:28;;34808:12;:10;:12::i;:::-;-1:-1:-1;;;;;34791:29:0;:13;-1:-1:-1;;;;;34791:29:0;;34787:232;;34840:164;34849:13;34864:12;:10;:12::i;:::-;34878:125;34923:7;;34931:1;34923:10;;;;;;;;;;;;;34878:125;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34878:26:0;;;;;;:11;:26;;;;;;34905:12;:10;:12::i;34840:164::-;35032:48;35042:13;35057:7;;35065:1;35057:10;;;;;;;;;;;;;-1:-1:-1;;;;;35057:10:0;35069:7;;35077:1;35069:10;;;;;;35032:48;34726:3;;34684:408;;;-1:-1:-1;35109:4:0;;34475:646;-1:-1:-1;;;;;;;;34475:646:0:o;26250:149::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26321:24:0;::::1;26340:4;26321:24;26317:74;;-1:-1:-1::0;;;;;26356:27:0::1;26386:5;26356:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26356:35:0::1;::::0;;26250:149::o;15742:244::-;15513:12;:10;:12::i;:::-;15503:6;;-1:-1:-1;;;;;15503:6:0;;;:22;;;15495:67;;;;;-1:-1:-1;;;15495:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15495:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15831:22:0;::::1;15823:73;;;;-1:-1:-1::0;;;15823:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15933:6;::::0;;15912:38:::1;::::0;-1:-1:-1;;;;;15912:38:0;;::::1;::::0;15933:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;15912:38:0;::::1;15961:6;:17:::0;;-1:-1:-1;;;;;;15961:17:0::1;-1:-1:-1::0;;;;;15961:17:0;;;::::1;::::0;;;::::1;::::0;;15742:244::o;2704:132::-;2762:7;2789:39;2793:1;2796;2789:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2782:46;2704:132;-1:-1:-1;;;2704:132:0:o;2452:246::-;2510:7;2534:6;2530:47;;-1:-1:-1;2564:1:0;2557:8;;2530:47;2599:5;;;2603:1;2599;:5;:1;2623:5;;;;;:10;2615:56;;;;-1:-1:-1;;;2615:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3466:106;3554:10;3466:106;:::o;31790:337::-;-1:-1:-1;;;;;31883:19:0;;31875:68;;;;-1:-1:-1;;;31875:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31962:21:0;;31954:68;;;;-1:-1:-1;;;31954:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32035:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32087:32;;;;;;;;;;;;;;;;;31790:337;;;:::o;32135:2062::-;-1:-1:-1;;;;;32257:18:0;;32249:68;;;;-1:-1:-1;;;32249:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32336:16:0;;32328:64;;;;-1:-1:-1;;;32328:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32420:1;32411:6;:10;32403:64;;;;-1:-1:-1;;;32403:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32806:24:0;;32681:13;32806:24;;;:18;:24;;;;;;32697:1;;32806:24;;;:50;;-1:-1:-1;;;;;;32834:22:0;;;;;;:18;:22;;;;;;;;32806:50;32803:92;;;-1:-1:-1;32882:1:0;32803:92;32942:22;32955:4;32961:2;32942:12;:22::i;:::-;32939:96;;;32980:17;:15;:17::i;:::-;;33022:1;33012:11;;32939:96;33339:28;33370:24;33388:4;33370:9;:24::i;:::-;33339:55;;33405:37;33465:3;33446:18;33458:5;33446:7;;:11;;:18;;;;:::i;:::-;:22;:49;;33477:7;;:18;;33489:5;33477:11;:18::i;:::-;33446:49;;;33471:3;33446:49;33405:91;;33534:12;;33510:20;:36;33507:112;;33595:12;;33572:35;;33507:112;33666:53;;;;;;;;33748;;-1:-1:-1;33785:16:0;;-1:-1:-1;;;33785:16:0;;;;33784:17;33748:53;:95;;;;;33826:17;-1:-1:-1;;;;;33818:25:0;:4;-1:-1:-1;;;;;33818:25:0;;;33748:95;:133;;;;-1:-1:-1;33860:21:0;;-1:-1:-1;;;33860:21:0;;;;33748:133;:153;;;;;33889:7;:12;;33900:1;33889:12;33748:153;33730:335;;;34017:36;34032:20;34017:14;:36::i;:::-;34151:38;34166:4;34171:2;34174:6;34181:7;34151:14;:38::i;:::-;32135:2062;;;;;;;:::o;2254:192::-;2340:7;2376:12;2368:6;;;;2360:29;;;;-1:-1:-1;;;2360:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2412:5:0;;;2254:192::o;28941:163::-;28982:7;29003:15;29020;29039:19;:17;:19::i;:::-;29002:56;;-1:-1:-1;29002:56:0;-1:-1:-1;29076:20:0;29002:56;;29076:11;:20::i;:::-;29069:27;;;;28941:163;:::o;1927:179::-;1985:7;2017:5;;;2041:6;;;;2033:46;;;;;-1:-1:-1;;;2033:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;38580:1025;38691:12;;;38688:54;;38728:14;:12;:14::i;:::-;38756:7;:12;;38767:1;38756:12;38753:57;;;38797:13;:11;:13::i;:::-;-1:-1:-1;;;;;38835:29:0;;;;;;:21;:29;;;;;;;;:66;;;;-1:-1:-1;;;;;;38869:32:0;;;;;;:21;:32;;;;;;;;38868:33;38835:66;38831:677;;;38918:48;38940:6;38948:9;38959:6;38918:21;:48::i;:::-;38831:677;;;-1:-1:-1;;;;;38989:29:0;;;;;;:21;:29;;;;;;;;38988:30;:66;;;;-1:-1:-1;;;;;;39022:32:0;;;;;;:21;:32;;;;;;;;38988:66;38984:524;;;39071:46;39091:6;39099:9;39110:6;39071:19;:46::i;38984:524::-;-1:-1:-1;;;;;39140:29:0;;;;;;:21;:29;;;;;;;;39139:30;:67;;;;-1:-1:-1;;;;;;39174:32:0;;;;;;:21;:32;;;;;;;;39173:33;39139:67;39135:373;;;39223:44;39241:6;39249:9;39260:6;39223:17;:44::i;39135:373::-;-1:-1:-1;;;;;39289:29:0;;;;;;:21;:29;;;;;;;;:65;;;;-1:-1:-1;;;;;;39322:32:0;;;;;;:21;:32;;;;;;;;39289:65;39285:223;;;39371:48;39393:6;39401:9;39412:6;39371:21;:48::i;39285:223::-;39452:44;39470:6;39478:9;39489:6;39452:17;:44::i;:::-;39531:7;:12;;39542:1;39531:12;39528:69;;39582:15;:13;:15::i;:::-;38580:1025;;;;:::o;27547:457::-;27606:7;27615;27624;27633;27642;27651;27660;27681:23;27706:12;27720:13;27735:18;27757:20;27769:7;27757:11;:20::i;:::-;27680:97;;;;;;;;27789:15;27806:23;27831:12;27847:57;27859:7;27868:4;27874:5;27881:10;27893;:8;:10::i;:::-;27847:11;:57::i;:::-;27788:116;;-1:-1:-1;27788:116:0;-1:-1:-1;27788:116:0;-1:-1:-1;27955:15:0;;-1:-1:-1;27972:4:0;;-1:-1:-1;27978:5:0;;-1:-1:-1;27985:10:0;-1:-1:-1;;;;27547:457:0;;;;;;;;;:::o;2112:136::-;2170:7;2197:43;2201:1;2204;2197:43;;;;;;;;;;;;;;;;;:3;:43::i;3841:619::-;3901:4;4369:20;;4212:66;4409:23;;;;;;:42;;-1:-1:-1;4436:15:0;;;4409:42;4401:51;3841:619;-1:-1:-1;;;;3841:619:0:o;2842:276::-;2928:7;2963:12;2956:5;2948:28;;;;-1:-1:-1;;;2948:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2987:9;3003:1;2999;:5;;;;;;;2842:276;-1:-1:-1;;;;;2842:276:0:o;36284:1010::-;18846:16;:23;;-1:-1:-1;;;;18846:23:0;-1:-1:-1;;;18846:23:0;;;;36435:27:::1;:20:::0;36460:1:::1;36435:24;:27::i;:::-;36420:42:::0;-1:-1:-1;36473:17:0::1;36493:30;:20:::0;36420:42;36493:24:::1;:30::i;:::-;36473:50;;36801:25;36829:23;:21;:23::i;:::-;36801:51;;36897:22;36914:4;36897:16;:22::i;:::-;37051:26;37080:46;37108:17;37080:23;:21;:23::i;:46::-;37051:75;;37176:43;37189:9;37200:18;37176:12;:43::i;:::-;37235:51;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;18892:16:0;:24;;-1:-1:-1;;;;18892:24:0;;;-1:-1:-1;;;36284:1010:0:o;29112:656::-;29209:7;;29245;;29162;;;;;29269:384;29293:28;:35;29289:39;;29269:384;;;29397:7;29354;:40;29362:28;29391:1;29362:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29362:31:0;29354:40;;;;;;;;;;;;;:50;;:104;;;29451:7;29408;:40;29416:28;29445:1;29416:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29416:31:0;29408:40;;;;;;;;;;;;;:50;29354:104;29350:135;;;29468:7;;29477;;29460:25;;;;;;;;;29350:135;29510:53;29522:7;:40;29530:28;29559:1;29530:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29530:31:0;29522:40;;;;;;;;;;;;;29510:7;;:11;:53::i;:::-;29500:63;;29588:53;29600:7;:40;29608:28;29637:1;29608:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29608:31:0;29600:40;;;;;;;;;;;;;29588:7;;:11;:53::i;:::-;29578:63;-1:-1:-1;29330:3:0;;29269:384;;;-1:-1:-1;29689:7:0;;29677;;:20;;:11;:20::i;:::-;29667:7;:30;29663:61;;;29707:7;;29716;;29699:25;;;;;;;;29663:61;29743:7;;-1:-1:-1;29752:7:0;-1:-1:-1;29112:656:0;;;:::o;30665:328::-;30711:7;;:12;:34;;;;-1:-1:-1;30727:13:0;;:18;30711:34;:51;;;;-1:-1:-1;30749:8:0;;:13;30711:51;30708:63;;;30764:7;;30708:63;30809:7;;;30791:15;:25;30846:8;;;30827:16;:27;30889:13;;;30865:21;:37;-1:-1:-1;30923:11:0;;;;30945:12;;;;30968:17;30665:328;:::o;31245:400::-;31290:7;;:12;:34;;;;-1:-1:-1;31306:13:0;;:18;31290:34;:51;;;;-1:-1:-1;31328:8:0;;:13;31290:51;31287:63;;;31343:7;;31287:63;31363:7;;31374:1;31363:12;:34;;;;-1:-1:-1;31379:13:0;;:18;31363:34;:51;;;;;31401:8;;31413:1;31401:13;31363:51;31360:63;;;31416:7;;31360:63;31461:7;;;31443:15;:25;31498:8;;;31479:16;:27;31541:13;;;31517:21;:37;-1:-1:-1;31575:11:0;;;-1:-1:-1;31597:12:0;;-1:-1:-1;31620:17:0;;31245:400::o;41265:840::-;41368:15;41385:23;41410:12;41424:23;41449:12;41463:13;41478:18;41500:19;41511:7;41500:10;:19::i;:::-;41367:152;;;;;;;;;;;;;;41530:19;41553:10;:8;:10::i;:::-;41530:33;-1:-1:-1;41574:13:0;41591:22;:5;41530:33;41591:9;:22::i;:::-;-1:-1:-1;;;;;41642:15:0;;;;;;:7;:15;;;;;;41574:39;;-1:-1:-1;41642:28:0;;41662:7;41642:19;:28::i;:::-;-1:-1:-1;;;;;41624:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41699:7;:15;;;;:28;;41719:7;41699:19;:28::i;:::-;-1:-1:-1;;;;;41681:15:0;;;;;;;:7;:15;;;;;;:46;;;;41759:18;;;;;;;:39;;41782:15;41759:22;:39::i;:::-;-1:-1:-1;;;;;41738:18:0;;;;;;:7;:18;;;;;:60;41812:26;41827:10;41812:14;:26::i;:::-;41849:37;41861:4;41867:5;41874:4;41880:5;41849:11;:37::i;:::-;41919:9;-1:-1:-1;;;;;41902:44:0;41911:6;-1:-1:-1;;;;;41902:44:0;;41930:15;41902:44;;;;;;;;;;;;;;;;;;41961:9;;41957:59;;41994:14;;41977:39;;;;;;;;-1:-1:-1;;;;;41994:14:0;;;;41977:39;;;;;;;;;;;;;41957:59;42032:14;;42028:68;;42053:43;;;;;;;;42078:4;;-1:-1:-1;;;;;42053:43:0;;;;;;;;;;;;42028:68;41265:840;;;;;;;;;;;;:::o;40397:860::-;40498:15;40515:23;40540:12;40554:23;40579:12;40593:13;40608:18;40630:19;40641:7;40630:10;:19::i;:::-;40497:152;;;;;;;;;;;;;;40660:19;40683:10;:8;:10::i;:::-;40660:33;-1:-1:-1;40704:13:0;40721:22;:5;40660:33;40721:9;:22::i;:::-;-1:-1:-1;;;;;40772:15:0;;;;;;:7;:15;;;;;;40704:39;;-1:-1:-1;40772:28:0;;40792:7;40772:19;:28::i;:::-;-1:-1:-1;;;;;40754:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;40832:18;;;;;:7;:18;;;;;:39;;40855:15;40832:22;:39::i;:::-;-1:-1:-1;;;;;40811:18:0;;;;;;:7;:18;;;;;;;;:60;;;;40903:7;:18;;;;:39;;40926:15;40903:22;:39::i;39613:776::-;39712:15;39729:23;39754:12;39768:23;39793:12;39807:13;39822:18;39844:19;39855:7;39844:10;:19::i;:::-;39711:152;;;;;;;;;;;;;;39874:19;39897:10;:8;:10::i;:::-;39874:33;-1:-1:-1;39918:13:0;39935:22;:5;39874:33;39935:9;:22::i;:::-;-1:-1:-1;;;;;39986:15:0;;;;;;:7;:15;;;;;;39918:39;;-1:-1:-1;39986:28:0;;40006:7;39986:19;:28::i;42113:916::-;42216:15;42233:23;42258:12;42272:23;42297:12;42311:13;42326:18;42348:19;42359:7;42348:10;:19::i;:::-;42215:152;;;;;;;;;;;;;;42378:19;42401:10;:8;:10::i;:::-;42378:33;-1:-1:-1;42422:13:0;42439:22;:5;42378:33;42439:9;:22::i;:::-;-1:-1:-1;;;;;42490:15:0;;;;;;:7;:15;;;;;;42422:39;;-1:-1:-1;42490:28:0;;42510:7;42490:19;:28::i;:::-;-1:-1:-1;;;;;42472:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42547:7;:15;;;;:28;;42567:7;42547:19;:28::i;31005:163::-;31059:15;;31049:7;:25;31096:16;;31085:8;:27;31139:21;;31123:13;:37;31005:163::o;28012:409::-;28072:7;28081;28090;28099;28119:12;28134:24;28150:7;28134:15;:24::i;:::-;28119:39;;28169:13;28185:25;28202:7;28185:16;:25::i;:::-;28169:41;;28221:18;28242:30;28264:7;28242:21;:30::i;:::-;28221:51;-1:-1:-1;28283:23:0;28309:44;28221:51;28309:28;28331:5;28309:28;:7;28321:4;28309:11;:17::i;:44::-;28283:70;28389:4;;-1:-1:-1;28395:5:0;;-1:-1:-1;28395:5:0;-1:-1:-1;28012:409:0;;-1:-1:-1;;;28012:409:0:o;28429:504::-;28559:7;;;;28615:24;:7;28627:11;28615;:24::i;:::-;28597:42;-1:-1:-1;28650:12:0;28665:21;:4;28674:11;28665:8;:21::i;:::-;28650:36;-1:-1:-1;28697:13:0;28713:22;:5;28723:11;28713:9;:22::i;:::-;28697:38;-1:-1:-1;28746:18:0;28767:27;:10;28782:11;28767:14;:27::i;:::-;28746:48;-1:-1:-1;28805:23:0;28831:44;28746:48;28831:28;28853:5;28831:28;:7;28843:4;28831:11;:17::i;:44::-;28894:7;;;;-1:-1:-1;28920:4:0;;-1:-1:-1;28429:504:0;;-1:-1:-1;;;;;;;;;28429:504:0:o;37302:585::-;37452:16;;;37466:1;37452:16;;;37428:21;37452:16;;;;;37428:21;37452:16;;;;;;;;;;-1:-1:-1;37452:16:0;37428:40;;37497:4;37479;37484:1;37479:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37479:23:0;;;-1:-1:-1;;;;;37479:23:0;;;;;37523:17;37513:4;37518:1;37513:7;;;;;;;;;;;;;:27;-1:-1:-1;;;;;37513:27:0;;;-1:-1:-1;;;;;37513:27:0;;;;;37553:57;37570:4;37577:19;37598:11;37553:8;:57::i;:::-;37649:21;-1:-1:-1;;;;;37649:72:0;;37736:11;37762:1;37806:4;37833;37853:15;37649:230;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37649:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37302:585;;:::o;37895:604::-;38043:57;38060:4;38067:19;38088:11;38043:8;:57::i;:::-;38436:14;;38226:265;;;-1:-1:-1;;;38226:265:0;;38304:4;38226:265;;;;;;;;;;-1:-1:-1;38226:265:0;;;;;;;;;;-1:-1:-1;;;;;38436:14:0;;;38226:265;;;;38465:15;38226:265;;;;;;:21;:37;;;;;;38271:9;;38226:265;;;;;;;;;;;;;;38271:9;38226:37;:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29780:365;29843:19;29866:10;:8;:10::i;:::-;29843:33;-1:-1:-1;29887:18:0;29908:27;:10;29843:33;29908:14;:27::i;:::-;29987:4;29971:22;;;;:7;:22;;;;;;29887:48;;-1:-1:-1;29971:38:0;;29887:48;29971:26;:38::i;:::-;29962:4;29946:22;;;;:7;:22;;;;;;;;:63;;;;30023:21;:36;;;;;;30020:117;;;30115:4;30099:22;;;;:7;:22;;;;;;:38;;30126:10;30099:26;:38::i;:::-;30090:4;30074:22;;;;:7;:22;;;;;:63;30020:117;29780:365;;;:::o;27265:274::-;27373:28;27395:5;27373:17;27385:4;27373:7;;:11;;:17;;;;:::i;:28::-;27363:7;:38;27425:10;;:20;;27440:4;27425:14;:20::i;:::-;27412:10;:33;27470:11;;:22;;27486:5;27470:15;:22::i;:::-;27456:11;:36;27513:7;;:18;;27525:5;27513:11;:18::i;:::-;27503:7;:28;-1:-1:-1;;;;27265:274:0:o;30157:154::-;30221:7;30248:55;30287:5;30248:20;30260:7;;30248;:11;;:20;;;;:::i;:::-;:24;;:55::i;30319:156::-;30384:7;30411:56;30451:5;30411:21;30423:8;;30411:7;:11;;:21;;;;:::i;30487:166::-;30557:7;30584:61;30629:5;30584:26;30596:13;;30584:7;:11;;:26;;;;:::i

Swarm Source

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