Contract 0xf8fc63200e181439823251020d691312fdcf5090 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1f1ab3fdf58430377a91a76baa9fa5d535cdc3ffd422280e75bee7e40e8e6ddaApprove121078282021-10-26 13:13:251 hr 3 mins ago0x2cd9f414e3c79955700c8e977a68a8d13ab6a5c1 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x12261a0a1bf0217ca86dd89422f69ccba03f40f804271013e2e27fd5973a804cTransfer121077232021-10-26 13:08:031 hr 9 mins ago0xb9131b4f0874bd420a33f73dee00512bb3830f25 IN  ExzoCoin: EXZO Token0 BNB0.00064264
0xe09ad05c8adcdb5f727179f8e97ec41a2f07916f6a2ffc5fa04372a8720e5beeTransfer121072212021-10-26 12:42:291 hr 34 mins ago0xf8fd771c7bc7139269ae006e4fac6fd02c830a3c IN  ExzoCoin: EXZO Token0 BNB0.004588575
0x5886e3154fadab6fc59dbc679b1333e1274c6cb71c311d587c36d13518db73deApprove121068382021-10-26 12:23:191 hr 54 mins ago0x77a6ea17881819f0c959640d533146d19ad0d22b IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xb6351e7901eae6916a8159e191f6831e59d2ec4bf44fcc8a96282028fa21083dApprove121057622021-10-26 11:29:002 hrs 48 mins ago0x0ef94077a4ed4791c4b5e1fbdde71d194ee98353 IN  ExzoCoin: EXZO Token0 BNB0.000267024
0x8377109d0931fd84ebaddd3d0d6cdfc32d4e9066b3f7c68afdf5b7841e066554Transfer121056332021-10-26 11:22:332 hrs 54 mins ago0xf4674b4ebd5838aca53802ac4248104e52b68306 IN  ExzoCoin: EXZO Token0 BNB0.00549639
0xc6ff5c53a1bd23dea1f21c4895bcd8e15581429e6cd3142e649c935cb18760a6Approve121027212021-10-26 8:56:295 hrs 20 mins ago0x2dc8ecc2c179bbc25f0db56f6d0e8fd2065e4a18 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xa8ac35c26fa292a018a8f533dddac07623a3f9cf82bfe4709c5d772016d28096Approve121010882021-10-26 7:33:516 hrs 43 mins ago0x90b41a4b84889f4aede10797c5a77c2949b4359c IN  ExzoCoin: EXZO Token0 BNB0.000267024
0xbe58192028d2599bcd85883ed38de7162b4606a440cfd145193769a6d25d4bb0Approve120984032021-10-26 5:19:368 hrs 57 mins ago0xac6f96d160f3857c5faf4e5e58bbd205cb956d78 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x8846f8b01d722ed6034143ba1deebcf5df0c3478c8ddd013f93d04d044c5664aApprove120973502021-10-26 4:26:579 hrs 50 mins ago0x33266b9c63304e6cb2db3bc747dff958c41e4cef IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x62ffadd2a9e0a66e4d8cb46ecae97cff4173e1066b6a8b175ad796d678b3453aApprove120971912021-10-26 4:19:009 hrs 58 mins ago0x5f2df30034304142d6e71cdb9415969052560928 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xc9adba4c4bbb53de4f88f8f6b9070a2ebdd49ea44f517ab5d30345647994aab7Approve120930532021-10-26 0:52:0413 hrs 25 mins ago0x32c31f0179cd60a784179857793c6cd4104e3a08 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xec127adc01951ac91e573ef6c68b816fd84e0b912976970032753de61b25973bApprove120927672021-10-26 0:37:4613 hrs 39 mins ago0xa9f9e9bdff402c60e00c25a2c15c8f5fc9a8baab IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x54c1c431a436b968049e72d0ff5882cc0810177f6ee9390e6954e4ab99f1fdb3Approve120926582021-10-26 0:32:1913 hrs 45 mins ago0xab03fc35298bbda117bcead4bf8397e29c35475e IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x82064241c9e169525618e9bbc34da5adf04c115139ffb63ceb9ce382b362dd84Transfer120871342021-10-25 19:55:0018 hrs 22 mins ago0xb8e79cf59e2c23751185e934d2df9a1f17b24ebc IN  ExzoCoin: EXZO Token0 BNB0.0007177
0x9d6fddd6e2b334d5d6176bd387f8825e5d3878348b94d13a4e3d4391641dd9fcApprove120863382021-10-25 19:15:1219 hrs 2 mins ago0xf4674b4ebd5838aca53802ac4248104e52b68306 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xab4a4347d8c1c739168801cd5ad6e40b4e934544884e7dc982c5d0492b276535Approve120863222021-10-25 19:14:2419 hrs 2 mins ago0x72cd5ec88978e75dd2e633e6c254d52b54a43624 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0xd28731ed4451c362cccfec53eb78e595c72b9d10e67755598b4664badf1bfbceApprove120862602021-10-25 19:11:1819 hrs 6 mins ago0xb17b2125f1da1a923a9834251318d7087297adc3 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x3ec28d7ebba317fc20d1952e77ac9c0c4da3cb1d26bb825eb1e0df3cb965340aBlacklist Single...120860652021-10-25 19:01:3319 hrs 15 mins agoExzoCoin: Deployer IN  ExzoCoin: EXZO Token0 BNB0.000222805
0x4de545c3e1ffb241e190c328e47b307f0cfc6f36534a4a27ff4cc7bd14727a47Blacklist Single...120860622021-10-25 19:01:2419 hrs 15 mins agoExzoCoin: Deployer IN  ExzoCoin: EXZO Token0 BNB0.000222805
0x6df35d49176d75c90a0191b880e26802140cf2779776bd153045f4fbc0518248Blacklist Single...120860412021-10-25 19:00:2119 hrs 16 mins agoExzoCoin: Deployer IN  ExzoCoin: EXZO Token0 BNB0.000222805
0x2bad7cd2f02e61c1c7390b479b76eee3c2c8700ad718945b11ded90c29413bc5Un Blacklist Sin...120858122021-10-25 18:48:5419 hrs 28 mins agoExzoCoin: Deployer IN  ExzoCoin: EXZO Token0 BNB0.00007367
0xcaf9351ebee4f68ec5006e2cbd057746643b79ecedf5622f8de14d62080a1f33Blacklist Single...120811422021-10-25 14:55:0323 hrs 22 mins agoExzoCoin: Deployer IN  ExzoCoin: EXZO Token0 BNB0.000118245
0xc651e6fe629d686726fcc2002cfa4d204979a073d7fade4cb95912f114446cd6Approve120810782021-10-25 14:51:5123 hrs 25 mins ago0xcac7e373051a7fbd572db6afbd9edcb8f1cbcb85 IN  ExzoCoin: EXZO Token0 BNB0.00022252
0x119d4fc6567138174ab153943e003f4e56e291838408cff306f3d6a9375ed1e1Approve120808012021-10-25 14:37:4323 hrs 39 mins ago0x1aea99ff63c612f2b72062e82265e9410c25e9ee IN  ExzoCoin: EXZO Token0 BNB0.00022252
[ Download CSV Export 

OVERVIEW

ExzoCoin 2.0 (EXZO) is a utility token that will be utilized on decentralized exchange mobile application. It will also be utilized in cloud mining community for participants to utilize the token as a reward-based system.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe15c6dbcd863c634a7d1744d122d4f013a4a329cfb63f7b7061c4a1b41658e5a121076602021-10-26 13:04:311 hr 12 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.088072630747745232 BNB
0xe15c6dbcd863c634a7d1744d122d4f013a4a329cfb63f7b7061c4a1b41658e5a121076602021-10-26 13:04:311 hr 12 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.088072630747745232 BNB
0x92e80e75f6a4f2ac6ab0e20a0a58d41ec1d9b7d6caf944a4735d3c17970ffb7b121074922021-10-26 12:56:031 hr 21 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.08794267065185444 BNB
0x92e80e75f6a4f2ac6ab0e20a0a58d41ec1d9b7d6caf944a4735d3c17970ffb7b121074922021-10-26 12:56:031 hr 21 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.08794267065185444 BNB
0xe09ad05c8adcdb5f727179f8e97ec41a2f07916f6a2ffc5fa04372a8720e5bee121072212021-10-26 12:42:291 hr 34 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.087756166198384153 BNB
0xe09ad05c8adcdb5f727179f8e97ec41a2f07916f6a2ffc5fa04372a8720e5bee121072212021-10-26 12:42:291 hr 34 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.087756166198384153 BNB
0x2f75b64137c3274e9ab438b7c793907f17ea973da7773195f53c7ad38dbb9c05121067822021-10-26 12:20:311 hr 56 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.084824379319463728 BNB
0x2f75b64137c3274e9ab438b7c793907f17ea973da7773195f53c7ad38dbb9c05121067822021-10-26 12:20:311 hr 56 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.084824379319463728 BNB
0x8377109d0931fd84ebaddd3d0d6cdfc32d4e9066b3f7c68afdf5b7841e066554121056332021-10-26 11:22:332 hrs 54 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.08337847888875237 BNB
0x8377109d0931fd84ebaddd3d0d6cdfc32d4e9066b3f7c68afdf5b7841e066554121056332021-10-26 11:22:332 hrs 54 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.08337847888875237 BNB
0xc7e39b550741d1b1e4fd92fa332932e2a46c598308c218252f550fb339aae5f3121053982021-10-26 11:10:483 hrs 6 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.083448178848211562 BNB
0xc7e39b550741d1b1e4fd92fa332932e2a46c598308c218252f550fb339aae5f3121053982021-10-26 11:10:483 hrs 6 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.083448178848211562 BNB
0x2891ab37822f1022d639448c092bd1170b53bd051b3faa16a58c981caa9d7924121047082021-10-26 10:35:533 hrs 41 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.083359017085984117 BNB
0x2891ab37822f1022d639448c092bd1170b53bd051b3faa16a58c981caa9d7924121047082021-10-26 10:35:533 hrs 41 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.083359017085984117 BNB
0xc6317d4454bb45360d8bb93d46563d8bc206f6b2f98ac445fdc00d65a0c3d8be121040822021-10-26 10:04:324 hrs 12 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.083242174674951221 BNB
0xc6317d4454bb45360d8bb93d46563d8bc206f6b2f98ac445fdc00d65a0c3d8be121040822021-10-26 10:04:324 hrs 12 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.083242174674951221 BNB
0x620a0ea089ec3dec0fc6e0338b3be49d6e60be8106a2108fd2925065589fe6f0121021092021-10-26 8:25:515 hrs 51 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.081345022350182225 BNB
0x620a0ea089ec3dec0fc6e0338b3be49d6e60be8106a2108fd2925065589fe6f0121021092021-10-26 8:25:515 hrs 51 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.081345022350182225 BNB
0x79f71873108e9d8df231a4e5622364b42f38dd457e00211224527488e07668e9121011012021-10-26 7:34:306 hrs 42 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.079006013139056338 BNB
0x79f71873108e9d8df231a4e5622364b42f38dd457e00211224527488e07668e9121011012021-10-26 7:34:306 hrs 42 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.079006013139056338 BNB
0x0199e9db96a6f1db96564edc961b2d7eaf18118babde30366f0b6f1e7e43f461120984422021-10-26 5:21:338 hrs 55 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.078657774032955476 BNB
0x0199e9db96a6f1db96564edc961b2d7eaf18118babde30366f0b6f1e7e43f461120984422021-10-26 5:21:338 hrs 55 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.078657774032955476 BNB
0x8b1a9239b9587d07d146f3b170bab560d6ea32b1e229d79c155c6a69566b31ce120947812021-10-26 2:18:3011 hrs 58 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.07821773887225526 BNB
0x8b1a9239b9587d07d146f3b170bab560d6ea32b1e229d79c155c6a69566b31ce120947812021-10-26 2:18:3011 hrs 58 mins ago PancakeSwap: Router v2 ExzoCoin: EXZO Token0.07821773887225526 BNB
0xdb3cb47ef25c9dee71f0e1bd991136d86f3da5fe4b479c71b781be362bb15beb120945552021-10-26 2:07:1212 hrs 10 mins ago ExzoCoin: EXZO Token PancakeSwap: Router v20.078501536708594121 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ExzoCoin2_0

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license, Audited

Contract Source Code (Solidity)Audit Report

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

pragma solidity ^0.8.4;
/*
Our mission is simple. To make cryptocurrencies accessible to anyone, anywhere, and at anytime.

Website - www.ExzoCoin.com


Certik Security Audit Report - https://leaderboard.certik.io/projects/exzocoin

*/
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0OkkkkO0XNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWX0OxddooooooodxOKXWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0kddddooooooooooooodk0KNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX0OxddddooooooooooooooooooodxOKXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0kddddodooooooooooooooooooooooooodk0KNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMWXKOxddddddooooooooooooooooooooooooooooooodxOKNWWMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMWNX0kxdddddddddooooooooooooooooooooooooooooooooooodkOXNWMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMWXKOxdddddddddddoooooooooooooooooooooooooooooooooooooooooxOKXWMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMWX0kxdddddddddooddoooooooooooooooooooooooooooooooooooooooollolodk0XWMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMWXOxdddddddddddodddooooooooooooooooooooooooooooooooooooooloolllllllldONMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMNOdddddddddddddoooooooooooooooooooooooooooooooooooooooloollllllllllllokNMMMMMMMMMMMMMM
//MMMMMMMMMMMMMWKxdddddddddddddoooooooooooodxO00KKKKKKKKKKKKKKKKKKKK0OxolllllllllllllldKWMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ddddddddddddoooooooooooodkKNWMMMMMMMMMMMMMMMMMMMMMMMNOollllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ddddddddddooooooooooooodONMMMMMMMMMMMMMMMMMMMMMMMMMWKdlllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ddddddddoooooooooooooookNMMMMMMMMMMMMMMMMMMMMMMWNX0kdllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0dddddddoooooooooooooooxKWMMMMMMMMMMMMMMMMWNXK0Okdoollllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ddddooooooooooooooooooOWMMMMMMMMMMMMMWNK0kxdooollllllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ddoooooooooooooooooooxXMMMMMMMMMMMWNXOxdxO0000000kollllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0doooooooooooooooooood0WMMMMMMMMMWKkdddkKNWMMMMMMMKdllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0doooooooooooooooooookNMMMMMMMMWXkoodkKWMMMMMMMMMW0ollllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0dooooooooooooooooooxKWMMMMMMMNOdooOKNWMMMMMMMMMN0dlllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0dooooooooooooooooodOWMMMMMMWXkoolok00000000000Oxollllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0doooooooooooooooooxXMMMMMMWKxolllllllllllllllllllllllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0dooooooooooooooood0WMMMMMW0ddxO000000OO00OOOOkdllllllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0dooooooooooooooookNMMMMMW0dxKNWMMMMMMMMMMMMMMNkllllllllllllllllllllllo0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0doooooooooooooooxKWMMMMW0dkXWMMMMMMMMMMMMMMMMXdlllllllllllllllllllllco0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0doooooooooooooooOWMMMMNOdxXMMMMMMMMMMMMMMMMWXxlllllllllllllllllllllcco0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMW0ooooooooooooooooOXNNX0koldO000000000000000Okdllllllllllllllllllllcccco0WMMMMMMMMMMMMM
//MMMMMMMMMMMMMWKxoooooooooooooooodxddoolllllllllllllllllllllllllllllllllllllllllclccldXMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMW0xooooooooooooooollolllllllllllllllllllllllllllllllllllllllllllccccld0WMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMWXOxooooooooooooololollllllllllllllllllllllllllllllllllllllllccclldOXWMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMWNKOxdoooooooolloollllllllllllllllllllllllllllllllllllllllcloxOKNWMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMWX0kdooollllllllllllllllllllllllllllllllllllllllllllldk0XWMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMWNKOxoolllllllllllllllllllllllllllllllllllllcloxOKNWMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMWNX0kdollllllllllllllllllllllllllllllllldk0XWMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKOxolllllllllllllllllllllllllloxOKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNX0kdollllllllllllllllllldk0XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXKkdollllllllllllodOKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKOxdollllodx0XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXKKKKXNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM


// www.exzocoin.com
// SPDX-License-Identifier: Unlicensed
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;
        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 payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        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");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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


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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;
   
    address payable public charityAddress = payable(0xE8E98a435576D94870739B0de03236182d1cbD34);

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

    string private _name = "ExzoCoin 2.0";
    string private _symbol = "EXZO";
    uint8 private _decimals = 9;
    
    uint256 public _charityFee = 20;
    uint256 private _previousCharityFee = _charityFee;

    uint256 public _burnFee = 0;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _reflectionFee = 20;
    uint256 private _previousReflectionFee = _reflectionFee;
    
    uint256 private _taxFee = _burnFee.add(_reflectionFee);
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 private _crctLiquidityFee = 20;
    uint256 private _pcrctLiquidityFee = _crctLiquidityFee;

    uint256 private _liquidityFee = _charityFee.add(_crctLiquidityFee);
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 200 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 10 * 10**6 * 10**9;

    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal; 
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        //Exclude dead address from reflection
        _isExcluded[address(0)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

    function getliquidityFee() public view returns (uint256)
    {
        return _crctLiquidityFee;
    }

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

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "BEP20: burn from the zero address");

        _tOwned[address(0)] = _tOwned[address(0)].add(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setBurnFeePercent(uint256 Fee) external onlyOwner() {
        _burnFee = Fee;
        _taxFee = _burnFee.add(_reflectionFee);
    }
    
    function setCharityFeePercent(uint256 Fee) external onlyOwner() {
        _charityFee = Fee;
        _liquidityFee = _crctLiquidityFee.add(_charityFee);
    }

    function setReflectFeePercent(uint256 Fee) external onlyOwner() {
        _reflectionFee = Fee;
        _taxFee = _burnFee.add(_reflectionFee);
    }
    
    function setLiquidityFeePercent(uint256 Fee) external onlyOwner() {
        _crctLiquidityFee = Fee;
        _liquidityFee = _crctLiquidityFee.add(_charityFee);
    }
   
    function setMaxTxTokens(uint256 maxTxTokens) external onlyOwner() {
        _maxTxAmount = maxTxTokens.mul( 10**_decimals );
    }

    function setCharityAddress(address payable _charityAddress) external onlyOwner() {
        charityAddress = _charityAddress;
    }

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**3
        );
    }

    function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectionFee).div(
            10**3
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0 && 
        _charityFee == 0 && _reflectionFee == 0 && _crctLiquidityFee == 0) return;
        
        _pcrctLiquidityFee = _crctLiquidityFee; 
        _previousBurnFee = _burnFee; // burn fee
        _previousCharityFee = _charityFee; // charity fee
        _previousReflectionFee = _reflectionFee; //reflection fee
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _crctLiquidityFee = 0;
        _burnFee = 0;
        _charityFee = 0;
        _reflectionFee = 0;
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _crctLiquidityFee = _pcrctLiquidityFee;
        _burnFee = _previousBurnFee; // burn fee
        _charityFee = _previousCharityFee; // charity fee
        _reflectionFee = _previousReflectionFee; //reflection fee
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setMinTokensSendToCharity(uint256 minCharityValue) public onlyOwner()
    {
        numTokensSellToAddToLiquidity = minCharityValue;
    }

    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");
        require(_isBlacklisted[from] == false, "You are banned");
        require(_isBlacklisted[to] == false, "The recipient is banned");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 tokenBalance) private lockTheSwap {
        uint256 liquidityAmount = tokenBalance;
        uint256 initialBalance = address(this).balance;

        if(_charityFee > 0)
        {
            uint256 charityAmount = tokenBalance.mul(_charityFee);
            charityAmount = charityAmount.div(_liquidityFee);
            liquidityAmount = tokenBalance.sub(charityAmount);
            swapToCharityETH(charityAddress, charityAmount);
            
            initialBalance = address(this).balance;
        }
        
        if(_crctLiquidityFee > 0)
        {
            uint256 half = liquidityAmount.div(2);
            uint256 otherHalf = liquidityAmount.sub(half);

            swapTokensForEth(half);
            
            uint256 newBalance = address(this).balance.sub(initialBalance);

            addLiquidity(otherHalf, newBalance);
            
            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
    }

    function swapToCharityETH(address payable recipient, uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            recipient,
            block.timestamp
        );
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 bFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        if(_burnFee > 0 && _taxFee > 0) _burn(sender, bFee);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    function blacklistSingleWallet(address addresses) public onlyOwner(){
        if(_isBlacklisted[addresses] == true) return;
        _isBlacklisted[addresses] = true;
    }

    function blacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
        }
    }
    
    function isBlacklisted(address addresses) public view returns (bool){
        if(_isBlacklisted[addresses] == true) return true;
        else return false;
    }
    
    
    function unBlacklistSingleWallet(address addresses) external onlyOwner(){
         if(_isBlacklisted[addresses] == false) return;
        _isBlacklisted[addresses] = false;
    }

    function unBlacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = false;
        }
    }

    function recoverTokens() public onlyOwner()
    {
        address recipient = _msgSender();
        uint256 tokensToRecover = balanceOf(address(this));
        uint256 currentRate =  _getRate();
        uint256 rtokensToRecover = tokensToRecover.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].sub(rtokensToRecover);
        _rOwned[recipient] = _rOwned[recipient].add(rtokensToRecover);
    }
    
    function recoverBNB() public onlyOwner()
    {
        address payable recipient = _msgSender();
        if(address(this).balance > 0)
            recipient.transfer(address(this).balance);
    }
    
    //New Pancakeswap router version?
    //No problem, just change it!
    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        uniswapV2Router = _newPancakeRouter;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","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":"_reflectionFee","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[]","name":"addresses","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getliquidityFee","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":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxTokens","type":"uint256"}],"name":"setMaxTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minCharityValue","type":"uint256"}],"name":"setMinTokensSendToCharity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setReflectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"unBlacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b03191673e8e98a435576d94870739b0de03236182d1cbd341790556801158e460913d00000600b819055620000479060001962000623565b6200005590600019620005cc565b600c908155604080518082019091528181526b045787a6f436f696e20322e360a41b60209091019081526200008e91600e9190620004e2565b506040805180820190915260048082526345585a4f60e01b6020909201918252620000bc91600f91620004e2565b5060108054600960ff199091161790556014601181905560128190556000601381905580825560158290556016829055620001039162000475602090811b62001c0a17901c565b6017556017546018556014601955601954601a55620001356019546011546200047560201b62001c0a1790919060201c565b601b819055601c55601e805460ff60a81b1916600160a81b1790556702c68af0bb140000601f55662386f26fc100006020553480156200017457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b815290517310ed43c718714eb63d5aa57b78b54704e256024e92839263c45a01559260048083019392829003018186803b1580156200021857600080fd5b505afa1580156200022d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000253919062000588565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029c57600080fd5b505afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000588565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032057600080fd5b505af115801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000588565b601e80546001600160a01b03199081166001600160a01b0393841617909155601d8054909116918316919091179055600160066000620003a36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006835290812080548416600190811790915590805260079091527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80549092161790556200041e3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200046691815260200190565b60405180910390a3506200065a565b600080620004848385620005b1565b905083811015620004db5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b828054620004f090620005e6565b90600052602060002090601f0160209004810192826200051457600085556200055f565b82601f106200052f57805160ff19168380011785556200055f565b828001600101855582156200055f579182015b828111156200055f57825182559160200191906001019062000542565b506200056d92915062000571565b5090565b5b808211156200056d576000815560010162000572565b6000602082840312156200059a578081fd5b81516001600160a01b0381168114620004db578182fd5b60008219821115620005c757620005c762000644565b500190565b600082821015620005e157620005e162000644565b500390565b600181811c90821680620005fb57607f821691505b602082108114156200061d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200063f57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b6136db806200066a6000396000f3fe6080604052600436106103035760003560e01c8063772558ce11610190578063b6c52324116100dc578063cea2695811610095578063ea2f0b371161006f578063ea2f0b371461091c578063f157ce401461093c578063f2fde38b1461095c578063fe575a871461097c57600080fd5b8063cea2695814610896578063dd467064146108b6578063dd62ed3e146108d657600080fd5b8063b6c5232414610801578063b74e53b014610816578063b77f39fe1461082b578063c0b0fda214610840578063c49b9a8014610856578063cad6ebf91461087657600080fd5b8063a1bdc39911610149578063a9059cbb11610123578063a9059cbb14610781578063af41063b146107a1578063afcf2fc4146107c1578063b4ba57f0146107e157600080fd5b8063a1bdc3991461072c578063a457c2d71461074c578063a69df4b51461076c57600080fd5b8063772558ce1461066a5780637d1db4a51461068a57806388f82020146106a05780638da5cb5b146106d95780638ee88c53146106f757806395d89b411461071757600080fd5b80633bd5d1731161024f5780634a74bb02116102085780635cfd7df4116101e25780635cfd7df4146106005780636bfdf8a01461062057806370a0823114610635578063715018a61461065557600080fd5b80634a74bb021461058657806352390c02146105a75780635342acb4146105c757600080fd5b80633bd5d173146104d057806340f8007a146104f057806341cb87fc14610506578063437823ec146105265780634549b0391461054657806349bd5a5e1461056657600080fd5b806323b872dd116102bc5780633206b4aa116102965780633206b4aa1461045a5780633685d4191461047057806339509351146104905780633bb48ff7146104b057600080fd5b806323b872dd146103f85780632d83811914610418578063313ce5671461043857600080fd5b806306fdde031461030f578063095ea7b31461033a5780630c9be46d1461036a57806313114a9d1461038c5780631694505e146103ab57806318160ddd146103e357600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099c565b6040516103319190613397565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461322f565b610a2e565b6040519015158152602001610331565b34801561037657600080fd5b5061038a61038536600461317f565b610a45565b005b34801561039857600080fd5b50600d545b604051908152602001610331565b3480156103b757600080fd5b50601d546103cb906001600160a01b031681565b6040516001600160a01b039091168152602001610331565b3480156103ef57600080fd5b50600b5461039d565b34801561040457600080fd5b5061035a6104133660046131ef565b610a9a565b34801561042457600080fd5b5061039d6104333660046132e4565b610b03565b34801561044457600080fd5b5060105460405160ff9091168152602001610331565b34801561046657600080fd5b5061039d60155481565b34801561047c57600080fd5b5061038a61048b36600461317f565b610b87565b34801561049c57600080fd5b5061035a6104ab36600461322f565b610d76565b3480156104bc57600080fd5b5061038a6104cb3660046132e4565b610dac565b3480156104dc57600080fd5b5061038a6104eb3660046132e4565b610dee565b3480156104fc57600080fd5b5061039d60115481565b34801561051257600080fd5b5061038a61052136600461317f565b610eda565b34801561053257600080fd5b5061038a61054136600461317f565b6110ac565b34801561055257600080fd5b5061039d6105613660046132fc565b6110fa565b34801561057257600080fd5b50601e546103cb906001600160a01b031681565b34801561059257600080fd5b50601e5461035a90600160a81b900460ff1681565b3480156105b357600080fd5b5061038a6105c236600461317f565b611189565b3480156105d357600080fd5b5061035a6105e236600461317f565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561060c57600080fd5b5061038a61061b3660046132e4565b6112dc565b34801561062c57600080fd5b5061038a611328565b34801561064157600080fd5b5061039d61065036600461317f565b611391565b34801561066157600080fd5b5061038a6113f0565b34801561067657600080fd5b5061038a61068536600461325a565b611452565b34801561069657600080fd5b5061039d601f5481565b3480156106ac57600080fd5b5061035a6106bb36600461317f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106e557600080fd5b506000546001600160a01b03166103cb565b34801561070357600080fd5b5061038a6107123660046132e4565b6114ff565b34801561072357600080fd5b50610324611542565b34801561073857600080fd5b5061038a61074736600461325a565b611551565b34801561075857600080fd5b5061035a61076736600461322f565b6115f9565b34801561077857600080fd5b5061038a611648565b34801561078d57600080fd5b5061035a61079c36600461322f565b61174e565b3480156107ad57600080fd5b5061038a6107bc3660046132e4565b61175b565b3480156107cd57600080fd5b50600a546103cb906001600160a01b031681565b3480156107ed57600080fd5b5061038a6107fc3660046132e4565b611797565b34801561080d57600080fd5b5060025461039d565b34801561082257600080fd5b5060195461039d565b34801561083757600080fd5b5061038a6117c6565b34801561084c57600080fd5b5061039d60135481565b34801561086257600080fd5b5061038a6108713660046132ca565b611881565b34801561088257600080fd5b5061038a61089136600461317f565b611903565b3480156108a257600080fd5b5061038a6108b13660046132e4565b61197c565b3480156108c257600080fd5b5061038a6108d13660046132e4565b6119b9565b3480156108e257600080fd5b5061039d6108f13660046131b7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561092857600080fd5b5061038a61093736600461317f565b611a3e565b34801561094857600080fd5b5061038a61095736600461317f565b611a89565b34801561096857600080fd5b5061038a61097736600461317f565b611af7565b34801561098857600080fd5b5061035a61099736600461317f565b611bcf565b6060600e80546109ab906135b7565b80601f01602080910402602001604051908101604052809291908181526020018280546109d7906135b7565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000610a3b338484611c69565b5060015b92915050565b6000546001600160a01b03163314610a785760405162461bcd60e51b8152600401610a6f906133ea565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610aa7848484611d8d565b610af98433610af485604051806060016040528060288152602001613639602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906120e6565b611c69565b5060019392505050565b6000600c54821115610b6a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a6f565b6000610b74612120565b9050610b808382612143565b9392505050565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526007602052604090205460ff16610c195760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a6f565b60005b600954811015610d7257816001600160a01b031660098281548110610c5157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d605760098054610c7c906001906135a0565b81548110610c9a57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610cd457634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610d3a57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d6a816135f2565b915050610c1c565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a3b918590610af49086611c0a565b6000546001600160a01b03163314610dd65760405162461bcd60e51b8152600401610a6f906133ea565b6015819055601354610de89082611c0a565b60175550565b3360008181526007602052604090205460ff1615610e635760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a6f565b6000610e6e83612185565b5050506001600160a01b038616600090815260036020526040902054939450610e9c939250849150506121e0565b6001600160a01b038316600090815260036020526040902055600c54610ec290826121e0565b600c55600d54610ed29084611c0a565b600d55505050565b6000546001600160a01b03163314610f045760405162461bcd60e51b8152600401610a6f906133ea565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4257600080fd5b505afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061319b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc257600080fd5b505afa158015610fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffa919061319b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561104257600080fd5b505af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a919061319b565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b6000546001600160a01b031633146110d65760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561114e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a6f565b8161116e57600061115e84612185565b50949650610a3f95505050505050565b600061117984612185565b50939650610a3f95505050505050565b6000546001600160a01b031633146111b35760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526007602052604090205460ff161561121c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a6f565b6001600160a01b03811660009081526003602052604090205415611276576001600160a01b03811660009081526003602052604090205461125c90610b03565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113065760405162461bcd60e51b8152600401610a6f906133ea565b6010546113229061131b9060ff16600a6134d6565b8290612222565b601f5550565b6000546001600160a01b031633146113525760405162461bcd60e51b8152600401610a6f906133ea565b33471561138e576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d72573d6000803e3d6000fd5b50565b6001600160a01b03811660009081526007602052604081205460ff16156113ce57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a3f90610b03565b6000546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610a6f906133ea565b600080546040516001600160a01b0390911690600080516020613661833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610a6f906133ea565b60005b818110156114fa576001600860008585858181106114ad57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114c2919061317f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114f3816135f2565b905061147f565b505050565b6000546001600160a01b031633146115295760405162461bcd60e51b8152600401610a6f906133ea565b601981905560115461153c908290611c0a565b601b5550565b6060600f80546109ab906135b7565b6000546001600160a01b0316331461157b5760405162461bcd60e51b8152600401610a6f906133ea565b60005b818110156114fa576000600860008585858181106115ac57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115c1919061317f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115f2816135f2565b905061157e565b6000610a3b3384610af485604051806060016040528060258152602001613681602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906120e6565b6001546001600160a01b031633146116ae5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a6f565b60025442116116ff5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a6f565b600154600080546040516001600160a01b03938416939091169160008051602061366183398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a3b338484611d8d565b6000546001600160a01b031633146117855760405162461bcd60e51b8152600401610a6f906133ea565b601181905560195461153c9082611c0a565b6000546001600160a01b031633146117c15760405162461bcd60e51b8152600401610a6f906133ea565b602055565b6000546001600160a01b031633146117f05760405162461bcd60e51b8152600401610a6f906133ea565b3360006117fc30611391565b90506000611808612120565b905060006118168383612222565b3060009081526003602052604090205490915061183390826121e0565b30600090815260036020526040808220929092556001600160a01b0386168152205461185f9082611c0a565b6001600160a01b03909416600090815260036020526040902093909355505050565b6000546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610a6f906133ea565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118f890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526008602052604090205460ff161515600114156119565750565b6001600160a01b0381166000908152600860205260409020805460ff1916600117905550565b6000546001600160a01b031633146119a65760405162461bcd60e51b8152600401610a6f906133ea565b6013819055601554610de8908290611c0a565b6000546001600160a01b031633146119e35760405162461bcd60e51b8152600401610a6f906133ea565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611a12814261345b565b600255600080546040516001600160a01b0390911690600080516020613661833981519152908390a350565b6000546001600160a01b03163314611a685760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611ab35760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b03811660009081526008602052604090205460ff16611ad65750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b215760405162461bcd60e51b8152600401610a6f906133ea565b6001600160a01b038116611b865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6f565b600080546040516001600160a01b038085169392169160008051602061366183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bfd57506001919050565b506000919050565b919050565b600080611c17838561345b565b905083811015610b805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a6f565b6001600160a01b038316611ccb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6f565b6001600160a01b038216611d2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611df15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6f565b6001600160a01b038216611e535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6f565b60008111611eb55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a6f565b6001600160a01b03831660009081526008602052604090205460ff1615611f0f5760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610a6f565b6001600160a01b03821660009081526008602052604090205460ff1615611f785760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610a6f565b6000546001600160a01b03848116911614801590611fa457506000546001600160a01b03838116911614155b1561200c57601f5481111561200c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a6f565b600061201730611391565b9050601f5481106120275750601f545b602054811080159081906120455750601e54600160a01b900460ff16155b801561205f5750601e546001600160a01b03868116911614155b80156120745750601e54600160a81b900460ff165b15612087576020549150612087826122a1565b6001600160a01b03851660009081526006602052604090205460019060ff16806120c957506001600160a01b03851660009081526006602052604090205460ff165b156120d2575060005b6120de868686846123b5565b505050505050565b6000818484111561210a5760405162461bcd60e51b8152600401610a6f9190613397565b50600061211784866135a0565b95945050505050565b600080600061212d61254a565b909250905061213c8282612143565b9250505090565b6000610b8083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612704565b600080600080600080600080600080600061219f8c612732565b935093509350935060008060006121c08f8786886121bb612120565b612787565b919f509d509b509599509397509195509350505050919395979092949650565b6000610b8083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120e6565b60008261223157506000610a3f565b600061223d8385613581565b90508261224a8583613473565b14610b805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a6f565b601e805460ff60a01b1916600160a01b17905560115481904790156123185760006122d76011548561222290919063ffffffff16565b90506122ee601b548261214390919063ffffffff16565b90506122fa84826121e0565b600a54909350612313906001600160a01b0316826127e9565b479150505b601954156123a357600061232d836002612143565b9050600061233b84836121e0565b90506123468261296f565b600061235247856121e0565b905061235e8282612aec565b60408051848152602081018390529081018390527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505b5050601e805460ff60a01b1916905550565b806123c2576123c2612bd0565b6001600160a01b03841660009081526007602052604090205460ff16801561240357506001600160a01b03831660009081526007602052604090205460ff16155b1561241857612413848484612c58565b612516565b6001600160a01b03841660009081526007602052604090205460ff1615801561245957506001600160a01b03831660009081526007602052604090205460ff165b1561246957612413848484612db7565b6001600160a01b03841660009081526007602052604090205460ff161580156124ab57506001600160a01b03831660009081526007602052604090205460ff16155b156124bb57612413848484612e76565b6001600160a01b03841660009081526007602052604090205460ff1680156124fb57506001600160a01b03831660009081526007602052604090205460ff165b1561250b57612413848484612ed0565b612516848484612e76565b8061254457612544601a54601955601454601355601254601155601654601555601854601755601c54601b55565b50505050565b600c54600b546000918291825b6009548110156126d45782600360006009848154811061258757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061260057508160046000600984815481106125d957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561261657600c54600b54945094505050509091565b61266a600360006009848154811061263e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121e0565b92506126c0600460006009848154811061269457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121e0565b9150806126cc816135f2565b915050612557565b50600b54600c546126e491612143565b8210156126fb57600c54600b549350935050509091565b90939092509050565b600081836127255760405162461bcd60e51b8152600401610a6f9190613397565b5060006121178486613473565b600080600080600061274386612f59565b9050600061275087612f7c565b9050600061275d88612f99565b905060006127778361277184818d896121e0565b906121e0565b9993985091965094509092505050565b60008080806127968986612222565b905060006127a48987612222565b905060006127b28888612222565b905060006127c08a89612222565b905060006127d483612771848189896121e0565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061282c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561288057600080fd5b505afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b8919061319b565b816001815181106128d957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d546128ff9130911684611c69565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061293890859060009086908990429060040161341f565b600060405180830381600087803b15801561295257600080fd5b505af1158015612966573d6000803e3d6000fd5b50505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612a0657600080fd5b505afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e919061319b565b81600181518110612a5f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d54612a859130911684611c69565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612abe90859060009086903090429060040161341f565b600060405180830381600087803b158015612ad857600080fd5b505af11580156120de573d6000803e3d6000fd5b601d54612b049030906001600160a01b031684611c69565b601d546001600160a01b031663f305d719823085600080612b2d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b9057600080fd5b505af1158015612ba4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc99190613327565b5050505050565b601754158015612be05750601b54155b8015612bec5750601354155b8015612bf85750601154155b8015612c045750601554155b8015612c105750601954155b15612c1757565b60198054601a5560138054601455601180546012556015805460165560178054601855601b8054601c55600095869055938590559184905583905582905555565b6000806000806000806000612c6c88612185565b9650965096509650965096509650612cb288600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612ce190886121e0565b6001600160a01b03808c1660009081526003602052604080822093909355908b1681522054612d109087611c0a565b6001600160a01b038a1660009081526003602052604090205560135415801590612d3c57506000601754115b15612d4b57612d4b8a83612fb6565b612d54816130c3565b612d5e858461314b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612da391815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612dcb88612185565b9650965096509650965096509650612e1187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054612e479085611c0a565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612d109087611c0a565b6000806000806000806000612e8a88612185565b9650965096509650965096509650612ce187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6000806000806000806000612ee488612185565b9650965096509650965096509650612f2a88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546121e090919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612e1190886121e0565b6000610a3f6103e8612f766015548561222290919063ffffffff16565b90612143565b6000610a3f6103e8612f766013548561222290919063ffffffff16565b6000610a3f6103e8612f76601b548561222290919063ffffffff16565b6001600160a01b0382166130165760405162461bcd60e51b815260206004820152602160248201527f42455032303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6f565b6000805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461304b9082611c0a565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec919091556040516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130b79085815260200190565b60405180910390a35050565b60006130cd612120565b905060006130db8383612222565b306000908152600360205260409020549091506130f89082611c0a565b3060009081526003602090815260408083209390935560079052205460ff16156114fa57306000908152600460205260409020546131369084611c0a565b30600090815260046020526040902055505050565b600c5461315890836121e0565b600c55600d546131689082611c0a565b600d555050565b80358015158114611c0557600080fd5b600060208284031215613190578081fd5b8135610b8081613623565b6000602082840312156131ac578081fd5b8151610b8081613623565b600080604083850312156131c9578081fd5b82356131d481613623565b915060208301356131e481613623565b809150509250929050565b600080600060608486031215613203578081fd5b833561320e81613623565b9250602084013561321e81613623565b929592945050506040919091013590565b60008060408385031215613241578182fd5b823561324c81613623565b946020939093013593505050565b6000806020838503121561326c578182fd5b823567ffffffffffffffff80821115613283578384fd5b818501915085601f830112613296578384fd5b8135818111156132a4578485fd5b8660208260051b85010111156132b8578485fd5b60209290920196919550909350505050565b6000602082840312156132db578081fd5b610b808261316f565b6000602082840312156132f5578081fd5b5035919050565b6000806040838503121561330e578182fd5b8235915061331e6020840161316f565b90509250929050565b60008060006060848603121561333b578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561338c5781516001600160a01b031687529582019590820190600101613367565b509495945050505050565b6000602080835283518082850152825b818110156133c3578581018301518582016040015282016133a7565b818111156133d45783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a06040820152600061343e60a0830186613354565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561346e5761346e61360d565b500190565b60008261348e57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156134ce5781600019048211156134b4576134b461360d565b808516156134c157918102915b93841c9390800290613498565b509250929050565b6000610b8060ff8416836000826134ef57506001610a3f565b816134fc57506000610a3f565b8160018114613512576002811461351c57613538565b6001915050610a3f565b60ff84111561352d5761352d61360d565b50506001821b610a3f565b5060208310610133831016604e8410600b841016171561355b575081810a610a3f565b6135658383613493565b80600019048211156135795761357961360d565b029392505050565b600081600019048311821515161561359b5761359b61360d565b500290565b6000828210156135b2576135b261360d565b500390565b600181811c908216806135cb57607f821691505b602082108114156135ec57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136065761360661360d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461138e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220829087cd1c8f71958e681fc56d7c5aa45b6864fc5b762aeeb800f5e831ebb91f64736f6c63430008040033

