From f876dcb93b72ac6b0c572b354d1aafe8b4403b02 Mon Sep 17 00:00:00 2001 From: drbob Date: Sun, 1 Aug 2010 18:19:27 +0000 Subject: [PATCH] General Bugfixes from RS integration. * heisenbug fixed. msgout_find_node was inside debugging #defs. * fixed ReplyFindNode and ReplyQueryHash counters for stats. * added Node Space size() functions. * added FINDSELF mode. 60 secs to search for own hash. * incremental addition of search ids. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3326 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libbitdht/src/bitdht/bdiface.h | 12 +- libbitdht/src/bitdht/bdmanager.cc | 62 +- libbitdht/src/bitdht/bdmanager.h | 10 +- libbitdht/src/bitdht/bdnode.cc | 71 ++- libbitdht/src/bitdht/bdnode.h | 5 +- libbitdht/src/bitdht/bdpeer.cc | 98 +++ libbitdht/src/bitdht/bdpeer.h | 7 + libbitdht/src/bitdht/bdquery.cc | 4 + libbitdht/src/bitdht/bdstddht.h | 2 +- libbitdht/src/tests/bdboot.txt | 996 +++++++++++++++--------------- 10 files changed, 741 insertions(+), 526 deletions(-) diff --git a/libbitdht/src/bitdht/bdiface.h b/libbitdht/src/bitdht/bdiface.h index 7ee34a0b9..6b0a17b7c 100644 --- a/libbitdht/src/bitdht/bdiface.h +++ b/libbitdht/src/bitdht/bdiface.h @@ -132,16 +132,18 @@ virtual void bdPrintNodeId(std::ostream &out, const bdNodeId *a) = 0; /* Status options */ -#define BITDHT_QUERY_QUERYING 1 -#define BITDHT_QUERY_FAILURE 2 -#define BITDHT_QUERY_FOUND_CLOSEST 3 -#define BITDHT_QUERY_PEER_UNREACHABLE 4 -#define BITDHT_QUERY_SUCCESS 5 +#define BITDHT_QUERY_READY 1 +#define BITDHT_QUERY_QUERYING 2 +#define BITDHT_QUERY_FAILURE 3 +#define BITDHT_QUERY_FOUND_CLOSEST 4 +#define BITDHT_QUERY_PEER_UNREACHABLE 5 +#define BITDHT_QUERY_SUCCESS 6 /* Query Flags */ #define BITDHT_QFLAGS_NONE 0 #define BITDHT_QFLAGS_DISGUISE 1 #define BITDHT_QFLAGS_DO_IDLE 2 +#define BITDHT_QFLAGS_INTERNAL 4 // means it runs through startup. class BitDhtCallback { diff --git a/libbitdht/src/bitdht/bdmanager.cc b/libbitdht/src/bitdht/bdmanager.cc index c9d1e40b1..aba7900c9 100644 --- a/libbitdht/src/bitdht/bdmanager.cc +++ b/libbitdht/src/bitdht/bdmanager.cc @@ -54,7 +54,7 @@ * #define DEBUG_MGR_PKT 1 ***/ -#define DEBUG_MGR 1 +//#define DEBUG_MGR 1 bdNodeManager::bdNodeManager(bdNodeId *id, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns) :bdNode(id, dhtVersion, bootfile, fns) @@ -94,14 +94,41 @@ void bdNodeManager::addFindNode(bdNodeId *id, uint32_t qflags) /* add to map */ bdQueryPeer peer; peer.mId.id = (*id); - peer.mStatus = BITDHT_QUERY_QUERYING; + peer.mStatus = BITDHT_QUERY_READY; //QUERYING; peer.mQFlags = qflags; mActivePeers[*id] = peer; #ifdef DEBUG_MGR - std::cerr << "bdNodeManager::addFindNode() Added QueryPeer...."; + std::cerr << "bdNodeManager::addFindNode() Added QueryPeer as READY...."; std::cerr << std::endl; #endif - addQuery(id, qflags | BITDHT_QFLAGS_DISGUISE); + //addQuery(id, qflags | BITDHT_QFLAGS_DISGUISE); + return; +} + + /* finds a queued query, and starts it */ +void bdNodeManager::startQueries() +{ +#ifdef DEBUG_MGR + std::cerr << "bdNodeManager::startQueries() "; + std::cerr << std::endl; +#endif + /* check if exists already */ + std::map::iterator it; + for(it = mActivePeers.begin(); it != mActivePeers.end(); it++) + { + if (it->second.mStatus == BITDHT_QUERY_READY) + { +#ifdef DEBUG_MGR + std::cerr << "bdNodeManager::startQueries() Found READY Query."; + std::cerr << std::endl; +#endif + it->second.mStatus == BITDHT_QUERY_QUERYING; + + uint32_t qflags = it->second.mQFlags | BITDHT_QFLAGS_DISGUISE; + addQuery(&(it->first), qflags); + return; + } + } return; } @@ -138,6 +165,7 @@ void bdNodeManager::iteration() { case BITDHT_MGR_STATE_STARTUP: /* 10 seconds startup .... then switch to ACTIVE */ + if (modeAge > MAX_STARTUP_TIME) { #ifdef DEBUG_MGR @@ -148,10 +176,29 @@ void bdNodeManager::iteration() getOwnId(&id); addQuery(&id, BITDHT_QFLAGS_DO_IDLE | BITDHT_QFLAGS_DISGUISE); + mMode = BITDHT_MGR_STATE_FINDSELF; + mModeTS = now; + } + break; + + case BITDHT_MGR_STATE_FINDSELF: + /* 60 seconds further startup .... then switch to ACTIVE */ +#define MAX_FINDSELF_TIME 60 +#define MIN_OP_SPACE_SIZE 100 + +#ifdef DEBUG_MGR + std::cerr << "bdNodeManager::iteration() Finding Oneself: NodeSpace Size:" << mNodeSpace.size(); + std::cerr << std::endl; +#endif + + if ((modeAge > MAX_FINDSELF_TIME) || + (mNodeSpace.size() > MIN_OP_SPACE_SIZE)) + { //mMode = BITDHT_MGR_STATE_ACTIVE; mMode = BITDHT_MGR_STATE_REFRESH; mModeTS = now; } + break; case BITDHT_MGR_STATE_ACTIVE: @@ -177,6 +224,13 @@ void bdNodeManager::iteration() mMode = BITDHT_MGR_STATE_ACTIVE; mModeTS = now; +#ifdef DEBUG_MGR + std::cerr << "bdNodeManager::iteration(): Starting Query"; + std::cerr << std::endl; +#endif + + startQueries(); + #ifdef DEBUG_MGR std::cerr << "bdNodeManager::iteration(): Updating Stores"; std::cerr << std::endl; diff --git a/libbitdht/src/bitdht/bdmanager.h b/libbitdht/src/bitdht/bdmanager.h index e040d2ef3..f4012d4f2 100644 --- a/libbitdht/src/bitdht/bdmanager.h +++ b/libbitdht/src/bitdht/bdmanager.h @@ -70,12 +70,13 @@ class bdQueryPeer #define BITDHT_MGR_STATE_STARTUP 1 -#define BITDHT_MGR_STATE_ACTIVE 2 -#define BITDHT_MGR_STATE_REFRESH 3 -#define BITDHT_MGR_STATE_QUIET 4 +#define BITDHT_MGR_STATE_FINDSELF 2 +#define BITDHT_MGR_STATE_ACTIVE 3 +#define BITDHT_MGR_STATE_REFRESH 4 +#define BITDHT_MGR_STATE_QUIET 5 #define MAX_STARTUP_TIME 10 -#define MAX_REFRESH_TIME 30 +#define MAX_REFRESH_TIME 20 #define BITDHT_MGR_QUERY_FAILURE 1 #define BITDHT_MGR_QUERY_PEER_OFFLINE 2 @@ -128,6 +129,7 @@ int status(); int checkStatus(); int checkPingStatus(); int SearchOutOfDate(); +void startQueries(); std::map mActivePeers; std::list mCallbacks; diff --git a/libbitdht/src/bitdht/bdnode.cc b/libbitdht/src/bitdht/bdnode.cc index 956d5caf8..1b3ef82a9 100644 --- a/libbitdht/src/bitdht/bdnode.cc +++ b/libbitdht/src/bitdht/bdnode.cc @@ -53,6 +53,7 @@ * #define DEBUG_NODE_MSGOUT 1 ***/ +//#define DEBUG_NODE_MSGS 1 bdNode::bdNode(bdNodeId *ownId, std::string dhtVersion, std::string bootfile, bdDhtFunctions *fns) :mOwnId(*ownId), mNodeSpace(ownId, fns), mStore(bootfile, fns), mDhtVersion(dhtVersion), mFns(fns) @@ -215,8 +216,9 @@ void bdNode::iteration() genNewTransId(&transId); registerOutgoingMsg(&id, &transId, BITDHT_MSG_TYPE_FIND_NODE); -#ifdef DEBUG_NODE_MSGS msgout_find_node(&id, &transId, &targetNodeId); + +#ifdef DEBUG_NODE_MSGS std::cerr << "bdNode::iteration() Find Node Req for : "; mFns->bdPrintId(std::cerr, &id); std::cerr << " searching for : "; @@ -391,6 +393,39 @@ void bdNode::addPeer(const bdId *id, uint32_t peerflags) mStore.addStore(&peer); } + +#if 0 + // virtual so manager can do callback. + // peer flags defined in bdiface.h +void bdNode::PeerResponse(const bdId *id, const bdNodeId *target, uint32_t peerflags) +{ + +#ifdef DEBUG_NODE_ACTIONS + std::cerr << "bdNode::PeerResponse("; + mFns->bdPrintId(std::cerr, id); + std::cerr << ", target: "; + mFns->bdPrintNodeId(std::cerr, target); + fprintf(stderr, ")\n"); +#endif + + /* iterate through queries */ + std::list::iterator it; + for(it = mLocalQueries.begin(); it != mLocalQueries.end(); it++) + { + it->PeerResponse(id, target, peerflags); + } + + mNodeSpace.add_peer(id, peerflags); + + bdPeer peer; + peer.mPeerId = *id; + peer.mPeerFlags = peerflags; + peer.mLastRecvTime = time(NULL); + mStore.addStore(&peer); +} + +#endif + /************************************ Query Details *************************/ void bdNode::addQuery(const bdNodeId *id, uint32_t qflags) { @@ -481,27 +516,27 @@ void bdNode::processRemoteQuery() } msgout_reply_find_node(&(query.mId), &(query.mTransId), nearList); #ifdef DEBUG_NODE_MSGS - std::cerr << "bdNode::processRemoteQuery() Reply to Find Node: "; - mFns->bdPrintId(std::cerr, &(query.mId)); - std::cerr << " searching for : "; - mFns->bdPrintNodeId(std::cerr, &(query.mQuery)); - std::cerr << ", found " << nearest.size() << " nodes "; - std::cerr << std::endl; + std::cerr << "bdNode::processRemoteQuery() Reply to Find Node: "; + mFns->bdPrintId(std::cerr, &(query.mId)); + std::cerr << " searching for : "; + mFns->bdPrintNodeId(std::cerr, &(query.mQuery)); + std::cerr << ", found " << nearest.size() << " nodes "; + std::cerr << std::endl; #endif - mCounterReplyFindNode = 0; + mCounterReplyFindNode++; break; } case BD_QUERY_HASH: { #ifdef DEBUG_NODE_MSGS - std::cerr << "bdNode::processRemoteQuery() Reply to Query Node: "; - mFns->bdPrintId(std::cerr, &(query.mId)); - std::cerr << " TODO"; - std::cerr << std::endl; + std::cerr << "bdNode::processRemoteQuery() Reply to Query Node: "; + mFns->bdPrintId(std::cerr, &(query.mId)); + std::cerr << " TODO"; + std::cerr << std::endl; #endif - mCounterReplyQueryHash = 0; + mCounterReplyQueryHash++; /* TODO */ @@ -519,6 +554,16 @@ void bdNode::processRemoteQuery() } + else + { +#ifdef DEBUG_NODE_MSGS + std::cerr << "bdNode::processRemoteQuery() Query Too Old: Discarding: "; + mFns->bdPrintId(std::cerr, &(query.mId)); + std::cerr << std::endl; +#endif + } + + mRemoteQueries.pop_front(); } } diff --git a/libbitdht/src/bitdht/bdnode.h b/libbitdht/src/bitdht/bdnode.h index 909c3ff3a..dd4e88fe4 100644 --- a/libbitdht/src/bitdht/bdnode.h +++ b/libbitdht/src/bitdht/bdnode.h @@ -176,12 +176,15 @@ void recvPkt(char *msg, int len, struct sockaddr_in addr); void printQueries(); - private: + protected: bdNodeId mOwnId; bdId mLikelyOwnId; // Try to workout own id address. bdSpace mNodeSpace; + + private: + bdStore mStore; std::string mDhtVersion; diff --git a/libbitdht/src/bitdht/bdpeer.cc b/libbitdht/src/bitdht/bdpeer.cc index c8555d63e..744ebbbd3 100644 --- a/libbitdht/src/bitdht/bdpeer.cc +++ b/libbitdht/src/bitdht/bdpeer.cc @@ -734,3 +734,101 @@ int bdSpace::printDHT() return 1; } + +int bdSpace::calcSizes() +{ + std::vector::iterator it; + + /* little summary */ + unsigned long long sum = 0; + unsigned long long no_peers = 0; + uint32_t count = 0; + uint32_t totalcount = 0; + bool doPrint = false; + bool doAvg = false; + + int i = 0; + for(it = buckets.begin(); it != buckets.end(); it++, i++) + { + int size = it->entries.size(); + totalcount += size; + + int shift = BITDHT_KEY_BITLEN - i; + bool toBig = false; + + if (shift > BITDHT_ULLONG_BITS - mFns->bdBucketBitSize() - 1) + { + toBig = true; + shift = BITDHT_ULLONG_BITS - mFns->bdBucketBitSize() - 1; + } + unsigned long long no_nets = ((unsigned long long) 1 << shift); + + + /* use doPrint so it acts as a single switch */ + if (size && !doAvg && !doPrint) + { + doAvg = true; + } + + if (size && !doPrint) + { + doPrint = true; + } + + if (size == 0) + { + /* reset counters - if empty slot - to discount outliers in average */ + sum = 0; + no_peers = 0; + count = 0; + } + + if (!toBig) + { + no_peers = no_nets * size; + } + + if (doPrint && doAvg && !toBig) + { + if (size == mFns->bdNodesPerBucket()) + { + /* last average */ + doAvg = false; + } + if (no_peers != 0) + { + sum += no_peers; + count++; + } + } + } + + + mLastSize = totalcount; + if (count == 0) + { + mLastNetSize = 0; + } + else + { + mLastNetSize = sum / count; + } + + return 1; +} + +uint32_t bdSpace::size() +{ + calcSizes(); + return mLastSize; +} + +uint32_t bdSpace::netSize() +{ + calcSizes(); + return mLastNetSize; +} + + + + diff --git a/libbitdht/src/bitdht/bdpeer.h b/libbitdht/src/bitdht/bdpeer.h index 72070f722..42c035570 100644 --- a/libbitdht/src/bitdht/bdpeer.h +++ b/libbitdht/src/bitdht/bdpeer.h @@ -153,6 +153,10 @@ int out_of_date_peer(bdId &id); // side-effect updates, send flag on peer. int add_peer(const bdId *id, uint32_t mode); int printDHT(); +int calcSizes(); +uint32_t size(); +uint32_t netSize(); + /* to add later */ int updateOwnId(bdNodeId *newOwnId); @@ -161,6 +165,9 @@ int updateOwnId(bdNodeId *newOwnId); std::vector buckets; bdNodeId mOwnId; bdDhtFunctions *mFns; + + uint32_t mLastSize; + uint32_t mLastNetSize; }; diff --git a/libbitdht/src/bitdht/bdquery.cc b/libbitdht/src/bitdht/bdquery.cc index 515a44c98..7ab71a173 100644 --- a/libbitdht/src/bitdht/bdquery.cc +++ b/libbitdht/src/bitdht/bdquery.cc @@ -353,9 +353,11 @@ int bdQuery::addPeer(const bdId *id, uint32_t mode) } } +#ifdef DEBUG_QUERY fprintf(stderr, "bdQuery::addPeer(): Closer Peer!: "); mFns->bdPrintId(std::cerr, id); fprintf(stderr, "\n"); +#endif /* add it in */ bdPeer peer; @@ -502,9 +504,11 @@ int bdQuery::addPotentialPeer(const bdId *id, uint32_t mode) } } +#ifdef DEBUG_QUERY fprintf(stderr, "bdQuery::addPotentialPeer(): Closer Peer!: "); mFns->bdPrintId(std::cerr, id); fprintf(stderr, "\n"); +#endif /* add it in */ bdPeer peer; diff --git a/libbitdht/src/bitdht/bdstddht.h b/libbitdht/src/bitdht/bdstddht.h index feb4681f1..8e8bf47d8 100644 --- a/libbitdht/src/bitdht/bdstddht.h +++ b/libbitdht/src/bitdht/bdstddht.h @@ -29,7 +29,7 @@ #include "bitdht/bdiface.h" -#define BITDHT_STANDARD_BUCKET_SIZE 10 // 20 - too many per query. +#define BITDHT_STANDARD_BUCKET_SIZE 10 // 20 too many per query? #define BITDHT_STANDARD_BUCKET_SIZE_BITS 5 #define BITDHT_STANDARD_N_BUCKETS BITDHT_KEY_BITLEN diff --git a/libbitdht/src/tests/bdboot.txt b/libbitdht/src/tests/bdboot.txt index 5c8443cc2..94d386a6d 100644 --- a/libbitdht/src/tests/bdboot.txt +++ b/libbitdht/src/tests/bdboot.txt @@ -1,500 +1,500 @@ -92.12.39.6 16244 -89.212.217.239 28436 -78.245.141.29 24062 -205.237.249.60 60753 -62.21.68.140 29607 -61.64.105.113 25526 -91.124.60.138 29433 -218.224.131.30 40758 -83.240.70.102 36020 -85.217.136.19 12987 -117.200.98.12 52766 -78.96.190.94 62088 -178.223.87.21 10014 -80.2.47.245 15552 -90.170.111.137 13192 -188.226.10.2 34216 -90.227.88.106 54053 -85.75.149.20 28827 -69.148.26.74 40190 -95.57.8.245 13623 -77.78.137.242 34136 -88.198.31.48 51413 -114.177.196.25 23313 -112.143.5.152 10035 -201.210.35.114 1089 -114.166.35.238 20748 -89.23.16.155 21007 -82.209.158.227 29892 -71.154.218.34 32471 -66.68.12.56 42237 -77.250.248.129 35359 -86.123.20.27 59763 -88.189.215.153 47003 -212.115.243.128 35331 -68.33.231.30 4041 -174.3.187.193 17999 -61.73.159.158 62930 -202.106.63.129 6881 -121.254.72.205 18068 -94.27.71.190 45882 -76.221.142.55 8106 -118.243.253.168 51810 -83.82.215.49 27067 -99.56.61.56 16881 -93.100.178.63 63982 -89.124.38.17 7719 -94.96.39.71 14533 -85.224.48.124 19157 -83.149.3.111 2212 -165.132.28.29 22553 -210.6.190.167 9258 -183.89.42.239 10211 -76.11.65.212 11952 -173.59.11.238 49662 -85.187.184.104 11066 -82.44.90.159 22344 -188.27.114.217 32171 -89.31.112.26 51780 -124.218.29.192 16642 -78.130.222.130 43658 -74.105.211.205 48819 -114.168.150.173 55910 -96.51.33.140 32329 -190.204.29.202 54450 -80.240.217.180 56605 -72.229.227.66 51413 -81.147.10.199 60224 -60.50.255.65 27500 -82.210.154.254 49074 -95.178.165.85 22073 -173.74.61.121 20296 -189.172.91.63 32862 -83.149.3.87 49422 -221.118.228.240 19062 -113.167.211.162 26491 -82.75.83.7 32231 -184.59.26.110 57394 -75.72.139.138 57619 -187.112.195.219 35326 -59.171.53.80 6885 -89.132.238.128 14064 -79.119.179.173 51847 -94.232.9.137 22515 -93.183.158.243 33177 -190.142.237.235 57012 -81.225.3.15 52735 -87.70.134.32 35691 -125.34.10.134 16881 -72.252.147.147 44561 -81.132.137.167 64163 -188.17.186.176 20143 -122.173.123.126 10059 -84.124.240.134 13910 -76.65.82.185 53620 -92.83.123.164 10312 -115.118.204.63 23820 -118.172.176.216 16326 -81.98.36.18 37915 -111.243.22.108 19934 -94.10.204.178 18391 -213.120.100.133 64504 -95.42.85.28 22290 -75.65.154.63 49384 -93.185.177.162 26017 -71.195.178.231 29656 -83.97.66.17 36084 -88.205.175.143 52773 -78.8.223.23 35068 -195.18.14.209 42232 -175.144.254.70 21025 -96.51.132.228 31985 -211.224.68.157 38486 -84.3.119.43 37819 -64.120.255.60 6860 -64.120.255.40 6840 -88.112.86.60 6881 -85.15.90.39 62239 -203.219.136.214 12386 -24.86.186.73 35444 -98.117.17.53 47127 -71.236.116.230 53266 -79.88.52.95 58810 -70.26.249.175 12712 -84.238.32.93 39000 -142.177.138.67 42608 -193.227.230.38 25998 -159.148.201.3 51279 -81.101.108.205 55319 -92.112.239.251 54423 -89.32.161.80 20534 -92.134.174.244 63288 -76.99.68.51 50009 -82.13.104.126 60394 -190.254.250.39 16039 -95.58.121.74 59312 -174.88.26.132 10167 -109.96.138.146 23894 -186.19.235.217 25339 -109.192.92.151 42637 -87.239.33.5 1907 -95.154.176.23 46887 -94.137.206.211 50526 -210.146.116.72 62780 -218.171.243.202 9133 -61.244.211.243 8756 -91.95.25.150 47353 -174.5.75.103 25772 -118.167.114.241 51001 -75.56.207.235 26166 -92.30.126.173 18921 -114.36.64.2 17738 -78.29.165.84 52760 -173.212.206.213 6813 -187.59.109.115 37484 -85.22.8.175 52857 -126.109.206.4 64327 -82.210.188.127 20329 -95.165.163.114 23448 -83.153.209.5 17211 -76.29.235.184 17801 -66.177.225.54 55952 -59.26.76.120 49911 -70.26.207.239 50591 -87.2.17.117 18586 -81.102.125.77 40848 -109.104.187.38 13937 -95.68.94.144 16302 -85.229.75.44 35060 -76.92.217.64 26272 -125.1.208.157 40393 -92.27.172.45 12303 -140.113.179.143 14232 -81.191.145.10 58334 -70.53.178.100 9472 -126.114.208.43 50784 -183.178.66.202 24910 -79.101.206.136 10361 -90.136.101.48 41749 -188.60.106.125 39889 -217.209.12.220 20544 -90.190.114.159 113 -95.71.127.32 33037 -61.12.222.55 13064 -77.229.176.143 27625 -81.23.166.136 22829 -78.29.119.181 21344 -67.171.29.15 40385 -122.118.176.147 19139 -190.235.210.249 14178 -76.11.109.99 44390 -99.253.38.74 19441 -62.169.123.28 35746 -82.132.23.195 52333 -109.111.156.186 17673 -82.239.40.163 16624 -90.213.246.144 9402 -83.227.156.194 26021 -95.79.96.241 15528 -74.192.71.122 48397 -89.204.102.106 15739 -90.191.179.50 16191 -122.128.7.158 13056 -92.112.175.123 57663 -91.126.193.107 47880 -109.213.51.102 29726 -94.242.39.161 52574 -94.242.146.69 12718 -71.162.145.34 29292 -69.124.254.45 22881 -150.241.243.9 11285 -93.186.210.168 10720 -178.162.183.230 6821 -126.129.78.39 12196 -220.104.150.203 14433 -188.231.161.11 15100 -92.37.60.58 36471 -91.200.201.18 30249 -90.224.113.160 14137 -188.168.149.62 32100 -89.85.101.239 49653 -85.137.231.20 27117 -109.173.31.9 35713 -95.93.164.200 30478 -195.134.67.116 47054 -77.204.69.245 20415 -118.166.138.60 20047 -69.226.208.233 58693 -178.162.183.229 6821 -147.102.101.57 31117 -99.155.75.169 27252 -95.95.131.196 53008 -86.135.175.65 22570 -96.248.14.215 54714 -99.114.93.62 6881 -218.101.254.179 20865 -122.29.166.207 20125 -24.138.175.76 54343 -74.59.81.208 52162 -118.237.9.41 26975 -125.27.16.14 24154 -82.42.153.229 6881 -72.83.129.103 13768 -109.121.138.103 16757 -99.49.108.135 61808 -174.16.53.212 10881 -208.96.64.154 8545 -70.233.142.241 10844 -218.250.92.55 24465 -109.185.145.116 46074 -71.233.253.247 52632 -69.199.158.242 1046 -61.237.150.128 16001 -113.167.87.35 23472 -92.80.179.29 46605 -95.174.221.82 13219 -188.51.50.221 45298 -187.58.97.75 29532 -77.31.99.230 12300 -109.254.58.59 16275 -78.56.58.195 20217 -122.167.251.69 10907 -60.51.126.182 10476 -178.128.11.174 61849 -218.212.172.84 15730 -211.2.124.206 21145 -109.228.129.162 21836 -92.81.66.102 14464 -216.59.6.151 49161 -217.9.228.38 52626 -89.102.21.149 59205 -94.236.135.235 14741 -178.95.49.31 35059 -95.222.241.5 20086 -93.12.155.205 13490 -84.189.184.178 27337 -95.37.6.182 80 -77.225.25.74 21516 -123.205.25.101 24874 -211.49.2.134 51699 -84.80.253.42 58301 -95.190.84.211 23514 -77.85.121.195 19864 -80.81.52.236 11588 -114.78.108.245 18763 -87.117.193.75 59052 -93.86.43.29 18717 -76.200.119.40 33598 -202.91.148.53 61417 -117.199.66.185 59509 -83.213.159.14 61673 -78.69.137.44 51413 -94.195.125.8 16194 -74.60.226.19 39582 -118.216.216.189 31485 -61.206.209.175 19759 -85.230.109.209 6885 -85.230.109.209 6882 -70.161.168.143 28026 -186.89.208.31 29977 -76.170.201.149 58022 -188.168.37.213 26920 -220.87.28.165 19422 -90.196.0.115 8793 -95.25.118.39 43292 -89.89.184.28 45594 -2.94.21.224 21167 -94.24.180.164 51413 -69.22.210.60 44108 -99.3.36.205 29624 -87.118.159.137 32214 -78.150.70.194 11605 -118.169.51.195 63655 -109.87.209.181 35691 -88.168.220.170 16515 -83.21.98.78 23532 -84.228.30.163 26271 -71.201.250.18 62141 -75.155.68.157 12004 -98.244.32.255 27000 -187.22.84.8 13362 -67.174.144.251 48131 -59.93.116.98 60592 -219.40.160.200 11266 -188.230.68.133 64234 -93.103.76.133 62482 -82.35.193.163 49367 -82.199.200.214 40635 -79.121.55.130 33416 -97.102.6.239 59824 -69.150.73.121 48195 -99.250.69.227 25017 -178.83.250.159 62178 -75.65.95.130 24792 -77.70.96.235 48474 -76.173.74.239 10826 -98.251.67.38 15801 -123.201.200.33 54012 -213.191.30.253 12135 -125.164.105.45 14264 -188.54.96.108 13874 -98.225.190.156 63350 -70.81.211.190 39510 -117.201.19.29 29960 -69.221.9.204 36204 -82.226.93.109 52049 -94.21.163.155 6881 -173.72.2.69 58839 -173.72.2.69 58838 -174.115.207.53 40067 -24.200.200.102 11693 -81.182.59.31 26133 -212.92.232.102 36439 -78.58.104.112 49574 -79.100.174.203 18249 -91.123.214.17 47577 -70.55.196.137 60603 -83.108.244.62 59851 -61.5.241.219 59550 -220.118.223.179 55487 -80.184.76.198 46930 -95.180.177.64 20749 -190.51.60.70 13430 -178.253.74.146 57795 -221.161.5.96 21381 -95.83.24.44 58220 -61.64.85.57 8871 -115.241.141.104 31440 -41.218.245.100 10064 -95.84.46.158 40663 -83.154.58.197 39055 -67.193.111.176 38941 -84.251.15.143 51413 -78.144.58.92 10112 -120.60.15.173 13419 -78.130.227.226 55407 -184.91.54.179 57218 -213.85.190.254 18216 -85.220.114.208 52900 -142.162.24.166 37627 -77.232.0.135 51921 -69.249.169.177 51691 -76.213.243.148 28855 -203.223.253.214 7770 -78.229.62.160 14415 +85.56.139.56 58749 +71.196.189.66 43541 +60.54.39.89 18756 +112.207.137.130 45682 +84.115.175.203 38839 +85.10.16.82 42070 +61.116.102.55 58995 +87.56.74.190 51804 +83.31.49.246 49408 +88.132.33.234 10889 +93.148.69.177 64396 +95.140.7.82 45643 +84.42.245.181 62910 +71.172.80.247 16639 +77.41.69.144 58436 +189.239.185.252 63091 +187.114.203.208 18571 +70.75.204.73 34767 +78.83.106.252 32836 +95.139.113.36 30816 +189.60.98.121 38345 +220.132.72.212 27085 +70.157.138.186 23602 +189.136.163.215 22838 +89.33.94.80 18377 +79.111.165.2 19211 +92.24.189.239 45717 +193.25.104.85 45766 +59.93.93.23 39382 +89.18.194.180 53230 +116.71.218.45 10165 +156.34.28.98 45682 +203.206.53.27 10358 +41.235.61.5 16498 +86.138.70.43 14685 +183.14.156.148 16001 +85.107.216.225 61077 +79.89.31.240 23687 +187.67.26.74 20595 +24.87.88.9 49947 +222.131.10.83 5070 +212.117.169.181 55788 +80.64.65.14 61551 +81.232.90.184 43611 +89.180.106.123 51337 +71.180.229.140 25107 +41.238.203.245 42311 +71.227.139.224 32093 +123.115.241.29 8808 +62.45.98.176 6881 +92.154.104.90 49500 +78.60.71.95 39201 +89.113.24.69 41489 +98.222.41.217 55836 +98.242.242.83 25455 +99.41.207.6 58729 +96.250.33.132 50343 +93.80.210.92 53838 +94.236.129.131 46060 +83.142.210.17 17901 +93.152.162.14 42404 +71.82.210.81 26642 +116.74.67.240 42370 +98.225.224.13 16321 +89.179.79.75 62045 +24.250.154.26 52769 +72.39.29.128 22844 +194.186.188.48 63808 +67.172.251.253 22076 +92.13.58.11 55202 +218.44.104.181 59116 +91.195.208.8 6881 +66.197.165.38 6821 +70.160.28.191 29602 +24.15.202.167 15309 +118.128.194.3 35703 +92.27.69.69 11399 +113.169.9.165 20302 +41.204.126.178 11275 +66.212.214.127 22767 +174.94.79.203 63317 +83.84.130.254 2302 +88.203.213.216 9463 +173.174.10.130 39909 +114.24.151.183 8262 +121.164.15.29 13396 +125.26.125.11 16915 +95.130.12.19 61050 +95.79.35.108 54704 +62.30.225.190 10398 +79.69.156.88 11179 +76.28.227.60 10277 +69.249.116.97 60199 +118.100.44.109 48673 +114.47.173.140 12818 +79.116.217.129 36525 +64.46.21.119 30393 +209.82.182.182 46512 +95.56.18.8 55061 +24.210.149.136 45504 +189.110.174.160 42176 +210.159.160.128 43535 +119.179.53.14 16001 +212.63.215.33 49001 +78.61.116.247 56061 +212.80.48.31 11175 +77.49.170.106 30929 +211.187.166.100 46368 +186.45.162.37 54458 +84.52.32.176 22994 +89.34.93.54 23540 +213.151.5.123 21520 +173.72.137.187 27512 +212.75.18.238 9486 +212.21.20.244 24825 +95.7.164.167 23502 +116.0.246.100 11209 +58.153.12.250 5067 +77.126.4.157 63977 +79.81.134.243 12275 +81.89.88.35 20576 +188.19.198.174 9853 +118.233.55.189 14280 +95.155.118.39 9334 +83.97.66.151 12608 +202.125.62.131 7444 +61.57.105.113 22728 +81.82.115.46 43952 +79.111.74.223 45987 +60.56.221.89 1069 +109.74.209.168 62393 +76.224.27.8 56053 +79.163.179.77 26850 +189.32.67.235 63258 +75.84.157.242 15877 +142.177.246.95 59112 +116.2.32.161 20124 +188.126.46.50 44950 +95.179.25.105 20206 +95.68.47.164 30021 +58.123.157.201 26652 +201.153.228.202 21677 +121.44.92.49 46001 +80.98.231.47 26348 +77.81.214.54 55140 +188.2.177.127 18893 +77.106.248.215 61010 +76.189.218.104 31714 +92.40.218.25 17436 +79.11.74.201 25511 +124.217.18.33 52665 +110.139.49.2 10021 +116.75.93.225 17753 +91.154.247.194 47519 +85.157.34.95 39877 +72.12.147.238 48200 +87.207.198.164 57380 +76.88.103.96 6688 +69.156.182.48 9745 +174.118.75.21 57528 +78.131.114.243 35625 +178.162.183.226 6821 +85.120.227.7 39679 +77.108.227.234 46150 +67.21.102.65 61696 +90.20.253.243 17134 +77.106.112.192 63044 +89.132.70.154 54892 +80.190.139.91 6892 +89.228.34.41 11402 +99.16.45.162 58728 +114.169.35.228 10609 +119.247.254.79 5294 +62.194.214.11 53956 +86.140.220.164 63805 +89.209.84.223 45645 +69.61.67.154 51413 +71.176.151.158 34312 +87.252.246.164 10004 +76.83.2.223 51867 +174.100.244.175 32360 +174.6.184.150 55074 +122.116.144.204 6881 +188.126.95.124 51422 +178.40.80.76 14409 +71.167.112.211 6881 +204.210.194.241 6881 +99.0.82.216 51494 +109.124.16.234 11636 +220.131.73.187 20718 +178.88.8.252 56292 +83.87.238.214 6881 +87.78.183.103 24204 +92.249.133.6 6754 +81.225.216.54 53358 +89.166.108.48 47175 +109.194.46.208 80 +24.252.70.24 52516 +78.154.10.6 35981 +99.1.110.3 22440 +201.53.55.59 61292 +95.58.92.65 48802 +188.134.14.120 9089 +78.72.106.34 53188 +89.178.134.24 64389 +76.215.117.211 51413 +114.27.89.171 43349 +80.99.42.137 10566 +187.20.103.130 16333 +213.85.141.144 46456 +84.86.167.83 49250 +85.186.48.10 25274 +70.48.43.93 59364 +94.31.232.73 47220 +24.12.33.224 25976 +114.154.228.24 14512 +202.67.20.232 13380 +94.15.164.174 45657 +151.56.153.203 10006 +92.243.177.118 26338 +95.71.69.196 25226 +98.117.36.191 56023 +209.222.54.23 6881 +79.141.52.134 48614 +82.4.38.3 60580 +77.160.150.63 12348 +95.132.188.142 16747 +89.123.135.44 12967 +24.242.52.51 41199 +84.3.164.209 38059 +67.61.48.132 51772 +75.51.92.53 46369 +61.56.132.76 23439 +112.104.6.195 21025 +78.116.106.245 29797 +62.205.245.195 43207 +188.24.228.246 48433 +188.241.183.77 41892 +95.78.151.107 28055 +91.144.104.160 40122 +203.135.35.68 16058 +94.180.34.231 18040 +216.186.213.183 34057 +182.88.83.202 6881 +188.163.76.190 51413 +77.71.45.107 63222 +71.63.16.85 44949 +68.215.227.132 50513 +62.228.103.223 11249 +219.112.140.25 16297 +118.168.199.192 21018 +89.103.74.81 11790 +77.110.201.72 55144 +87.21.255.123 32743 +72.39.132.149 11229 +178.49.20.218 42235 +87.121.209.168 27230 +118.108.135.76 22708 +112.144.249.69 17601 +85.210.192.179 53929 +95.143.216.174 25887 +95.43.73.227 25933 +208.70.61.203 18073 +70.178.206.42 24881 +189.24.23.171 60416 +62.201.119.41 61849 +87.206.75.146 6881 +78.176.207.54 6881 +78.163.164.237 24362 +99.190.51.250 59551 +76.252.236.215 19134 +98.242.28.163 26145 +99.50.200.151 53564 +220.98.144.232 22922 +79.113.121.141 35771 +98.148.246.127 50300 +142.68.210.47 63653 +218.168.225.229 22678 +88.162.153.3 45698 +109.87.83.228 48931 +92.104.49.179 8500 +173.32.63.117 61054 +87.121.173.150 6148 +83.251.66.66 65052 +91.154.137.162 11984 +80.171.58.170 22797 +94.27.109.220 36053 67.215.242.138 6881 -82.149.25.41 46820 -116.82.89.250 25571 -60.50.82.192 12787 -187.114.133.241 10549 -109.120.6.96 21469 -92.124.180.230 23079 -24.19.253.77 48092 -58.190.47.190 27512 -219.116.160.55 25208 -94.123.195.173 17434 -125.54.101.116 57138 -85.230.109.209 6884 -92.84.191.232 10293 -174.50.54.21 32019 -99.229.109.124 6888 -87.110.153.41 56759 -178.187.66.20 17438 -89.218.103.57 19107 -114.44.18.94 1529 -109.111.152.211 35691 -77.122.1.218 30237 -82.56.51.220 59015 -82.245.238.156 39545 -68.44.185.187 29888 -83.217.190.31 39457 -81.201.56.15 6881 -188.186.68.15 42452 -109.160.57.143 11947 -151.57.36.222 57980 -95.59.24.64 26897 -78.13.96.106 9091 -194.44.203.120 60457 -86.63.247.225 14760 -24.11.181.218 54587 -68.40.4.78 38131 -70.26.98.163 10009 -187.104.240.6 27396 -41.227.4.6 53989 -69.221.61.72 63861 -86.7.2.171 25589 -70.73.113.97 28081 -188.212.192.150 44909 -82.246.253.38 6900 -66.227.154.68 55316 -210.50.200.115 6881 -89.211.201.1 47214 -71.145.142.137 44293 -109.60.217.204 9000 -94.241.206.69 20091 -88.135.131.100 58407 -98.179.26.65 10197 -180.146.24.30 24733 -94.66.189.31 34843 -125.26.41.6 44723 -77.50.185.98 45240 -193.43.222.175 15977 -24.34.126.186 59769 -115.87.124.125 53022 -67.177.209.198 32814 -93.102.81.243 20634 -62.121.85.134 6881 -67.163.87.22 6881 -173.173.24.204 17165 -189.19.28.184 2042 -84.100.62.233 52448 -88.169.213.101 35608 -109.255.144.87 8080 -217.131.178.155 31638 -193.43.255.89 12451 -173.57.57.106 41416 -94.62.199.171 15566 -71.177.102.167 37973 -59.27.33.209 51801 -89.178.242.209 27670 -86.132.130.195 16438 -76.108.128.141 58775 +173.50.147.111 55669 +67.240.191.70 53081 +118.160.53.83 12731 +216.138.216.227 49001 +77.93.16.43 35431 +178.82.201.203 12055 +68.62.10.72 22867 +88.177.195.185 20299 +187.16.62.58 63388 +121.80.39.231 18252 +213.112.106.243 18786 +79.113.182.121 42808 +88.184.85.157 40478 +82.119.65.229 41614 +24.35.86.183 48539 +67.183.139.6 29721 +121.124.190.173 50282 +117.194.194.73 13257 +110.175.157.60 12000 +93.102.129.104 36854 +92.104.22.153 6881 +68.203.251.86 18992 +173.51.127.134 33785 +98.232.90.6 53436 +59.98.161.236 62056 +201.87.32.172 36138 +88.115.78.139 15273 +123.117.107.29 19970 +93.96.190.204 6883 +83.248.90.115 53778 +78.96.174.224 60387 +68.40.87.11 37253 +70.178.210.213 38087 +77.101.133.246 14789 +115.143.47.172 30429 +93.100.92.224 27243 +80.80.153.98 11832 +91.206.4.9 3333 +188.35.8.236 62459 +86.107.79.233 49905 +24.22.195.49 6881 +76.101.135.11 20009 +222.164.18.139 6881 +193.106.25.130 57020 +79.107.183.240 45683 +71.229.83.233 45682 +76.88.94.229 37557 +76.21.110.223 51413 +99.40.159.122 25946 +88.173.24.47 41595 +67.149.36.107 40347 +201.155.152.51 10196 +118.128.22.37 37251 +95.143.25.198 47616 +92.144.60.92 13751 +86.197.129.179 47067 +99.66.5.48 21364 +99.48.229.94 25361 +121.254.45.84 6800 +188.248.58.21 50340 +95.26.55.82 59164 +62.221.151.184 20536 +109.201.74.159 10207 +98.254.244.165 56359 +203.185.36.12 19872 +210.73.1.92 12469 +218.171.240.219 10236 +173.73.187.215 37840 +86.10.229.246 27857 +119.247.45.173 10745 +79.113.175.185 50877 +95.31.11.189 6886 +90.49.27.240 50510 +188.4.197.57 59491 +84.101.189.175 19015 +90.180.166.149 6880 +67.189.42.213 53943 +113.199.242.93 35720 +183.179.97.20 24840 +121.45.215.192 58823 +121.219.253.112 31161 +118.137.194.171 26705 +210.6.173.121 14972 +87.194.243.159 64670 +81.236.226.106 6882 +83.77.171.200 15846 +84.52.63.250 14255 67.215.242.139 6881 -84.246.95.179 43652 -88.222.154.187 62265 -111.243.28.27 55276 -122.164.144.53 18463 -210.6.181.220 24282 -91.153.197.239 2104 -77.210.249.40 14915 -109.86.76.157 47312 -82.193.158.49 8807 -115.43.165.207 4713 -94.41.128.202 49440 -83.254.22.62 28881 -62.21.16.139 51172 -147.102.102.94 62957 -62.98.164.48 10950 -117.194.32.225 60090 -187.57.200.195 33839 -190.177.176.192 49799 -88.181.170.74 53822 -97.97.117.10 38628 -97.120.33.227 57680 -61.4.170.187 17790 -78.144.120.92 20965 -70.139.176.169 27008 -92.115.180.186 35691 -174.142.32.120 51413 -97.85.57.37 34092 -84.90.10.205 24820 -83.149.3.23 59982 -98.14.97.232 36193 -98.192.164.25 17489 -210.124.128.139 33819 -195.234.110.226 39347 -99.9.186.124 58889 -115.242.8.83 9388 -88.189.81.247 14965 -87.194.85.120 50941 -84.50.22.179 63089 +173.75.218.211 63205 +122.118.67.231 23915 +83.9.39.33 22798 +94.69.249.98 48057 +86.13.80.190 51326 +88.106.69.215 11924 +212.242.219.216 47000 +95.76.50.171 19698 +88.89.180.142 10766 +77.45.166.176 32802 +24.14.73.12 40442 +123.203.168.108 16828 +110.4.246.105 15045 +88.215.184.26 52757 +74.68.145.105 11524 +112.70.90.34 7793 +89.216.145.232 57343 +86.207.79.244 19560 +67.86.153.146 61010 +92.83.127.98 18709 +116.15.128.30 9998 +203.59.10.85 22847 +182.93.10.208 13054 +79.17.30.127 32896 +123.118.137.119 25421 +219.175.138.61 23739 +95.96.188.23 12400 +188.134.67.102 6882 +24.98.183.64 57540 +93.123.41.127 23436 +173.87.8.115 22866 +200.29.72.19 46935 +189.19.100.69 1224 +220.102.166.142 27156 +81.106.247.102 19244 +82.25.111.214 21311 +193.201.198.253 63408 +94.47.188.106 56342 +173.71.152.93 50989 +70.119.159.158 62727 +86.176.212.56 53046 +74.78.254.79 55775 +124.37.161.214 10990 +123.204.252.197 10037 +78.233.97.234 28751 +78.106.52.107 15048 +89.211.154.147 57399 +78.92.20.255 14850 +76.22.26.195 10269 +60.46.193.129 20326 +89.132.136.252 51385 +122.217.69.120 21438 +24.184.162.88 20212 +71.139.186.245 31114 +93.94.21.27 15252 +87.70.142.8 15960 +98.135.71.79 29008 +117.47.90.194 10016 +99.139.154.78 8877 +85.12.239.118 64317 +76.65.18.45 7700 +87.224.254.21 25388 +93.84.84.155 51757 +84.124.205.238 23020 +221.46.51.137 22507 +213.16.120.166 54701 +92.81.249.11 11185 +77.54.70.32 35815 +60.244.140.57 12687 +109.165.40.174 23806 +147.46.216.167 50410 +99.57.47.134 19965 +180.25.22.176 40005 +71.12.16.186 11422 +24.49.177.89 40029 +88.141.135.252 58810 +92.112.66.105 55311 +111.249.218.164 56509 +68.149.168.121 64750 +41.223.241.48 38494 +80.99.189.105 50001 +95.32.38.47 31175 +213.125.29.122 6881 +92.28.148.131 22902 +114.42.222.199 22443 +175.115.187.64 13038 +114.44.107.200 17500 +81.50.148.235 64081 +88.230.2.13 41680 +60.49.48.177 21184 +86.43.195.228 39164 +88.237.29.153 14665 +86.126.237.42 49627 +68.37.160.28 29734 +123.123.0.174 16330 +84.215.70.237 25116 +200.118.51.152 23106 +92.62.116.14 38298 +189.115.242.12 16373 +86.126.244.83 10358 +93.86.94.198 12077 +220.134.70.7 57682 +81.101.108.205 62082 +80.48.112.175 24917 +94.27.95.56 25376 +41.239.99.14 16942 +89.190.216.86 53241 +58.152.99.134 16001 +124.181.115.135 34574 +110.226.38.196 11614 +117.254.176.138 24325 +67.164.200.224 40281 +94.125.247.162 22331 +213.130.92.78 32973 +70.26.64.139 26358 +219.70.171.198 18038 +189.78.31.162 39736 +86.184.173.124 63265 +118.170.7.23 26814 +186.45.139.74 12756 +116.88.194.226 8883 +114.47.171.209 21087 +76.177.235.15 13961 +178.164.177.154 8929