Deployed ByteCode Sourcemap

19477:23647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22547:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23463:161;;;;;;;;;;-1:-1:-1;23463:161:0;;;;;:::i;:::-;;:::i;:::-;;;5811:14:1;;5804:22;5786:41;;5774:2;5759:18;23463:161:0;5741:92:1;28882:132:0;;;;;;;;;;-1:-1:-1;28882:132:0;;;;;:::i;:::-;;:::i;:::-;;24588:87;;;;;;;;;;-1:-1:-1;24657:10:0;;24588:87;;;14191:25:1;;;14179:2;14164:18;24588:87:0;14146:76:1;21054:41:0;;;;;;;;;;-1:-1:-1;21054:41:0;;;;-1:-1:-1;;;;;21054:41:0;;;;;;-1:-1:-1;;;;;4457:32:1;;;4439:51;;4427:2;4412:18;21054:41:0;4394:102:1;22824:95:0;;;;;;;;;;-1:-1:-1;22904:7:0;;22824:95;;23636:313;;;;;;;;;;-1:-1:-1;23636:313:0;;;;;:::i;:::-;;:::i;25628:253::-;;;;;;;;;;-1:-1:-1;25628:253:0;;;;;:::i;:::-;;:::i;22733:83::-;;;;;;;;;;-1:-1:-1;22799:9:0;;22733:83;;22799:9;;;;15875:36:1;;15863:2;15848:18;22733:83:0;15830:87:1;20587:34:0;;;;;;;;;;;;;;;;26344:479;;;;;;;;;;-1:-1:-1;26344:479:0;;;;;:::i;:::-;;:::i;23957:218::-;;;;;;;;;;-1:-1:-1;23957:218:0;;;;;:::i;:::-;;:::i;28398:152::-;;;;;;;;;;-1:-1:-1;28398:152:0;;;;;:::i;:::-;;:::i;24796:378::-;;;;;;;;;;-1:-1:-1;24796:378:0;;;;;:::i;:::-;;:::i;20405:31::-;;;;;;;;;;;;;;;;42797:322;;;;;;;;;;-1:-1:-1;42797:322:0;;;;;:::i;:::-;;:::i;27829:111::-;;;;;;;;;;-1:-1:-1;27829:111:0;;;;;:::i;:::-;;:::i;25182:438::-;;;;;;;;;;-1:-1:-1;25182:438:0;;;;;:::i;:::-;;:::i;21102:28::-;;;;;;;;;;-1:-1:-1;21102:28:0;;;;-1:-1:-1;;;;;21102:28:0;;;21171:40;;;;;;;;;;-1:-1:-1;21171:40:0;;;;-1:-1:-1;;;21171:40:0;;;;;;25889:447;;;;;;;;;;-1:-1:-1;25889:447:0;;;;;:::i;:::-;;:::i;33532:123::-;;;;;;;;;;-1:-1:-1;33532:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33620:27:0;33596:4;33620:27;;;:18;:27;;;;;;;;;33532:123;28742:132;;;;;;;;;;-1:-1:-1;28742:132:0;;;;;:::i;:::-;;:::i;42511:200::-;;;;;;;;;;;;;:::i;22927:198::-;;;;;;;;;;-1:-1:-1;22927:198:0;;;;;:::i;:::-;;:::i;10327:148::-;;;;;;;;;;;;;:::i;41268:205::-;;;;;;;;;;-1:-1:-1;41268:205:0;;;;;:::i;:::-;;:::i;21224:49::-;;;;;;;;;;;;;;;;24460:120;;;;;;;;;;-1:-1:-1;24460:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;24552:20:0;24528:4;24552:20;;;:11;:20;;;;;;;;;24460:120;10113:79;;;;;;;;;;-1:-1:-1;10151:7:0;10178:6;-1:-1:-1;;;;;10178:6:0;10113:79;;28562:169;;;;;;;;;;-1:-1:-1;28562:169:0;;;;;:::i;:::-;;:::i;22638:87::-;;;;;;;;;;;;;:::i;41856:208::-;;;;;;;;;;-1:-1:-1;41856:208:0;;;;;:::i;:::-;;:::i;24183:269::-;;;;;;;;;;-1:-1:-1;24183:269:0;;;;;:::i;:::-;;:::i;11070:305::-;;;;;;;;;;;;;:::i;23133:167::-;;;;;;;;;;-1:-1:-1;23133:167:0;;;;;:::i;:::-;;:::i;28229:161::-;;;;;;;;;;-1:-1:-1;28229:161:0;;;;;:::i;:::-;;:::i;19989:91::-;;;;;;;;;;-1:-1:-1;19989:91:0;;;;-1:-1:-1;;;;;19989:91:0;;;33663:150;;;;;;;;;;-1:-1:-1;33663:150:0;;;;;:::i;:::-;;:::i;10735:89::-;;;;;;;;;;-1:-1:-1;10807:9:0;;10735:89;;24683:105;;;;;;;;;;-1:-1:-1;24763:17:0;;24683:105;;42072:427;;;;;;;;;;;;;:::i;20501:27::-;;;;;;;;;;;;;;;;29022:171;;;;;;;;;;-1:-1:-1;29022:171:0;;;;;:::i;:::-;;:::i;41086:174::-;;;;;;;;;;-1:-1:-1;41086:174:0;;;;;:::i;:::-;;:::i;28074:143::-;;;;;;;;;;-1:-1:-1;28074:143:0;;;;;:::i;:::-;;:::i;10832:226::-;;;;;;;;;;-1:-1:-1;10832:226:0;;;;;:::i;:::-;;:::i;23308:143::-;;;;;;;;;;-1:-1:-1;23308:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23416:18:0;;;23389:7;23416:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23308:143;27952:110;;;;;;;;;;-1:-1:-1;27952:110:0;;;;;:::i;:::-;;:::i;41667:181::-;;;;;;;;;;-1:-1:-1;41667:181:0;;;;;:::i;:::-;;:::i;10483:244::-;;;;;;;;;;-1:-1:-1;10483:244:0;;;;;:::i;:::-;;:::i;41485:164::-;;;;;;;;;;-1:-1:-1;41485:164:0;;;;;:::i;:::-;;:::i;22547:83::-;22584:13;22617:5;22610:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22547:83;:::o;23463:161::-;23538:4;23555:39;7261:10;23578:7;23587:6;23555:8;:39::i;:::-;-1:-1:-1;23612:4:0;23463:161;;;;;:::o;28882:132::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;;;;;;;;;28974:14:::1;:32:::0;;-1:-1:-1;;;;;;28974:32:0::1;-1:-1:-1::0;;;;;28974:32:0;;;::::1;::::0;;;::::1;::::0;;28882:132::o;23636:313::-;23734:4;23751:36;23761:6;23769:9;23780:6;23751:9;:36::i;:::-;23798:121;23807:6;7261:10;23829:89;23867:6;23829:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23829:19:0;;;;;;:11;:19;;;;;;;;7261:10;23829:33;;;;;;;;;;:37;:89::i;:::-;23798:8;:121::i;:::-;-1:-1:-1;23937:4:0;23636:313;;;;;:::o;25628:253::-;25694:7;25733;;25722;:18;;25714:73;;;;-1:-1:-1;;;25714:73:0;;7287:2:1;25714:73:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:40;7466:19;;25714:73:0;7259:232:1;25714:73:0;25798:19;25821:10;:8;:10::i;:::-;25798:33;-1:-1:-1;25849:24:0;:7;25798:33;25849:11;:24::i;:::-;25842:31;25628:253;-1:-1:-1;;;25628:253:0:o;26344:479::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26426:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26418:60;;;::::0;-1:-1:-1;;;26418:60:0;;9216:2:1;26418:60:0::1;::::0;::::1;9198:21:1::0;9255:2;9235:18;;;9228:30;9294:29;9274:18;;;9267:57;9341:18;;26418:60:0::1;9188:177:1::0;26418:60:0::1;26494:9;26489:327;26513:9;:16:::0;26509:20;::::1;26489:327;;;26571:7;-1:-1:-1::0;;;;;26555:23:0::1;:9;26565:1;26555:12;;;;;;-1:-1:-1::0;;;26555:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26555:12:0::1;:23;26551:254;;;26614:9;26624:16:::0;;:20:::1;::::0;26643:1:::1;::::0;26624:20:::1;:::i;:::-;26614:31;;;;;;-1:-1:-1::0;;;26614:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;26599:9:::1;:12:::0;;-1:-1:-1;;;;;26614:31:0;;::::1;::::0;26609:1;;26599:12;::::1;;;-1:-1:-1::0;;;26599:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;26599:46:0::1;-1:-1:-1::0;;;;;26599:46:0;;::::1;;::::0;;26664:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26703:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26703:28:0::1;::::0;;26750:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;26750:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26750:15:0;;;;;-1:-1:-1;;;;;;26750:15:0::1;::::0;;;;;26489:327:::1;26344:479:::0;:::o;26551:254::-:1;26531:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26489:327;;;;26344:479:::0;:::o;23957:218::-;7261:10;24045:4;24094:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24094:34:0;;;;;;;;;;24045:4;;24062:83;;24085:7;;24094:50;;24133:10;24094:38;:50::i;28398:152::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;28473:14:::1;:20:::0;;;28514:8:::1;::::0;:28:::1;::::0;28490:3;28514:12:::1;:28::i;:::-;28504:7;:38:::0;-1:-1:-1;28398:152:0:o;24796:378::-;7261:10;24848:14;24897:19;;;:11;:19;;;;;;;;24896:20;24888:77;;;;-1:-1:-1;;;24888:77:0;;13430:2:1;24888:77:0;;;13412:21:1;13469:2;13449:18;;;13442:30;13508:34;13488:18;;;13481:62;-1:-1:-1;;;13559:18:1;;;13552:42;13611:19;;24888:77:0;13402:234:1;24888:77:0;24977:15;25002:19;25013:7;25002:10;:19::i;:::-;-1:-1:-1;;;;;;;;25050:15:0;;;;;;:7;:15;;;;;;24976:45;;-1:-1:-1;25050:28:0;;:15;-1:-1:-1;24976:45:0;;-1:-1:-1;;25050:19:0;:28::i;:::-;-1:-1:-1;;;;;25032:15:0;;;;;;:7;:15;;;;;:46;25099:7;;:20;;25111:7;25099:11;:20::i;:::-;25089:7;:30;25143:10;;:23;;25158:7;25143:14;:23::i;:::-;25130:10;:36;-1:-1:-1;;;24796:378:0:o;42797:322::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;42872:36:::1;42930:9;42872:68;;42985:17;-1:-1:-1::0;;;;;42985:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42967:57:0::1;;43033:4;43040:17;-1:-1:-1::0;;;;;43040:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42967:98;::::0;-1:-1:-1;;;;;;42967:98:0::1;::::0;;;;;;-1:-1:-1;;;;;4955:15:1;;;42967:98:0::1;::::0;::::1;4937:34:1::0;5007:15;;4987:18;;;4980:43;4872:18;;42967:98:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42951:13;:114:::0;;-1:-1:-1;;;;;42951:114:0;;::::1;-1:-1:-1::0;;;;;;42951:114:0;;::::1;;::::0;;;43076:15:::1;:35:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;42797:322:0:o;27829:111::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27898:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;27898:34:0::1;27928:4;27898:34;::::0;;27829:111::o;25182:438::-;25272:7;25311;;25300;:18;;25292:62;;;;-1:-1:-1;;;25292:62:0;;9572:2:1;25292:62:0;;;9554:21:1;9611:2;9591:18;;;9584:30;9650:33;9630:18;;;9623:61;9701:18;;25292:62:0;9544:181:1;25292:62:0;25370:17;25365:248;;25405:15;25430:19;25441:7;25430:10;:19::i;:::-;-1:-1:-1;25404:45:0;;-1:-1:-1;25464:14:0;;-1:-1:-1;;;;;;25464:14:0;25365:248;25513:23;25545:19;25556:7;25545:10;:19::i;:::-;-1:-1:-1;25511:53:0;;-1:-1:-1;25579:22:0;;-1:-1:-1;;;;;;25579:22:0;25889:447;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26086:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26085:21;26077:61;;;::::0;-1:-1:-1;;;26077:61:0;;9216:2:1;26077:61:0::1;::::0;::::1;9198:21:1::0;9255:2;9235:18;;;9228:30;9294:29;9274:18;;;9267:57;9341:18;;26077:61:0::1;9188:177:1::0;26077:61:0::1;-1:-1:-1::0;;;;;26152:16:0;::::1;26171:1;26152:16:::0;;;:7:::1;:16;::::0;;;;;:20;26149:108:::1;;-1:-1:-1::0;;;;;26228:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26208:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26189:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26149:108:::1;-1:-1:-1::0;;;;;26267:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26267:27:0::1;26290:4;26267:27:::0;;::::1;::::0;;;26305:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26305:23:0::1;::::0;;::::1;::::0;;25889:447::o;28742:132::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;28855:9:::1;::::0;28834:32:::1;::::0;28851:13:::1;::::0;28855:9:::1;;28851:2;:13;:::i;:::-;28834:11:::0;;:15:::1;:32::i;:::-;28819:12;:47:::0;-1:-1:-1;28742:132:0:o;42511:200::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;7261:10;42622:21:::1;:25:::0;42619:84:::1;;42662:41;::::0;-1:-1:-1;;;;;42662:18:0;::::1;::::0;42681:21:::1;42662:41:::0;::::1;;;::::0;::::1;::::0;;;42681:21;42662:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;42619:84;10310:1;42511:200::o:0;22927:198::-;-1:-1:-1;;;;;23017:20:0;;22993:7;23017:20;;;:11;:20;;;;;;;;23013:49;;;-1:-1:-1;;;;;;23046:16:0;;;;;:7;:16;;;;;;;22927:198::o;23013:49::-;-1:-1:-1;;;;;23100:16:0;;;;;;:7;:16;;;;;;23080:37;;:19;:37::i;10327:148::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;10434:1:::1;10418:6:::0;;10397:40:::1;::::0;-1:-1:-1;;;;;10418:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;10397:40:0;10434:1;;10397:40:::1;10465:1;10448:19:::0;;-1:-1:-1;;;;;;10448:19:0::1;::::0;;10327:148::o;41268:205::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;41366:9:::1;41361:105;41377:20:::0;;::::1;41361:105;;;41450:4;41419:14;:28;41434:9;;41444:1;41434:12;;;;;-1:-1:-1::0;;;41434:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41419:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41419:28:0;:35;;-1:-1:-1;;41419:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41399:3:::1;::::0;::::1;:::i;:::-;;;41361:105;;;;41268:205:::0;;:::o;28562:169::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;28639:17:::1;:23:::0;;;28711:11:::1;::::0;28689:34:::1;::::0;28659:3;;28689:21:::1;:34::i;:::-;28673:13;:50:::0;-1:-1:-1;28562:169:0:o;22638:87::-;22677:13;22710:7;22703:14;;;;;:::i;41856:208::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;41956:9:::1;41951:106;41967:20:::0;;::::1;41951:106;;;42040:5;42009:14;:28;42024:9;;42034:1;42024:12;;;;;-1:-1:-1::0;;;42024:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42009:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42009:28:0;:36;;-1:-1:-1;;42009:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41989:3:::1;::::0;::::1;:::i;:::-;;;41951:106;;24183:269:::0;24276:4;24293:129;7261:10;24316:7;24325:96;24364:15;24325:96;;;;;;;;;;;;;;;;;7261:10;24325:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24325:34:0;;;;;;;;;;;;:38;:96::i;11070:305::-;11122:14;;-1:-1:-1;;;;;11122:14:0;11140:10;11122:28;11114:76;;;;-1:-1:-1;;;11114:76:0;;13843:2:1;11114:76:0;;;13825:21:1;13882:2;13862:18;;;13855:30;13921:34;13901:18;;;13894:62;-1:-1:-1;;;13972:18:1;;;13965:33;14015:19;;11114:76:0;13815:225:1;11114:76:0;11227:9;;11209:15;:27;11201:72;;;;-1:-1:-1;;;11201:72:0;;13070:2:1;11201:72:0;;;13052:21:1;13109:2;13089:18;;;13082:30;13148:33;13128:18;;;13121:61;13199:18;;11201:72:0;13042:181:1;11201:72:0;11318:14;;;11310:6;;11289:44;;-1:-1:-1;;;;;11318:14:0;;;;11310:6;;;;-1:-1:-1;;;;;;;;;;;11289:44:0;;11353:14;;;11344:23;;-1:-1:-1;;;;;;11344:23:0;-1:-1:-1;;;;;11353:14:0;;;11344:23;;;;;;11070:305::o;23133:167::-;23211:4;23228:42;7261:10;23252:9;23263:6;23228:9;:42::i;28229:161::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;28304:11:::1;:17:::0;;;28348::::1;::::0;:34:::1;::::0;28318:3;28348:21:::1;:34::i;33663:150::-:0;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;33758:29:::1;:47:::0;33663:150::o;42072:427::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;7261:10;42132:17:::1;42201:24;42219:4;42201:9;:24::i;:::-;42175:50;;42236:19;42259:10;:8;:10::i;:::-;42236:33:::0;-1:-1:-1;42280:24:0::1;42307:32;:15:::0;42236:33;42307:19:::1;:32::i;:::-;42391:4;42375:22;::::0;;;:7:::1;:22;::::0;;;;;42280:59;;-1:-1:-1;42375:44:0::1;::::0;42280:59;42375:26:::1;:44::i;:::-;42366:4;42350:22;::::0;;;:7:::1;:22;::::0;;;;;:69;;;;-1:-1:-1;;;;;42451:18:0;::::1;::::0;;;;:40:::1;::::0;42474:16;42451:22:::1;:40::i;:::-;-1:-1:-1::0;;;;;42430:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:61;;;;-1:-1:-1;;;42072:427:0:o;29022:171::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;29099:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29099:32:0::1;-1:-1:-1::0;;;;29099:32:0;;::::1;;::::0;;29147:38:::1;::::0;::::1;::::0;::::1;::::0;29123:8;5811:14:1;5804:22;5786:41;;5774:2;5759:18;;5741:92;29147:38:0::1;;;;;;;;29022:171:::0;:::o;41086:174::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41168:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;:33;;:25:::0;:33:::1;41165:45;;;10310:1;42511:200::o:0;41165:45::-:1;-1:-1:-1::0;;;;;41220:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;:32;;-1:-1:-1;;41220:32:0::1;41248:4;41220:32;::::0;;41086:174;:::o;28074:143::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;28146:8:::1;:14:::0;;;28194::::1;::::0;28181:28:::1;::::0;28157:3;;28181:12:::1;:28::i;10832:226::-:0;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;10913:6:::1;::::0;;;10896:23;;-1:-1:-1;;;;;;10896:23:0;;::::1;-1:-1:-1::0;;;;;10913:6:0;::::1;10896:23;::::0;;;10930:19:::1;::::0;;10972:22:::1;10990:4:::0;10972:15:::1;:22;:::i;:::-;10960:9;:34:::0;11047:1:::1;11031:6:::0;;11010:40:::1;::::0;-1:-1:-1;;;;;11031:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;11010:40:0;11047:1;;11010:40:::1;10832:226:::0;:::o;27952:110::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28019:27:0::1;28049:5;28019:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;28019:35:0::1;::::0;;27952:110::o;41667:181::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41754:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;41751:46;;10310:1;42511:200::o:0;41751:46::-:1;-1:-1:-1::0;;;;;41807:25:0::1;41835:5;41807:25:::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;41807:33:0::1;::::0;;41667:181::o;10483:244::-;10240:6;;-1:-1:-1;;;;;10240:6:0;7261:10;10240:22;10232:67;;;;-1:-1:-1;;;10232:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10572:22:0;::::1;10564:73;;;::::0;-1:-1:-1;;;10564:73:0;;7698:2:1;10564:73:0::1;::::0;::::1;7680:21:1::0;7737:2;7717:18;;;7710:30;7776:34;7756:18;;;7749:62;-1:-1:-1;;;7827:18:1;;;7820:36;7873:19;;10564:73:0::1;7670:228:1::0;10564:73:0::1;10674:6;::::0;;10653:38:::1;::::0;-1:-1:-1;;;;;10653:38:0;;::::1;::::0;10674:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;10653:38:0;::::1;10702:6;:17:::0;;-1:-1:-1;;;;;;10702:17:0::1;-1:-1:-1::0;;;;;10702:17:0;;;::::1;::::0;;;::::1;::::0;;10483:244::o;41485:164::-;-1:-1:-1;;;;;41567:25:0;;41548:4;41567:25;;;:14;:25;;;;;;;;:33;;:25;:33;41564:77;;;-1:-1:-1;41609:4:0;;41485:164;-1:-1:-1;41485:164:0:o;41564:77::-;-1:-1:-1;41636:5:0;;41485:164;-1:-1:-1;41485:164:0:o;41564:77::-;41485:164;;;:::o;5697:179::-;5755:7;;5787:5;5791:1;5787;:5;:::i;:::-;5775:17;;5816:1;5811;:6;;5803:46;;;;-1:-1:-1;;;5803:46:0;;8860:2:1;5803:46:0;;;8842:21:1;8899:2;8879:18;;;8872:30;8938:29;8918:18;;;8911:57;8985:18;;5803:46:0;8832:177:1;33821:337:0;-1:-1:-1;;;;;33914:19:0;;33906:68;;;;-1:-1:-1;;;33906:68:0;;12665:2:1;33906:68:0;;;12647:21:1;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:34;12838:19;;33906:68:0;12637:226:1;33906:68:0;-1:-1:-1;;;;;33993:21:0;;33985:68;;;;-1:-1:-1;;;33985:68:0;;8105:2:1;33985:68:0;;;8087:21:1;8144:2;8124:18;;;8117:30;8183:34;8163:18;;;8156:62;-1:-1:-1;;;8234:18:1;;;8227:32;8276:19;;33985:68:0;8077:224:1;33985:68:0;-1:-1:-1;;;;;34066:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34118:32;;14191:25:1;;;34118:32:0;;14164:18:1;34118:32:0;;;;;;;33821:337;;;:::o;34166:1672::-;-1:-1:-1;;;;;34288:18:0;;34280:68;;;;-1:-1:-1;;;34280:68:0;;12259:2:1;34280:68:0;;;12241:21:1;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:35;12433:19;;34280:68:0;12231:227:1;34280:68:0;-1:-1:-1;;;;;34367:16:0;;34359:64;;;;-1:-1:-1;;;34359:64:0;;6883:2:1;34359:64:0;;;6865:21:1;6922:2;6902:18;;;6895:30;6961:34;6941:18;;;6934:62;-1:-1:-1;;;7012:18:1;;;7005:33;7055:19;;34359:64:0;6855:225:1;34359:64:0;34451:1;34442:6;:10;34434:64;;;;-1:-1:-1;;;34434:64:0;;11447:2:1;34434:64:0;;;11429:21:1;11486:2;11466:18;;;11459:30;11525:34;11505:18;;;11498:62;-1:-1:-1;;;11576:18:1;;;11569:39;11625:19;;34434:64:0;11419:231:1;34434:64:0;-1:-1:-1;;;;;34517:20:0;;;;;;:14;:20;;;;;;;;:29;34509:56;;;;-1:-1:-1;;;34509:56:0;;9932:2:1;34509:56:0;;;9914:21:1;9971:2;9951:18;;;9944:30;-1:-1:-1;;;9990:18:1;;;9983:44;10044:18;;34509:56:0;9904:164:1;34509:56:0;-1:-1:-1;;;;;34584:18:0;;;;;;:14;:18;;;;;;;;:27;34576:63;;;;-1:-1:-1;;;34576:63:0;;8508:2:1;34576:63:0;;;8490:21:1;8547:2;8527:18;;;8520:30;8586:25;8566:18;;;8559:53;8629:18;;34576:63:0;8480:173:1;34576:63:0;10151:7;10178:6;-1:-1:-1;;;;;34653:15:0;;;10178:6;;34653:15;;;;:32;;-1:-1:-1;10151:7:0;10178:6;-1:-1:-1;;;;;34672:13:0;;;10178:6;;34672:13;;34653:32;34650:125;;;34718:12;;34708:6;:22;;34700:75;;;;-1:-1:-1;;;34700:75:0;;10275:2:1;34700:75:0;;;10257:21:1;10314:2;10294:18;;;10287:30;10353:34;10333:18;;;10326:62;-1:-1:-1;;;10404:18:1;;;10397:38;10452:19;;34700:75:0;10247:230:1;34700:75:0;34788:28;34819:24;34837:4;34819:9;:24::i;:::-;34788:55;;34891:12;;34867:20;:36;34864:112;;-1:-1:-1;34952:12:0;;34864:112;35047:29;;35023:53;;;;;;;35105;;-1:-1:-1;35142:16:0;;-1:-1:-1;;;35142:16:0;;;;35141:17;35105:53;:91;;;;-1:-1:-1;35183:13:0;;-1:-1:-1;;;;;35175:21:0;;;35183:13;;35175:21;;35105:91;:129;;;;-1:-1:-1;35213:21:0;;-1:-1:-1;;;35213:21:0;;;;35105:129;35087:318;;;35284:29;;35261:52;;35357:36;35372:20;35357:14;:36::i;:::-;-1:-1:-1;;;;;35613:24:0;;35486:12;35613:24;;;:18;:24;;;;;;35501:4;;35613:24;;;:50;;-1:-1:-1;;;;;;35641:22:0;;;;;;:18;:22;;;;;;;;35613:50;35610:96;;;-1:-1:-1;35689:5:0;35610:96;35792:38;35807:4;35812:2;35815:6;35822:7;35792:14;:38::i;:::-;34166:1672;;;;;;:::o;6028:190::-;6114:7;6150:12;6142:6;;;;6134:29;;;;-1:-1:-1;;;6134:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6174:9:0;6186:5;6190:1;6186;:5;:::i;:::-;6174:17;6028:190;-1:-1:-1;;;;;6028:190:0:o;30847:163::-;30888:7;30909:15;30926;30945:19;:17;:19::i;:::-;30908:56;;-1:-1:-1;30908:56:0;-1:-1:-1;30982:20:0;30908:56;;30982:11;:20::i;:::-;30975:27;;;;30847:163;:::o;6482:132::-;6540:7;6567:39;6571:1;6574;6567:39;;;;;;;;;;;;;;;;;:3;:39::i;29454:454::-;29513:7;29522;29531;29540;29549;29558;29567;29588:23;29613:12;29627;29641:18;29663:20;29675:7;29663:11;:20::i;:::-;29587:96;;;;;;;;29695:15;29712:23;29737:12;29753:56;29765:7;29774:4;29780:10;29792:4;29798:10;:8;:10::i;:::-;29753:11;:56::i;:::-;29694:115;;-1:-1:-1;29694:115:0;-1:-1:-1;29694:115:0;-1:-1:-1;29860:15:0;;-1:-1:-1;29877:4:0;;-1:-1:-1;29883:4:0;;-1:-1:-1;29889:10:0;-1:-1:-1;;;;29454:454:0;;;;;;;;;:::o;5884:136::-;5942:7;5969:43;5973:1;5976;5969:43;;;;;;;;;;;;;;;;;:3;:43::i;6226:248::-;6284:7;6308:6;6304:47;;-1:-1:-1;6338:1:0;6331:8;;6304:47;6363:9;6375:5;6379:1;6375;:5;:::i;:::-;6363:17;-1:-1:-1;6408:1:0;6399:5;6403:1;6363:17;6399:5;:::i;:::-;:10;6391:56;;;;-1:-1:-1;;;6391:56:0;;10684:2:1;6391:56:0;;;10666:21:1;10723:2;10703:18;;;10696:30;10762:34;10742:18;;;10735:62;-1:-1:-1;;;10813:18:1;;;10806:31;10854:19;;6391:56:0;10656:223:1;35846:995:0;21655:16;:23;;-1:-1:-1;;;;21655:23:0;-1:-1:-1;;;21655:23:0;;;36034:11:::1;::::0;35949:12;;35997:21:::1;::::0;36034:15;36031:365:::1;;36075:21;36099:29;36116:11;;36099:12;:16;;:29;;;;:::i;:::-;36075:53;;36159:32;36177:13;;36159;:17;;:32;;;;:::i;:::-;36143:48:::0;-1:-1:-1;36224:31:0::1;:12:::0;36143:48;36224:16:::1;:31::i;:::-;36287:14;::::0;36206:49;;-1:-1:-1;36270:47:0::1;::::0;-1:-1:-1;;;;;36287:14:0::1;36303:13:::0;36270:16:::1;:47::i;:::-;36363:21;36346:38;;36031:365;;36419:17;::::0;:21;36416:418:::1;;36466:12;36481:22;:15:::0;36501:1:::1;36481:19;:22::i;:::-;36466:37:::0;-1:-1:-1;36518:17:0::1;36538:25;:15:::0;36466:37;36538:19:::1;:25::i;:::-;36518:45;;36580:22;36597:4;36580:16;:22::i;:::-;36631:18;36652:41;:21;36678:14:::0;36652:25:::1;:41::i;:::-;36631:62;;36710:35;36723:9;36734:10;36710:12;:35::i;:::-;36779:43;::::0;;15611:25:1;;;15667:2;15652:18;;15645:34;;;15695:18;;;15688:34;;;36779:43:0::1;::::0;15599:2:1;15584:18;36779:43:0::1;;;;;;;36416:418;;;;-1:-1:-1::0;;21701:16:0;:24;;-1:-1:-1;;;;21701:24:0;;;-1:-1:-1;35846:995:0:o;38344:834::-;38455:7;38451:40;;38477:14;:12;:14::i;:::-;-1:-1:-1;;;;;38516:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38540:22:0;;;;;;:11;:22;;;;;;;;38539:23;38516:46;38512:597;;;38579:48;38601:6;38609:9;38620:6;38579:21;:48::i;:::-;38512:597;;;-1:-1:-1;;;;;38650:19:0;;;;;;:11;:19;;;;;;;;38649:20;:46;;;;-1:-1:-1;;;;;;38673:22:0;;;;;;:11;:22;;;;;;;;38649:46;38645:464;;;38712:46;38732:6;38740:9;38751:6;38712:19;:46::i;38645:464::-;-1:-1:-1;;;;;38781:19:0;;;;;;:11;:19;;;;;;;;38780:20;:47;;;;-1:-1:-1;;;;;;38805:22:0;;;;;;:11;:22;;;;;;;;38804:23;38780:47;38776:333;;;38844:44;38862:6;38870:9;38881:6;38844:17;:44::i;38776:333::-;-1:-1:-1;;;;;38910:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38933:22:0;;;;;;:11;:22;;;;;;;;38910:45;38906:203;;;38972:48;38994:6;39002:9;39013:6;38972:21;:48::i;38906:203::-;39053:44;39071:6;39079:9;39090:6;39053:17;:44::i;:::-;39133:7;39129:41;;39155:15;33234:18;;33214:17;:38;33274:16;;33263:8;:27;33327:19;;33313:11;:33;33389:22;;33372:14;:39;33449:15;;33439:7;:25;33491:21;;33475:13;:37;33170:350;39155:15;38344:834;;;;:::o;31018:561::-;31115:7;;31151;;31068;;;;;31175:289;31199:9;:16;31195:20;;31175:289;;;31265:7;31241;:21;31249:9;31259:1;31249:12;;;;;;-1:-1:-1;;;31249:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31249:12:0;31241:21;;;;;;;;;;;;;:31;;:66;;;31300:7;31276;:21;31284:9;31294:1;31284:12;;;;;;-1:-1:-1;;;31284:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31284:12:0;31276:21;;;;;;;;;;;;;:31;31241:66;31237:97;;;31317:7;;31326;;31309:25;;;;;;;31018:561;;:::o;31237:97::-;31359:34;31371:7;:21;31379:9;31389:1;31379:12;;;;;;-1:-1:-1;;;31379:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31379:12:0;31371:21;;;;;;;;;;;;;31359:7;;:11;:34::i;:::-;31349:44;;31418:34;31430:7;:21;31438:9;31448:1;31438:12;;;;;;-1:-1:-1;;;31438:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31438:12:0;31430:21;;;;;;;;;;;;;31418:7;;:11;:34::i;:::-;31408:44;-1:-1:-1;31217:3:0;;;;:::i;:::-;;;;31175:289;;;-1:-1:-1;31500:7:0;;31488;;:20;;:11;:20::i;:::-;31478:7;:30;31474:61;;;31518:7;;31527;;31510:25;;;;;;31018:561;;:::o;31474:61::-;31554:7;;31563;;-1:-1:-1;31018:561:0;-1:-1:-1;31018:561:0:o;6622:189::-;6708:7;6743:12;6736:5;6728:28;;;;-1:-1:-1;;;6728:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6767:9:0;6779:5;6783:1;6779;:5;:::i;29916:413::-;29976:7;29985;29994;30003;30023:12;30038:31;30061:7;30038:22;:31::i;:::-;30023:46;;30080:12;30095:25;30112:7;30095:16;:25::i;:::-;30080:40;;30131:18;30152:30;30174:7;30152:21;:30::i;:::-;30131:51;-1:-1:-1;30193:23:0;30219:43;30257:4;30219:33;30131:51;30219:33;:7;30231:4;30219:11;:17::i;:::-;:21;;:33::i;:43::-;30193:69;30298:4;;-1:-1:-1;30304:4:0;;-1:-1:-1;30304:4:0;-1:-1:-1;29916:413:0;;-1:-1:-1;;;29916:413:0:o;30337:502::-;30466:7;;;;30522:24;:7;30534:11;30522;:24::i;:::-;30504:42;-1:-1:-1;30557:12:0;30572:21;:4;30581:11;30572:8;:21::i;:::-;30557:36;-1:-1:-1;30604:13:0;30620:21;:4;30629:11;30620:8;:21::i;:::-;30604:37;-1:-1:-1;30652:18:0;30673:27;:10;30688:11;30673:14;:27::i;:::-;30652:48;-1:-1:-1;30711:23:0;30737:44;30775:5;30737:33;30652:48;30737:33;:7;30749:4;30737:11;:17::i;:44::-;30800:7;;;;-1:-1:-1;30826:4:0;;-1:-1:-1;30337:502:0;;-1:-1:-1;;;;;;;;;30337:502:0:o;36849:526::-;36966:16;;;36980:1;36966:16;;;;;;;;36942:21;;36966:16;;;;;;;;;;-1:-1:-1;36966:16:0;36942:40;;37011:4;36993;36998:1;36993:7;;;;;;-1:-1:-1;;;36993:7:0;;;;;;;;;-1:-1:-1;;;;;36993:23:0;;;:7;;;;;;;;;;:23;;;;37037:15;;:22;;;-1:-1:-1;;;37037:22:0;;;;:15;;;;;:20;;:22;;;;;36993:7;;37037:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37027:4;37032:1;37027:7;;;;;;-1:-1:-1;;;37027:7:0;;;;;;;;;-1:-1:-1;;;;;37027:32:0;;;:7;;;;;;;;;:32;37104:15;;37072:62;;37089:4;;37104:15;37122:11;37072:8;:62::i;:::-;37147:15;;:220;;-1:-1:-1;;;37147:220:0;;-1:-1:-1;;;;;37147:15:0;;;;:66;;:220;;37228:11;;37147:15;;37298:4;;37317:9;;37341:15;;37147:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36849:526;;;:::o;37383:529::-;37473:16;;;37487:1;37473:16;;;;;;;;37449:21;;37473:16;;;;;;;;;;-1:-1:-1;37473:16:0;37449:40;;37518:4;37500;37505:1;37500:7;;;;;;-1:-1:-1;;;37500:7:0;;;;;;;;;-1:-1:-1;;;;;37500:23:0;;;:7;;;;;;;;;;:23;;;;37544:15;;:22;;;-1:-1:-1;;;37544:22:0;;;;:15;;;;;:20;;:22;;;;;37500:7;;37544:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37534:4;37539:1;37534:7;;;;;;-1:-1:-1;;;37534:7:0;;;;;;;;;-1:-1:-1;;;;;37534:32:0;;;:7;;;;;;;;;:32;37611:15;;37579:62;;37596:4;;37611:15;37629:11;37579:8;:62::i;:::-;37680:15;;:224;;-1:-1:-1;;;37680:224:0;;-1:-1:-1;;;;;37680:15:0;;;;:66;;:224;;37761:11;;37680:15;;37831:4;;37858;;37878:15;;37680:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37920:416;38033:15;;38001:62;;38018:4;;-1:-1:-1;;;;;38033:15:0;38051:11;38001:8;:62::i;:::-;38076:15;;-1:-1:-1;;;;;38076:15:0;:31;38115:9;38148:4;38168:11;38076:15;;38280:7;10151;10178:6;-1:-1:-1;;;;;10178:6:0;;10113:79;38280:7;38076:252;;;;;;-1:-1:-1;;;;;;38076:252:0;;;-1:-1:-1;;;;;5393:15:1;;;38076:252:0;;;5375:34:1;5425:18;;;5418:34;;;;5468:18;;;5461:34;;;;5511:18;;;5504:34;5575:15;;;5554:19;;;5547:44;38302:15:0;5607:19:1;;;5600:35;5309:19;;38076:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37920:416;;:::o;32476:682::-;32522:7;;:12;:34;;;;-1:-1:-1;32538:13:0;;:18;32522:34;:51;;;;-1:-1:-1;32560:8:0;;:13;32522:51;:81;;;;-1:-1:-1;32587:11:0;;:16;32522:81;:104;;;;-1:-1:-1;32607:14:0;;:19;32522:104;:130;;;;-1:-1:-1;32630:17:0;;:22;32522:130;32519:142;;;32476:682::o;32519:142::-;32702:17;;;32681:18;:38;32750:8;;;32731:16;:27;32803:11;;;32781:19;:33;32865:14;;;32840:22;:39;32925:7;;;32907:15;:25;32967:13;;;32943:21;:37;-1:-1:-1;33001:21:0;;;;33033:12;;;;33056:15;;;;33082:18;;;33111:11;;;33133:17;32476:682::o;40435:641::-;40538:15;40555:23;40580:12;40594:23;40619:12;40633;40647:18;40669:19;40680:7;40669:10;:19::i;:::-;40537:151;;;;;;;;;;;;;;40717:28;40737:7;40717;:15;40725:6;-1:-1:-1;;;;;40717:15:0;-1:-1:-1;;;;;40717:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;40699:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40774:7;:15;;;;:28;;40794:7;40774:19;:28::i;:::-;-1:-1:-1;;;;;40756:15:0;;;;;;;:7;:15;;;;;;:46;;;;40834:18;;;;;;;:39;;40857:15;40834:22;:39::i;:::-;-1:-1:-1;;;;;40813:18:0;;;;;;:7;:18;;;;;:60;40889:8;;:12;;;;:27;;;40915:1;40905:7;;:11;40889:27;40886:51;;;40918:19;40924:6;40932:4;40918:5;:19::i;:::-;40948:26;40963:10;40948:14;:26::i;:::-;40985:23;40997:4;41003;40985:11;:23::i;:::-;41041:9;-1:-1:-1;;;;;41024:44:0;41033:6;-1:-1:-1;;;;;41024:44:0;;41052:15;41024:44;;;;14191:25:1;;14179:2;14164:18;;14146:76;41024:44:0;;;;;;;;40435:641;;;;;;;;;;:::o;39774:653::-;39875:15;39892:23;39917:12;39931:23;39956:12;39970;39984:18;40006:19;40017:7;40006:10;:19::i;:::-;39874:151;;;;;;;;;;;;;;40054:28;40074:7;40054;:15;40062:6;-1:-1:-1;;;;;40054:15:0;-1:-1:-1;;;;;40054:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;40036:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;40114:18;;;;;:7;:18;;;;;:39;;40137:15;40114:22;:39::i;:::-;-1:-1:-1;;;;;40093:18:0;;;;;;:7;:18;;;;;;;;:60;;;;40185:7;:18;;;;:39;;40208:15;40185:22;:39::i;39186:580::-;39285:15;39302:23;39327:12;39341:23;39366:12;39380;39394:18;39416:19;39427:7;39416:10;:19::i;:::-;39284:151;;;;;;;;;;;;;;39464:28;39484:7;39464;:15;39472:6;-1:-1:-1;;;;;39464:15:0;-1:-1:-1;;;;;39464:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;27105:712::-;27208:15;27225:23;27250:12;27264:23;27289:12;27303;27317:18;27339:19;27350:7;27339:10;:19::i;:::-;27207:151;;;;;;;;;;;;;;27387:28;27407:7;27387;:15;27395:6;-1:-1:-1;;;;;27387:15:0;-1:-1:-1;;;;;27387:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;27369:15:0;;;;;;:7;:15;;;;;;;;:46;;;;27444:7;:15;;;;:28;;27464:7;27444:19;:28::i;32122:168::-;32193:7;32220:62;32266:5;32220:27;32232:14;;32220:7;:11;;:27;;;;:::i;:::-;:31;;:62::i;31958:156::-;32023:7;32050:56;32090:5;32050:21;32062:8;;32050:7;:11;;:21;;;;:::i;32298:166::-;32368:7;32395:61;32440:5;32395:26;32407:13;;32395:7;:11;;:26;;;;:::i;26831:262::-;-1:-1:-1;;;;;26907:21:0;;26899:67;;;;-1:-1:-1;;;26899:67:0;;11857:2:1;26899:67:0;;;11839:21:1;11896:2;11876:18;;;11869:30;11935:34;11915:18;;;11908:62;-1:-1:-1;;;11986:18:1;;;11979:31;12027:19;;26899:67:0;11829:223:1;26899:67:0;27001:19;;;:7;:19;;;;:31;;27025:6;27001:23;:31::i;:::-;26979:19;;;;:7;:19;;;:53;;;;:19;27048:37;-1:-1:-1;;;;;27048:37:0;;;;;;;27078:6;14191:25:1;;14179:2;14164:18;;14146:76;27048:37:0;;;;;;;;26831:262;;:::o;31591:355::-;31654:19;31677:10;:8;:10::i;:::-;31654:33;-1:-1:-1;31698:18:0;31719:27;:10;31654:33;31719:14;:27::i;:::-;31798:4;31782:22;;;;:7;:22;;;;;;31698:48;;-1:-1:-1;31782:38:0;;31698:48;31782:26;:38::i;:::-;31773:4;31757:22;;;;:7;:22;;;;;;;;:63;;;;31834:11;:26;;;;;;31831:107;;;31916:4;31900:22;;;;:7;:22;;;;;;:38;;31927:10;31900:26;:38::i;:::-;31891:4;31875:22;;;;:7;:22;;;;;:63;31591:355;;;:::o;29299:147::-;29377:7;;:17;;29389:4;29377:11;:17::i;:::-;29367:7;:27;29418:10;;:20;;29433:4;29418:14;:20::i;:::-;29405:10;:33;-1:-1:-1;;29299:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;977:398::-;1045:6;1053;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1171:9;1158:23;1190:31;1215:5;1190:31;:::i;:::-;1240:5;-1:-1:-1;1297:2:1;1282:18;;1269:32;1310:33;1269:32;1310:33;:::i;:::-;1362:7;1352:17;;;1064:311;;;;;:::o;1380:466::-;1457:6;1465;1473;1526:2;1514:9;1505:7;1501:23;1497:32;1494:2;;;1547:6;1539;1532:22;1494:2;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:1;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1484:362;;1782:7;;-1:-1:-1;;;1836:2:1;1821:18;;;;1808:32;;1484:362::o;1851:325::-;1919:6;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:2;;;2001:6;1993;1986:22;1948:2;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1938:238:1:o;2181:665::-;2267:6;2275;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2349:6;2341;2334:22;2296:2;2394:9;2381:23;2423:18;2464:2;2456:6;2453:14;2450:2;;;2485:6;2477;2470:22;2450:2;2528:6;2517:9;2513:22;2503:32;;2573:7;2566:4;2562:2;2558:13;2554:27;2544:2;;2600:6;2592;2585:22;2544:2;2645;2632:16;2671:2;2663:6;2660:14;2657:2;;;2692:6;2684;2677:22;2657:2;2750:7;2745:2;2735:6;2732:1;2728:14;2724:2;2720:23;2716:32;2713:45;2710:2;;;2776:6;2768;2761:22;2710:2;2812;2804:11;;;;;2834:6;;-1:-1:-1;2286:560:1;;-1:-1:-1;;;;2286:560:1:o;2851:190::-;2907:6;2960:2;2948:9;2939:7;2935:23;2931:32;2928:2;;;2981:6;2973;2966:22;2928:2;3009:26;3025:9;3009:26;:::i;3046:190::-;3105:6;3158:2;3146:9;3137:7;3133:23;3129:32;3126:2;;;3179:6;3171;3164:22;3126:2;-1:-1:-1;3207:23:1;;3116:120;-1:-1:-1;3116:120:1:o;3241:258::-;3306:6;3314;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3388:6;3380;3373:22;3335:2;3429:9;3416:23;3406:33;;3458:35;3489:2;3478:9;3474:18;3458:35;:::i;:::-;3448:45;;3325:174;;;;;:::o;3504:316::-;3592:6;3600;3608;3661:2;3649:9;3640:7;3636:23;3632:32;3629:2;;;3682:6;3674;3667:22;3629:2;3716:9;3710:16;3700:26;;3766:2;3755:9;3751:18;3745:25;3735:35;;3810:2;3799:9;3795:18;3789:25;3779:35;;3619:201;;;;;:::o;3825:463::-;3878:3;3916:5;3910:12;3943:6;3938:3;3931:19;3969:4;3998:2;3993:3;3989:12;3982:19;;4035:2;4028:5;4024:14;4056:3;4068:195;4082:6;4079:1;4076:13;4068:195;;;4147:13;;-1:-1:-1;;;;;4143:39:1;4131:52;;4203:12;;;;4238:15;;;;4179:1;4097:9;4068:195;;;-1:-1:-1;4279:3:1;;3886:402;-1:-1:-1;;;;;3886:402:1:o;6073:603::-;6185:4;6214:2;6243;6232:9;6225:21;6275:6;6269:13;6318:6;6313:2;6302:9;6298:18;6291:34;6343:4;6356:140;6370:6;6367:1;6364:13;6356:140;;;6465:14;;;6461:23;;6455:30;6431:17;;;6450:2;6427:26;6420:66;6385:10;;6356:140;;;6514:6;6511:1;6508:13;6505:2;;;6584:4;6579:2;6570:6;6559:9;6555:22;6551:31;6544:45;6505:2;-1:-1:-1;6660:2:1;6639:15;-1:-1:-1;;6635:29:1;6620:45;;;;6667:2;6616:54;;6194:482;-1:-1:-1;;;6194:482:1:o;10884:356::-;11086:2;11068:21;;;11105:18;;;11098:30;11164:34;11159:2;11144:18;;11137:62;11231:2;11216:18;;11058:182::o;14227:590::-;14534:6;14523:9;14516:25;14577:6;14572:2;14561:9;14557:18;14550:34;14620:3;14615:2;14604:9;14600:18;14593:31;14497:4;14641:57;14693:3;14682:9;14678:19;14670:6;14641:57;:::i;:::-;-1:-1:-1;;;;;14734:32:1;;;;14729:2;14714:18;;14707:60;-1:-1:-1;14798:3:1;14783:19;14776:35;14633:65;14506:311;-1:-1:-1;;;14506:311:1:o;15922:128::-;15962:3;15993:1;15989:6;15986:1;15983:13;15980:2;;;15999:18;;:::i;:::-;-1:-1:-1;16035:9:1;;15970:80::o;16055:217::-;16095:1;16121;16111:2;;-1:-1:-1;;;16146:31:1;;16200:4;16197:1;16190:15;16228:4;16153:1;16218:15;16111:2;-1:-1:-1;16257:9:1;;16101:171::o;16277:422::-;16366:1;16409:5;16366:1;16423:270;16444:7;16434:8;16431:21;16423:270;;;16503:4;16499:1;16495:6;16491:17;16485:4;16482:27;16479:2;;;16512:18;;:::i;:::-;16562:7;16552:8;16548:22;16545:2;;;16582:16;;;;16545:2;16661:22;;;;16621:15;;;;16423:270;;;16427:3;16341:358;;;;;:::o;16704:140::-;16762:5;16791:47;16832:4;16822:8;16818:19;16812:4;16898:5;16928:8;16918:2;;-1:-1:-1;16969:1:1;16983:5;;16918:2;17017:4;17007:2;;-1:-1:-1;17054:1:1;17068:5;;17007:2;17099:4;17117:1;17112:59;;;;17185:1;17180:130;;;;17092:218;;17112:59;17142:1;17133:10;;17156:5;;;17180:130;17217:3;17207:8;17204:17;17201:2;;;17224:18;;:::i;:::-;-1:-1:-1;;17280:1:1;17266:16;;17295:5;;17092:218;;17394:2;17384:8;17381:16;17375:3;17369:4;17366:13;17362:36;17356:2;17346:8;17343:16;17338:2;17332:4;17329:12;17325:35;17322:77;17319:2;;;-1:-1:-1;17431:19:1;;;17463:5;;17319:2;17510:34;17535:8;17529:4;17510:34;:::i;:::-;17580:6;17576:1;17572:6;17568:19;17559:7;17556:32;17553:2;;;17591:18;;:::i;:::-;17629:20;;16908:747;-1:-1:-1;;;16908:747:1:o;17660:168::-;17700:7;17766:1;17762;17758:6;17754:14;17751:1;17748:21;17743:1;17736:9;17729:17;17725:45;17722:2;;;17773:18;;:::i;:::-;-1:-1:-1;17813:9:1;;17712:116::o;17833:125::-;17873:4;17901:1;17898;17895:8;17892:2;;;17906:18;;:::i;:::-;-1:-1:-1;17943:9:1;;17882:76::o;17963:380::-;18042:1;18038:12;;;;18085;;;18106:2;;18160:4;18152:6;18148:17;18138:27;;18106:2;18213;18205:6;18202:14;18182:18;18179:38;18176:2;;;18259:10;18254:3;18250:20;18247:1;18240:31;18294:4;18291:1;18284:15;18322:4;18319:1;18312:15;18176:2;;18018:325;;;:::o;18348:135::-;18387:3;-1:-1:-1;;18408:17:1;;18405:2;;;18428:18;;:::i;:::-;-1:-1:-1;18475:1:1;18464:13;;18395:88::o;18488:127::-;18549:10;18544:3;18540:20;18537:1;18530:31;18580:4;18577:1;18570:15;18604:4;18601:1;18594:15;18620:131;-1:-1:-1;;;;;18695:31:1;;18685:42;;18675:2;;18741:1;18738;18731:12

Swarm Source

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