diff options
Diffstat (limited to 'src')
68 files changed, 9317 insertions, 4166 deletions
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c index 1146d02168..31eb4ac496 100644 --- a/src/common/compat_libevent.c +++ b/src/common/compat_libevent.c @@ -280,6 +280,15 @@ tor_gettimeofday_cache_set(const struct timeval *tv) tor_assert(tv); memcpy(&cached_time_hires, tv, sizeof(*tv)); } + +/** For testing: called post-fork to make libevent reinitialize + * kernel structures. */ +void +tor_libevent_postfork(void) +{ + int r = event_reinit(tor_libevent_get_base()); + tor_assert(r == 0); +} #endif #endif diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index 96c48d53a1..904938415c 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -54,6 +54,7 @@ void tor_gettimeofday_cached(struct timeval *tv); void tor_gettimeofday_cache_clear(void); #ifdef TOR_UNIT_TESTS void tor_gettimeofday_cache_set(const struct timeval *tv); +void tor_libevent_postfork(void); #endif #ifdef COMPAT_LIBEVENT_PRIVATE diff --git a/src/common/compress.c b/src/common/compress.c index 6fe4569868..6513029f9c 100644 --- a/src/common/compress.c +++ b/src/common/compress.c @@ -343,6 +343,32 @@ compression_method_get_name(compress_method_t method) return NULL; } +/** Table of compression human readable method names. */ +static const struct { + compress_method_t method; + const char *name; +} compression_method_human_names[] = { + { NO_METHOD, "uncompressed" }, + { GZIP_METHOD, "gzipped" }, + { ZLIB_METHOD, "deflated" }, + { LZMA_METHOD, "LZMA compressed" }, + { ZSTD_METHOD, "Zstandard compressed" }, + { UNKNOWN_METHOD, "unknown encoding" }, +}; + +/** Return a human readable string representation of the compression method + * <b>method</b>, or NULL if the method isn't recognized. */ +const char * +compression_method_get_human_name(compress_method_t method) +{ + unsigned i; + for (i = 0; i < ARRAY_LENGTH(compression_method_human_names); ++i) { + if (method == compression_method_human_names[i].method) + return compression_method_human_names[i].name; + } + return NULL; +} + /** Return the compression method represented by the string <b>name</b>, or * UNKNOWN_METHOD if the string isn't recognized. */ compress_method_t diff --git a/src/common/compress.h b/src/common/compress.h index 5b47c5d458..7c0dc14061 100644 --- a/src/common/compress.h +++ b/src/common/compress.h @@ -50,6 +50,7 @@ int tor_compress_is_compression_bomb(size_t size_in, size_t size_out); int tor_compress_supports_method(compress_method_t method); unsigned tor_compress_get_supported_method_bitmask(void); const char * compression_method_get_name(compress_method_t method); +const char *compression_method_get_human_name(compress_method_t method); compress_method_t compression_method_get_by_name(const char *name); const char *tor_compress_version_str(compress_method_t method); diff --git a/src/common/sandbox.c b/src/common/sandbox.c index ab2de52592..7826b2d40c 100644 --- a/src/common/sandbox.c +++ b/src/common/sandbox.c @@ -155,6 +155,7 @@ static int filter_nopar_gen[] = { #ifdef __NR_getgid32 SCMP_SYS(getgid32), #endif + SCMP_SYS(getpid), #ifdef __NR_getrlimit SCMP_SYS(getrlimit), #endif diff --git a/src/config/geoip b/src/config/geoip index 4be9acd55a..02a4b31630 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on April 4 2017 Maxmind GeoLite2 Country +# Last updated based on May 2 2017 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -311,7 +311,9 @@ 85395456,85395711,TR 85395968,85396223,LU 85396480,85397503,ES +85398016,85398047,NO 85398528,85399039,SA +85399040,85399047,CH 85399552,85400063,FR 85400576,85400583,ES 85401600,85403647,IT @@ -332,8 +334,7 @@ 85733376,85737471,GB 85737472,85753855,DE 85753856,85770239,IL -85770240,85778431,ES -85778432,85786623,DE +85770240,85786623,IR 85786624,85852159,IL 85852160,86015999,AE 86016000,86018047,BG @@ -836,7 +837,9 @@ 87762432,87762943,UA 87762944,87763967,KZ 87763968,87766527,RU -87766528,87818239,CZ +87766528,87769087,CZ +87769088,87777279,ES +87777280,87818239,CZ 87818240,87883775,PL 87883776,87885823,IT 87885824,87889919,RU @@ -865,13 +868,393 @@ 87957504,87957759,ES 87957760,87958527,GB 87958528,87959039,CZ -87959040,87959551,NL +87959040,87959539,NL +87959540,87959547,BE +87959548,87959551,NL 87959552,87960063,DE 87960064,87960575,GB 87960576,87962111,US 87962112,87962623,GB 87962624,87963647,CZ -87963648,87965695,GB +87963648,87963651,US +87963652,87963655,AS +87963656,87963659,AI +87963660,87963663,AG +87963664,87963667,AR +87963668,87963671,AW +87963672,87963675,BS +87963676,87963679,BB +87963680,87963683,BZ +87963684,87963687,BM +87963688,87963691,BO +87963692,87963695,VG +87963696,87963699,KY +87963700,87963703,CL +87963704,87963707,CN +87963708,87963711,CO +87963712,87963715,CK +87963716,87963719,CR +87963720,87963723,CU +87963724,87963727,DM +87963728,87963731,DO +87963732,87963735,EC +87963736,87963739,SV +87963740,87963743,FK +87963744,87963747,FJ +87963748,87963751,GD +87963752,87963755,GP +87963756,87963759,GU +87963760,87963763,GT +87963764,87963767,GY +87963768,87963771,HT +87963772,87963775,HN +87963776,87963779,JM +87963780,87963783,KI +87963784,87963787,MS +87963788,87963791,NR +87963792,87963795,NC +87963796,87963799,NI +87963800,87963803,NU +87963804,87963807,NF +87963808,87963811,KP +87963812,87963815,PW +87963816,87963819,PA +87963820,87963823,PG +87963824,87963827,PY +87963828,87963831,PE +87963832,87963835,PH +87963836,87963839,PN +87963840,87963843,PR +87963844,87963847,KN +87963848,87963851,LC +87963852,87963855,VC +87963856,87963859,WS +87963860,87963863,SB +87963864,87963867,SR +87963868,87963871,SZ +87963872,87963875,TK +87963876,87963879,TO +87963880,87963883,TT +87963884,87963887,TC +87963888,87963891,TV +87963892,87963895,UY +87963896,87963911,US +87963912,87963915,DE +87963916,87963955,US +87963956,87963959,CA +87963960,87963963,GB +87963964,87963999,US +87964000,87964003,VU +87964004,87964007,VE +87964008,87964163,US +87964164,87964167,AS +87964168,87964171,AI +87964172,87964175,AG +87964176,87964179,AR +87964180,87964183,AW +87964184,87964187,BS +87964188,87964191,BB +87964192,87964195,BZ +87964196,87964199,BM +87964200,87964203,BO +87964204,87964207,VG +87964208,87964211,KY +87964212,87964215,CL +87964216,87964219,CO +87964220,87964223,CK +87964224,87964227,CR +87964228,87964231,CU +87964232,87964235,DM +87964236,87964239,DO +87964240,87964243,EC +87964244,87964247,SV +87964248,87964251,FK +87964252,87964255,FJ +87964256,87964259,GD +87964260,87964263,GP +87964264,87964267,GT +87964268,87964271,GY +87964272,87964275,HT +87964276,87964279,HN +87964280,87964283,JM +87964284,87964287,KI +87964288,87964291,MS +87964292,87964295,NR +87964296,87964299,NC +87964300,87964303,NI +87964304,87964307,NU +87964308,87964311,NF +87964312,87964315,PA +87964316,87964319,PY +87964320,87964323,PE +87964324,87964327,PN +87964328,87964331,PR +87964332,87964335,KN +87964336,87964339,LC +87964340,87964343,PM +87964344,87964347,VC +87964348,87964351,WS +87964352,87964355,SB +87964356,87964359,SR +87964360,87964363,SZ +87964364,87964367,TK +87964368,87964371,TO +87964372,87964375,TT +87964376,87964379,TC +87964380,87964383,TV +87964384,87964387,UY +87964388,87964403,US +87964404,87964407,DE +87964408,87964447,US +87964448,87964451,CA +87964452,87964455,GB +87964456,87964491,US +87964492,87964495,VU +87964496,87964499,VE +87964500,87964671,US +87964672,87964675,CZ +87964676,87964679,AD +87964680,87964683,AO +87964684,87964687,AM +87964688,87964691,AZ +87964692,87964695,BH +87964696,87964699,BD +87964700,87964703,BY +87964704,87964707,BJ +87964708,87964711,BT +87964712,87964715,BA +87964716,87964719,BW +87964720,87964723,BN +87964724,87964727,BG +87964728,87964731,BF +87964732,87964735,BI +87964736,87964739,KH +87964740,87964743,CM +87964744,87964747,CV +87964748,87964751,CF +87964752,87964755,TD +87964756,87964759,CN +87964760,87964763,CX +87964764,87964767,CC +87964768,87964771,KM +87964772,87964775,CD +87964776,87964779,CI +87964780,87964783,CY +87964784,87964787,EG +87964788,87964791,GQ +87964792,87964795,ER +87964796,87964799,EE +87964800,87964803,ET +87964804,87964807,FO +87964808,87964811,GA +87964812,87964815,GM +87964816,87964819,GE +87964820,87964823,GH +87964824,87964827,GI +87964828,87964831,GR +87964832,87964835,GL +87964836,87964839,GU +87964840,87964843,GW +87964844,87964847,GN +87964848,87964851,IR +87964852,87964855,IQ +87964856,87964859,IE +87964860,87964863,JO +87964864,87964867,KZ +87964868,87964871,KE +87964872,87964875,KW +87964876,87964879,KG +87964880,87964883,LA +87964884,87964887,LV +87964888,87964891,LB +87964892,87964895,LS +87964896,87964899,LR +87964900,87964903,LY +87964904,87964907,LI +87964908,87964911,LT +87964912,87964915,MO +87964916,87964919,MK +87964920,87964923,MG +87964924,87964927,MW +87964928,87964931,MV +87964932,87964935,ML +87964936,87964939,MT +87964940,87964943,MR +87964944,87964947,MU +87964948,87964951,MD +87964952,87964955,MC +87964956,87964959,MN +87964960,87964963,ME +87964964,87964967,MA +87964968,87964971,MZ +87964972,87964975,MM +87964976,87964979,NA +87964980,87964983,NP +87964984,87964987,NE +87964988,87964991,NG +87964992,87964995,KP +87964996,87964999,OM +87965000,87965003,PK +87965004,87965007,PW +87965008,87965011,PS +87965012,87965015,PG +87965016,87965019,PH +87965020,87965023,QA +87965024,87965027,DJ +87965028,87965031,CG +87965032,87965035,RO +87965036,87965039,RW +87965040,87965043,SH +87965044,87965047,SM +87965048,87965051,ST +87965052,87965055,SA +87965056,87965059,SN +87965060,87965063,RS +87965064,87965067,SL +87965068,87965071,SK +87965072,87965075,SI +87965076,87965079,SO +87965080,87965083,LK +87965084,87965087,SD +87965088,87965091,SJ +87965092,87965095,SY +87965096,87965099,TJ +87965100,87965103,TZ +87965104,87965107,TH +87965108,87965111,TG +87965112,87965115,TN +87965116,87965119,TM +87965120,87965123,UG +87965124,87965127,UA +87965128,87965131,AE +87965132,87965135,UZ +87965136,87965139,VA +87965140,87965143,VN +87965144,87965147,YE +87965148,87965151,ZM +87965152,87965155,ZW +87965156,87965183,CZ +87965184,87965187,GB +87965188,87965191,AD +87965192,87965195,AO +87965196,87965199,AM +87965200,87965203,AZ +87965204,87965207,BH +87965208,87965211,BD +87965212,87965215,BY +87965216,87965219,BJ +87965220,87965223,BT +87965224,87965227,BA +87965228,87965231,BW +87965232,87965235,BN +87965236,87965239,BG +87965240,87965243,BF +87965244,87965247,BI +87965248,87965251,KH +87965252,87965255,CM +87965256,87965259,CV +87965260,87965263,CF +87965264,87965267,TD +87965268,87965271,CX +87965272,87965275,CC +87965276,87965279,KM +87965280,87965283,CD +87965284,87965287,CI +87965288,87965291,CY +87965292,87965295,EG +87965296,87965299,GQ +87965300,87965303,ER +87965304,87965307,EE +87965308,87965311,ET +87965312,87965315,FO +87965316,87965319,GA +87965320,87965323,GM +87965324,87965327,GE +87965328,87965331,GH +87965332,87965335,GI +87965336,87965339,GR +87965340,87965343,GL +87965344,87965347,GW +87965348,87965351,GN +87965352,87965355,IR +87965356,87965359,IQ +87965360,87965363,IE +87965364,87965367,JO +87965368,87965371,KZ +87965372,87965375,KE +87965376,87965379,KW +87965380,87965383,KG +87965384,87965387,LA +87965388,87965391,LV +87965392,87965395,LB +87965396,87965399,LS +87965400,87965403,LR +87965404,87965407,LY +87965408,87965411,LI +87965412,87965415,LT +87965416,87965419,MO +87965420,87965423,MK +87965424,87965427,MG +87965428,87965431,MW +87965432,87965435,MV +87965436,87965439,ML +87965440,87965443,MT +87965444,87965447,MR +87965448,87965451,MU +87965452,87965455,MD +87965456,87965459,MC +87965460,87965463,MN +87965464,87965467,ME +87965468,87965471,MA +87965472,87965475,MZ +87965476,87965479,MM +87965480,87965483,NA +87965484,87965487,NP +87965488,87965491,NE +87965492,87965495,NG +87965496,87965499,OM +87965500,87965503,PK +87965504,87965507,PS +87965508,87965511,QA +87965512,87965515,DJ +87965516,87965519,CG +87965520,87965523,RO +87965524,87965527,RW +87965528,87965531,SH +87965532,87965535,PM +87965536,87965539,SM +87965540,87965543,ST +87965544,87965547,SA +87965548,87965551,SN +87965552,87965555,RS +87965556,87965559,SL +87965560,87965563,SK +87965564,87965567,SI +87965568,87965571,SO +87965572,87965575,LK +87965576,87965579,SD +87965580,87965583,SJ +87965584,87965587,SY +87965588,87965591,TJ +87965592,87965595,TZ +87965596,87965599,TH +87965600,87965603,TG +87965604,87965607,TN +87965608,87965611,TM +87965612,87965615,UG +87965616,87965619,PT +87965620,87965623,US +87965624,87965627,UA +87965628,87965631,AE +87965632,87965635,UZ +87965636,87965639,VA +87965640,87965643,VN +87965644,87965647,YE +87965648,87965651,ZM +87965652,87965655,ZW +87965656,87965659,PT +87965660,87965663,US +87965664,87965695,GB 87965696,87967743,DE 87967744,87969791,IT 87969792,87970815,IM @@ -1352,14 +1735,15 @@ 92764224,92764287,ES 92764288,92764687,FR 92764688,92764703,ES -92764704,92764911,FR +92764704,92764863,FR +92764864,92764879,ES +92764880,92764911,FR 92764912,92764927,GB 92764928,92765423,FR 92765424,92765427,GB 92765428,92766015,FR 92766016,92766047,ES -92766048,92777839,FR -92777840,92777855,FI +92766048,92777855,FR 92777856,92777983,GB 92777984,92778431,FR 92778432,92778495,ES @@ -1418,7 +1802,9 @@ 92787708,92787711,FI 92787712,92788127,FR 92788128,92788131,FI -92788132,92788479,FR +92788132,92788399,FR +92788400,92788415,FI +92788416,92788479,FR 92788480,92788495,FI 92788496,92789119,FR 92789120,92789183,ES @@ -1461,7 +1847,9 @@ 92797356,92797359,DE 92797360,92797679,FR 92797680,92797695,FI -92797696,92798975,FR +92797696,92798591,FR +92798592,92798623,PT +92798624,92798975,FR 92798976,93323263,RU 93323264,93335551,CH 93335552,93339647,IL @@ -1481,8 +1869,7 @@ 93417472,93419519,IR 93419520,93421567,IT 93421568,93425663,DE -93425664,93426183,SE -93426184,93426687,GI +93425664,93426687,GI 93426688,93427085,DE 93427087,93427711,DE 93427712,93429759,NO @@ -1808,7 +2195,10 @@ 96245760,96246783,KZ 96246784,96247807,RU 96247808,96248831,NL -96248832,96259071,RU +96248832,96251903,RU +96251904,96252159,DE +96252160,96252927,NL +96252928,96259071,RU 96259072,96259327,NL 96259328,96259583,RO 96259584,96259839,US @@ -1896,9 +2286,7 @@ 96757884,96757887,ES 96757888,96758247,FR 96758248,96758251,DE -96758252,96759311,FR -96759312,96759327,ES -96759328,96759735,FR +96758252,96759735,FR 96759736,96759739,ES 96759740,96760099,FR 96760100,96760103,IE @@ -2233,7 +2621,11 @@ 100532480,100532735,US 100532736,100548872,RO 100548873,100548873,TR -100548874,100554999,RO +100548874,100552863,RO +100552864,100552871,AT +100552872,100554447,RO +100554448,100554463,DE +100554464,100554999,RO 100555000,100555000,DE 100555001,100555007,RO 100555008,100555263,DE @@ -2403,7 +2795,9 @@ 204047872,204047999,PR 204048000,204048031,US 204048032,204048047,PR -204048048,209921023,US +204048048,208304383,US +208304384,208304639,CA +208304640,209921023,US 209921024,209921279,AU 209921280,212086271,US 212086272,212086527,AR @@ -2525,7 +2919,9 @@ 225443840,225705983,JP 225705984,226230271,US 226230272,226295807,KR -226295808,231866367,US +226295808,226361343,US +226361344,226492415,IN +226492416,231866367,US 231866368,231997439,AU 231997440,233046015,US 233046016,233177087,SG @@ -2636,7 +3032,8 @@ 248512512,249561087,CN 249561088,251658239,VN 251658240,257532415,US -257532416,257532671,AU +257532416,257532423,AU +257532432,257532671,AU 257532672,257534463,US 257534464,257534719,IN 257534720,257597951,US @@ -2725,8 +3122,7 @@ 289787904,289789951,DE 289789952,289791999,US 289792000,289794047,AE -289794048,289795071,US -289795072,289796095,GB +289794048,289796095,GB 289796096,289798143,TR 289798144,289800191,SA 289800192,289948927,US @@ -2855,7 +3251,8 @@ 301989024,301989031,MO 301989032,301989119,US 301989120,301989375,AU -301989376,323243895,US +301989376,301989631,SG +301989632,323243895,US 323243896,323243903,FR 323243904,332132119,US 332132120,332132127,IL @@ -3157,8 +3554,8 @@ 389515264,389521407,NL 389521408,389554175,US 389554176,389562367,NL -389562368,389611519,US -389611520,389619711,NL +389562368,389615615,US +389615616,389619711,NL 389619712,389628415,US 389628416,389628927,NL 389628928,389631999,US @@ -3275,7 +3672,11 @@ 391112704,391113471,NL 391113472,391116543,US 391116544,391116799,NL -391116800,391368703,US +391116800,391331839,US +391331840,391333887,NL +391333888,391344127,US +391344128,391348223,NL +391348224,391368703,US 391368704,391372799,CA 391372800,391376895,US 391376896,391380991,CA @@ -3549,7 +3950,33 @@ 392691440,392691455,AT 392691456,392765439,US 392765440,392765695,GB -392765696,393166847,US +392765696,392849663,US +392849664,392849919,NL +392849920,392850687,US +392850688,392850943,NL +392850944,392851455,US +392851456,392852479,NL +392852480,392852735,US +392852736,392852991,NL +392852992,393007103,US +393007104,393008639,NL +393008640,393008895,US +393008896,393011199,NL +393011200,393019391,US +393019392,393042015,NL +393042016,393042023,US +393042024,393042087,NL +393042088,393042095,US +393042096,393042143,NL +393042144,393042151,US +393042152,393042719,NL +393042720,393042727,US +393042728,393084927,NL +393084928,393150463,US +393150464,393152511,NL +393152512,393154559,US +393154560,393158655,NL +393158656,393166847,US 393166848,393170943,CA 393170944,394264575,US 394264576,394264831,CA @@ -3584,7 +4011,9 @@ 395968512,396034047,CA 396034048,396034303,US 396066816,396067071,CA -396099584,396754943,US +396099584,396230911,US +396263424,396263679,CA +396296192,396754943,US 396754944,396755199,CA 396820480,396820735,US 396886016,397410303,US @@ -4387,7 +4816,9 @@ 461012992,461045759,KR 461045760,461047807,ID 461047808,461049855,JP -461049856,461050879,TH +461049856,461050111,TH +461050112,461050367,SG +461050368,461050879,TH 461050880,461051903,NZ 461051904,461054975,AU 461054976,461055999,HK @@ -4502,7 +4933,8 @@ 520355840,520421375,ES 520421376,520486911,RO 520486912,520488959,NL -520488960,520489471,UA +520488960,520489215,UA +520489216,520489471,CH 520489472,520489727,EG 520489728,520489983,GR 520489984,520490020,RU @@ -4776,7 +5208,9 @@ 521793536,521795583,RU 521795584,521797631,PL 521797632,521928703,IT -521928704,521945087,RU +521928704,521929087,RU +521929088,521929151,UA +521929152,521945087,RU 521945088,521953279,GB 521953280,521961471,RU 521961472,521969663,CZ @@ -5172,8 +5606,7 @@ 532209664,532210687,DE 532210688,532212223,RU 532212224,532212479,ME -532212480,532212735,NL -532212736,532213759,RU +532212480,532213759,RU 532213760,532214015,GB 532214016,532221951,RU 532221952,532223999,IT @@ -5454,7 +5887,9 @@ 534513216,534513279,VG 534513280,534513407,NL 534513408,534513663,SE -534513664,534515455,US +534513664,534514687,US +534514688,534515199,DE +534515200,534515455,US 534515456,534515711,SE 534515712,534515967,GB 534515968,534516735,US @@ -5507,8 +5942,7 @@ 534663168,534675455,ES 534675456,534691839,GB 534691840,534693887,FR -534693888,534695935,NL -534695936,534700031,GB +534693888,534700031,GB 534700032,534708223,JO 534708224,534740991,TR 534740992,534749183,BA @@ -5594,7 +6028,9 @@ 597426176,597688319,DE 597688320,598736895,US 598736896,598867967,GB -598867968,603979775,US +598867968,599130111,US +599130112,599261183,CA +599261184,603979775,US 603979776,603980799,CN 603980800,603981823,NP 603981824,604110847,CN @@ -5628,7 +6064,6 @@ 620703744,620704767,NZ 620704768,620705791,BD 620705792,620706815,HK -620706816,620707839,US 620707840,620708863,IN 620708864,620709887,HK 620709888,620711935,AU @@ -5678,9 +6113,7 @@ 620777472,620781567,NL 620781568,620783615,GB 620783616,620785663,ES -620785664,620785919,DE -620785920,620786175,GB -620786176,620786687,DE +620785664,620786687,DE 620786688,620787199,IE 620787200,620787711,DE 620787712,620789503,RU @@ -5969,7 +6402,9 @@ 623822592,623822847,DE 623822848,623824895,GB 623824896,623826943,CZ -623826944,623837183,UA +623826944,623827967,UA +623827968,623828991,BG +623828992,623837183,UA 623837184,623902719,PL 623902720,623919103,CZ 623919104,623935487,NL @@ -6023,7 +6458,9 @@ 624640952,624640959,PT 624640960,624641187,FR 624641188,624641191,ES -624641192,624641855,FR +624641192,624641535,FR +624641536,624641551,IE +624641552,624641855,FR 624641856,624641887,GB 624641888,624641983,FR 624641984,624642015,ES @@ -6195,7 +6632,9 @@ 624665612,624665615,ES 624665616,624665663,FR 624665664,624665695,ES -624665696,624665999,FR +624665696,624665903,FR +624665904,624665919,FI +624665920,624665999,FR 624666000,624666015,GB 624666016,624666167,FR 624666168,624666175,GB @@ -6339,8 +6778,8 @@ 624680800,624680895,FR 624680896,624680927,ES 624680928,624681023,FR -624681024,624681071,ES -624681072,624681083,FR +624681024,624681055,ES +624681056,624681083,FR 624681084,624681087,ES 624681088,624681535,FR 624681536,624681599,ES @@ -7062,9 +7501,7 @@ 635200912,635200919,IT 635200920,635200991,GB 635200992,635200999,IT -635201000,635201103,GB -635201104,635201111,IT -635201112,635201159,GB +635201000,635201159,GB 635201160,635201167,IT 635201168,635201183,GB 635201184,635201191,IT @@ -7298,8 +7735,8 @@ 641790976,641826815,US 641826816,641827839,MX 641827840,641828351,US -641828352,641830911,MX -641830912,642089471,US +641828352,641832959,MX +641832960,642089471,US 642089472,642089727,CA 642089728,642092543,US 642092544,642092799,CA @@ -7405,8 +7842,7 @@ 644718720,644718783,CA 644718784,644718847,US 644718848,644718943,CA -644718944,644719103,RU -644719104,644719359,US +644718944,644719359,US 644719360,644720639,CA 644720640,644759551,US 644759552,644761599,CA @@ -8244,21 +8680,9 @@ 691650560,691666943,GH 691666944,691732479,NG 691732480,691798015,TZ -691798016,691814399,ZM -691814400,691814655,ZW -691814656,691815935,ZM -691815936,691816191,ZW -691816192,691816447,ZM -691816448,691816703,ZW -691816704,691816959,ZM -691816960,691817215,ZW -691817216,691821823,ZM -691821824,691822079,ZW -691822080,691823871,ZM -691823872,691824127,ZW -691824128,691824639,ZM -691824640,691825151,ZW -691825152,691857407,ZM +691798016,691806207,ZM +691806208,691830783,ZW +691830784,691857407,ZM 691857408,691858175,KE 691858176,691863551,ZM 691863552,691929087,ZA @@ -8289,7 +8713,9 @@ 692625408,692626687,KE 692626688,692626943,AO 692626944,692633599,KE -692633600,692641791,MU +692633600,692637903,MU +692637904,692637911,KE +692637912,692641791,MU 692641792,692649983,GA 692649984,692658175,NG 692658176,692666367,ZA @@ -8335,7 +8761,9 @@ 692852736,692854783,GH 692854784,692856831,ZA 692856832,692858879,MU -692858880,692860927,MW +692858880,692859135,MW +692859136,692859391,UG +692859392,692860927,MW 692860928,692862975,ZA 692862976,692869119,NG 692869120,692871167,TZ @@ -8473,7 +8901,7 @@ 693073920,693074943,SS 693074944,693075967,CV 693075968,693076991,CM -693076992,693078015,ZW +693076992,693078015,MU 693078016,693079039,BW 693079040,693080063,KE 693080064,693081087,NG @@ -8500,7 +8928,10 @@ 693103616,693104639,GN 693104640,693105663,ZA 693105664,693106687,MZ -693106688,693107711,ZA +693106688,693106951,TZ +693106952,693106959,ZA +693106960,693107199,TZ +693107200,693107711,ZA 693107712,693239807,KE 693239808,693370879,SN 693370880,693403647,ZA @@ -8548,16 +8979,15 @@ 696926208,696928255,ZA 696928256,696930303,BW 696930304,696932351,RW -696932352,696932607,EG +696932352,696932607,BJ 696932608,696932863,NG -696932864,696933375,EG +696932864,696933375,BJ 696933376,696934399,ZA 696934400,696942591,BF 696942592,696950783,MR 696950784,696958975,NG 696958976,696963071,TZ -696963072,696965119,UG -696965120,696966143,NG +696963072,696966143,UG 696966144,696967167,TZ 696967168,696971263,MZ 696971264,696974335,KE @@ -8573,7 +9003,9 @@ 698056704,698089471,EG 698089472,698220543,ZA 698220544,698351615,GA -698351616,699400191,ZA +698351616,699334655,ZA +699334656,699342847,ZM +699342848,699400191,ZA 699400192,699465727,EG 699465728,699531263,ZA 699531264,699662335,EG @@ -8622,7 +9054,7 @@ 700381184,700382207,EG 700382208,700383231,KE 700383232,700399615,EG -700399616,700400639,AO +700399616,700400639,BW 700400640,700401663,CI 700401664,700402687,MZ 700402688,700403711,UG @@ -8633,6 +9065,7 @@ 700407808,700408831,GH 700408832,700409855,CM 700409856,700410879,LR +700410880,700411903,NG 700412928,700413951,ZM 700413952,700414975,SC 700414976,700432383,ZA @@ -8722,9 +9155,7 @@ 701423616,701431807,NG 701431808,701439999,CI 701440000,701448191,MG -701448192,701457919,KE -701457920,701458175,CG -701458176,701458831,KE +701448192,701458831,KE 701458832,701458847,CG 701458848,701462783,KE 701462784,701463295,CG @@ -8839,9 +9270,13 @@ 702328832,702332927,TZ 702332928,702337023,MZ 702337024,702341119,UG -702341120,702342259,MU +702341120,702342111,MU +702342112,702342127,KE +702342128,702342259,MU 702342260,702342263,KE -702342264,702344199,MU +702342264,702343039,MU +702343040,702343103,KE +702343104,702344199,MU 702344200,702344971,KE 702344972,702345215,MU 702345216,702349311,KE @@ -8859,7 +9294,7 @@ 702398464,702402559,CV 702402560,702410751,ZA 702410752,702414847,AO -702414848,702416895,UG +702414848,702416895,MU 702416896,702418943,KE 702418944,702420991,ZM 702420992,702423039,TZ @@ -8990,9 +9425,9 @@ 703774720,703791103,ZA 703791104,703856639,CD 703856640,703922175,CM -703922176,703971327,ZA -703971328,703975423,NG -703975424,704118783,ZA +703922176,703954943,ZA +703954944,703987711,NG +703987712,704118783,ZA 704118784,704380927,MA 704380928,704643071,LY 704643072,704644095,CN @@ -9228,7 +9663,7 @@ 736394240,736395263,HK 736395264,736396287,MN 736396288,736398335,CN -736398336,736400383,IN +736398336,736399359,IN 736400384,736402431,CN 736402432,736402687,NZ 736402688,736402943,SG @@ -9323,9 +9758,9 @@ 736518144,736519167,HK 736519168,736520191,AU 736520192,736521215,IN -736521216,736521747,PH +736521216,736521747,AU 736521748,736521748,US -736521749,736522239,PH +736521749,736522239,AU 736522240,736524287,HK 736524288,736525311,BD 736525312,736526335,CN @@ -9449,7 +9884,7 @@ 737179648,737180671,AU 737180672,737184767,CN 737184768,737185791,VU -737185792,737186815,AU +737185792,737186815,HK 737186816,737187839,ID 737187840,737188863,TW 737188864,737206271,CN @@ -9587,7 +10022,9 @@ 737484800,737485823,KH 737485824,737487871,AU 737487872,737488895,MM -737488896,737489919,AU +737488896,737489151,AU +737489152,737489407,SG +737489408,737489919,HK 737489920,737490943,NZ 737490944,737491967,FJ 737491968,737492447,SG @@ -10067,11 +10504,15 @@ 755292160,755293183,AR 755293184,755301375,BR 755301376,755303423,AR +755303424,755304447,BR +755304448,755305471,DO +755305472,755305727,SV 755305728,755305983,BO 755305984,755306239,BR 755306240,755306495,AR 755306496,755307519,BR 755307520,755309567,AR +755309568,755310591,HN 755310592,755315711,BR 755315712,755316735,MX 755316736,755317759,PE @@ -10086,18 +10527,34 @@ 755332096,755333119,GT 755333120,755335167,CL 755335168,755340287,BR -755341312,755342335,AR +755340288,755342335,AR 755342336,755343359,BR +755343360,755345407,CO +755345408,755346431,BR +755346432,755347455,CO +755347456,755348479,BR +755348480,755351551,CO 755351552,755357695,BR 755357696,755358719,NI 755358720,755368959,BR -755368960,755369983,AR -755371008,755376127,BR +755368960,755371007,AR +755371008,755378175,BR +755378176,755379199,DO +755379200,755381247,HN 755381248,755383295,BR 755383296,755384319,MX +755384320,755385343,BR 755385344,755386367,AR -755386368,755387391,BR -755390464,755400703,BR +755386368,755394559,BR +755394560,755395583,AR +755395584,755401727,BR +755401728,755402751,AR +755402752,755403775,BR +755403776,755404799,MX +755404800,755417087,BR +755422208,755423231,AR +755425280,755429375,BR +755431424,755433471,UY 756023296,757071871,US 757071872,757071911,NL 757071912,757071919,US @@ -10117,7 +10574,9 @@ 757072776,757072791,US 757072792,757072895,NL 757072896,757072903,US -757072904,757073007,NL +757072904,757072911,NL +757072912,757072919,US +757072920,757073007,NL 757073008,757073023,US 757073024,757073047,NL 757073048,757073055,US @@ -10138,8 +10597,7 @@ 757110784,757112831,DE 757112832,757113343,US 757113344,757113855,NL -757113856,757115903,US -757115904,757116927,NL +757113856,757116927,US 757116928,757118975,GB 757118976,757119999,NL 757120000,757121023,AU @@ -10270,9 +10728,7 @@ 757789440,757789567,NP 757789568,757790975,US 757790976,757791231,WS -757791232,757792767,US -757792768,757793279,CA -757793280,757793791,US +757791232,757793791,US 757793792,757794047,CA 757794048,757795839,US 757795840,757796351,CA @@ -10283,8 +10739,11 @@ 757798400,757799167,US 757799168,757799423,CA 757799424,757799935,US -757799936,757800959,CA +757799936,757800191,CA +757800192,757800447,US +757800448,757800959,CA 757800960,757809151,US +757809152,757809407,CA 757809408,757809663,RO 757809664,757809919,GB 757817344,757858303,US @@ -10582,28 +11041,30 @@ 759848960,759955455,CA 759955456,759963647,US 759963648,759965759,NL -759965760,759966719,US -759966720,759967231,FR -759967232,759975935,US -759975936,759977471,DE -759977472,759977983,US -759977984,759979007,DE -759979008,759979124,US -759979125,759979125,DE -759979126,759980031,US +759965760,759966207,US +759966208,759966719,NL +759966720,759967743,FR +759967744,759968767,JP +759968768,759975935,US +759975936,759980031,DE 759980032,759984127,JP -759984128,759985151,AU -759985152,759988223,US -759988224,759990783,GB -759990784,759992319,US -759992320,759996415,SG -759996416,760004607,US +759984128,759986175,AU +759986176,759988223,US +759988224,759992319,GB +759992320,759997439,SG +759997440,760000511,US +760000512,760004607,SG 760004608,760006983,JP 760006984,760006987,US 760006988,760007007,JP 760007008,760007039,US 760007040,760012799,JP -760012800,760111103,US +760012800,760023039,US +760023040,760026367,JP +760026368,760026623,HK +760026624,760029183,JP +760029184,760031743,SG +760031744,760111103,US 760111104,760119295,CA 760119296,760127487,US 760127488,760152063,CA @@ -10665,7 +11126,7 @@ 762399744,762400767,IN 762400768,762401023,HK 762401024,762401279,US -762401280,762401791,HK +762401280,762401791,KR 762401792,762402815,TH 762402816,762403839,IN 762403840,762404863,AU @@ -10949,7 +11410,7 @@ 762848768,762849279,BD 762849280,762850303,IN 762850304,762851327,HK -762851328,762852351,IN +762851328,762851839,IN 762852352,762853375,HK 762853376,762855423,IN 762855424,762857471,KR @@ -11204,7 +11665,8 @@ 763282432,763285503,IN 763285504,763286017,SG 763286018,763286018,US -763286019,763286527,SG +763286019,763286271,SG +763286272,763286527,US 763286528,763287551,CN 763287552,763288575,HK 763288576,763289599,CN @@ -11528,7 +11990,9 @@ 772884480,772886527,LB 772886528,772888575,FR 772888576,772890623,GB -772890624,772892671,NL +772890624,772892033,NL +772892034,772892041,RU +772892042,772892671,NL 772892672,772894719,GB 772894720,772896767,PL 772896768,772898815,RS @@ -11805,7 +12269,6 @@ 773800960,773801215,SG 773801216,773801471,US 773801472,773801983,CY -773801984,773804031,IQ 773804032,773806079,GB 773806080,773808127,BE 773808128,773810175,IL @@ -12863,8 +13326,7 @@ 784334848,784457743,FR 784457744,784458751,GB 784458752,784458767,FR -784458768,784459775,GB -784459776,784461823,IT +784458768,784461823,GB 784461824,784465919,FR 784465920,784596991,SE 784596992,784728063,TR @@ -13187,7 +13649,9 @@ 787715840,787718143,NL 787718144,787718655,RU 787718656,787719167,NL -787719168,787722239,RU +787719168,787719423,RU +787719424,787719935,NL +787719936,787722239,RU 787722240,787722751,NL 787722752,787725311,RU 787725312,787741695,NL @@ -13307,8 +13771,7 @@ 788261632,788262143,DE 788262144,788262399,IR 788262400,788265215,DE -788265216,788265727,ES -788265728,788267007,DE +788265216,788267007,ES 788267008,788271103,SE 788271104,788275199,DE 788275200,788279295,AL @@ -13430,7 +13893,11 @@ 794427392,794460159,HK 794460160,794492927,US 794492928,794501119,JP -794501120,794558463,US +794501120,794532607,US +794532608,794532863,HK +794532864,794533631,US +794533632,794533887,HK +794533888,794558463,US 794558464,796917759,CN 796917760,797442047,CA 797442048,800522240,US @@ -13520,7 +13987,7 @@ 832312320,832313343,ID 832313344,832315391,AU 832315392,832319487,KH -832319488,832320511,NZ +832319488,832320511,NU 832320512,832321535,VN 832321536,832323583,ID 832323584,832348159,IN @@ -14017,7 +14484,10 @@ 873725952,874250239,US 874250240,874381311,DE 874381312,874512383,IE -874512384,875560959,US +874512384,875446271,US +875446272,875454463,FR +875454464,875495423,US +875495424,875560959,FR 875560960,875823103,IE 875823104,876085247,US 876085248,876150783,GB @@ -14073,7 +14543,7 @@ 878578944,878579199,AU 878579200,878579455,CA 878579456,878579711,GB -878579712,878579967,US +878579712,878579967,FR 878579968,878580223,DE 878580224,878580735,US 878580736,878580991,IN @@ -14119,8 +14589,9 @@ 878639296,878639311,GB 878639312,878639327,CA 878639328,878639359,US -878639360,878639375,CN -878639376,878648831,US +878639360,878639391,CN +878639392,878639407,FR +878639408,878648831,US 878648832,878649343,JP 878649344,878649855,US 878649856,878650111,JP @@ -14141,7 +14612,9 @@ 878676736,878678271,US 878678272,878679039,CA 878679040,878679807,GB -878679808,878690303,US +878679808,878680575,US +878680576,878681343,FR +878681344,878690303,US 878690304,878694399,KR 878694400,878695423,US 878695424,878696447,SG @@ -14158,7 +14631,7 @@ 878705408,878705663,US 878705664,878705919,KR 878705920,878706175,GB -878706176,878706431,US +878706176,878706431,FR 878706432,878706447,BR 878706448,878706463,AU 878706464,878706479,SG @@ -14239,7 +14712,9 @@ 879841792,879841919,KR 879841920,880216831,US 880216832,880217087,CA -880217088,880263167,US +880217088,880261119,US +880261120,880262143,SG +880262144,880263167,US 880263168,880264191,IE 880264192,880269311,US 880269312,880271359,JP @@ -15171,7 +15646,8 @@ 1024262144,1024327679,SG 1024327680,1024327935,US 1024327936,1024328191,AU -1024328192,1024328703,US +1024328192,1024328447,HK +1024328448,1024328703,US 1024328704,1024329727,CN 1024329728,1024330751,JP 1024330752,1024331775,AU @@ -15357,14 +15833,16 @@ 1040983552,1040983807,FO 1040983808,1040990207,DK 1040990208,1040998399,CY -1040998400,1041002495,EG +1040998400,1041002495,SD 1041002496,1041004543,KE 1041004544,1041006591,EG 1041006592,1041039359,CH 1041039360,1041072127,SE 1041072128,1041080319,GB 1041080320,1041088511,IT -1041088512,1041096703,AT +1041088512,1041093631,AT +1041093632,1041094143,US +1041094144,1041096703,AT 1041096704,1041235967,ES 1041235968,1041244159,UA 1041244160,1041252351,RU @@ -15392,7 +15870,9 @@ 1041728560,1041728655,FR 1041728656,1041728671,IT 1041728672,1041748991,FR -1041749248,1041760255,FR +1041749248,1041752319,FR +1041752320,1041752575,AT +1041752576,1041760255,FR 1041760256,1041768447,DE 1041768448,1041776639,NO 1041776640,1041784831,CZ @@ -15749,7 +16229,9 @@ 1046489472,1046489487,ES 1046489488,1046489503,GB 1046489504,1046489519,DE -1046489520,1046489999,GB +1046489520,1046489975,GB +1046489976,1046489983,DE +1046489984,1046489999,GB 1046490000,1046490007,DE 1046490008,1046492471,GB 1046492472,1046492479,DE @@ -15819,7 +16301,9 @@ 1046524488,1046524495,DE 1046524496,1046524615,GB 1046524616,1046524623,DE -1046524624,1046525351,GB +1046524624,1046524647,GB +1046524648,1046524655,DE +1046524656,1046525351,GB 1046525352,1046525359,DE 1046525360,1046525439,GB 1046525440,1046525695,DE @@ -15948,8 +16432,7 @@ 1047527424,1047529471,US 1047529472,1047530495,NL 1047530496,1047531007,GB -1047531008,1047531263,RS -1047531264,1047533567,BE +1047531008,1047533567,BE 1047533568,1047534847,DE 1047534848,1047535103,BE 1047535104,1047535359,US @@ -16006,12 +16489,14 @@ 1047658496,1047724031,EG 1047728128,1047732223,SE 1047735770,1047735770,DE +1047736552,1047736553,US 1047740544,1047740671,DE 1047758911,1047758911,CZ 1047759119,1047759119,AT 1047759125,1047759125,AT 1047759754,1047759754,FR 1047759834,1047759834,CZ +1047763266,1047763267,SE 1047781856,1047781871,DE 1047782690,1047782690,GB 1047787520,1047787775,ES @@ -16096,6 +16581,7 @@ 1048987480,1048987487,DE 1048991960,1048991967,DE 1048992528,1048992535,DE +1048992608,1048992615,DE 1049006080,1049006335,DE 1049008128,1049009151,DE 1049016320,1049018367,DE @@ -17645,7 +18131,9 @@ 1073049065,1073049065,CW 1073049066,1073049599,US 1073049600,1073052671,BS -1073052672,1073116159,US +1073052672,1073075199,US +1073075200,1073075455,CA +1073075456,1073116159,US 1073116160,1073117183,GB 1073117184,1073118207,US 1073118208,1073118719,NL @@ -18374,7 +18862,9 @@ 1087398912,1087399423,GB 1087399424,1087405407,US 1087405408,1087405423,MX -1087405424,1087413895,US +1087405424,1087413879,US +1087413880,1087413883,ES +1087413884,1087413895,US 1087413896,1087413903,DE 1087413904,1087414783,US 1087414784,1087415039,CA @@ -19039,7 +19529,19 @@ 1111195648,1111212031,CA 1111220224,1111228415,US 1111228416,1111244799,AR -1111244800,1111982079,US +1111244800,1111916543,US +1111916544,1111922687,CA +1111922688,1111924735,US +1111924736,1111928831,CA +1111928832,1111929855,US +1111929856,1111931135,CA +1111931136,1111931391,US +1111931392,1111931903,CA +1111931904,1111932927,US +1111932928,1111938047,CA +1111938048,1111941119,US +1111941120,1111943167,CA +1111943168,1111982079,US 1111982080,1111998463,IT 1111998464,1112408063,US 1112408064,1112410111,IL @@ -19125,7 +19627,9 @@ 1114513472,1114513571,US 1114513572,1114513599,SA 1114513600,1114514719,US -1114514720,1114515455,SA +1114514720,1114514751,SA +1114514752,1114514943,US +1114514944,1114515455,SA 1114515456,1114515463,US 1114515464,1114515471,CA 1114515472,1114517503,US @@ -19136,7 +19640,9 @@ 1114520576,1114520831,PH 1114520832,1114523971,US 1114523972,1114523975,BM -1114523976,1114524031,US +1114523976,1114523999,US +1114524000,1114524007,BM +1114524008,1114524031,US 1114524032,1114524415,JM 1114524416,1114524671,ZA 1114524672,1114533375,US @@ -19322,19 +19828,7 @@ 1119109632,1119109887,CA 1119109888,1119110143,US 1119110144,1119111167,CA -1119111168,1119166463,US -1119171072,1119171327,US -1119171360,1119171383,US -1119171384,1119171391,CA -1119171392,1119171583,US -1119172056,1119172063,US -1119172096,1119172159,US -1119172192,1119172199,US -1119172200,1119172207,CA -1119172256,1119172263,US -1119172352,1119172863,US -1119172864,1119173631,MX -1119174656,1119199231,US +1119111168,1119199231,US 1119199232,1119207169,MN 1119207170,1119207170,US 1119207171,1119207423,MN @@ -19501,7 +19995,7 @@ 1121203200,1121204223,JM 1121204224,1121205247,US 1121205248,1121205759,PR -1121205760,1121206271,VC +1121205760,1121206271,LC 1121206272,1121230847,US 1121230848,1121239039,CA 1121239040,1121247231,US @@ -19628,7 +20122,9 @@ 1125147626,1125156304,US 1125156305,1125156305,DE 1125156306,1125228543,US -1125228544,1125229055,GB +1125228544,1125228647,GB +1125228648,1125228651,FI +1125228652,1125229055,GB 1125229056,1125237277,US 1125237278,1125237278,GB 1125237279,1125237919,US @@ -19712,9 +20208,7 @@ 1137369088,1137371135,CA 1137371136,1137378815,US 1137378816,1137379071,UA -1137379072,1137385471,US -1137385472,1137387519,IL -1137387520,1137426431,US +1137379072,1137426431,US 1137426432,1137442815,PR 1137442816,1137491967,US 1137491968,1137508351,CA @@ -19834,11 +20328,9 @@ 1138917376,1138937855,CA 1138937856,1138941951,US 1138941952,1138950143,CA -1138950144,1138958335,US -1138958336,1138959103,IL -1138959104,1138959615,US -1138959616,1138959871,IL -1138959872,1138970111,US +1138950144,1138956799,US +1138956800,1138957311,CA +1138957312,1138970111,US 1138970112,1138970367,IN 1138970368,1139146751,US 1139146752,1139154943,GT @@ -19892,7 +20384,9 @@ 1145503744,1145520127,CA 1145520128,1150287871,US 1150287872,1150812159,CA -1150812160,1151889407,US +1150812160,1151867903,US +1151867904,1151868927,CA +1151868928,1151889407,US 1151889408,1151892703,CA 1151892704,1151892711,DZ 1151892712,1151897599,CA @@ -19948,7 +20442,6 @@ 1158295808,1158296063,GB 1158296064,1158316031,US 1158316032,1158318847,CA -1158319037,1158319037,CA 1158319104,1158322242,CA 1158322243,1158322243,US 1158322244,1158324223,CA @@ -20144,7 +20637,11 @@ 1161773056,1161777151,SZ 1161777152,1161818111,US 1161818112,1161822207,CA -1161822208,1161833967,US +1161822208,1161830852,US +1161830853,1161830853,BZ +1161830854,1161831181,US +1161831182,1161831182,BZ +1161831183,1161833967,US 1161833968,1161833975,DE 1161833976,1161834979,US 1161834980,1161834980,BZ @@ -20156,9 +20653,9 @@ 1161835227,1161835227,BZ 1161835228,1161835230,US 1161835231,1161835231,PH -1161835232,1161837174,US -1161837175,1161837175,BZ -1161837176,1161837567,US +1161835232,1161835948,US +1161835949,1161835949,BZ +1161835950,1161837567,US 1161837568,1161837823,JP 1161837824,1161885695,US 1161885696,1161886207,JP @@ -20267,12 +20764,12 @@ 1163538576,1163538591,CA 1163538592,1163539199,US 1163539200,1163539455,CA -1163539456,1163540351,US +1163539456,1163539711,US +1163539712,1163539967,CA +1163539968,1163540351,US 1163540352,1163540479,CA 1163540480,1163540735,US -1163540736,1163541503,CA -1163541504,1163542015,VG -1163542016,1163542527,CA +1163540736,1163542527,CA 1163542528,1163543295,US 1163543296,1163543551,CA 1163543552,1163544575,US @@ -20426,7 +20923,9 @@ 1168965120,1168965375,CA 1168965376,1168973823,US 1168973824,1168982015,CA -1168982016,1169203199,US +1168982016,1169031167,US +1169031168,1169035263,DE +1169035264,1169203199,US 1169203200,1169211391,CA 1169211392,1170190335,US 1170190336,1170190847,GB @@ -20663,7 +21162,9 @@ 1210421504,1210421551,CA 1210421552,1210449919,US 1210449920,1210580991,CA -1210580992,1210865262,US +1210580992,1210847231,US +1210847232,1210851327,BR +1210851328,1210865262,US 1210865263,1210865270,MY 1210865271,1210925055,US 1210925056,1210941439,CA @@ -20758,7 +21259,9 @@ 1224158208,1224167935,US 1224167936,1224169471,NL 1224169472,1224169983,US -1224169984,1224173567,NL +1224169984,1224171519,NL +1224171520,1224173055,US +1224173056,1224173567,NL 1224173568,1224184063,US 1224184064,1224184319,NL 1224184320,1224189951,US @@ -20801,7 +21304,9 @@ 1224523559,1224523559,JM 1224523560,1224523775,US 1224523776,1224540159,JM -1224540160,1241743359,US +1224540160,1224728575,US +1224728576,1224736767,HK +1224736768,1241743359,US 1241743360,1241759743,CA 1241759744,1242300415,US 1242300416,1242562559,CA @@ -20840,9 +21345,13 @@ 1247124480,1247124991,PR 1247124992,1247129599,US 1247129600,1247133695,NL -1247133696,1248864255,US +1247133696,1247498239,US +1247498240,1247502335,CA +1247502336,1248864255,US 1248864256,1248866303,CA -1248866304,1248885759,US +1248866304,1248877311,US +1248877312,1248877567,CA +1248877568,1248885759,US 1248885760,1248886783,CA 1248886784,1248899071,US 1248899072,1248900095,CA @@ -20873,7 +21382,8 @@ 1249011712,1249019903,US 1249019904,1249020927,CA 1249020928,1249023999,US -1249026048,1249029119,US +1249024000,1249025023,CA +1249025536,1249029119,US 1249029120,1249030143,CA 1249030144,1249036287,US 1249036288,1249037311,TC @@ -20890,8 +21400,7 @@ 1249103104,1249103871,CA 1249103872,1249106943,US 1249106944,1249107967,CA -1249107968,1249128447,US -1249129472,1249130495,US +1249107968,1249130495,US 1249130496,1249131519,JM 1249131520,1249139711,US 1249139712,1249140268,MF @@ -21275,7 +21784,9 @@ 1294532608,1294598143,RU 1294598144,1294606335,IT 1294606336,1294610431,IR -1294610432,1294619647,IT +1294610432,1294611455,IT +1294611456,1294611711,IR +1294611712,1294619647,IT 1294619648,1294626815,IR 1294626816,1294630911,IT 1294630912,1294663679,LB @@ -21448,8 +21959,8 @@ 1296580608,1296582655,CH 1296582656,1296584703,IE 1296584704,1296585215,RU -1296585216,1296585983,GB -1296585984,1296586751,RU +1296585216,1296585471,GB +1296585472,1296586751,RU 1296586752,1296588799,FR 1296588800,1296590847,SE 1296590848,1296592895,ES @@ -21690,7 +22201,8 @@ 1297727488,1297743871,MD 1297743872,1297760255,DE 1297760256,1297776639,LT -1297776640,1297793023,DE +1297776640,1297784831,DE +1297784832,1297793023,PT 1297793024,1297809407,UA 1297809408,1297825791,PL 1297825792,1297838079,RU @@ -21772,9 +22284,7 @@ 1298137088,1298661375,GB 1298661376,1298677759,FR 1298677760,1298694143,IR -1298694144,1298708991,US -1298708992,1298709247,IT -1298709248,1298710527,US +1298694144,1298710527,US 1298710528,1298726911,CZ 1298726912,1298743295,RS 1298743296,1298757631,FI @@ -21854,7 +22364,9 @@ 1306279936,1306288127,IT 1306288128,1306296319,AT 1306296320,1306312703,RU -1306312704,1306320895,UZ +1306312704,1306317823,UZ +1306317824,1306318847,NL +1306318848,1306320895,RU 1306320896,1306329087,DE 1306329088,1306337279,BA 1306337280,1306345471,HU @@ -22112,7 +22624,9 @@ 1308020736,1308024831,BG 1308024832,1308030975,RU 1308030976,1308033023,UA -1308033024,1308035427,DE +1308033024,1308033685,DE +1308033686,1308033686,GB +1308033687,1308035427,DE 1308035428,1308035428,GB 1308035429,1308037119,DE 1308037120,1308041215,UA @@ -22252,9 +22766,7 @@ 1311253448,1311253455,IT 1311253456,1311253479,GB 1311253480,1311253487,IT -1311253488,1311253831,GB -1311253832,1311253839,IT -1311253840,1311254007,GB +1311253488,1311254007,GB 1311254008,1311254015,IT 1311254016,1311254527,GB 1311254528,1311256575,SE @@ -22441,7 +22953,11 @@ 1317404672,1317437439,IT 1317437440,1317470207,HR 1317470208,1317470463,CY -1317470464,1317474303,TR +1317470464,1317471231,TR +1317471232,1317471743,CY +1317471744,1317471999,TR +1317472000,1317472255,CY +1317472256,1317474303,TR 1317474304,1317478399,CY 1317478400,1317502975,TR 1317502976,1317535743,IE @@ -22560,9 +23076,7 @@ 1318682624,1318690815,RU 1318690816,1318699007,DK 1318699008,1318707199,IE -1318707200,1318708223,FR -1318708224,1318708479,GB -1318708480,1318715391,FR +1318707200,1318715391,FR 1318715392,1318723583,BG 1318723584,1318731775,IR 1318731776,1318739967,PL @@ -22840,9 +23354,10 @@ 1334392848,1334392863,FI 1334392864,1334392895,FR 1334392896,1334392959,GB -1334392960,1334409599,FR +1334392960,1334394879,FR +1334394880,1334409599,IT 1334409600,1334409607,DE -1334409608,1334411263,FR +1334409608,1334411263,IT 1334411264,1334444031,RU 1334444032,1334503935,SE 1334503936,1334504191,DK @@ -23586,11 +24101,7 @@ 1347296233,1347296240,JO 1347296241,1347296264,SE 1347296265,1347296272,US -1347296273,1347297071,SE -1347297072,1347297079,US -1347297080,1347297151,SE -1347297152,1347297159,SL -1347297160,1347297279,SE +1347296273,1347297279,SE 1347297280,1347305471,UA 1347305472,1347309567,AL 1347309568,1347313663,DE @@ -23761,6 +24272,7 @@ 1347932160,1347936255,SK 1347936256,1347940351,FR 1347940352,1347944447,BA +1347944448,1347944959,ZA 1347945472,1347946495,NG 1347947520,1347948543,DZ 1347948544,1347952639,DE @@ -23991,9 +24503,8 @@ 1353275248,1353275255,ES 1353275256,1353277439,GB 1353277440,1353279487,CH -1353279488,1353279583,GB -1353279584,1353279591,IT -1353279592,1353286143,GB +1353279488,1353280511,IT +1353280512,1353286143,GB 1353286336,1353286367,GB 1353286400,1353287959,GB 1353287960,1353287967,IE @@ -24053,7 +24564,19 @@ 1355284480,1355415551,BE 1355415552,1355546623,NO 1355546624,1355808767,IT -1355808768,1356005375,DK +1355808768,1355841535,DK +1355841536,1355857919,CH +1355857920,1355862015,LU +1355862016,1355864063,DK +1355864064,1355866111,GB +1355866112,1355868159,LT +1355868160,1355870207,DE +1355870208,1355872255,DK +1355872256,1355873279,IT +1355873280,1355873791,GB +1355873792,1355874047,GG +1355874048,1355874303,DE +1355874304,1356005375,DK 1356005376,1356070911,IT 1356070912,1356201983,NO 1356201984,1356333055,FR @@ -24114,7 +24637,7 @@ 1357328896,1357329159,NL 1357329168,1357329183,NL 1357329408,1357329415,BE -1357330944,1357331199,GB +1357330944,1357331207,GB 1357335808,1357336063,IT 1357337600,1357337647,NL 1357337664,1357337727,NL @@ -24161,7 +24684,7 @@ 1357375216,1357375223,ES 1357375224,1357375423,GB 1357375424,1357375487,IE -1357375504,1357375535,GB +1357375504,1357375551,GB 1357377536,1357378647,FR 1357378656,1357378671,FR 1357378816,1357379071,FR @@ -24200,7 +24723,6 @@ 1357884160,1357884415,GB 1357885120,1357885183,DE 1357885200,1357885215,AT -1357885248,1357885311,SE 1357885952,1357886207,SE 1357889024,1357889279,GB 1357889280,1357889535,SE @@ -24790,7 +25312,7 @@ 1360654336,1360658431,EE 1360658432,1360666623,PL 1360666624,1360674815,NO -1360674816,1360676863,DZ +1360674816,1360676863,NG 1360676864,1360678911,ZA 1360678912,1360683007,RU 1360683008,1360691199,GB @@ -25046,7 +25568,7 @@ 1365028864,1365032959,NL 1365032960,1365033471,US 1365033472,1365033599,PT -1365033600,1365033983,US +1365033600,1365033983,GB 1365033984,1365035007,SE 1365035008,1365039103,GB 1365039104,1365039135,FI @@ -26921,7 +27443,12 @@ 1410539520,1410547711,GB 1410547712,1410555903,CZ 1410555904,1410564095,GB -1410564096,1410568501,SE +1410564096,1410567320,SE +1410567321,1410567321,NO +1410567322,1410567322,FI +1410567323,1410567323,EE +1410567324,1410567324,IT +1410567325,1410568501,SE 1410568502,1410568502,DK 1410568503,1410568991,SE 1410568992,1410569007,NO @@ -26948,11 +27475,9 @@ 1410711552,1410719743,BG 1410719744,1410727935,RU 1410727936,1410736127,BG -1410736128,1410737151,XK -1410737152,1410739199,RS -1410739200,1410740479,XK -1410740480,1410744063,RS -1410744064,1410744319,XK +1410736128,1410739455,RS +1410739456,1410739711,XK +1410739712,1410744319,RS 1410744320,1410745087,FR 1410745344,1410747391,FR 1410747392,1410747647,GP @@ -26976,9 +27501,7 @@ 1411449728,1411449791,DE 1411449792,1411450303,IT 1411450304,1411450367,DE -1411450368,1411481855,IT -1411481856,1411483903,DE -1411483904,1411514367,IT +1411450368,1411514367,IT 1411514368,1411579903,FI 1411579904,1411645439,NL 1411645440,1411710975,EG @@ -27027,7 +27550,6 @@ 1411907584,1411911679,GB 1411911680,1411915775,US 1411915776,1411919871,GB -1411919872,1411921919,DE 1411921920,1411922175,GB 1411922176,1411922431,DE 1411922432,1411923967,GB @@ -27036,8 +27558,8 @@ 1411961612,1411961612,IE 1411961613,1411973119,PL 1411973120,1411999743,SI -1411999744,1412001023,BA -1412001024,1412002815,SI +1411999744,1412001279,BA +1412001280,1412002815,SI 1412002816,1412003839,BA 1412003840,1412005887,SI 1412005888,1412038655,NL @@ -27060,7 +27582,8 @@ 1412406272,1412408831,RU 1412408832,1412409343,RO 1412409344,1412412159,RU -1412412160,1412412671,RO +1412412160,1412412415,RO +1412412416,1412412671,GB 1412412672,1412413439,RU 1412413440,1412413951,RO 1412413952,1412414719,RU @@ -27084,7 +27607,7 @@ 1412796928,1412800511,US 1412801536,1412804607,US 1412804864,1412805631,US -1412806144,1412808703,US +1412806656,1412808703,US 1412808704,1412825087,RU 1412832768,1412833023,SL 1412841472,1412857855,UZ @@ -27725,7 +28248,11 @@ 1438126080,1438130175,CZ 1438130176,1438138367,NL 1438138368,1438146559,FR -1438146560,1438154751,MT +1438146560,1438147583,MT +1438147584,1438147839,SE +1438147840,1438148095,BE +1438148096,1438148351,GB +1438148352,1438154751,MT 1438154752,1438171135,DK 1438171136,1438173183,GB 1438173184,1438179327,IM @@ -28700,11 +29227,7 @@ 1475559424,1475563007,GR 1475563008,1475563263,BG 1475563264,1475563519,GR -1475563520,1475565183,BG -1475565184,1475565311,GR -1475565312,1475566207,BG -1475566208,1475566335,GR -1475566336,1475575807,BG +1475563520,1475575807,BG 1475575808,1475592191,AT 1475592192,1475608575,GB 1475608576,1475624959,RU @@ -28827,12 +29350,12 @@ 1476010112,1476011327,RS 1476011328,1476011775,XK 1476011776,1476012095,RS -1476012096,1476012287,XK -1476012288,1476013055,RS -1476013056,1476013311,XK -1476013312,1476013567,RS -1476013568,1476013823,XK -1476013824,1476014079,RS +1476012096,1476012176,XK +1476012177,1476012177,RS +1476012178,1476012250,XK +1476012251,1476012251,RS +1476012252,1476012287,XK +1476012288,1476014079,RS 1476014080,1476014127,XK 1476014128,1476014135,RS 1476014136,1476014591,XK @@ -29591,7 +30114,9 @@ 1486284168,1486284191,GB 1486284192,1486284215,US 1486284216,1486284223,GB -1486284224,1486284543,US +1486284224,1486284471,US +1486284472,1486284479,GB +1486284480,1486284543,US 1486284544,1486284599,GB 1486284600,1486284623,US 1486284624,1486284647,GB @@ -29800,7 +30325,9 @@ 1489665792,1489666047,IT 1489666048,1489674239,GB 1489674240,1489676287,NL -1489676288,1489688575,GB +1489676288,1489678943,GB +1489678944,1489678959,US +1489678960,1489688575,GB 1489688576,1489688831,IL 1489688832,1489689087,GB 1489689088,1489689343,IL @@ -30378,7 +30905,7 @@ 1495614464,1495617535,RO 1495617536,1495618559,ES 1495618560,1495619583,BE -1495619584,1495620607,RO +1495619584,1495620607,AT 1495620608,1495621375,GB 1495621376,1495621631,RO 1495621632,1495621887,GB @@ -30409,7 +30936,7 @@ 1495653376,1495654399,KZ 1495654400,1495654911,RO 1495654912,1495655167,NL -1495655168,1495655423,BG +1495655168,1495655423,GB 1495655424,1495656447,US 1495656448,1495656959,RO 1495656960,1495657215,GB @@ -30432,7 +30959,8 @@ 1495680000,1495682047,RO 1495682048,1495683071,MD 1495683072,1495687167,IR -1495687168,1495688703,RO +1495687168,1495688191,NL +1495688192,1495688703,RO 1495688704,1495689215,IR 1495689216,1495689727,RO 1495689728,1495690239,DE @@ -30442,14 +30970,16 @@ 1495695360,1495699455,RO 1495699456,1495700479,GB 1495700480,1495701503,FR -1495701504,1495704575,RO +1495701504,1495703551,RO +1495703552,1495704575,NL 1495704576,1495705599,KZ 1495705600,1495709695,RO 1495709696,1495713791,IR 1495713792,1495715839,ES 1495715840,1495716863,RO 1495716864,1495717887,IR -1495717888,1495723519,RO +1495717888,1495719935,ES +1495719936,1495723519,RO 1495723520,1495724031,FR 1495724032,1495724287,GB 1495724288,1495724543,RO @@ -30470,7 +31000,7 @@ 1495749632,1495750655,MD 1495750656,1495752703,RO 1495752704,1495754751,MD -1495754752,1495755775,RO +1495754752,1495755775,NL 1495755776,1495756031,PL 1495756032,1495756799,RO 1495756800,1495758847,MD @@ -30496,7 +31026,9 @@ 1495772160,1495772671,US 1495772672,1495775743,RO 1495775744,1495776255,IR -1495776256,1495782399,RO +1495776256,1495781375,RO +1495781376,1495781631,IR +1495781632,1495782399,RO 1495782400,1495782911,GB 1495782912,1495783167,RO 1495783168,1495783423,GB @@ -30526,7 +31058,8 @@ 1495815168,1495816191,ES 1495816192,1495816703,RO 1495816704,1495817215,IR -1495817216,1495820799,RO +1495817216,1495817471,US +1495817472,1495820799,RO 1495820800,1495821311,IR 1495821312,1495821823,DE 1495821824,1495822335,IR @@ -30719,7 +31252,9 @@ 1496066816,1496067071,QA 1496067072,1496072191,RO 1496072192,1496074239,ES -1496074240,1496082175,RO +1496074240,1496078335,RO +1496078336,1496079359,MD +1496079360,1496082175,RO 1496082176,1496082431,GB 1496082432,1496083967,RO 1496083968,1496084479,FR @@ -30840,7 +31375,7 @@ 1496248832,1496253439,RO 1496253440,1496254463,ES 1496254464,1496256255,RO -1496256256,1496256511,NL +1496256256,1496256511,US 1496256512,1496260607,RO 1496260608,1496261119,IT 1496261120,1496262655,RO @@ -31077,9 +31612,7 @@ 1503854592,1503887359,RU 1503887360,1503895567,DE 1503895568,1503895571,IT -1503895572,1503895663,DE -1503895664,1503895671,FR -1503895672,1503895679,DE +1503895572,1503895679,DE 1503895680,1503895687,IT 1503895688,1503896159,DE 1503896160,1503896175,CH @@ -31482,8 +32015,7 @@ 1508818944,1508830719,RO 1508830720,1508831487,SK 1508831488,1508835327,RO -1508835328,1508843519,CZ -1508843520,1508851711,GB +1508835328,1508851711,CZ 1508851712,1508868095,PL 1508868096,1508884479,RU 1508884480,1508900863,DK @@ -31510,8 +32042,8 @@ 1509494784,1509498879,RU 1509498880,1509502975,DE 1509502976,1509507071,RU -1509507072,1509507327,GB -1509507328,1509507583,DE +1509507072,1509507199,GB +1509507200,1509507583,DE 1509507584,1509509375,GB 1509509376,1509509631,BE 1509509632,1509511167,GB @@ -31847,9 +32379,7 @@ 1518567424,1518583807,LV 1518583808,1518600191,HR 1518600192,1518641151,SE -1518641152,1518645247,NL -1518645248,1518647295,SE -1518647296,1518649343,NL +1518641152,1518649343,HR 1518649344,1518665727,SE 1518665728,1518723071,LV 1518723072,1518727167,EE @@ -31967,7 +32497,10 @@ 1532675072,1532682239,UA 1532682240,1532690431,LV 1532690432,1532755967,FR -1532755968,1532774143,BG +1532755968,1532756223,GR +1532756224,1532756479,RO +1532756480,1532756735,UA +1532756736,1532774143,BG 1532774144,1532774399,CH 1532774400,1532784639,BG 1532784640,1532785151,TR @@ -32107,9 +32640,7 @@ 1533819904,1533820927,RU 1533820928,1533829119,DE 1533829120,1533833215,NO -1533833216,1533835263,IR -1533835264,1533836287,US -1533836288,1533845503,IR +1533833216,1533845503,IR 1533845504,1533847551,GB 1533847552,1533849599,RU 1533849600,1533851135,SE @@ -32317,7 +32848,7 @@ 1535115264,1535116287,AT 1535116288,1535123455,SE 1535123456,1535131647,LV -1535131648,1535148031,SE +1535131648,1535148031,HR 1535148032,1535197183,AT 1535197184,1535203359,EE 1535203360,1535205375,SE @@ -33113,7 +33644,9 @@ 1539649024,1539649535,LB 1539649536,1539650559,UA 1539650560,1539651583,RU -1539651584,1539652607,UA +1539651584,1539651839,UA +1539651840,1539652095,RU +1539652096,1539652607,UA 1539652608,1539653631,IL 1539653632,1539654655,RU 1539655680,1539656703,NL @@ -33273,7 +33806,6 @@ 1539738112,1539738367,DK 1539738368,1539738623,DE 1539738624,1539738879,UA -1539738880,1539739135,NL 1539739136,1539739391,AT 1539739392,1539739647,UA 1539739648,1539739903,DK @@ -34105,7 +34637,6 @@ 1540356608,1540357119,DE 1540357120,1540357631,RU 1540357632,1540358143,FR -1540358144,1540358399,RU 1540358400,1540358655,GB 1540358656,1540358911,SE 1540358912,1540359167,GB @@ -34747,7 +35278,6 @@ 1540660224,1540660479,RU 1540660480,1540660735,FR 1540660736,1540660991,RU -1540660992,1540661247,RO 1540661760,1540662015,RO 1540662272,1540662527,RO 1540662528,1540662783,PL @@ -35754,7 +36284,6 @@ 1541177344,1541177599,CH 1541177600,1541177855,DE 1541177856,1541178111,RO -1541178112,1541178367,RU 1541178368,1541178623,GB 1541178624,1541178879,RU 1541178880,1541179135,DE @@ -36117,7 +36646,7 @@ 1541363200,1541363455,UA 1541363456,1541363711,IE 1541363712,1541363967,UA -1541363968,1541364479,RU +1541364224,1541364479,RU 1541364480,1541364735,AT 1541364736,1541364991,SE 1541364992,1541365247,RU @@ -37309,7 +37838,6 @@ 1542068224,1542069759,UA 1542069760,1542070015,DE 1542070016,1542071295,UA -1542071296,1542071551,CN 1542071552,1542071807,UA 1542071808,1542072319,DE 1542072320,1542073343,UA @@ -37769,7 +38297,7 @@ 1542351616,1542351871,PL 1542351872,1542353151,RU 1542353152,1542353407,SA -1542353408,1542353919,RU +1542353664,1542353919,RU 1542353920,1542354943,IT 1542354944,1542355711,RU 1542355712,1542355967,GB @@ -37957,7 +38485,7 @@ 1542454272,1542454783,NO 1542454784,1542455039,PL 1542455040,1542455295,SE -1542455296,1542455551,CH +1542455296,1542455551,US 1542455552,1542455807,RO 1542455808,1542456319,GB 1542456320,1542456831,RO @@ -38777,7 +39305,9 @@ 1558102508,1558102508,DE 1558102509,1558103159,FR 1558103160,1558103167,GB -1558103168,1558106901,FR +1558103168,1558103967,FR +1558103968,1558103999,ES +1558104000,1558106901,FR 1558106902,1558106902,DE 1558106903,1558107391,FR 1558107392,1558107455,NL @@ -38798,16 +39328,23 @@ 1558119424,1558122495,RU 1558122496,1558123007,SG 1558123008,1558123519,RU -1558123520,1558126591,LU +1558123520,1558125567,LU +1558125568,1558126079,SG +1558126080,1558126335,DE +1558126336,1558126591,LU 1558126592,1558128639,RU -1558128640,1558129663,LU +1558128640,1558128895,US +1558128896,1558129151,LU +1558129152,1558129407,RU +1558129408,1558129663,LU 1558129664,1558130687,US 1558130688,1558131199,AU 1558131200,1558131711,LU 1558131712,1558132223,HK -1558132224,1558137087,LU +1558132224,1558136831,LU +1558136832,1558137087,RU 1558137088,1558137343,KR -1558137344,1558137855,LU +1558137344,1558137855,CZ 1558137856,1558138367,HK 1558138368,1558138879,AU 1558138880,1558139135,RU @@ -38817,23 +39354,27 @@ 1558140160,1558140415,RU 1558140416,1558140671,SG 1558140672,1558140927,RU -1558140928,1558141439,LU +1558140928,1558141183,LU +1558141184,1558141184,CY +1558141185,1558141439,LU 1558141440,1558141695,CY 1558141696,1558141951,RU -1558141952,1558142719,LU +1558141952,1558142463,PL +1558142464,1558142719,US 1558142720,1558142975,SG 1558142976,1558143231,US 1558143232,1558143743,LU 1558143744,1558143999,RU 1558144000,1558144255,LU -1558144256,1558144767,RU -1558144768,1558146306,LU -1558146307,1558146307,RU -1558146308,1558147583,LU +1558144256,1558145023,RU +1558145024,1558145535,LU +1558145536,1558145791,RU +1558145792,1558146047,US +1558146048,1558146815,RU +1558146816,1558147583,LU 1558147584,1558147839,RU 1558147840,1558148095,LU -1558148096,1558148351,SG -1558148352,1558148607,LU +1558148096,1558148607,SG 1558148608,1558149631,US 1558149632,1558150143,RU 1558150144,1558150655,DE @@ -38927,7 +39468,8 @@ 1559934976,1559937023,LU 1559937024,1559943167,DE 1559943168,1559944191,LU -1559944192,1559945727,FR +1559944192,1559945215,FR +1559945216,1559945727,LU 1559945728,1559946751,GB 1559946752,1559947519,DE 1559947520,1559948287,LU @@ -39492,10 +40034,9 @@ 1570619392,1570621439,BA 1570621440,1570625535,RU 1570625536,1570627583,GB -1570627584,1570635775,RU -1570635776,1570644767,FR -1570644768,1570644775,GB -1570644776,1570644991,FR +1570627584,1570629631,KG +1570629632,1570635775,RU +1570635776,1570644991,FR 1570644992,1570645247,GB 1570645248,1570652159,FR 1570652160,1570660863,SE @@ -39602,7 +40143,7 @@ 1571484160,1571484671,CZ 1571484672,1571484927,KZ 1571484928,1571486719,RU -1571486720,1571486975,CZ +1571486720,1571486975,BY 1571486976,1571487231,NL 1571487232,1571488767,RU 1571488768,1571489023,CZ @@ -39910,9 +40451,8 @@ 1572669440,1572673535,RU 1572673536,1572675583,AT 1572675584,1572677631,ES -1572677632,1572681983,RU -1572681984,1572682239,NL -1572682240,1572683775,RU +1572677632,1572681727,RU +1572681728,1572683775,NL 1572683776,1572685823,CH 1572685824,1572689919,RU 1572689920,1572691967,ES @@ -40126,7 +40666,9 @@ 1578596352,1578596863,GB 1578596864,1578602495,FR 1578602496,1578604543,NL -1578604544,1578606591,RU +1578604544,1578605014,RU +1578605015,1578605015,GB +1578605016,1578606591,RU 1578606592,1578608639,DE 1578608640,1578610687,CZ 1578610688,1578611039,FR @@ -40540,7 +41082,8 @@ 1585440768,1585442815,IT 1585442816,1585446911,RU 1585446912,1585577983,KW -1585577984,1585709055,UA +1585577984,1585643519,DE +1585643520,1585709055,UA 1585709056,1585840127,PT 1585840128,1585971199,DE 1585971200,1585979391,AT @@ -40722,8 +41265,7 @@ 1588663808,1588664063,GB 1588664064,1588664319,RO 1588664320,1588664575,TH -1588664576,1588664831,VG -1588664832,1588665087,RO +1588664576,1588665087,RO 1588665088,1588665343,GB 1588665344,1588673535,RO 1588673536,1588674559,BG @@ -40736,8 +41278,7 @@ 1588680704,1588682751,LU 1588682752,1588684799,RO 1588684800,1588685055,TH -1588685056,1588685311,VG -1588685312,1588686847,RO +1588685056,1588686847,RO 1588686848,1588687103,NO 1588687104,1588687359,GB 1588687360,1588688383,RO @@ -41101,10 +41642,9 @@ 1596858368,1596858879,CZ 1596858880,1596859391,RU 1596859392,1596859903,CZ -1596859904,1596860415,RU -1596860416,1596861439,BY +1596859904,1596861439,RU 1596861440,1596861951,UA -1596861952,1596862207,BY +1596861952,1596862207,CZ 1596862208,1596866559,RU 1596866560,1596868607,UZ 1596868608,1596869631,RU @@ -41166,8 +41706,8 @@ 1596930383,1596930383,TM 1596930384,1596931071,CZ 1596931072,1596931583,BY -1596931584,1596932095,CZ -1596932096,1596940287,RU +1596931584,1596931839,CZ +1596931840,1596940287,RU 1596940288,1596940543,CZ 1596940544,1596940799,RU 1596940800,1596941055,UA @@ -41211,9 +41751,7 @@ 1596968960,1596973055,BA 1596973056,1596975103,BY 1596975104,1596975359,CZ -1596975360,1596977663,RU -1596977664,1596977919,CZ -1596977920,1596978431,RU +1596975360,1596978431,RU 1596978432,1596978944,CZ 1596978945,1596978945,RU 1596978946,1596980223,CZ @@ -41653,11 +42191,7 @@ 1605099520,1605107711,RU 1605107712,1605108247,GB 1605108248,1605108255,IT -1605108256,1605109079,GB -1605109080,1605109087,IT -1605109088,1605109223,GB -1605109224,1605109231,IT -1605109232,1605109351,GB +1605108256,1605109351,GB 1605109352,1605109359,IT 1605109360,1605109495,GB 1605109496,1605109503,IT @@ -42172,11 +42706,12 @@ 1710882816,1710948351,KR 1710948352,1710949375,CN 1710949376,1710950399,NP -1710950400,1710972824,CN -1710972825,1710972825,TW -1710972826,1711210495,CN +1710950400,1710972671,CN +1710972672,1710972927,TW +1710972928,1711210495,CN 1711210496,1711276031,ID 1724715556,1724715556,MU +1727528960,1728053247,ZA 1728053248,1728120063,AU 1728120064,1728120319,SG 1728120320,1728120575,IN @@ -42327,10 +42862,11 @@ 1728345088,1728346111,BD 1728346112,1728346367,AU 1728346368,1728346623,NZ -1728346624,1728347147,AU -1728347149,1728347416,AU -1728347418,1728347421,AU -1728347423,1728348159,AU +1728346624,1728347135,AU +1728347136,1728347147,SG +1728347149,1728347416,SG +1728347418,1728347421,SG +1728347423,1728348159,SG 1728348160,1728349183,VN 1728349184,1728350207,AU 1728350208,1728351231,NZ @@ -42749,7 +43285,6 @@ 1728733184,1728734207,ID 1728734208,1728735231,SG 1728735232,1728736255,ID -1728736256,1728736511,HK 1728736512,1728736767,IN 1728736768,1728737023,ID 1728737280,1728738303,JP @@ -43517,7 +44052,7 @@ 1729441792,1729442815,AU 1729442816,1729443839,IN 1729443840,1729444351,AU -1729444352,1729444863,AE +1729444352,1729444863,IN 1729444864,1729445887,TW 1729445888,1729446399,SG 1729446400,1729446911,IN @@ -43852,7 +44387,9 @@ 1729807360,1729808383,MY 1729808384,1729808895,IN 1729808896,1729809407,AU -1729809408,1729810431,IN +1729809408,1729809663,IN +1729809664,1729810175,US +1729810176,1729810431,IN 1729810432,1729812479,ID 1729812480,1729813503,IN 1729813504,1729814527,SG @@ -44789,7 +45326,7 @@ 1731161088,1731162111,CN 1731162112,1731163135,HK 1731163136,1731165183,CN -1731165184,1731167231,IN +1731165184,1731166207,IN 1731167232,1731168255,ID 1731168256,1731170559,CN 1731170560,1731170687,HK @@ -44892,7 +45429,7 @@ 1731275776,1731276799,KR 1731276800,1731279871,IN 1731279872,1731280895,HK -1731280896,1731281919,JP +1731280896,1731281919,TH 1731281920,1731282175,IN 1731282176,1731282431,PK 1731282432,1731282943,PH @@ -45006,7 +45543,6 @@ 1731423232,1731424255,HK 1731424256,1731425279,AU 1731425280,1731426303,IN -1731426304,1731427327,BD 1731427328,1731428351,KH 1731428352,1731428607,IN 1731428864,1731429119,AU @@ -45372,8 +45908,8 @@ 1731827712,1731828735,PK 1731828736,1731829759,SG 1731829760,1731830783,IN -1731830784,1731831039,SG -1731831040,1731831807,AU +1731830784,1731831551,SG +1731831552,1731831807,AU 1731831808,1731832831,PK 1731832832,1731836927,IN 1731836928,1731837951,MY @@ -45593,8 +46129,7 @@ 1732127744,1732128767,HK 1732128768,1732129023,SG 1732129024,1732129279,NZ -1732129280,1732129535,AU -1732129536,1732129791,HK +1732129280,1732129791,AU 1732129792,1732130815,CN 1732130816,1732134911,IN 1732134912,1732140031,CN @@ -45696,8 +46231,9 @@ 1732374528,1732375551,US 1732375552,1732376575,AU 1732376576,1732377599,US -1732377600,1732377855,NZ -1732377856,1732378623,AU +1732377600,1732377855,AU +1732377856,1732378111,NZ +1732378112,1732378623,AU 1732378624,1732384767,IN 1732384768,1732385279,BD 1732385280,1732385791,AU @@ -45795,7 +46331,7 @@ 1732501504,1732502527,HK 1732502528,1732503551,PH 1732503552,1732504063,IN -1732504064,1732504575,PH +1732504064,1732504575,AU 1732504576,1732505599,IN 1732505600,1732506623,ID 1732506624,1732507647,IN @@ -45974,7 +46510,8 @@ 1732705280,1732707327,CN 1732707328,1732708351,AU 1732708352,1732709375,ID -1732709376,1732710399,HK +1732709376,1732710143,HK +1732710144,1732710399,JP 1732710400,1732712447,IN 1732712448,1732712703,HK 1732712704,1732712959,AF @@ -46100,7 +46637,9 @@ 1732869632,1732869887,AU 1732869888,1732870143,IN 1732870144,1732875263,CN -1732875264,1732878335,IN +1732875264,1732877567,IN +1732877568,1732877823,US +1732877824,1732878335,IN 1732878336,1732879359,HK 1732879360,1732880383,KH 1732880384,1732881407,CN @@ -46263,7 +46802,7 @@ 1733057280,1733057535,IN 1733057536,1733058559,CN 1733058560,1733060607,IN -1733060608,1733060863,CN +1733060608,1733060863,JP 1733060864,1733061119,US 1733061120,1733061375,CN 1733061376,1733061631,US @@ -46431,7 +46970,7 @@ 1733224448,1733225471,ID 1733225472,1733226751,IN 1733226752,1733227007,AU -1733227008,1733227519,TH +1733227008,1733227519,MY 1733227520,1733228543,IN 1733228544,1733230591,BD 1733230592,1733231615,IN @@ -46507,7 +47046,7 @@ 1733309440,1733309695,IN 1733309696,1733309951,AU 1733309952,1733313791,IN -1733313792,1733314047,AU +1733313792,1733314047,SG 1733314048,1733314559,BD 1733314560,1733315583,CN 1733315584,1733315839,NZ @@ -46677,7 +47216,7 @@ 1733485568,1733486591,MY 1733486592,1733486847,MM 1733486848,1733487103,ID -1733487104,1733487615,IN +1733487104,1733487615,US 1733487616,1733488639,CN 1733488640,1733490175,ID 1733490176,1733490431,NZ @@ -46785,8 +47324,7 @@ 1733592320,1733592575,BD 1733592576,1733592831,MV 1733592832,1733593087,AU -1733593088,1733593343,HK -1733593344,1733594111,CN +1733593088,1733594111,CN 1733594112,1733596159,ID 1733596160,1733597183,PK 1733597184,1733598207,US @@ -46811,6 +47349,7 @@ 1733616640,1733618687,ID 1733618688,1733620735,IN 1733620736,1733621759,BD +1733621760,1733622015,AU 1733622016,1733622271,ID 1733622272,1733622783,IN 1733622784,1733623807,BD @@ -46890,7 +47429,8 @@ 1733704704,1733705727,CN 1733705728,1733706751,HK 1733706752,1733707007,JP -1733707008,1733707775,CN +1733707008,1733707519,CN +1733707520,1733707775,US 1733707776,1733709823,HK 1733709824,1733710847,CN 1733710848,1733711615,KR @@ -46898,7 +47438,9 @@ 1733712896,1733713407,AU 1733713408,1733713663,ID 1733713664,1733713919,IN -1733713920,1733714943,PA +1733713920,1733714431,AU +1733714432,1733714687,JP +1733714688,1733714943,SG 1733714944,1733715455,ID 1733715456,1733715711,AU 1733715712,1733715967,ID @@ -47072,10 +47614,137 @@ 1733918720,1733919743,HK 1733919744,1733920767,GB 1733920768,1733921023,IN +1733921024,1733921279,HK 1733921280,1733921791,ID 1733921792,1733922815,SG 1733922816,1733923839,HK 1733923840,1733924863,CN +1733924864,1733925375,AF +1733925376,1733925887,ID +1733925888,1733926911,NP +1733926912,1733928703,ID +1733928704,1733928959,AU +1733928960,1733929983,IN +1733929984,1733931007,CN +1733931008,1733933055,MM +1733933056,1733945343,CN +1733945344,1733946367,IN +1733946368,1733948415,PH +1733948416,1733949439,BD +1733949440,1733949695,ID +1733949696,1733949951,IN +1733949952,1733950463,ID +1733950464,1733951487,IN +1733951488,1733952255,BD +1733952256,1733952511,AU +1733952512,1733953279,IN +1733953280,1733953535,PK +1733953536,1733954559,ID +1733954560,1733955071,BD +1733955072,1733955327,NZ +1733955328,1733955583,AU +1733955584,1733956607,JP +1733956608,1733957631,AU +1733957632,1733958655,ID +1733958656,1733959679,JP +1733959680,1733961727,IN +1733961728,1733962751,TH +1733962752,1733963775,IN +1733963776,1733964543,AU +1733964544,1733964799,HK +1733964800,1733965823,CN +1733965824,1733966335,HK +1733966336,1733966847,AU +1733966848,1733967871,IN +1733967872,1733968127,ID +1733968128,1733968895,AU +1733968896,1733970943,IN +1733970944,1733971199,HK +1733971200,1733971455,AU +1733971456,1733971711,NZ +1733971712,1733971967,IN +1733971968,1733972991,HK +1733972992,1733974015,NP +1733974016,1733975039,AU +1733975040,1733976063,CN +1733976064,1733977087,IN +1733977088,1733986303,CN +1733986304,1733987327,HK +1733987328,1733988351,AU +1733988352,1733989375,NP +1733989376,1733990399,KH +1733990400,1733991423,CN +1733991424,1733993471,IN +1733993472,1733994495,JP +1733994496,1733995519,CN +1733995520,1733995775,HK +1733995776,1733996031,CN +1733996032,1733996543,NZ +1733996544,1733997567,CN +1733997568,1733998591,IN +1733998592,1733999103,NZ +1733999104,1733999615,IN +1733999616,1734001663,CN +1734001664,1734002687,ID +1734002688,1734003199,IN +1734003200,1734003455,PH +1734003456,1734003711,HK +1734003712,1734004735,IN +1734004736,1734004991,AU +1734004992,1734005247,KR +1734005248,1734005503,ID +1734005504,1734005759,AU +1734005760,1734006783,BD +1734006784,1734007807,AU +1734007808,1734011903,VN +1734011904,1734013951,IN +1734013952,1734014975,KR +1734014976,1734018047,ID +1734018048,1734019071,JP +1734019072,1734020095,HK +1734020096,1734021119,ID +1734021120,1734022143,IN +1734022144,1734026239,ID +1734026240,1734028287,CN +1734028288,1734029311,ID +1734029312,1734030335,IN +1734030336,1734031103,BD +1734031104,1734031359,PH +1734031360,1734032383,HK +1734032384,1734032895,MM +1734032896,1734033407,IN +1734033408,1734034431,MY +1734034432,1734039295,IN +1734039296,1734039551,ID +1734039552,1734043647,IN +1734043648,1734044159,BD +1734044160,1734044191,PR +1734044192,1734044255,CN +1734044256,1734044287,KR +1734044288,1734044447,CN +1734044448,1734044479,US +1734044480,1734044511,CN +1734044512,1734044543,US +1734044544,1734045695,CN +1734045696,1734046207,PH +1734046208,1734046719,PG +1734046720,1734049023,IN +1734049024,1734049279,SG +1734049280,1734049535,HK +1734049536,1734049791,IN +1734049792,1734050815,BD +1734050816,1734052863,IN +1734052864,1734053887,PH +1734053888,1734054911,BD +1734054912,1734055935,AU +1734055936,1734056959,CN +1734056960,1734057983,HK +1734057984,1734059007,IN +1734059008,1734060031,AU +1734060032,1734061055,BD +1734061056,1734062079,NZ +1734062080,1734063103,CN +1734063104,1734064127,IN 1740636160,1740644351,CN 1740644352,1740645375,IN 1740645376,1740647423,HK @@ -47751,7 +48420,6 @@ 1741638656,1741639679,NZ 1741639680,1741640703,NP 1741640704,1741641727,PK -1741641728,1741642751,BD 1741642752,1741643007,AU 1741643008,1741643263,HK 1741643264,1741643775,AU @@ -47844,7 +48512,6 @@ 1741756416,1741756927,AU 1741756928,1741757439,IN 1741757440,1741758463,HK -1741758464,1741759487,US 1741759488,1741760511,IN 1741760512,1741761535,HK 1741761536,1741762559,AU @@ -47880,7 +48547,7 @@ 1741785088,1741786111,CN 1741786112,1741788159,IN 1741788160,1741789183,JP -1741789184,1741790207,AU +1741789184,1741789695,AU 1741790208,1741791231,MY 1741791232,1741792255,AU 1741792256,1741794303,SG @@ -48377,7 +49044,9 @@ 1742451712,1742452735,VN 1742452736,1742453759,CN 1742453760,1742454783,PH -1742454784,1742455807,HK +1742454784,1742455295,HK +1742455296,1742455551,US +1742455552,1742455807,HK 1742455808,1742456063,TH 1742456064,1742456831,ID 1742456832,1742460415,IN @@ -48776,7 +49445,8 @@ 1743062528,1743063039,AU 1743063040,1743064063,SG 1743064064,1743064575,ID -1743065088,1743066111,TW +1743065088,1743065599,TW +1743065600,1743066111,IN 1743066112,1743067135,CN 1743067136,1743068159,IN 1743068160,1743069183,HK @@ -48875,8 +49545,7 @@ 1743158272,1743159295,MY 1743160320,1743161343,TH 1743161344,1743162367,HK -1743162368,1743162623,BZ -1743162624,1743162879,AQ +1743162368,1743162879,BZ 1743162880,1743163135,KR 1743163136,1743163391,BZ 1743163392,1743166463,IN @@ -48969,7 +49638,8 @@ 1743258624,1743259647,CN 1743259648,1743260671,IN 1743260672,1743261703,JP -1743261704,1743262719,PH +1743261704,1743261711,PH +1743261712,1743262719,HK 1743262720,1743264767,IN 1743264768,1743265279,MY 1743265280,1743265535,ID @@ -50285,9 +50955,7 @@ 1744712448,1744712703,ID 1744712704,1744714751,IN 1744714752,1744715775,JP -1744715776,1744717823,CN -1744717824,1744718591,HK -1744718592,1744719871,CN +1744715776,1744719871,CN 1744719872,1744720895,IN 1744720896,1744721919,BD 1744721920,1744723455,AU @@ -50647,8 +51315,8 @@ 1749450240,1749465087,US 1749465088,1749465599,NL 1749465600,1749476863,US -1749476864,1749483519,NL -1749483520,1749487615,US +1749476864,1749479423,NL +1749479424,1749487615,US 1749487616,1749491711,NL 1749491712,1749495807,US 1749495808,1749496319,NL @@ -50676,8 +51344,8 @@ 1749635072,1749636095,NL 1749636096,1749647359,US 1749647360,1749655551,NL -1749655552,1749685247,US -1749685248,1749686783,NL +1749655552,1749686527,US +1749686528,1749686783,NL 1749686784,1749696511,US 1749696512,1749698047,NL 1749698048,1749698559,US @@ -51020,7 +51688,11 @@ 1753497600,1753499391,US 1753499392,1753499647,PH 1753499648,1753499903,AE -1753499904,1753511167,US +1753499904,1753500159,US +1753500160,1753500415,SK +1753500416,1753507391,US +1753507392,1753507439,KR +1753507440,1753511167,US 1753511168,1753511423,FR 1753511424,1753512703,US 1753512704,1753512959,SG @@ -51523,13 +52195,15 @@ 1757457408,1757458431,CA 1757458432,1757460479,US 1757460480,1757462527,VI -1757462528,1757472767,US +1757462528,1757466623,US +1757466624,1757468671,CA +1757468672,1757472767,US 1757472768,1757473791,CA 1757473792,1757487103,US 1757487104,1757489151,CA 1757489152,1757491199,US 1757491200,1757497343,CA -1757497344,1757502463,US +1757497344,1757501439,US 1757502464,1757503487,CA 1757503488,1757505535,US 1757505536,1757506559,CA @@ -51563,9 +52237,7 @@ 1757996544,1758002431,US 1758002432,1758002687,GB 1758002688,1758199807,US -1758199808,1758204415,CA -1758204416,1758204671,US -1758204672,1758330879,CA +1758199808,1758330879,CA 1758330880,1758412799,US 1758412800,1758413055,BG 1758413056,1758413311,SE @@ -51839,7 +52511,7 @@ 1760819712,1760819967,MA 1760819968,1760820479,US 1760820480,1760820735,CA -1760820736,1760823295,US +1760820736,1760822271,US 1760823296,1760824319,PT 1760824320,1760837631,US 1760837632,1760839679,CA @@ -52008,6 +52680,7 @@ 1761507328,1761507615,US 1761507616,1761507711,GB 1761507712,1761508351,US +1761508352,1761509375,VG 1761509376,1761515519,US 1761515520,1761517567,CA 1761517568,1761519615,US @@ -52035,7 +52708,7 @@ 1761600512,1761601535,US 1761601536,1761602559,VC 1761602560,1761606655,US -1761606656,1761607679,VC +1761606656,1761607679,LC 1761607680,1762613861,ZA 1762613862,1762613862,US 1762613863,1762656255,ZA @@ -52059,7 +52732,9 @@ 1762695168,1762701311,ZA 1762701312,1762703359,FR 1762703360,1762705407,GB -1762705408,1762768895,MU +1762705408,1762764799,MU +1762764800,1762766847,NL +1762766848,1762768895,SE 1762768896,1762770943,DE 1762770944,1762783231,MU 1762783232,1762791423,KE @@ -52067,7 +52742,8 @@ 1762795520,1762799615,TZ 1762799616,1762803711,MZ 1762803712,1762820095,ZA -1762820096,1762942975,MU +1762820096,1762824191,GB +1762824192,1762942975,MU 1762942976,1762947071,NL 1762947072,1762951167,SE 1762951168,1762955263,DE @@ -52127,9 +52803,8 @@ 1763657728,1763659775,ZA 1763659776,1763661823,MU 1763661824,1763663871,FR -1763663872,1763690495,MU -1763690496,1763692543,ZA -1763692544,1763694591,MU +1763663872,1763688447,MU +1763688448,1763694591,ZA 1763694592,1763696639,FR 1763696640,1763704831,MU 1763704832,1764753407,EG @@ -52141,7 +52816,8 @@ 1769996288,1772093439,MA 1772093440,1772617727,KE 1772617728,1773142015,AO -1773142016,1773273087,ZA +1773142016,1773207551,LR +1773207552,1773273087,ZA 1773273088,1773404159,RW 1773404160,1773666303,EG 1773666304,1773928447,ZA @@ -52391,7 +53067,9 @@ 1806532928,1806532959,GB 1806532960,1806925823,US 1806925824,1806958591,CA -1806958592,1807056895,US +1806958592,1807044095,US +1807044096,1807044351,NL +1807044352,1807056895,US 1807056896,1807057151,AU 1807057664,1807057919,GB 1807057920,1807058431,US @@ -52711,9 +53389,9 @@ 1833315968,1833316351,IM 1833316352,1833318399,DK 1833318400,1833320447,GB -1833320448,1833321215,IQ -1833321216,1833321471,AE -1833321472,1833322495,IQ +1833320448,1833321282,IQ +1833321283,1833321283,AE +1833321284,1833322495,IQ 1833322496,1833324543,IT 1833324544,1833326591,NO 1833326592,1833327103,GB @@ -52959,9 +53637,7 @@ 1835918848,1835918855,IT 1835918856,1835919415,GB 1835919416,1835919423,IT -1835919424,1835919511,GB -1835919512,1835919519,IT -1835919520,1835919751,GB +1835919424,1835919751,GB 1835919752,1835919759,IT 1835919760,1835921111,GB 1835921112,1835921127,IT @@ -52985,9 +53661,7 @@ 1835923720,1835923727,IT 1835923728,1835924287,GB 1835924288,1835924295,IT -1835924296,1835924375,GB -1835924376,1835924383,IT -1835924384,1835924815,GB +1835924296,1835924815,GB 1835924816,1835924823,IT 1835924824,1835925007,GB 1835925008,1835925015,IT @@ -53579,7 +54253,8 @@ 1843806208,1843822591,IR 1843822592,1843838975,RU 1843838976,1843839487,IR -1843839488,1843839999,DE +1843839488,1843839743,ES +1843839744,1843839999,DE 1843840000,1843840255,TR 1843840256,1843840767,DE 1843840768,1843841023,SE @@ -53602,7 +54277,8 @@ 1843851776,1843852031,IR 1843852032,1843852799,DE 1843852800,1843853311,IR -1843853312,1843854079,DE +1843853312,1843853823,DE +1843853824,1843854079,ES 1843854080,1843854335,IR 1843854336,1843855359,DE 1843855360,1843871743,PL @@ -53798,7 +54474,9 @@ 1844772864,1844838399,RS 1844838400,1844903935,GB 1844903936,1844969471,NO -1844969472,1845006335,RU +1844969472,1844984831,RU +1844984832,1844985343,GE +1844985344,1845006335,RU 1845006336,1845010431,KZ 1845010432,1845022719,RU 1845022720,1845023743,KZ @@ -53811,9 +54489,7 @@ 1845027584,1845027839,ES 1845027840,1845029887,RU 1845029888,1845030143,KZ -1845030144,1845030911,RU -1845030912,1845031935,GE -1845031936,1845035007,RU +1845030144,1845035007,RU 1845035008,1845100543,GB 1845100544,1845166079,DE 1845166080,1845231615,UA @@ -54940,7 +55616,9 @@ 1958845952,1958846463,HK 1958846464,1958847487,IN 1958847488,1958848511,CN -1958848512,1958850559,BD +1958848512,1958849023,BD +1958849024,1958849535,HK +1958849536,1958850559,ID 1958850560,1958852607,CN 1958852608,1958853631,AU 1958853632,1958854655,ID @@ -54992,7 +55670,8 @@ 1959680000,1959681023,BD 1959681024,1959682047,CN 1959682048,1959683071,IN -1959683072,1959684095,CN +1959683072,1959683327,US +1959683328,1959684095,CN 1959684096,1959685119,SC 1959685120,1959686143,PH 1959686144,1959687167,TH @@ -55015,6 +55694,16 @@ 1959707648,1959708671,ID 1959708672,1959709695,IN 1959709696,1959710719,SG +1959710720,1959711743,HK +1959711744,1959712767,ID +1959712768,1959713791,AU +1959713792,1959714815,IN +1959714816,1959715839,PH +1959715840,1959716863,AU +1959716864,1959719935,ID +1959719936,1959720959,LK +1959720960,1959721983,MY +1959721984,1959723007,BD 1959723008,1960050687,CN 1960050688,1960058879,KR 1960058880,1960067071,VN @@ -55204,8 +55893,10 @@ 1970798592,1970800639,SG 1970800640,1970802943,AU 1970802944,1970803199,SG -1970803200,1970803711,AU -1970803712,1970804223,HK +1970803200,1970803455,AU +1970803456,1970803711,IN +1970803712,1970803967,HK +1970803968,1970804223,SG 1970804224,1970804479,AU 1970804480,1970804735,SG 1970804736,1970806783,KH @@ -55244,7 +55935,7 @@ 1984135168,1984151551,KR 1984151552,1984153599,NZ 1984153600,1984155647,KH -1984155648,1984159743,AU +1984155648,1984159743,BD 1984159744,1984167935,IN 1984167936,1984430079,VN 1984430080,1985085439,CN @@ -55292,8 +55983,7 @@ 1986509824,1986510847,JP 1986510848,1986519039,KR 1986519040,1986523135,PK -1986523136,1986523904,HK -1986523905,1986525183,CN +1986523136,1986525183,CN 1986525184,1986527231,BN 1986527232,1986723839,JP 1986723840,1986740223,AU @@ -55675,7 +56365,6 @@ 2019078144,2019082239,IN 2019082240,2019098623,HK 2019098624,2019115007,PH -2019115008,2019117055,US 2019117056,2019119103,IN 2019119104,2019121151,NZ 2019121152,2019123199,ID @@ -55744,7 +56433,7 @@ 2032926720,2033057791,AU 2033057792,2033074175,CN 2033074176,2033075199,PK -2033075200,2033077247,BD +2033075200,2033076223,BD 2033077248,2033078271,CN 2033078272,2033079295,HK 2033079296,2033088511,IN @@ -55780,7 +56469,8 @@ 2033625088,2033627135,HK 2033627136,2033629183,CN 2033629184,2033630207,AU -2033630208,2033631231,HK +2033630208,2033630463,CN +2033630464,2033631231,HK 2033631232,2033647615,KR 2033647616,2033663999,CN 2033664000,2033696767,KR @@ -56039,15 +56729,17 @@ 2063085568,2063089663,CN 2063089664,2063097855,JP 2063097856,2063106047,MM -2063106048,2063107071,AU -2063107328,2063107655,AU +2063106048,2063107071,SG +2063107328,2063107655,SG 2063107656,2063107663,HK -2063107664,2063108095,AU +2063107664,2063108095,SG 2063108096,2063110143,HK 2063110144,2063111167,JP 2063111168,2063114239,AU 2063114240,2063115263,IN -2063115264,2063118159,JP +2063115264,2063116871,JP +2063116872,2063116879,KR +2063116880,2063118159,JP 2063118160,2063118191,PH 2063118192,2063118287,JP 2063118288,2063118303,PH @@ -56842,7 +57534,9 @@ 2171076608,2171142143,FR 2171142144,2172256255,US 2172256256,2172272639,GH -2172272640,2172289023,RE +2172272640,2172277247,RE +2172277248,2172277759,FR +2172277760,2172289023,RE 2172289024,2172321791,AO 2172321792,2172452863,US 2172452864,2172518399,NL @@ -57012,7 +57706,9 @@ 2187264000,2187329535,AU 2187329536,2187331583,US 2187331584,2187332607,CA -2187332608,2187460607,US +2187332608,2187333631,US +2187333632,2187334143,DE +2187334144,2187460607,US 2187460608,2187526143,FR 2187526144,2187591679,US 2187591680,2187657215,SE @@ -57069,8 +57765,8 @@ 2190140416,2190737407,NL 2190737408,2190802943,GB 2190802944,2190803967,DE -2190803968,2190804991,PL -2190804992,2190868479,DE +2190803968,2190804735,PL +2190804736,2190868479,DE 2190868480,2191065087,US 2191065088,2191130623,JP 2191130624,2191196159,US @@ -57125,9 +57821,7 @@ 2193223424,2193223679,GB 2193223680,2193226495,BG 2193226496,2193226751,GB -2193226752,2193227263,BG -2193227264,2193227519,BZ -2193227520,2193227775,BG +2193226752,2193227775,BG 2193227776,2193293311,IT 2193293312,2193358847,US 2193358848,2193424383,FI @@ -57996,8 +58690,8 @@ 2255749120,2255814655,US 2255814656,2255880191,CA 2255880192,2255945727,US -2255945728,2255998975,DE -2255998976,2256003071,FR +2255945728,2255994879,DE +2255994880,2256003071,FR 2256003072,2256006655,DE 2256006656,2256006911,FR 2256006912,2256011263,DE @@ -58509,8 +59203,7 @@ 2302404608,2302405631,JP 2302405632,2302406655,HK 2302406656,2302408703,IN -2302408704,2302409727,AU -2302409728,2302410751,JP +2302408704,2302410751,AU 2302410752,2302541823,SE 2302541824,2302607359,CH 2302607360,2302625761,SC @@ -58542,7 +59235,9 @@ 2303340640,2303340671,FI 2303340672,2303341283,FR 2303341284,2303341287,FI -2303341288,2303342459,FR +2303341288,2303341951,FR +2303341952,2303341967,ES +2303341968,2303342459,FR 2303342460,2303342463,DE 2303342464,2303343039,FR 2303343040,2303343103,PT @@ -58598,7 +59293,9 @@ 2303382880,2303382895,ES 2303382896,2303383503,FR 2303383504,2303383519,GB -2303383520,2303384959,FR +2303383520,2303383807,FR +2303383808,2303383935,ES +2303383936,2303384959,FR 2303384960,2303384991,GB 2303384992,2303385087,FR 2303385088,2303385103,FI @@ -58894,15 +59591,11 @@ 2321446912,2321447935,HN 2321447936,2321452031,BR 2321452032,2321453055,MX -2321453056,2321453359,HN -2321453360,2321453367,NL -2321453368,2321454079,HN +2321453056,2321454079,HN 2321454080,2321467136,BR 2321467137,2321467137,US 2321467138,2321471487,BR -2321471488,2321472391,HN -2321472392,2321472399,UY -2321472400,2321472511,HN +2321471488,2321472511,HN 2321472512,2321477631,BR 2321477632,2321478655,TT 2321478656,2321479679,SV @@ -59167,9 +59860,9 @@ 2327472128,2327476223,BR 2327476224,2327477247,CL 2327477248,2327480319,BR -2327480320,2327481135,HN -2327481136,2327481143,US -2327481144,2327481343,HN +2327480320,2327481007,HN +2327481008,2327481023,US +2327481024,2327481343,HN 2327481344,2327482367,AR 2327482368,2327483391,BR 2327483392,2327485439,AR @@ -59182,9 +59875,9 @@ 2327494656,2327496703,BR 2327496704,2327497727,MX 2327497728,2327498751,BR -2327498752,2327499623,HN -2327499624,2327499631,CL -2327499632,2327499775,HN +2327498752,2327499343,HN +2327499344,2327499351,CL +2327499352,2327499775,HN 2327499776,2327501823,AR 2327501824,2327507967,BR 2327507968,2327508991,AR @@ -59282,7 +59975,9 @@ 2330198016,2330263551,CH 2330263552,2330267647,US 2330267648,2330271743,CA -2330271744,2330394623,US +2330271744,2330288127,US +2330288128,2330290175,CN +2330290176,2330394623,US 2330394624,2330460159,FR 2330460160,2330525695,AT 2330525696,2330591231,SE @@ -59843,7 +60538,11 @@ 2378203648,2378210559,FI 2378210560,2378211071,NO 2378211072,2378235903,FI -2378235904,2378301439,ES +2378235904,2378239039,ES +2378239040,2378239071,CA +2378239072,2378239175,ES +2378239176,2378239179,CA +2378239180,2378301439,ES 2378301440,2378303231,FR 2378303488,2378366975,FR 2378366976,2378432511,US @@ -59873,7 +60572,13 @@ 2380432128,2380432383,US 2380432384,2380434431,IL 2380434432,2380435455,US -2380435456,2380464127,IL +2380435456,2380455935,IL +2380455936,2380456447,US +2380456448,2380456959,IL +2380456960,2380457215,NL +2380457216,2380457727,US +2380457728,2380457983,HK +2380457984,2380464127,IL 2380464128,2380464639,FR 2380464640,2380465151,US 2380465152,2380465407,FR @@ -59977,9 +60682,13 @@ 2387476480,2387542015,CA 2387542016,2387607551,US 2387607552,2388328447,CA -2388328448,2388350207,US +2388328448,2388330495,US +2388330496,2388332543,NL +2388332544,2388350207,US 2388350208,2388350463,LK -2388350464,2388393983,US +2388350464,2388367359,US +2388367360,2388369407,NL +2388369408,2388393983,US 2388393984,2389245951,CA 2389245952,2389311487,US 2389311488,2389639167,CA @@ -60060,7 +60769,9 @@ 2399184896,2399185919,AR 2399185920,2399186943,TT 2399186944,2399202303,BR -2399202304,2399203327,HN +2399202304,2399202591,HN +2399202592,2399202623,NL +2399202624,2399203327,HN 2399203328,2399204351,CL 2399204352,2399205375,AR 2399205376,2399206399,PE @@ -60269,7 +60980,7 @@ 2416085760,2416086015,GB 2416086016,2416086271,SG 2416086272,2416087039,GB -2416087040,2416091135,NL +2416087040,2416091135,US 2416091136,2416093183,ES 2416093184,2416095231,NL 2416095232,2416111615,US @@ -60547,7 +61258,9 @@ 2427536896,2427537151,US 2427537152,2427544575,NO 2427544832,2427584511,NO -2427584512,2427650047,GB +2427584512,2427625471,GB +2427625472,2427633663,ES +2427633664,2427650047,GB 2427650048,2427846655,NO 2427846656,2428183562,US 2428183564,2428567551,US @@ -60899,9 +61612,13 @@ 2457384960,2457388031,RU 2457388032,2457388543,CZ 2457388544,2457388799,UA -2457388800,2457391103,CZ -2457391104,2457392127,RU -2457392128,2457396223,CZ +2457388800,2457390591,CZ +2457390592,2457392127,RU +2457392128,2457394431,CZ +2457394432,2457394687,RU +2457394688,2457394943,CZ +2457394944,2457395455,RU +2457395456,2457396223,CZ 2457396224,2457397247,DE 2457397248,2457403391,RU 2457403392,2457520895,US @@ -61020,9 +61737,31 @@ 2462500352,2462500863,US 2462500864,2462506495,GB 2462506496,2462507007,US -2462507008,2462526602,GB +2462507008,2462515199,GB +2462515200,2462519295,US +2462519296,2462520319,GB +2462520320,2462521599,US +2462521600,2462521855,GB +2462521856,2462523391,US +2462523392,2462526602,GB 2462526603,2462526603,US -2462526604,2462580736,GB +2462526604,2462531583,GB +2462531584,2462533631,US +2462533632,2462535167,GB +2462535168,2462535679,US +2462535680,2462539775,GB +2462539776,2462540799,US +2462540800,2462541055,GB +2462541056,2462547967,US +2462547968,2462556415,GB +2462556416,2462559231,US +2462559232,2462560255,GB +2462560256,2462564351,US +2462564352,2462572543,GB +2462572544,2462574079,US +2462574080,2462574591,GB +2462574592,2462580735,US +2462580736,2462580736,GB 2462580737,2462582015,US 2462582016,2462582271,GB 2462582272,2462583039,US @@ -61123,7 +61862,8 @@ 2465671168,2465672703,IE 2465672704,2465672959,BG 2465672960,2465673215,IE -2465673216,2465677311,GB +2465673216,2465673471,IM +2465673472,2465677311,GB 2465677312,2465679359,IT 2465679360,2465681407,NL 2465681408,2465683455,SE @@ -61334,9 +62074,9 @@ 2481586688,2481587199,GB 2481587200,2481848319,IL 2481848320,2482175999,US -2482176000,2482208767,FI +2482176000,2482208767,GB 2482208768,2482216959,US -2482216960,2482225151,FI +2482216960,2482225151,GB 2482225152,2482233343,SG 2482233344,2482241535,CN 2482241536,2482634751,US @@ -61374,7 +62114,9 @@ 2486960128,2487025663,FR 2487025664,2487156735,US 2487156736,2487222271,PT -2487222272,2487369727,US +2487222272,2487363583,US +2487363584,2487365631,CA +2487365632,2487369727,US 2487369728,2487386111,PF 2487386112,2487394303,SG 2487394304,2487418879,US @@ -61464,7 +62206,9 @@ 2496004096,2496069631,AT 2496069632,2496135167,US 2496135168,2496200703,NL -2496200704,2499477503,MX +2496200704,2498475007,MX +2498475008,2498476031,EC +2498476032,2499477503,MX 2499477504,2499543039,DE 2499543040,2499545087,GB 2499545088,2499547135,IE @@ -61676,7 +62420,9 @@ 2500687872,2500689919,FR 2500689920,2500694015,US 2500694016,2500697087,IT -2500697088,2500702719,US +2500697088,2500702463,US +2500702464,2500702471,GB +2500702472,2500702719,US 2500702720,2500702975,NL 2500702976,2500719103,US 2500719104,2500721151,IE @@ -61697,7 +62443,9 @@ 2500746776,2500748543,US 2500748544,2500748799,ES 2500748800,2500755455,US -2500755456,2500763647,GB +2500755456,2500761631,GB +2500761632,2500761639,FR +2500761640,2500763647,GB 2500763648,2500984831,US 2500984832,2501033983,GB 2501033984,2501574655,US @@ -61710,8 +62458,8 @@ 2502047744,2502049791,ES 2502049792,2502098943,US 2502098944,2502164479,IT -2502164480,2502165503,GB -2502165504,2502173695,US +2502164480,2502165759,GB +2502165760,2502173695,US 2502173696,2502174207,DE 2502174208,2502180863,US 2502180864,2502181119,FI @@ -61790,10 +62538,8 @@ 2505469952,2505474047,NL 2505474048,2505482239,US 2505482240,2505484287,NL -2505484288,2505487871,US -2505487872,2505488127,FR -2505488128,2505488383,US -2505488384,2505490431,FR +2505484288,2505486335,US +2505486336,2505490431,FR 2505490432,2505498623,HR 2505498624,2505502719,US 2505502720,2505503743,UA @@ -62025,9 +62771,7 @@ 2513102904,2513103895,FR 2513103896,2513103935,PT 2513103936,2513103967,IE -2513103968,2513104819,FR -2513104820,2513104823,PL -2513104824,2513106239,FR +2513103968,2513106239,FR 2513106240,2513106303,IE 2513106304,2513107079,FR 2513107080,2513107083,FI @@ -62106,7 +62850,8 @@ 2522814464,2522815487,SG 2522815488,2522816511,TH 2522816512,2522824703,JP -2522824704,2522841087,SG +2522824704,2522834943,SG +2522834944,2522841087,VN 2522841088,2523201535,JP 2523201536,2523267071,AU 2523267072,2523463679,US @@ -62206,7 +62951,9 @@ 2525298688,2525626367,US 2525626368,2525757439,CN 2525757440,2525822975,GR -2525822976,2526085119,US +2525822976,2525954047,US +2525954048,2526019583,GB +2526019584,2526085119,US 2526085120,2526216191,IT 2526216192,2526412799,US 2526412800,2526478335,KR @@ -62380,7 +63127,9 @@ 2538646272,2538646399,BE 2538646400,2538646783,FR 2538646784,2538647039,CZ -2538647040,2538648015,FR +2538647040,2538647823,FR +2538647824,2538647831,FI +2538647832,2538648015,FR 2538648016,2538648031,ES 2538648032,2538648591,FR 2538648592,2538648623,BE @@ -62416,7 +63165,7 @@ 2538653932,2538653935,FR 2538653936,2538653939,GB 2538653940,2538655071,FR -2538655072,2538655103,ES +2538655072,2538655103,FI 2538655104,2538656959,FR 2538656960,2538656975,ES 2538656976,2538657135,FR @@ -62753,7 +63502,7 @@ 2572954368,2572954623,HK 2572954624,2572954879,AU 2572954880,2572955391,HK -2572955392,2572955647,BG +2572955392,2572955647,DE 2572955648,2572959743,FR 2572959744,2572960255,DE 2572960256,2572960511,SE @@ -62782,7 +63531,10 @@ 2572986112,2572986367,IE 2572986368,2572986623,PL 2572986624,2572986879,PT -2572986880,2572988415,DE +2572986880,2572987391,DE +2572987392,2572987647,NO +2572987648,2572987903,LU +2572987904,2572988415,DE 2572988416,2572989439,IT 2572989440,2572989695,GR 2572989696,2572989823,PL @@ -62879,8 +63631,7 @@ 2584744000,2584744191,ZA 2584744192,2584744447,NL 2584744448,2584744511,AU -2584744512,2584744575,ZA -2584744576,2584744703,DE +2584744512,2584744703,DE 2584744704,2584744959,US 2584744960,2584745023,AU 2584745024,2584745215,ZA @@ -63005,7 +63756,8 @@ 2584763456,2584763903,ZA 2584763904,2584763967,HK 2584763968,2584763999,DE -2584764000,2584764671,ZA +2584764000,2584764415,ZA +2584764416,2584764671,MA 2584764672,2584767231,US 2584767232,2584767487,TR 2584767488,2584768511,US @@ -63013,8 +63765,9 @@ 2584770560,2584773631,US 2584773632,2584773887,GB 2584773888,2584775423,US -2584775424,2584775679,KE -2584775680,2584779775,US +2584775424,2584775679,ZA +2584775680,2584776703,MA +2584776704,2584779775,US 2584779776,2584780031,NL 2584780032,2584780287,US 2584780288,2584780543,ES @@ -63023,7 +63776,7 @@ 2584782336,2584789759,US 2584789760,2584790015,NL 2584790016,2584790783,US -2584790784,2584791039,CN +2584790784,2584791039,HK 2584791040,2584791295,US 2584791296,2584791551,FR 2584791552,2584796159,US @@ -63196,7 +63949,9 @@ 2587639808,2587640063,GB 2587640064,2587648511,US 2587648512,2587649023,ES -2587649024,2587674623,US +2587649024,2587650815,US +2587650816,2587651071,ES +2587651072,2587674623,US 2587674624,2587676671,IT 2587676672,2587680767,US 2587680768,2587683839,ES @@ -63391,7 +64146,7 @@ 2591555584,2591571967,GH 2591571968,2591588351,NG 2591588352,2591604735,MG -2591604736,2591605759,MU +2591604736,2591605759,ZA 2591605760,2591606783,KE 2591606784,2591610879,MU 2591610880,2591612927,ZM @@ -63402,9 +64157,7 @@ 2591948800,2591981567,MG 2591981568,2591997951,CM 2591997952,2592006143,ZA -2592006144,2592007167,TZ -2592007168,2592009215,ZA -2592009216,2592022527,TZ +2592006144,2592022527,TZ 2592022528,2592026623,BJ 2592026624,2592026879,US 2592026880,2592027391,ZA @@ -63425,11 +64178,11 @@ 2592043008,2592047103,ZA 2592047104,2592079871,AO 2592079872,2593128447,EG +2593128448,2593652735,MA 2593652736,2594177023,KE 2594177024,2595225599,GH 2595225600,2596274175,EG -2596274176,2596339711,SC -2596339712,2597322751,ZA +2596274176,2597322751,ZA 2597322752,2598371327,US 2598371328,2598895615,UG 2598895616,2599157759,CI @@ -63956,9 +64709,7 @@ 2627731456,2631925759,EG 2631925760,2632450047,ZA 2632450048,2632974335,US -2632974336,2633236479,ZA -2633236480,2633302015,SC -2633302016,2634022911,ZA +2632974336,2634022911,ZA 2634022912,2634088447,CN 2634088448,2635202559,JP 2635202560,2635268095,CN @@ -64579,8 +65330,8 @@ 2667573248,2667575295,IT 2667575296,2667577343,SK 2667577344,2667642879,SA -2667642880,2667708415,US -2667708416,2667773951,CA +2667642880,2667712511,US +2667712512,2667773951,CA 2667773952,2667970559,US 2667970560,2668036095,CA 2668036096,2668101631,SE @@ -64767,9 +65518,9 @@ 2675613464,2675613471,IL 2675613472,2675613599,US 2675613600,2675613631,JP -2675613632,2675614687,US -2675614688,2675614719,NL -2675614720,2675624399,US +2675613632,2675614975,US +2675614976,2675614991,NL +2675614992,2675624399,US 2675624400,2675624415,CN 2675624416,2675626239,US 2675626240,2675626271,GB @@ -65083,22 +65834,38 @@ 2685599744,2685603839,US 2685604864,2685605887,PK 2685605888,2685607935,US +2685608960,2685609983,ZA +2685611008,2685612031,BR 2685612032,2685613055,CN 2685613056,2685614079,TW 2685616128,2685617151,ID 2685626368,2685627391,US 2685628416,2685632511,ZA 2685640704,2685641727,US +2685642752,2685644799,BR +2685649920,2685650943,ZA 2685652992,2685656063,CN 2685656064,2685657087,IN 2685657088,2685658111,ID +2685661184,2685665279,BR 2685665280,2685668351,IN 2685668352,2685669375,SG +2685670400,2685671423,BR +2685673472,2685674495,BR 2685675520,2685676543,PH 2685676544,2685677567,JP 2685677568,2685678591,CN 2685678592,2685681663,HK +2685681664,2685683711,BR 2685683712,2685684735,BD +2685685760,2685689855,BR +2685706240,2685707263,BR +2685707264,2685708287,EC +2685708288,2685709311,BR +2685709312,2685710335,CL +2685710336,2685712383,BR +2685713408,2685714431,CL +2685714432,2685718527,BR 2685718528,2685719551,US 2685724672,2685726719,CA 2685730816,2685796351,JP @@ -65135,6 +65902,7 @@ 2689204224,2689269759,JP 2689269760,2689335295,TR 2689335296,2689400831,US +2689400832,2689466367,MA 2689466368,2689531903,IT 2689531904,2689535999,US 2689536000,2689536511,GB @@ -65172,7 +65940,9 @@ 2689835520,2689835775,AU 2689835776,2689925119,US 2689925120,2689990655,CH -2689990656,2690383871,US +2689990656,2690187263,US +2690187264,2690318335,MA +2690318336,2690383871,US 2690383872,2690449407,FR 2690449408,2690646015,US 2690646016,2690711551,SG @@ -65183,17 +65953,24 @@ 2690973696,2691104767,US 2691104768,2691170303,FR 2691170304,2691235839,GB +2691235840,2691301375,MA 2691301376,2691366911,CA 2691366912,2691760127,US 2691825664,2691891199,HU -2691891200,2692153343,ZA +2691891200,2691956735,SA +2691956736,2692153343,ZA +2692169728,2692173823,SC 2692173824,2692175871,ZA +2692177920,2692178943,ZA +2692180992,2692182015,GH 2692182016,2692184063,MZ +2692184064,2692185087,ZA 2692185088,2692186111,NG 2692194304,2692202495,GA 2692205568,2692206591,GH 2692206592,2692207615,SZ 2692209664,2692214783,ZA +2692214784,2692215807,AO 2692215808,2692216319,KE 2692216832,2692218879,ZA 2692218880,2692284415,CI @@ -65275,6 +66052,7 @@ 2699973632,2699974655,HK 2699974656,2699976703,IN 2699977728,2699977983,JP +2699978752,2699980799,BR 2700017664,2700214271,JP 2700214272,2700247039,NA 2700247040,2700263423,UG @@ -65352,7 +66130,11 @@ 2704277504,2704343039,FR 2704343040,2704408575,US 2704408576,2704474111,AU -2704474112,2704478207,US +2704474112,2704476159,US +2704476160,2704476415,GB +2704476416,2704476927,US +2704476928,2704477183,GB +2704477184,2704478207,US 2704478208,2704478463,SG 2704478464,2704485119,US 2704485120,2704485375,AU @@ -65413,17 +66195,120 @@ 2708865024,2708930559,JP 2708930560,2709127167,US 2709127168,2709192703,KR -2709192704,2709225471,ZA +2709192704,2709192959,US +2709192960,2709193983,ZA +2709193984,2709194239,US +2709194240,2709194495,ZA +2709194496,2709195007,US +2709195008,2709195263,ZA +2709195264,2709196031,US +2709196032,2709198335,ZA +2709198336,2709198847,US +2709198848,2709199103,ZA +2709199104,2709199359,US +2709199360,2709200383,ZA +2709200384,2709200639,US +2709200640,2709200895,ZA +2709200896,2709201407,US +2709201408,2709202175,ZA +2709202176,2709202943,US +2709202944,2709203711,ZA +2709203712,2709203967,US +2709203968,2709204991,ZA +2709204992,2709205247,US +2709205248,2709205759,ZA +2709205760,2709206271,US +2709206272,2709207039,ZA +2709207040,2709207295,US +2709207296,2709207551,ZA +2709207552,2709207807,US +2709207808,2709208063,ZA +2709208064,2709208319,US +2709208320,2709208575,ZA +2709208576,2709208831,US +2709208832,2709209343,ZA +2709209344,2709209599,US +2709209600,2709210367,ZA +2709210368,2709211135,US +2709211136,2709211903,ZA +2709211904,2709212159,US +2709212160,2709212415,ZA +2709212416,2709212927,US +2709212928,2709213183,ZA +2709213184,2709213439,US +2709213440,2709213951,ZA +2709213952,2709214719,US +2709214720,2709214975,ZA +2709214976,2709215999,US +2709216000,2709216255,ZA +2709216256,2709216511,US +2709216512,2709216767,ZA +2709216768,2709217023,US +2709217024,2709217791,ZA +2709217792,2709218559,US +2709218560,2709219071,ZA +2709219072,2709219327,US +2709219328,2709219839,ZA +2709219840,2709220095,US +2709220096,2709221119,ZA +2709221120,2709221375,US +2709221376,2709221887,ZA +2709221888,2709222399,US +2709222400,2709222655,ZA +2709222656,2709222911,US +2709222912,2709223423,ZA +2709223424,2709224703,US +2709224704,2709224959,ZA +2709224960,2709225471,US 2709225472,2709225727,ES 2709225728,2709225983,ZA 2709225984,2709226239,ES -2709226240,2709242111,ZA +2709226240,2709226495,ZA +2709226496,2709226511,DE +2709226512,2709227775,ZA +2709227776,2709228031,US +2709228032,2709228287,ZA +2709228288,2709228543,US +2709228544,2709228767,ZA +2709228768,2709228783,DE +2709228784,2709229695,ZA +2709229696,2709229711,DE +2709229712,2709230799,ZA +2709230800,2709230815,DE +2709230816,2709230879,ZA +2709230880,2709230895,DE +2709230896,2709231103,ZA +2709231104,2709231119,DE +2709231120,2709232127,ZA +2709232128,2709232383,DE +2709232384,2709232639,ZA +2709232640,2709232895,DE +2709232896,2709233151,US +2709233152,2709233407,DE +2709233408,2709235199,ZA +2709235200,2709235455,DE +2709235456,2709235711,US +2709235712,2709235967,DE +2709235968,2709236223,US +2709236224,2709236479,DE +2709236480,2709238271,ZA +2709238272,2709238527,DE +2709238528,2709238783,ZA +2709238784,2709239039,DE +2709239040,2709240319,ZA +2709240320,2709240575,DE +2709240576,2709240831,ZA +2709240832,2709241087,DE +2709241088,2709241343,US +2709241344,2709241599,DE +2709241600,2709241855,ZA +2709241856,2709242111,DE 2709242112,2709242367,US 2709242368,2709242623,ZA 2709242624,2709242879,US -2709242880,2709243135,ZA +2709242880,2709243135,DE 2709243136,2709243391,US -2709243392,2709243647,ZA +2709243392,2709243647,DE 2709243648,2709243903,US 2709243904,2709244159,ZA 2709244160,2709244415,US @@ -65431,17 +66316,42 @@ 2709244672,2709244927,US 2709244928,2709245183,ZA 2709245184,2709245439,US -2709245440,2709245695,ZA +2709245440,2709245695,DE 2709245696,2709245951,US 2709245952,2709246207,ZA 2709246208,2709246463,US -2709246464,2709247231,ZA +2709246464,2709246735,ZA +2709246736,2709246751,HK +2709246752,2709246847,ZA +2709246848,2709246863,HK +2709246864,2709246959,ZA +2709246960,2709246975,HK +2709246976,2709247231,ZA 2709247232,2709247487,MY -2709247488,2709247743,ZA +2709247488,2709247743,DE 2709247744,2709247999,US 2709248000,2709248255,ZA 2709248256,2709248511,US -2709248512,2709258239,ZA +2709248512,2709249535,ZA +2709249536,2709249791,DE +2709249792,2709250047,ZA +2709250048,2709250303,DE +2709250304,2709251071,ZA +2709251072,2709251327,DE +2709251328,2709251839,ZA +2709251840,2709252095,GB +2709252096,2709252351,DE +2709252352,2709253375,ZA +2709253376,2709253631,US +2709253632,2709254399,ZA +2709254400,2709254655,US +2709254656,2709255935,ZA +2709255936,2709256191,US +2709256192,2709256703,ZA +2709256704,2709256959,DE +2709256960,2709257471,ZA +2709257472,2709257727,US +2709257728,2709258239,ZA 2709258240,2709389311,US 2709389312,2709454847,SG 2709454848,2709716991,US @@ -65491,7 +66401,9 @@ 2714373280,2714373287,NL 2714373288,2714373743,US 2714373744,2714373759,IN -2714373760,2714376223,US +2714373760,2714375039,US +2714375040,2714375055,ID +2714375056,2714376223,US 2714376224,2714376239,JP 2714376240,2714377103,US 2714377104,2714377119,IN @@ -65563,7 +66475,11 @@ 2714433296,2714433311,JP 2714433312,2714433535,US 2714433536,2714433791,JP -2714433792,2714697727,US +2714433792,2714434911,US +2714434912,2714434927,JP +2714434928,2714435055,US +2714435056,2714435071,JP +2714435072,2714697727,US 2714697728,2714763263,CN 2714763264,2715025407,US 2715025408,2715090943,VE @@ -65581,7 +66497,8 @@ 2716794880,2717253631,US 2717253632,2717319167,TH 2717319168,2717384703,US -2717450240,2717646847,US +2717450240,2717581311,US +2717581312,2717646847,RO 2717646848,2717712383,KW 2717712384,2717843455,US 2717843456,2717908991,VE @@ -65589,14 +66506,14 @@ 2717974528,2718629887,US 2718629888,2718695423,GB 2718695424,2718745599,US +2718745600,2718746623,AR 2718748672,2718749695,PK 2718749696,2718750719,BD 2718750720,2718750975,US 2718750976,2718751231,BL -2718751232,2718751487,US -2718751744,2718752767,US +2718751232,2718752767,US 2718752768,2718754815,PR -2718755840,2718756863,US +2718754816,2718756863,US 2718756864,2718758911,IN 2718758912,2718760959,US 2718760960,2718826495,GB @@ -65764,7 +66681,9 @@ 2731717632,2731718655,CA 2731718656,2731728895,US 2731728896,2731729919,CA -2731729920,2731761663,US +2731729920,2731739647,US +2731739648,2731740159,CA +2731740160,2731761663,US 2731761664,2731763711,CA 2731763712,2731765759,US 2731765760,2731767807,CA @@ -65805,7 +66724,8 @@ 2731843584,2731845631,PR 2731845632,2731853823,US 2731853824,2731855871,CA -2731855872,2731856895,VC +2731855872,2731856383,LC +2731856384,2731856895,VC 2731856896,2731862015,US 2731862016,2731864063,CA 2731864064,2731870207,US @@ -65829,9 +66749,14 @@ 2732107776,2732109823,US 2732110848,2732111871,US 2732111872,2732113919,CA -2732113920,2732131327,US +2732113920,2732126207,US +2732127232,2732128767,US +2732128768,2732129023,NL +2732129024,2732131327,US 2732131328,2732132351,CA -2732132352,2732189695,US +2732132352,2732145151,US +2732145664,2732146687,CA +2732146688,2732189695,US 2732189696,2732192767,CA 2732192768,2732194559,US 2732194816,2732201983,US @@ -65988,8 +66913,7 @@ 2734105600,2734106623,CA 2734106624,2734119935,US 2734119936,2734120959,CA -2734120960,2734123007,VG -2734123008,2734125055,US +2734120960,2734125055,US 2734125056,2734129151,CA 2734129152,2734139391,US 2734139392,2734140415,CA @@ -66078,10 +67002,12 @@ 2734457856,2734458879,CA 2734458880,2734467327,US 2734467328,2734467583,CA -2734467584,2734471167,US +2734467584,2734467839,US +2734467840,2734468095,GB +2734468096,2734471167,US 2734471168,2734472191,CA 2734472192,2734473215,AG -2734473216,2734477311,US +2734473216,2734479359,US 2734479360,2734481407,CA 2734481408,2734485503,US 2734485504,2734486527,CA @@ -66412,7 +67338,9 @@ 2760114816,2760114847,FI 2760114848,2760115327,FR 2760115328,2760115455,GB -2760115456,2760115775,FR +2760115456,2760115711,FR +2760115712,2760115719,IE +2760115720,2760115775,FR 2760115776,2760115839,ES 2760115840,2760116207,FR 2760116208,2760116223,FI @@ -66482,9 +67410,7 @@ 2760137216,2760137471,GB 2760137472,2760137535,FR 2760137536,2760137599,ES -2760137600,2760138335,FR -2760138336,2760138367,FI -2760138368,2760143039,FR +2760137600,2760143039,FR 2760143040,2760143103,ES 2760143104,2760143615,FR 2760143616,2760143871,GB @@ -66561,7 +67487,8 @@ 2760169472,2760169503,FI 2760169504,2760169679,FR 2760169680,2760169695,ES -2760169696,2760170047,FR +2760169696,2760169983,FR +2760169984,2760170047,ES 2760170048,2760170111,FI 2760170112,2760170815,FR 2760170816,2760170847,PT @@ -66713,6 +67640,8 @@ 2772828160,2772959231,US 2772959232,2773010431,CZ 2773010688,2773024767,CZ +2773085184,2773086207,SL +2773086208,2773090303,ZA 2773090304,2773221375,US 2773221376,2773286911,JP 2773286912,2773745663,US @@ -66777,7 +67706,9 @@ 2779971584,2780037119,US 2780037120,2780039167,ZA 2780039168,2780043263,US -2780043264,2780075007,ZA +2780043264,2780073471,ZA +2780073472,2780073727,AU +2780073728,2780075007,ZA 2780075008,2780075519,US 2780075520,2780102655,ZA 2780102656,2780168191,US @@ -66875,7 +67806,9 @@ 2783012352,2783012607,TW 2783012608,2783012863,US 2783012864,2783013887,IN -2783013888,2783182847,US +2783013888,2783150079,US +2783150080,2783154175,DE +2783154176,2783182847,US 2783182848,2783248383,AU 2783248384,2783313919,KR 2783313920,2783379455,US @@ -67599,7 +68532,9 @@ 2832010240,2832023551,BR 2832023552,2832024575,CR 2832024576,2832025599,BR -2832025600,2832026623,HN +2832025600,2832026015,HN +2832026016,2832026031,DE +2832026032,2832026623,HN 2832026624,2832030719,BR 2832030720,2832031743,AR 2832031744,2832032767,BO @@ -67640,7 +68575,10 @@ 2833476608,2833481727,BR 2833481728,2833482751,HN 2833482752,2833484799,BR -2833484800,2833485823,HN +2833484800,2833485311,HN +2833485312,2833485519,US +2833485520,2833485527,BE +2833485528,2833485823,US 2833485824,2833486847,AR 2833486848,2833501183,BR 2833501184,2833502207,AR @@ -67649,7 +68587,9 @@ 2833512448,2833513471,BR 2833513472,2833514495,AR 2833514496,2833525759,BR -2833525760,2833526783,HN +2833525760,2833526639,HN +2833526640,2833526655,FR +2833526656,2833526783,HN 2833526784,2833527807,CR 2833527808,2833528831,MX 2833528832,2833529855,AR @@ -67768,21 +68708,23 @@ 2838301192,2838301199,US 2838301200,2838301695,NL 2838301696,2838301951,US -2838301952,2838304127,NL +2838301952,2838302111,NL +2838302112,2838302127,US +2838302128,2838304127,NL 2838304128,2838304159,US -2838304160,2838304223,NL -2838304224,2838304255,US -2838304256,2838304319,NL +2838304160,2838304319,NL 2838304320,2838304383,US 2838304384,2838304447,NL 2838304448,2838304511,US 2838304512,2838304703,NL 2838304704,2838304767,US 2838304768,2838305119,NL -2838305120,2838305159,US -2838305160,2838305247,NL +2838305120,2838305151,US +2838305152,2838305247,NL 2838305248,2838305279,US -2838305280,2838307055,NL +2838305280,2838305663,NL +2838305664,2838305727,US +2838305728,2838307055,NL 2838307056,2838307063,US 2838307064,2838307135,NL 2838307136,2838307183,US @@ -67798,7 +68740,9 @@ 2838308192,2838308223,US 2838308224,2838315023,NL 2838315024,2838315039,US -2838315040,2838315279,NL +2838315040,2838315151,NL +2838315152,2838315167,US +2838315168,2838315279,NL 2838315280,2838315295,US 2838315296,2838315391,NL 2838315392,2838315407,US @@ -67824,7 +68768,9 @@ 2838318512,2838318527,US 2838318528,2838318655,NL 2838318656,2838318687,US -2838318688,2838320191,NL +2838318688,2838318867,NL +2838318868,2838318871,US +2838318872,2838320191,NL 2838320192,2838320192,US 2838320193,2838320543,NL 2838320544,2838320551,US @@ -67852,7 +68798,9 @@ 2838325440,2838325471,JP 2838325472,2838325983,NL 2838325984,2838326015,US -2838326016,2838327623,NL +2838326016,2838326591,NL +2838326592,2838326623,US +2838326624,2838327623,NL 2838327624,2838327631,US 2838327632,2838328079,NL 2838328080,2838328111,US @@ -68044,9 +68992,13 @@ 2838406088,2838406095,US 2838406096,2838406271,NL 2838406272,2838406279,US -2838406280,2838406959,NL +2838406280,2838406687,NL +2838406688,2838406719,US +2838406720,2838406959,NL 2838406960,2838406967,US -2838406968,2838408591,NL +2838406968,2838407103,NL +2838407104,2838407119,US +2838407120,2838408591,NL 2838408592,2838408599,US 2838408600,2838408735,NL 2838408736,2838408767,US @@ -68056,7 +69008,9 @@ 2838409440,2838409471,US 2838409472,2838409479,NL 2838409480,2838409503,US -2838409504,2838410191,NL +2838409504,2838409599,NL +2838409600,2838409615,US +2838409616,2838410191,NL 2838410192,2838410199,US 2838410200,2838410367,NL 2838410368,2838410399,US @@ -68066,8 +69020,8 @@ 2838411328,2838411359,US 2838411360,2838414207,NL 2838414208,2838414271,US -2838414272,2838414783,NL -2838414784,2838414879,US +2838414272,2838414815,NL +2838414816,2838414879,US 2838414880,2838414911,JP 2838414912,2838415167,NL 2838415168,2838415183,US @@ -68085,7 +69039,9 @@ 2838416624,2838416639,AF 2838416640,2838418143,NL 2838418144,2838418175,US -2838418176,2838419455,NL +2838418176,2838418687,NL +2838418688,2838418751,US +2838418752,2838419455,NL 2838419456,2838421503,US 2838421504,2838429983,NL 2838429984,2838430015,US @@ -68111,13 +69067,15 @@ 2838436816,2838436831,US 2838436832,2838437359,NL 2838437360,2838437361,US -2838437362,2838437471,NL -2838437472,2838437503,US -2838437504,2838438127,NL +2838437362,2838438127,NL 2838438128,2838438135,US -2838438136,2838439935,NL +2838438136,2838438463,NL +2838438464,2838438495,US +2838438496,2838439935,NL 2838439936,2838439943,US -2838439944,2838441215,NL +2838439944,2838440111,NL +2838440112,2838440127,US +2838440128,2838441215,NL 2838441216,2838441247,US 2838441248,2838441375,NL 2838441376,2838441407,US @@ -68161,19 +69119,25 @@ 2838447336,2838447343,US 2838447344,2838447471,NL 2838447472,2838447487,US -2838447488,2838447647,NL -2838447648,2838447663,US -2838447664,2838447759,NL +2838447488,2838447759,NL 2838447760,2838447775,US -2838447776,2838447887,NL -2838447888,2838447903,US -2838447904,2838448223,NL +2838447776,2838448223,NL 2838448224,2838448239,US -2838448240,2838461535,NL +2838448240,2838448255,NL +2838448256,2838448271,US +2838448272,2838448591,NL +2838448592,2838448607,US +2838448608,2838448799,NL +2838448800,2838448815,US +2838448816,2838448895,NL +2838448896,2838448959,US +2838448960,2838449375,NL +2838449376,2838449391,US +2838449392,2838449535,NL +2838449536,2838449663,US +2838449664,2838461535,NL 2838461536,2838461567,US -2838461568,2838461727,NL -2838461728,2838461759,US -2838461760,2838461823,NL +2838461568,2838461823,NL 2838461824,2838461855,US 2838461856,2838461951,NL 2838461952,2838461983,US @@ -68181,11 +69145,27 @@ 2838462112,2838462119,US 2838462120,2838463583,NL 2838463584,2838463615,US -2838463616,2838466063,NL +2838463616,2838465599,NL +2838465600,2838465615,US +2838465616,2838465663,NL +2838465664,2838465671,US +2838465672,2838465711,NL +2838465712,2838465727,US +2838465728,2838466063,NL 2838466064,2838466079,US -2838466080,2838478975,NL +2838466080,2838466607,NL +2838466608,2838466623,US +2838466624,2838466687,NL +2838466688,2838466719,US +2838466720,2838466959,NL +2838466960,2838466975,US +2838466976,2838478975,NL 2838478976,2838479007,US -2838479008,2838479455,NL +2838479008,2838479207,NL +2838479208,2838479215,US +2838479216,2838479431,NL +2838479432,2838479439,US +2838479440,2838479455,NL 2838479456,2838479487,US 2838479488,2838480127,NL 2838480128,2838480159,US @@ -68222,35 +69202,69 @@ 2838485696,2838485727,US 2838485728,2838486463,NL 2838486464,2838486495,US -2838486496,2838487263,NL -2838487264,2838487295,US -2838487296,2838487647,NL +2838486496,2838487647,NL 2838487648,2838487679,US 2838487680,2838487743,NL 2838487744,2838487807,US -2838487808,2838489647,NL -2838489648,2838489663,US -2838489664,2838491943,NL +2838487808,2838488663,NL +2838488664,2838488671,US +2838488672,2838491943,NL 2838491944,2838491951,US -2838491952,2838493711,NL +2838491952,2838492479,NL +2838492480,2838492511,US +2838492512,2838492679,NL +2838492680,2838492687,US +2838492688,2838492959,NL +2838492960,2838492967,US +2838492968,2838493711,NL 2838493712,2838493727,US -2838493728,2838495359,NL -2838495360,2838495375,US -2838495376,2838526977,NL -2838526978,2838526979,US -2838526980,2838526983,NL +2838493728,2838494655,NL +2838494656,2838494671,US +2838494672,2838496127,NL +2838496128,2838496159,US +2838496160,2838511887,NL +2838511888,2838511903,BR +2838511904,2838511935,NL +2838511936,2838511951,JP +2838511952,2838511983,NL +2838511984,2838511999,JP +2838512000,2838512047,NL +2838512048,2838512079,US +2838512080,2838512255,NL +2838512256,2838512271,US +2838512272,2838512303,NL +2838512304,2838512319,US +2838512320,2838512351,NL +2838512352,2838512367,AF +2838512368,2838512519,NL +2838512520,2838512543,US +2838512544,2838512655,NL +2838512656,2838512671,US +2838512672,2838512879,NL +2838512880,2838512895,US +2838512896,2838526983,NL 2838526984,2838527039,US 2838527040,2838527055,NL 2838527056,2838527071,US 2838527072,2838527223,NL -2838527224,2838527247,US -2838527248,2838527279,NL +2838527224,2838527231,US +2838527232,2838527279,NL 2838527280,2838527295,US 2838527296,2838527439,NL 2838527440,2838527455,US 2838527456,2838527535,NL -2838527536,2838527551,US -2838527552,2838560767,NL +2838527536,2838527567,US +2838527568,2838527695,NL +2838527696,2838527711,US +2838527712,2838528255,NL +2838528256,2838528271,US +2838528272,2838528431,NL +2838528432,2838528447,US +2838528448,2838529167,NL +2838529168,2838529183,US +2838529184,2838530095,NL +2838530096,2838530111,US +2838530112,2838560767,NL 2838560768,2838626303,CH 2838626304,2838626399,US 2838626400,2838626431,SA @@ -68269,7 +69283,9 @@ 2838632096,2838632127,DE 2838632128,2838633295,US 2838633296,2838633311,SA -2838633312,2838642719,US +2838633312,2838641263,US +2838641264,2838641279,NL +2838641280,2838642719,US 2838642720,2838642723,AE 2838642724,2838643407,US 2838643408,2838643408,GB @@ -68293,7 +69309,9 @@ 2838650528,2838650559,GB 2838650560,2838653631,US 2838653632,2838653639,GB -2838653640,2838657295,US +2838653640,2838653646,US +2838653647,2838653647,GB +2838653648,2838657295,US 2838657296,2838657299,AE 2838657300,2838658607,US 2838658608,2838658623,NL @@ -68309,17 +69327,13 @@ 2838664080,2838664095,BO 2838664096,2838664167,US 2838664168,2838664175,VN -2838664176,2838664727,US -2838664728,2838664735,ZA -2838664736,2838665759,US +2838664176,2838665759,US 2838665760,2838665791,JP 2838665792,2838669519,US 2838669520,2838669535,NL 2838669536,2838670623,US 2838670624,2838670655,NL -2838670656,2838676703,US -2838676704,2838676719,GB -2838676720,2838678319,US +2838670656,2838678319,US 2838678320,2838678327,GB 2838678328,2838680639,US 2838680640,2838680655,GB @@ -68369,13 +69383,17 @@ 2838931014,2838931015,CZ 2838931016,2838931016,US 2838931017,2838931023,CZ -2838931024,2838933919,US +2838931024,2838931647,US +2838931648,2838931663,NO +2838931664,2838933919,US 2838933920,2838933951,NL 2838933952,2838938991,US 2838938992,2838939007,AU 2838939008,2838946735,US 2838946736,2838946751,CA -2838946752,2838957535,US +2838946752,2838950703,US +2838950704,2838950719,NL +2838950720,2838957535,US 2838957536,2838957551,HK 2838957552,2838960815,US 2838960816,2838960819,CZ @@ -68409,7 +69427,9 @@ 2838989672,2838989679,CA 2838989680,2838990719,US 2838990720,2838990751,CA -2838990752,2838995823,US +2838990752,2838994239,US +2838994240,2838994255,NO +2838994256,2838995823,US 2838995824,2838995839,NL 2838995840,2838996063,US 2838996064,2838996095,HK @@ -68419,29 +69439,28 @@ 2838999408,2838999423,AF 2838999424,2839001263,US 2839001264,2839001279,CA -2839001280,2839019519,US -2839019520,2839019535,CN -2839019536,2839019551,US -2839019552,2839019567,JP -2839019568,2839019583,CN -2839019584,2839019599,KR -2839019600,2839019615,JP -2839019616,2839019647,CA -2839019648,2839019663,CN -2839019664,2839019679,US -2839019680,2839019687,HK -2839019688,2839019711,JP -2839019712,2839019775,CA -2839019776,2839019791,JP -2839019792,2839019807,US -2839019808,2839019839,HK -2839019840,2839019903,CN -2839019904,2839035903,US +2839001280,2839019687,US +2839019688,2839019695,JP +2839019696,2839035903,US 2839035904,2839052287,KR -2839052288,2839085055,US +2839052288,2839055039,US +2839055040,2839055041,NL +2839055042,2839055727,US +2839055728,2839055743,NL +2839055744,2839085055,US 2839085056,2839117823,MX 2839117824,2839150591,BR -2839150592,2840015359,US +2839150592,2839313471,US +2839313472,2839313475,NL +2839313476,2839313759,US +2839313760,2839313775,NL +2839313776,2839363679,US +2839363680,2839363683,NL +2839363684,2839363685,US +2839363686,2839363687,NL +2839363688,2839379615,US +2839379616,2839379631,NL +2839379632,2840015359,US 2840015360,2840015615,GB 2840015616,2843803647,US 2843803648,2843869183,ZA @@ -68485,7 +69504,7 @@ 2851023872,2851024895,ZA 2851024896,2851025919,NG 2851025920,2851026943,GH -2851026944,2851027967,DZ +2851026944,2851027967,NG 2851027968,2851028991,ZA 2851028992,2851030015,CI 2851030016,2851031039,ZA @@ -68514,8 +69533,10 @@ 2851055616,2851057663,KE 2851057664,2851060735,ZA 2851060736,2851062783,NG -2851062784,2851063807,ZA -2851063808,2851065855,SC +2851062784,2851063807,SL +2851063808,2851064319,SC +2851064320,2851064831,NA +2851064832,2851065855,SC 2851065856,2851066879,ZA 2851066880,2851067903,CD 2851067904,2851071999,ZA @@ -68542,7 +69563,7 @@ 2852076032,2852077567,ZA 2852077568,2852078591,CD 2852078592,2852079615,TN -2852079616,2852080639,GB +2852079616,2852080639,CG 2852080640,2852081663,ZA 2852081664,2852082687,BW 2852082688,2852083711,EG @@ -68558,7 +69579,7 @@ 2852092928,2852093951,NG 2852093952,2852094975,ZA 2852094976,2852095999,MZ -2852096000,2852097023,SD +2852096000,2852097023,SS 2852097024,2852098047,NG 2852098048,2852099071,ZA 2852099072,2852100095,GA @@ -68615,10 +69636,10 @@ 2855288832,2855305215,GB 2855305216,2855309311,HK 2855309312,2855469055,US -2855469056,2855481343,PY -2855481344,2855483391,AR -2855483392,2855484415,PY -2855484416,2855485183,AR +2855469056,2855484415,PY +2855484416,2855484671,AR +2855484672,2855484927,PY +2855484928,2855485183,AR 2855485184,2855501823,UY 2855501824,2855534591,AR 2855534592,2855706623,US @@ -69205,7 +70226,9 @@ 2868599808,2868604415,US 2868604416,2868604927,IN 2868604928,2868628639,US -2868628672,2868658175,US +2868628672,2868632575,US +2868632576,2868633087,BR +2868633088,2868658175,US 2868658176,2868659199,GB 2868659200,2868660223,US 2868660480,2868662271,US @@ -69243,7 +70266,9 @@ 2868814848,2868815871,AR 2868815872,2868816895,BR 2868816896,2868817919,VE -2868817920,2868818943,HN +2868817920,2868818887,HN +2868818888,2868818895,IT +2868818896,2868818943,HN 2868818944,2868825087,BR 2868825088,2868826111,AR 2868826112,2868828159,BR @@ -69383,9 +70408,12 @@ 2890184704,2890185727,ZA 2890185728,2890187775,US 2890187776,2890188799,IT -2890188800,2890191871,US +2890188800,2890189823,LK +2890189824,2890191871,US 2890191872,2890192895,CZ -2890192896,2890956799,US +2890192896,2890194943,US +2890194944,2890195967,HU +2890195968,2890956799,US 2890956800,2890989567,AE 2890989568,2891017215,US 2891017216,2891017471,JP @@ -69412,8 +70440,8 @@ 2891380736,2891403263,US 2891403264,2891407359,CA 2891407360,2891780095,US -2891780096,2891784191,CA -2891784192,2891790335,US +2891780096,2891786239,CA +2891786240,2891790335,US 2891790336,2891791359,CA 2891791360,2891796479,US 2891796480,2891800575,CA @@ -69445,7 +70473,8 @@ 2891851264,2891851519,AM 2891851520,2891853567,US 2891853568,2891853823,SG -2891853824,2891854335,US +2891853824,2891854079,US +2891854080,2891854335,IN 2891854336,2891855615,NL 2891855616,2891856127,SE 2891856128,2891856383,LU @@ -69559,7 +70588,11 @@ 2892401920,2892402047,MF 2892402048,2892402175,US 2892402176,2892402303,MP -2892402304,2892420607,US +2892402304,2892414975,US +2892414976,2892415231,GB +2892415232,2892417791,US +2892417792,2892418047,GB +2892418048,2892420607,US 2892420608,2892420863,CA 2892420864,2892421631,US 2892421632,2892421887,CA @@ -69727,7 +70760,15 @@ 2899574784,2899902463,GB 2899902464,2899967999,US 2899968000,2900099071,CA -2900099072,2901740455,US +2900099072,2901475327,US +2901475328,2901477375,NL +2901477376,2901485567,US +2901485568,2901489663,NL +2901489664,2901491711,US +2901491712,2901493759,NL +2901493760,2901496831,US +2901496832,2901497855,NL +2901497856,2901740455,US 2901740456,2901740463,CA 2901740464,2901751295,US 2901751296,2901751551,GB @@ -69744,7 +70785,17 @@ 2902405936,2902405951,US 2902405952,2902408191,CA 2902408192,2902409215,GB -2902409216,2902476543,US +2902409216,2902417407,US +2902417408,2902421503,NL +2902421504,2902427647,US +2902427648,2902429695,NL +2902429696,2902441983,US +2902441984,2902446079,NL +2902446080,2902450175,US +2902450176,2902454271,NL +2902454272,2902456319,US +2902456320,2902458367,NL +2902458368,2902476543,US 2902476544,2902476799,CW 2902476800,2902487551,US 2902487552,2902488063,CA @@ -69818,8 +70869,8 @@ 2915520512,2915520642,AU 2915520643,2915520643,US 2915520644,2915520671,AU -2915520672,2915520735,US -2915520736,2915521023,AU +2915520672,2915520767,US +2915520768,2915521023,AU 2915521024,2915521279,JP 2915521280,2915521535,PL 2915521536,2915526911,US @@ -69864,7 +70915,8 @@ 2916296704,2916302847,US 2916302848,2916303359,CA 2916303360,2916303871,DE -2916303872,2916304895,US +2916303872,2916304383,CA +2916304384,2916304895,US 2916304896,2916305919,GB 2916305920,2916319231,US 2916319232,2916335615,PR @@ -69992,7 +71044,9 @@ 2918154240,2918170623,CA 2918170624,2918174463,US 2918174464,2918174719,MX -2918174720,2918187007,US +2918174720,2918180351,US +2918180352,2918180863,CA +2918180864,2918187007,US 2918187008,2918187263,CA 2918187264,2918187775,US 2918187776,2918188031,CA @@ -70021,7 +71075,9 @@ 2918407424,2918408191,PR 2918408192,2918432767,US 2918432768,2918436863,CA -2918436864,2918463231,US +2918436864,2918459391,US +2918459392,2918459647,CA +2918459648,2918463231,US 2918463232,2918463487,CA 2918463488,2918469631,US 2918469632,2918472703,CA @@ -70176,7 +71232,9 @@ 2928261712,2928261887,CA 2928261888,2928263167,US 2928263168,2928279551,CA -2928279552,2928304127,US +2928279552,2928283647,US +2928283648,2928287743,SG +2928287744,2928304127,US 2928304128,2928305151,NL 2928305152,2928312319,US 2928312320,2928316415,CA @@ -70345,7 +71403,6 @@ 2947593216,2947594239,HK 2947594240,2947595263,IN 2947595264,2947596287,CN -2947596288,2947597311,IN 2947597312,2947598335,JP 2947598336,2947602431,AU 2947602432,2947603455,NZ @@ -70629,9 +71686,7 @@ 2954840612,2954840615,GB 2954840616,2954840767,FR 2954840768,2954840775,GB -2954840776,2954840783,FR -2954840784,2954840799,ES -2954840800,2954840927,FR +2954840776,2954840927,FR 2954840928,2954840931,DE 2954840932,2954841023,FR 2954841024,2954841087,ES @@ -70648,7 +71703,9 @@ 2954841852,2954841855,ES 2954841856,2954842075,FR 2954842076,2954842079,GB -2954842080,2954842239,FR +2954842080,2954842111,FR +2954842112,2954842143,FI +2954842144,2954842239,FR 2954842240,2954842243,ES 2954842244,2954842247,FR 2954842248,2954842251,ES @@ -70662,9 +71719,7 @@ 2954843044,2954843047,GB 2954843048,2954843187,FR 2954843188,2954843191,GB -2954843192,2954843479,FR -2954843480,2954843487,GB -2954843488,2954843503,FR +2954843192,2954843503,FR 2954843504,2954843507,ES 2954843508,2954843759,FR 2954843760,2954843771,ES @@ -70814,7 +71869,9 @@ 2954873696,2954873727,FI 2954873728,2954873839,FR 2954873840,2954873847,ES -2954873848,2954873919,FR +2954873848,2954873879,FR +2954873880,2954873887,PT +2954873888,2954873919,FR 2954873920,2954873983,IE 2954873984,2954874111,GB 2954874112,2954874127,FR @@ -70984,9 +72041,7 @@ 2956602368,2956602623,NL 2956602624,2956602879,SE 2956602880,2956603135,GB -2956603136,2956604671,RU -2956604672,2956604927,NL -2956604928,2956605439,RU +2956603136,2956605439,RU 2956605440,2956605695,DE 2956605696,2956607487,RU 2956607488,2956611583,PS @@ -71408,8 +72463,8 @@ 2960752640,2960769023,RU 2960769024,2960773119,UA 2960773120,2960777215,RU -2960777216,2960785407,UA -2960785408,2960793599,RU +2960777216,2960789503,UA +2960789504,2960793599,RU 2960793600,2960797695,CZ 2960797696,2960805887,RU 2960805888,2960807935,KZ @@ -71499,8 +72554,7 @@ 2961065216,2961065471,AU 2961065472,2961065727,SE 2961065728,2961066239,HK -2961066240,2961067263,DE -2961067264,2961067519,US +2961066240,2961067519,DE 2961067520,2961067775,GB 2961067776,2961068543,DE 2961068544,2961068799,NL @@ -71524,7 +72578,8 @@ 2961102848,2961103871,DE 2961103872,2961104895,RO 2961104896,2961106943,GB -2961106944,2961108991,RO +2961106944,2961107967,NL +2961107968,2961108991,RO 2961108992,2961111039,GB 2961111040,2961112063,PL 2961112064,2961113087,RO @@ -72340,9 +73395,7 @@ 2988508608,2988508639,ES 2988508640,2988508847,FR 2988508848,2988508855,GB -2988508856,2988508959,FR -2988508960,2988508975,ES -2988508976,2988509491,FR +2988508856,2988509491,FR 2988509492,2988509495,IE 2988509496,2988509511,FR 2988509512,2988509515,PL @@ -73321,66 +74374,10 @@ 3001862144,3001863167,EE 3001863168,3001864191,LT 3001864192,3001868287,RU -3001868288,3001868847,FR -3001868848,3001868851,AU -3001868852,3001868855,MX -3001868856,3001868859,KR -3001868860,3001868863,FR -3001868864,3001868867,TR -3001868868,3001868871,ID -3001868872,3001868875,CH -3001868876,3001868879,PL -3001868880,3001868883,BE -3001868884,3001868887,SE -3001868888,3001868891,SA -3001868892,3001868895,TW -3001868896,3001868899,SJ -3001868900,3001868903,AT -3001868904,3001868907,AR -3001868908,3001868911,ZA -3001868912,3001868915,IR -3001868916,3001868919,TH -3001868920,3001868923,DK -3001868924,3001868927,GR -3001868928,3001868931,AE -3001868932,3001868935,VE -3001868936,3001868939,CD -3001868940,3001868943,FI -3001868944,3001868947,MY -3001868948,3001868951,PT -3001868952,3001868955,HK -3001868956,3001868959,SG -3001868960,3001868963,EG -3001868964,3001868967,NG -3001868968,3001868971,IL -3001868972,3001868975,IE -3001868976,3001868979,CL -3001868980,3001868983,CZ -3001868984,3001868987,PH -3001868988,3001868991,PK -3001868992,3001868995,RO -3001868996,3001868999,DZ -3001869000,3001869003,PE -3001869004,3001869007,NZ -3001869008,3001869011,KZ -3001869012,3001869015,UA -3001869016,3001869019,KW -3001869020,3001869023,QA -3001869024,3001869027,HU -3001869028,3001869031,BD -3001869032,3001869035,VN -3001869036,3001869039,MA -3001869040,3001869043,SK -3001869044,3001869047,AO -3001869048,3001869051,IQ -3001869052,3001869055,LY -3001869056,3001869311,RU +3001868288,3001869311,US 3001869312,3001870335,FR 3001870336,3001871359,HK -3001871360,3001871615,GR -3001871616,3001871871,PL -3001871872,3001872127,PT -3001872128,3001872383,RO +3001871360,3001872383,US 3001872384,3001876479,RU 3001876480,3001880575,IT 3001880576,3001884671,RU @@ -73624,13 +74621,16 @@ 3003129600,3003129855,HN 3003129856,3003138047,MX 3003138048,3003146239,HN -3003146240,3003150335,CR +3003146240,3003148287,GT +3003148288,3003150335,CR 3003150336,3003154431,SV 3003154432,3003154687,CL 3003154688,3003154943,EC 3003154944,3003159039,AR 3003159040,3003159295,CO -3003159296,3003160575,AR +3003159296,3003159807,AR +3003159808,3003160063,BR +3003160064,3003160575,AR 3003160576,3003160831,CL 3003160832,3003161087,PE 3003161088,3003161599,CL @@ -73662,11 +74662,13 @@ 3005218816,3005349887,CO 3005349888,3005480959,BR 3005480960,3005874175,AR -3005874176,3005898495,PA +3005874176,3005897983,PA +3005897984,3005898239,CO +3005898240,3005898495,PA 3005898496,3005898751,CO 3005898752,3005901823,PA -3005901824,3005902335,CO -3005902336,3005902591,PA +3005901824,3005902079,CO +3005902080,3005902591,PA 3005902592,3005902847,CO 3005902848,3005903615,PA 3005903616,3005903871,CO @@ -73674,8 +74676,8 @@ 3005905664,3005905919,CO 3005905920,3005906431,PA 3005906432,3005906687,CO -3005906688,3005914879,PA -3005914880,3005915135,CO +3005906688,3005914623,PA +3005914624,3005915135,CO 3005915136,3005918207,AR 3005918208,3005919231,CO 3005919232,3005923327,AR @@ -73688,23 +74690,33 @@ 3005972480,3005988863,CH 3005988864,3006005247,DO 3006005248,3006267391,VE -3006267392,3006286335,PA +3006267392,3006283775,PA +3006283776,3006284031,CR +3006284032,3006284543,PA +3006284544,3006284799,CR +3006284800,3006286335,PA 3006286336,3006286591,CR -3006286592,3006288895,PA -3006288896,3006289151,CR -3006289152,3006291455,PA -3006291456,3006291711,CR -3006291712,3006308351,PA +3006286592,3006288127,PA +3006288128,3006288383,CR +3006288384,3006308351,PA 3006308352,3006308607,CR -3006308608,3006314239,PA +3006308608,3006309887,PA +3006309888,3006310143,CR +3006310144,3006313727,PA +3006313728,3006313983,CR +3006313984,3006314239,PA 3006314240,3006314751,CR 3006314752,3006320639,PA 3006320640,3006320895,CR 3006320896,3006323967,PA 3006323968,3006324223,CR -3006324224,3006328831,PA -3006328832,3006329343,NI -3006329344,3006330623,PA +3006324224,3006324479,PA +3006324480,3006324735,CR +3006324736,3006328831,PA +3006328832,3006329087,NI +3006329088,3006329343,PA +3006329344,3006329599,NI +3006329600,3006330623,PA 3006330624,3006330879,NI 3006330880,3006331903,CR 3006331904,3006332927,AR @@ -73723,6 +74735,7 @@ 3006488576,3006496767,CO 3006496768,3006521343,CR 3006521344,3006527487,AR +3006527488,3006528511,BR 3006528512,3006529535,BZ 3006529536,3006660607,DO 3006660608,3006791679,BR @@ -73776,10 +74789,12 @@ 3007154704,3007154719,DE 3007154720,3007154943,CL 3007154944,3007155199,US -3007155200,3007155327,DE +3007155200,3007155215,CL +3007155216,3007155231,DE +3007155232,3007155327,CL 3007155328,3007155711,US 3007155712,3007155967,DE -3007155968,3007156223,US +3007155968,3007156223,AT 3007156224,3007156351,DE 3007156352,3007156479,US 3007156480,3007156495,ES @@ -73938,7 +74953,9 @@ 3007176384,3007176447,CL 3007176448,3007176703,US 3007176704,3007177727,IN -3007177728,3007181055,US +3007177728,3007179007,US +3007179008,3007179263,KR +3007179264,3007181055,US 3007181056,3007181183,BR 3007181184,3007181215,IT 3007181216,3007181247,IS @@ -73968,7 +74985,9 @@ 3007184896,3007250431,AR 3007250432,3007284735,CR 3007284736,3007284991,PA -3007284992,3007286783,CR +3007284992,3007286015,CR +3007286016,3007286271,PA +3007286272,3007286783,CR 3007286784,3007287039,PA 3007287040,3007299583,CR 3007299584,3007301631,PA @@ -74027,8 +75046,8 @@ 3025612832,3025612895,IN 3025612896,3025613087,SG 3025613088,3025613119,IN -3025613120,3025613311,SG -3025613312,3025616895,IN +3025613120,3025613327,SG +3025613328,3025616895,IN 3025616896,3025617439,SG 3025617440,3025617447,IN 3025617448,3025617455,SG @@ -74054,7 +75073,9 @@ 3025622016,3025622275,SG 3025622276,3025622279,IN 3025622280,3025622399,SG -3025622400,3025623055,IN +3025622400,3025622527,IN +3025622528,3025622783,ID +3025622784,3025623055,IN 3025623056,3025623103,SG 3025623104,3025623247,IN 3025623248,3025623251,HK @@ -74214,7 +75235,9 @@ 3026087936,3026089983,AU 3026089984,3026092031,CN 3026092032,3026108415,MO -3026108416,3026116607,JP +3026108416,3026114559,JP +3026114560,3026115583,SG +3026115584,3026116607,AU 3026116608,3026118655,HK 3026118656,3026120703,AU 3026120704,3026124799,JP @@ -74264,8 +75287,8 @@ 3029715456,3029716991,JP 3029716992,3029721087,PK 3029721088,3029722111,IN -3029722112,3029722367,AU -3029722368,3029723135,IN +3029722112,3029722623,AU +3029722624,3029723135,IN 3029723136,3029724159,BD 3029724160,3029725183,CN 3029725184,3029727231,IN @@ -74458,15 +75481,18 @@ 3039415296,3039415551,US 3039415552,3039415807,BR 3039415808,3039416575,US -3039416576,3039416591,BR +3039416576,3039416591,CL 3039416592,3039416607,SG -3039416608,3039416713,BR +3039416608,3039416639,CL +3039416640,3039416703,BR +3039416704,3039416713,CL 3039416714,3039416715,US 3039416716,3039416719,SG -3039416720,3039416735,BR +3039416720,3039416735,CL 3039416736,3039416739,US 3039416740,3039416741,SG -3039416742,3039417087,BR +3039416742,3039416831,CL +3039416832,3039417087,BR 3039417088,3039417343,DE 3039417344,3039417599,BR 3039417600,3039417855,US @@ -74528,26 +75554,28 @@ 3048144896,3048210431,EC 3048210432,3048275967,PE 3048275968,3048292351,AR -3048292352,3048293271,BZ +3048292352,3048293271,CA 3048293272,3048293279,ES -3048293280,3048294627,BZ +3048293280,3048294399,CA +3048294400,3048294627,BZ 3048294628,3048294631,BR -3048294632,3048296351,BZ +3048294632,3048294759,BZ +3048294760,3048294767,BR +3048294768,3048296351,BZ 3048296352,3048296383,CA 3048296384,3048296751,BZ 3048296752,3048296759,CA 3048296760,3048299599,BZ 3048299600,3048299607,BR -3048299608,3048300863,BZ +3048299608,3048299655,BZ +3048299656,3048299663,BR +3048299664,3048300543,BZ +3048300544,3048300863,US 3048300864,3048300895,CA -3048300896,3048301311,BZ +3048300896,3048301311,US 3048301312,3048301343,CA -3048301344,3048301471,BZ -3048301472,3048301503,CA -3048301504,3048307743,BZ -3048307744,3048307751,CA -3048307752,3048308727,BZ -3048308728,3048308735,CR +3048301344,3048304639,US +3048304640,3048308735,BZ 3048308736,3048325119,BO 3048325120,3048331263,AR 3048331264,3048332287,GY @@ -74672,7 +75700,9 @@ 3050714368,3050714623,GB 3050714624,3050714879,BR 3050714880,3050715135,ES -3050715136,3050748159,US +3050715136,3050724351,US +3050724352,3050724607,BG +3050724608,3050748159,US 3050748160,3050748415,GB 3050748416,3050753023,US 3050753024,3050753279,BR @@ -74747,7 +75777,7 @@ 3050776832,3050777087,US 3050777088,3050777103,AU 3050777104,3050777343,BR -3050777344,3050777599,US +3050777344,3050777599,RO 3050777600,3050777615,HK 3050777616,3050777855,BR 3050777856,3050778111,US @@ -74761,11 +75791,15 @@ 3050789504,3050789631,US 3050789632,3050789759,BR 3050789760,3050789887,US -3050789888,3050790015,BR +3050789888,3050789967,BR +3050789968,3050789968,US +3050789969,3050790015,BR 3050790016,3050790143,US 3050790144,3050790271,BR 3050790272,3050790399,US -3050790400,3050790527,BR +3050790400,3050790463,BR +3050790464,3050790464,US +3050790465,3050790527,BR 3050790528,3050790655,US 3050790656,3050790783,BR 3050790784,3050800383,US @@ -74861,7 +75895,9 @@ 3050805312,3050805375,FI 3050805376,3050805759,US 3050805760,3050805791,DK -3050805792,3050816255,US +3050805792,3050811391,US +3050811392,3050811647,HK +3050811648,3050816255,US 3050816256,3050816511,NL 3050816512,3050827263,US 3050827264,3050827519,BR @@ -74869,17 +75905,15 @@ 3050829568,3050829823,UA 3050829824,3050831871,US 3050831872,3051356159,BR -3051356160,3051372799,CR -3051372800,3051373055,PA -3051373056,3051380735,CR +3051356160,3051374335,CR +3051374336,3051374591,PA +3051374592,3051380735,CR 3051380736,3051388927,AR -3051388928,3051389695,PA -3051389696,3051390207,NL -3051390208,3051391999,PA -3051392000,3051392255,US -3051392256,3051394559,PA -3051394560,3051395071,US -3051395072,3051397119,PA +3051388928,3051389183,PA +3051389184,3051389439,NL +3051389440,3051389695,PA +3051389696,3051389951,NL +3051389952,3051397119,PA 3051397120,3051398143,CO 3051398144,3051399167,AR 3051399168,3051400191,DO @@ -75154,8 +76188,7 @@ 3081846784,3081847807,TW 3081847808,3081848831,KR 3081848832,3081850879,SG -3081850880,3081851391,HK -3081851392,3081851903,SG +3081850880,3081851903,HK 3081851904,3081852927,JP 3081852928,3081854975,HK 3081854976,3081859071,MN @@ -75355,12 +76388,14 @@ 3098181632,3098185727,CA 3098185728,3098263551,US 3098263552,3098271743,CA -3098271744,3098428415,US +3098271744,3098412031,US +3098412032,3098413055,CA +3098413056,3098428415,US 3098428416,3098428927,RU 3098428928,3098429439,SE 3098429440,3098431487,GB -3098431488,3098435583,US -3098435584,3098437631,IL +3098431488,3098436607,US +3098436608,3098437631,IL 3098437632,3098476543,US 3098476544,3098492927,CA 3098492928,3098494719,US @@ -75452,6 +76487,8 @@ 3103872768,3103873023,HR 3103873024,3103873279,SE 3103873280,3103873535,FR +3103873536,3103873791,CZ +3103873792,3103874047,PL 3103916032,3103917055,CH 3103917056,3103918079,IT 3103918080,3103919103,DE @@ -75914,7 +76951,8 @@ 3104377856,3104378879,DE 3104378880,3104379215,GB 3104379216,3104379223,CZ -3104379224,3104379647,GB +3104379224,3104379391,GB +3104379392,3104379647,CH 3104379648,3104379903,AT 3104379904,3104380927,FR 3104380928,3104381951,DK @@ -76026,9 +77064,9 @@ 3104497664,3104498687,CH 3104498688,3104498695,NL 3104498696,3104498703,US -3104498704,3104499375,NL -3104499376,3104499391,US -3104499392,3104500735,NL +3104498704,3104499391,NL +3104499392,3104499399,US +3104499400,3104500735,NL 3104500736,3104501759,CZ 3104501760,3104502783,LY 3104502784,3104503807,DE @@ -76392,7 +77430,7 @@ 3104868352,3104869375,RU 3104869376,3104870399,DK 3104870400,3104871423,PL -3104871424,3104872447,CY +3104871424,3104872447,RU 3104872448,3104873471,GB 3104873472,3104874495,DK 3104874496,3104875519,GB @@ -76883,8 +77921,8 @@ 3105374208,3105375231,GB 3105375232,3105375295,IT 3105375296,3105375327,DE -3105375328,3105375367,CA -3105375368,3105375375,DE +3105375328,3105375359,CA +3105375360,3105375375,DE 3105375376,3105375391,US 3105375392,3105375551,IT 3105375552,3105375615,DE @@ -77495,7 +78533,7 @@ 3105969664,3105969727,DE 3105969728,3105970175,GB 3105970176,3105971199,FR -3105971200,3105972223,GB +3105971200,3105972223,CN 3105972224,3105973247,DK 3105973248,3105974048,US 3105974049,3105974271,NL @@ -77603,7 +78641,8 @@ 3106061312,3106062335,NL 3106062336,3106063359,ES 3106063360,3106064383,DE -3106064384,3106065407,NL +3106064384,3106065151,NL +3106065152,3106065407,MD 3106065408,3106066431,IT 3106066432,3106067455,GB 3106067456,3106068479,DE @@ -77866,7 +78905,9 @@ 3106318336,3106319359,AT 3106319360,3106320383,DK 3106320384,3106321407,HR -3106321408,3106322431,DK +3106321408,3106321663,DK +3106321664,3106321919,SE +3106321920,3106322431,DK 3106322432,3106323455,ME 3106323456,3106324479,CZ 3106324480,3106325503,AL @@ -78018,7 +79059,6 @@ 3106462720,3106463743,IT 3106463744,3106464767,IR 3106464768,3106465791,PL -3106466048,3106466303,NL 3106466816,3106467839,EE 3106467840,3106468863,IR 3106468864,3106470911,DE @@ -78389,7 +79429,8 @@ 3106821760,3106821887,CN 3106821888,3106822015,RU 3106822016,3106822143,JP -3106822144,3106824191,CH +3106822144,3106823167,CH +3106823168,3106824191,PL 3106824192,3106825215,RU 3106825216,3106826239,IT 3106826240,3106827263,PL @@ -78751,7 +79792,8 @@ 3107182592,3107183615,FR 3107183616,3107184639,IQ 3107184640,3107185663,SE -3107185664,3107186431,US +3107185664,3107185919,GB +3107185920,3107186431,US 3107186432,3107186687,GB 3107186688,3107187711,NO 3107187712,3107188735,MT @@ -79689,8 +80731,7 @@ 3108136960,3108137215,NL 3108137216,3108137471,LU 3108137472,3108137983,NL -3108137984,3108138495,AT -3108138496,3108139007,RO +3108137984,3108139007,RO 3108139008,3108141055,GB 3108141056,3108142079,PL 3108142080,3108143103,TR @@ -79997,8 +81038,7 @@ 3108457472,3108459519,RU 3108459520,3108460543,DE 3108460544,3108461567,RS -3108461568,3108462335,DE -3108462336,3108462591,GB +3108461568,3108462591,DE 3108462592,3108463615,RU 3108463616,3108464639,GB 3108464640,3108465663,HU @@ -80180,11 +81220,12 @@ 3108647936,3108648959,FR 3108648960,3108649983,IM 3108649984,3108651007,CZ -3108651008,3108651775,DE -3108651776,3108652031,BG +3108651008,3108652031,DE 3108652032,3108653055,CH 3108653056,3108654079,GI -3108654080,3108655103,NL +3108654080,3108654591,NL +3108654592,3108654847,GB +3108654848,3108655103,NL 3108655104,3108656127,ES 3108656128,3108657151,PL 3108657152,3108658175,RS @@ -80395,9 +81436,7 @@ 3108874240,3108875263,ES 3108875264,3108875439,GB 3108875440,3108875447,IT -3108875448,3108875623,GB -3108875624,3108875631,IT -3108875632,3108876287,GB +3108875448,3108876287,GB 3108876288,3108877311,ES 3108877312,3108878335,FR 3108878336,3108879359,ES @@ -80968,8 +82007,9 @@ 3109430272,3109431295,IR 3109431296,3109431807,IL 3109431808,3109432319,IT -3109432320,3109432831,HK -3109432832,3109433343,MT +3109432320,3109432831,MT +3109432832,3109433087,SE +3109433088,3109433343,MT 3109433344,3109435391,FR 3109435392,3109436415,UA 3109436416,3109437439,SM @@ -81291,7 +82331,6 @@ 3109763072,3109765119,IT 3109765120,3109766143,NO 3109766144,3109767167,ES -3109767168,3109768191,UA 3109768192,3109769215,GB 3109769216,3109770239,AT 3109770240,3109771263,GB @@ -81365,11 +82404,12 @@ 3109844992,3109845503,DE 3109845504,3109845759,GB 3109845760,3109846015,DE -3109846016,3109847039,GB +3109846016,3109847039,CH 3109847040,3109848063,AE 3109848064,3109849087,BG 3109849088,3109852159,RU -3109852160,3109854207,DE +3109852160,3109853183,NL +3109853184,3109854207,DE 3109854208,3109855231,PL 3109855232,3109856255,DE 3109856256,3109857279,IT @@ -82092,7 +83132,8 @@ 3110540288,3110541311,LB 3110541312,3110542335,RU 3110542336,3110543359,HK -3110543360,3110545407,NL +3110543360,3110544383,NL +3110544384,3110545407,ES 3110545408,3110546431,UA 3110546432,3110547455,DE 3110547456,3110547967,SE @@ -82585,7 +83626,7 @@ 3111079936,3111080959,NL 3111080960,3111081983,RU 3111081984,3111083007,HU -3111083008,3111084031,UA +3111083008,3111084031,CA 3111084032,3111085055,CZ 3111085056,3111086079,RU 3111086080,3111087103,KZ @@ -83332,8 +84373,7 @@ 3111853056,3111854079,GP 3111854080,3111855103,NO 3111855104,3111856127,IT -3111856128,3111857151,KZ -3111857152,3111858175,RU +3111856128,3111858175,RU 3111858176,3111859199,PL 3111859200,3111860223,EE 3111860224,3111861247,ES @@ -83359,7 +84399,7 @@ 3111882752,3111886847,GB 3111886848,3111887871,PL 3111887872,3111888895,RU -3111888896,3111889919,DE +3111888896,3111889919,IE 3111889920,3111890943,RU 3111890944,3111891967,AT 3111891968,3111892991,FR @@ -84488,7 +85528,9 @@ 3113064448,3113065471,SE 3113065472,3113066495,NO 3113066496,3113067519,LT -3113067520,3113068543,DE +3113067520,3113067935,DE +3113067936,3113067936,US +3113067937,3113068543,DE 3113068544,3113069567,IR 3113069568,3113070591,IT 3113070592,3113071615,GB @@ -84549,8 +85591,8 @@ 3113123840,3113124863,GB 3113124864,3113125887,RU 3113125888,3113126911,FR -3113126912,3113127167,US -3113127168,3113127423,NL +3113126912,3113127167,NL +3113127168,3113127423,GB 3113127424,3113127935,AT 3113127936,3113128959,NL 3113128960,3113129983,CH @@ -84675,7 +85717,11 @@ 3113246976,3113247231,RU 3113247232,3113247487,FR 3113247488,3113247743,RU -3113247744,3113248767,GB +3113247744,3113247999,US +3113248000,3113248031,DE +3113248032,3113248063,US +3113248064,3113248255,DE +3113248256,3113248767,GB 3113248768,3113249791,NL 3113249792,3113250815,GB 3113250816,3113251839,FR @@ -84717,8 +85763,7 @@ 3113287680,3113288703,AL 3113288704,3113289727,EE 3113289728,3113290751,IR -3113290752,3113291775,GB -3113291776,3113292799,NL +3113290752,3113292799,NL 3113292800,3113293823,AT 3113293824,3113294847,NL 3113294848,3113295871,IL @@ -84800,7 +85845,7 @@ 3113358336,3113359359,CZ 3113359360,3113360383,FR 3113360384,3113361407,BG -3113361408,3113362431,US +3113361408,3113362431,RO 3113362432,3113363455,DE 3113363456,3113364479,FR 3113364480,3113365503,GB @@ -84864,7 +85909,7 @@ 3113425920,3113426943,KW 3113426944,3113427455,IM 3113427456,3113427711,NL -3113427712,3113427967,IM +3113427712,3113427967,US 3113427968,3113428991,RU 3113428992,3113430015,IR 3113430016,3113431039,CZ @@ -84910,7 +85955,7 @@ 3113470976,3113471999,FR 3113472000,3113473023,GB 3113473024,3113473279,FR -3113473280,3113473535,GB +3113473280,3113473535,SE 3113473536,3113473791,ES 3113473792,3113475071,DE 3113475072,3113479167,FR @@ -84986,8 +86031,7 @@ 3113552896,3113553919,UA 3113553920,3113554943,NO 3113554944,3113555967,UA -3113555968,3113556223,NL -3113556224,3113556991,BZ +3113555968,3113556991,NL 3113556992,3113558015,DE 3113558016,3113559039,IT 3113559040,3113560063,NL @@ -85275,8 +86319,7 @@ 3113777152,3113778175,PL 3113778176,3113779199,TR 3113779200,3113780223,GB -3113780224,3113780479,KZ -3113780480,3113781247,RU +3113780224,3113781247,RU 3113781248,3113782271,BY 3113782272,3113783295,IT 3113783296,3113784319,TR @@ -85348,8 +86391,7 @@ 3113856000,3113857023,GB 3113857024,3113857279,BR 3113857280,3113857535,MX -3113857536,3113857791,US -3113857792,3113858047,CA +3113857536,3113858047,DE 3113858048,3113859071,UA 3113859072,3113860095,IR 3113860096,3113861119,NL @@ -86142,7 +87184,7 @@ 3114616832,3114617855,DK 3114617856,3114618879,GB 3114618880,3114619903,SE -3114619904,3114620927,DE +3114619904,3114620927,US 3114620928,3114621951,IT 3114621952,3114622975,PT 3114622976,3114623999,BG @@ -86172,8 +87214,7 @@ 3114649600,3114650623,RU 3114650624,3114651647,IR 3114651648,3114652671,CH -3114652672,3114653695,US -3114653696,3114654719,DE +3114652672,3114654719,US 3114654720,3114655743,BG 3114655744,3114656767,RU 3114656768,3114657791,DE @@ -86242,7 +87283,7 @@ 3114726400,3114727423,SE 3114727424,3114728447,BE 3114728448,3114729471,GB -3114729472,3114730495,RO +3114729472,3114730495,AU 3114730496,3114731519,GB 3114731520,3114732543,CH 3114732544,3114733567,SY @@ -86255,7 +87296,8 @@ 3114742784,3114743807,IR 3114743808,3114744831,MD 3114744832,3114745855,TR -3114745856,3114747903,RO +3114745856,3114746879,CA +3114746880,3114747903,FR 3114747904,3114748927,IR 3114748928,3114749951,GB 3114749952,3114750975,CH @@ -86292,9 +87334,7 @@ 3114781696,3114782719,NL 3114782720,3114783743,CZ 3114783744,3114784767,PL -3114784768,3114785023,RU -3114785024,3114785279,EE -3114785280,3114785791,RU +3114784768,3114785791,RU 3114785792,3114786815,FR 3114786816,3114787839,RU 3114787840,3114788863,GB @@ -86388,7 +87428,9 @@ 3114882048,3114883071,CH 3114883072,3114884095,FR 3114884096,3114885119,CH -3114885120,3114886143,PT +3114885120,3114885375,PT +3114885376,3114885631,DE +3114885632,3114886143,PT 3114886144,3114887167,RU 3114887168,3114888191,DE 3114888192,3114890239,NL @@ -86427,9 +87469,7 @@ 3114923008,3114924031,GB 3114924032,3114925055,HU 3114925056,3114925311,US -3114925312,3114925567,DE -3114925568,3114925823,US -3114925824,3114926079,DE +3114925312,3114926079,DE 3114926080,3114927103,RU 3114927104,3114928127,NL 3114928128,3114929151,GB @@ -86483,7 +87523,11 @@ 3114977280,3114978303,PL 3114978304,3114979327,RU 3114979328,3114980351,NL -3114980352,3114984447,RO +3114980352,3114981375,DE +3114981376,3114982399,PL +3114982400,3114983423,JP +3114983424,3114983679,RO +3114983680,3114984447,PL 3114984448,3114985471,CZ 3114985472,3114986495,CY 3114986496,3114987519,IR @@ -86626,7 +87670,9 @@ 3115127808,3115128831,NL 3115128832,3115129855,DE 3115129856,3115130879,BA -3115130880,3115131903,DE +3115130880,3115131234,DE +3115131235,3115131235,US +3115131236,3115131903,DE 3115131904,3115132927,RU 3115132928,3115133951,KW 3115133952,3115134975,ES @@ -86785,7 +87831,8 @@ 3115290624,3115291647,GB 3115291648,3115292671,FR 3115292672,3115293695,GB -3115293696,3115294463,RU +3115293696,3115293951,US +3115293952,3115294463,RU 3115294464,3115294719,IN 3115294720,3115295743,GB 3115295744,3115296767,NL @@ -87069,9 +88116,7 @@ 3115587584,3115588607,DE 3115588608,3115589631,TR 3115589632,3115590655,GB -3115590656,3115591167,GR -3115591168,3115591183,DE -3115591184,3115591423,GR +3115590656,3115591423,GR 3115591424,3115591679,NL 3115591680,3115592703,CH 3115592704,3115593727,BE @@ -87111,7 +88156,8 @@ 3115628544,3115629567,GB 3115629568,3115630591,RU 3115630592,3115631615,GB -3115631616,3115632639,US +3115631616,3115631871,NL +3115631872,3115632639,US 3115632640,3115633663,RU 3115633664,3115635711,PL 3115635712,3115636735,RU @@ -87126,7 +88172,8 @@ 3115644928,3115645951,RU 3115645952,3115647999,SE 3115648000,3115649023,FR -3115649024,3115650047,NL +3115649280,3115649535,GB +3115649536,3115649791,DE 3115650048,3115651071,DE 3115651072,3115652095,UA 3115652096,3115653119,DK @@ -87196,9 +88243,7 @@ 3115725312,3115725567,DE 3115725568,3115726847,GB 3115726848,3115727871,NL -3115727872,3115728127,GB -3115728128,3115728383,US -3115728384,3115728703,GB +3115727872,3115728703,GB 3115728704,3115728735,NL 3115728736,3115728895,GB 3115728896,3115729919,FR @@ -87357,9 +88402,7 @@ 3115886592,3115887615,UA 3115887616,3115888639,ES 3115888640,3115889663,CH -3115889664,3115889919,PL -3115889920,3115890175,CZ -3115890176,3115890687,PL +3115889664,3115890687,PL 3115890688,3115891711,FR 3115891712,3115892735,NL 3115892736,3115893759,GB @@ -87477,7 +88520,8 @@ 3116008448,3116009471,NO 3116009472,3116010495,BG 3116010496,3116011519,RU -3116011520,3116012543,DE +3116011520,3116012031,DE +3116012032,3116012543,US 3116012544,3116013567,BE 3116013568,3116015615,PL 3116015616,3116016639,CZ @@ -87562,8 +88606,8 @@ 3116102656,3116103679,FR 3116103680,3116104703,HU 3116104704,3116105727,SE -3116105728,3116106751,DE -3116106752,3116107263,US +3116105728,3116107007,DE +3116107008,3116107263,US 3116107264,3116107775,DE 3116107776,3116108799,ES 3116108800,3116109823,RU @@ -87579,7 +88623,7 @@ 3116119040,3116119295,AT 3116119296,3116120063,DE 3116120064,3116121087,HU -3116121088,3116122111,GB +3116121344,3116122111,PT 3116122112,3116123135,DE 3116123136,3116124159,PL 3116124160,3116125183,DE @@ -87636,7 +88680,8 @@ 3116182528,3116183551,RO 3116183552,3116184575,SE 3116184576,3116185599,TR -3116185600,3116186623,GB +3116185600,3116185855,US +3116185856,3116186623,GB 3116186624,3116187647,IT 3116187648,3116188671,ES 3116188672,3116189695,MD @@ -87706,7 +88751,7 @@ 3116249600,3116249855,CH 3116249856,3116250111,AT 3116250112,3116251135,DE -3116251136,3116252159,GB +3116251136,3116252159,US 3116252160,3116253183,MD 3116253184,3116254207,NL 3116254208,3116255231,DE @@ -87716,8 +88761,7 @@ 3116257536,3116258303,AT 3116258304,3116259327,NL 3116259328,3116260351,FR -3116260352,3116260607,CN -3116260608,3116261375,NL +3116260352,3116261375,US 3116261376,3116262399,BG 3116262400,3116263423,ES 3116263424,3116264447,RU @@ -87741,9 +88785,7 @@ 3116285952,3116286975,DE 3116286976,3116287999,GB 3116288000,3116290047,IE -3116290048,3116291071,IT -3116291072,3116291327,RO -3116291328,3116294143,IT +3116290048,3116294143,IT 3116294144,3116295167,US 3116295168,3116297215,NL 3116297216,3116298239,DE @@ -87829,7 +88871,8 @@ 3116381184,3116382207,LB 3116382208,3116382719,RU 3116382720,3116382975,AQ -3116382976,3116384255,RU +3116382976,3116383231,SC +3116383232,3116384255,RU 3116384256,3116385279,DE 3116385280,3116386047,US 3116386048,3116386303,GB @@ -87846,7 +88889,8 @@ 3116396544,3116397567,IR 3116397568,3116398591,ES 3116398592,3116399615,RO -3116399616,3116400639,NL +3116399616,3116399871,IL +3116399872,3116400639,NL 3116400640,3116401663,FI 3116401664,3116402687,NL 3116402688,3116403711,IT @@ -87960,7 +89004,8 @@ 3116522496,3116523519,LU 3116523520,3116524543,TR 3116524544,3116525567,ES -3116525568,3116526591,RU +3116525568,3116526335,RU +3116526336,3116526591,GB 3116526592,3116527615,ES 3116527616,3116528639,GB 3116528640,3116529663,NL @@ -88038,7 +89083,8 @@ 3116604416,3116605439,SI 3116605440,3116606463,MD 3116606464,3116607487,GB -3116607488,3116608511,RU +3116607488,3116607743,IL +3116607744,3116608511,RU 3116608512,3116609535,DK 3116609536,3116610559,ES 3116610560,3116611583,DE @@ -88055,8 +89101,7 @@ 3116621824,3116622847,CZ 3116622848,3116623871,TR 3116623872,3116624895,SE -3116624896,3116625663,GL -3116625664,3116625919,NZ +3116624896,3116625919,GL 3116625920,3116626943,RU 3116626944,3116627967,NL 3116627968,3116628991,FR @@ -88110,7 +89155,7 @@ 3116681216,3116682239,ES 3116682240,3116684287,GB 3116684288,3116686335,UZ -3116686336,3116687359,BZ +3116686336,3116687359,NL 3116687360,3116688383,DE 3116688384,3116689407,PL 3116689408,3116690431,FI @@ -88146,9 +89191,422 @@ 3116726272,3116727295,MD 3116727296,3116728319,TR 3116728320,3116729343,IT -3116729344,3116730367,CH +3116729344,3116729599,DE +3116729600,3116730367,CH 3116730368,3116731391,DK 3116731392,3116732415,IT +3116732416,3116733439,RU +3116733440,3116734463,DK +3116734464,3116735487,BG +3116735488,3116736511,FR +3116736512,3116737535,GB +3116737536,3116738559,DE +3116738560,3116739583,DK +3116739584,3116740607,DE +3116740608,3116741631,JO +3116741632,3116742655,PL +3116742656,3116743679,FR +3116743680,3116744703,NL +3116744704,3116745727,DE +3116745728,3116746751,TR +3116746752,3116747775,ES +3116747776,3116748031,IL +3116748032,3116748287,US +3116748288,3116748799,IL +3116748800,3116749823,NO +3116749824,3116750847,IT +3116750848,3116751871,ES +3116751872,3116752895,NO +3116752896,3116753919,SE +3116753920,3116754943,IT +3116754944,3116755967,RU +3116755968,3116756991,DE +3116756992,3116758015,NL +3116758016,3116759039,ES +3116759040,3116760063,DE +3116760064,3116761087,FR +3116761088,3116762111,PL +3116762112,3116763135,SE +3116763136,3116763146,US +3116763147,3116763166,GB +3116763167,3116763167,FR +3116763168,3116763168,AU +3116763169,3116763177,US +3116763178,3116763178,FR +3116763179,3116763182,US +3116763183,3116763183,FR +3116763184,3116763189,US +3116763190,3116763190,FR +3116763191,3116763193,US +3116763194,3116763194,FR +3116763195,3116763196,US +3116763197,3116763197,AU +3116763198,3116763201,US +3116763202,3116763202,FR +3116763203,3116763213,US +3116763214,3116763214,FR +3116763215,3116763234,US +3116763235,3116763235,FR +3116763236,3116763240,US +3116763241,3116763241,FR +3116763242,3116763246,US +3116763247,3116763247,FR +3116763248,3116763252,US +3116763253,3116763253,FR +3116763254,3116763255,US +3116763256,3116763256,FR +3116763257,3116763259,US +3116763260,3116763260,FR +3116763261,3116763265,US +3116763266,3116763266,FR +3116763267,3116763268,US +3116763269,3116763269,FR +3116763270,3116763270,US +3116763271,3116763271,FR +3116763272,3116763275,US +3116763276,3116763276,FR +3116763277,3116763278,US +3116763279,3116763279,FR +3116763280,3116763286,US +3116763287,3116763287,FR +3116763288,3116763303,US +3116763304,3116763304,FR +3116763305,3116763306,US +3116763307,3116763307,FR +3116763308,3116763402,US +3116763403,3116763422,GB +3116763423,3116763436,US +3116763437,3116763437,FR +3116763438,3116763440,US +3116763441,3116763441,FR +3116763442,3116763451,US +3116763452,3116763452,FR +3116763453,3116763458,US +3116763459,3116763459,FR +3116763460,3116763463,US +3116763464,3116763464,FR +3116763465,3116763469,US +3116763470,3116763470,FR +3116763471,3116763474,US +3116763475,3116763475,FR +3116763476,3116763480,US +3116763481,3116763481,FR +3116763482,3116763483,US +3116763484,3116763484,FR +3116763485,3116763487,US +3116763488,3116763488,FR +3116763489,3116763492,US +3116763493,3116763493,FR +3116763494,3116763499,US +3116763500,3116763500,FR +3116763501,3116763503,US +3116763504,3116763504,FR +3116763505,3116763512,US +3116763513,3116763513,FR +3116763514,3116763515,US +3116763516,3116763516,AU +3116763517,3116763517,FR +3116763518,3116763520,US +3116763521,3116763521,FR +3116763522,3116763524,US +3116763525,3116763525,FR +3116763526,3116763528,US +3116763529,3116763529,FR +3116763530,3116763533,US +3116763534,3116763534,FR +3116763535,3116763538,US +3116763539,3116763539,FR +3116763540,3116763658,US +3116763659,3116763678,FR +3116763679,3116763680,US +3116763681,3116763681,FR +3116763682,3116763684,US +3116763685,3116763685,FR +3116763686,3116763687,US +3116763688,3116763688,FR +3116763689,3116763692,US +3116763693,3116763693,FR +3116763694,3116763699,US +3116763700,3116763700,FR +3116763701,3116763705,US +3116763706,3116763706,FR +3116763707,3116763717,US +3116763718,3116763718,FR +3116763719,3116763722,US +3116763723,3116763723,FR +3116763724,3116763729,US +3116763730,3116763730,FR +3116763731,3116763742,US +3116763743,3116763743,FR +3116763744,3116763747,US +3116763748,3116763748,FR +3116763749,3116763751,US +3116763752,3116763752,FR +3116763753,3116763756,US +3116763757,3116763757,FR +3116763758,3116763769,US +3116763770,3116763770,FR +3116763771,3116763774,US +3116763775,3116763775,FR +3116763776,3116763778,US +3116763779,3116763779,FR +3116763780,3116763782,US +3116763783,3116763783,FR +3116763784,3116763787,US +3116763788,3116763788,FR +3116763789,3116763791,US +3116763792,3116763792,FR +3116763793,3116763796,US +3116763797,3116763797,FR +3116763798,3116763830,US +3116763831,3116763831,AU +3116763832,3116763914,US +3116763915,3116763934,FR +3116763935,3116763935,AU +3116763936,3116763945,US +3116763946,3116763946,FR +3116763947,3116763949,US +3116763950,3116763950,FR +3116763951,3116763951,US +3116763952,3116763952,FR +3116763953,3116763954,US +3116763955,3116763955,FR +3116763956,3116763958,US +3116763959,3116763959,FR +3116763960,3116763966,US +3116763967,3116763967,FR +3116763968,3116763980,US +3116763981,3116763981,FR +3116763982,3116763984,US +3116763985,3116763985,FR +3116763986,3116763995,US +3116763996,3116763996,FR +3116763997,3116764000,US +3116764001,3116764001,FR +3116764002,3116764003,US +3116764004,3116764004,FR +3116764005,3116764007,US +3116764008,3116764008,FR +3116764009,3116764012,US +3116764013,3116764013,FR +3116764014,3116764016,US +3116764017,3116764017,FR +3116764018,3116764022,US +3116764023,3116764023,FR +3116764024,3116764024,US +3116764025,3116764025,FR +3116764026,3116764031,US +3116764032,3116764032,FR +3116764033,3116764038,US +3116764039,3116764039,FR +3116764040,3116764045,US +3116764046,3116764046,FR +3116764047,3116764145,US +3116764146,3116764146,FR +3116764147,3116764159,US +3116764160,3116764175,GB +3116764176,3116764191,US +3116764192,3116765183,GB +3116765184,3116766207,PL +3116766208,3116767231,FR +3116767232,3116768255,DE +3116768256,3116769279,GB +3116769280,3116770303,LT +3116770304,3116772351,RU +3116772352,3116773375,MD +3116773376,3116774399,ES +3116774400,3116775423,TR +3116775424,3116775679,RO +3116775680,3116776447,NL +3116776448,3116777471,IT +3116777472,3116778495,ES +3116778496,3116779519,GB +3116779520,3116780543,TR +3116780544,3116781567,FR +3116781568,3116782591,SE +3116782592,3116783615,GB +3116783616,3116784639,DE +3116784640,3116785663,NO +3116785664,3116786687,IT +3116786688,3116787711,ES +3116787712,3116788735,CY +3116788736,3116789759,ES +3116789760,3116790783,RU +3116790784,3116792831,IT +3116792832,3116793855,TR +3116793856,3116794879,FR +3116794880,3116795903,GB +3116795904,3116796927,LT +3116796928,3116797951,CH +3116797952,3116798975,IS +3116798976,3116799999,DE +3116800000,3116801023,RU +3116801024,3116802047,IT +3116802048,3116803071,IR +3116803072,3116804095,NL +3116804096,3116805119,HU +3116805120,3116806143,SY +3116806144,3116809215,ES +3116809216,3116810239,GB +3116810240,3116811263,SE +3116811264,3116812287,TR +3116812288,3116813311,DE +3116813312,3116814335,CH +3116814336,3116815359,IT +3116815360,3116816383,MD +3116816384,3116818431,DE +3116818432,3116819455,FR +3116819456,3116820479,GB +3116820480,3116822527,AT +3116822528,3116823551,US +3116823552,3116824575,RO +3116824576,3116825599,FR +3116825600,3116826623,IR +3116826624,3116827647,DE +3116827648,3116829695,RU +3116829696,3116830719,CY +3116830720,3116831743,GB +3116831744,3116832767,MD +3116832768,3116833791,IT +3116833792,3116834815,HU +3116834816,3116835839,FR +3116835840,3116836863,BG +3116836864,3116837887,FR +3116837888,3116838911,ES +3116838912,3116839935,IT +3116839936,3116841983,GB +3116841984,3116843007,DE +3116843008,3116844031,IR +3116844032,3116845055,DE +3116845056,3116846079,IT +3116846080,3116847103,DE +3116847104,3116848127,AT +3116848128,3116849151,CZ +3116849152,3116850175,TR +3116850176,3116851199,NL +3116851200,3116852223,UA +3116852224,3116854271,DE +3116854272,3116855295,NL +3116855296,3116856319,IT +3116856320,3116857343,NL +3116857344,3116858367,RS +3116858368,3116859391,NL +3116859392,3116860415,GB +3116860416,3116861439,DE +3116861440,3116862463,SE +3116862464,3116863487,DE +3116863488,3116864511,RU +3116864512,3116865535,ES +3116865536,3116866559,AT +3116866560,3116867583,ES +3116867584,3116868607,RU +3116868608,3116869631,GB +3116869632,3116870655,SE +3116870656,3116871679,RO +3116871680,3116872703,CH +3116872704,3116873727,BE +3116873728,3116874751,FR +3116874752,3116875775,NL +3116875776,3116876799,DE +3116876800,3116877823,IR +3116877824,3116878847,FR +3116878848,3116879871,DE +3116879872,3116880895,IR +3116880896,3116881919,ES +3116881920,3116882943,DE +3116882944,3116883967,GB +3116883968,3116884991,US +3116884992,3116886015,ES +3116886016,3116887039,NL +3116887040,3116888063,DK +3116888064,3116889087,GB +3116889088,3116890111,SY +3116890112,3116891135,LU +3116891136,3116892159,PL +3116892160,3116893183,HR +3116893184,3116895231,DE +3116895232,3116896255,ES +3116896256,3116897279,RU +3116897280,3116898303,TR +3116898304,3116899327,ES +3116899328,3116900351,TR +3116900352,3116901375,DE +3116901376,3116902399,GB +3116902400,3116903423,BG +3116903424,3116905471,PL +3116905472,3116906495,AE +3116906496,3116907519,DE +3116907520,3116908543,UA +3116908544,3116909567,GB +3116909568,3116910591,EE +3116910592,3116911615,DK +3116911616,3116912639,ES +3116912640,3116913663,PL +3116913664,3116914687,IE +3116914688,3116915711,IT +3116915712,3116916735,GB +3116916736,3116919807,NL +3116919808,3116920831,CZ +3116920832,3116921855,ES +3116921856,3116922367,SG +3116922368,3116922623,GB +3116922624,3116922879,NL +3116922880,3116923903,PL +3116923904,3116924927,OM +3116924928,3116925951,JO +3116925952,3116926975,NL +3116926976,3116927999,DE +3116928000,3116929023,RU +3116929024,3116930047,FR +3116930048,3116931071,IT +3116931072,3116932095,RU +3116932096,3116933119,BG +3116933120,3116934143,RU +3116934144,3116935167,FR +3116935168,3116936191,RU +3116936192,3116937215,GB +3116937216,3116938239,RO +3116938240,3116939263,IT +3116939264,3116940287,SE +3116940288,3116941055,RU +3116941056,3116941311,FI +3116941312,3116942335,FR +3116942336,3116943359,CY +3116943360,3116944383,FR +3116944384,3116945407,GB +3116945408,3116946431,US +3116946432,3116947455,AL +3116947456,3116948479,RU +3116948480,3116949503,CH +3116949504,3116950527,DE +3116950528,3116951551,ES +3116951552,3116952575,NL +3116952576,3116953599,FR +3116953600,3116954623,RU +3116954624,3116955647,NL +3116955648,3116956671,AL +3116956672,3116957695,NO +3116957696,3116958719,GB +3116958720,3116959743,ES +3116959744,3116960767,DE +3116960768,3116961791,CZ +3116961792,3116962815,NL +3116962816,3116963839,DE +3116963840,3116964863,GE +3116964864,3116965887,RU +3116965888,3116966911,GB +3116966912,3116967935,BG +3116967936,3116968959,DE +3116968960,3116969983,RU +3116969984,3116971007,IR +3116971008,3116972031,RU +3116972032,3116973055,GR +3116973056,3116974079,GB +3116974080,3116975103,IT +3116975104,3116976127,PL +3116976128,3116977151,ES +3116977152,3116978175,IT +3116978176,3116979199,BG 3117416448,3117417471,FR 3120562176,3120594943,CO 3120594944,3120599039,AR @@ -88170,7 +89628,9 @@ 3120726016,3120734207,HN 3120734208,3120735487,BZ 3120735488,3120735743,NL -3120735744,3120736767,BZ +3120735744,3120736255,BZ +3120736256,3120736511,EC +3120736512,3120736767,BZ 3120736768,3120737023,RU 3120737024,3120737791,BZ 3120737792,3120738303,EC @@ -88178,6 +89638,7 @@ 3120742400,3120754687,PY 3120754688,3120755711,CR 3120755712,3120756735,GF +3120756736,3120757759,BR 3120757760,3120758783,CL 3120758784,3120824319,EC 3120824320,3120840703,CR @@ -88237,7 +89698,9 @@ 3124840448,3124842495,CL 3124842496,3124844543,AR 3124844544,3124845567,BZ -3124846592,3124850687,AR +3124846592,3124848639,AR +3124848640,3124849663,BR +3124849664,3124850687,AR 3124850688,3124854783,HN 3124854784,3124887551,CL 3124887552,3124953087,EC @@ -88274,7 +89737,8 @@ 3130284032,3130286079,DO 3130286080,3130290175,PA 3130290176,3130302463,AR -3130302464,3130310655,PA +3130302464,3130306559,PA +3130306560,3130310655,CO 3130312704,3130314751,AR 3130314752,3130315775,CL 3130315776,3130316799,CR @@ -88343,7 +89807,11 @@ 3133313024,3133317119,BR 3133321216,3136983039,BR 3136984064,3136985087,BR -3136985088,3136986111,AR +3136985088,3136985947,AR +3136985948,3136985951,BR +3136985952,3136986015,AR +3136986016,3136986023,BR +3136986024,3136986111,AR 3136986112,3140587519,BR 3140599808,3140614143,BR 3140614144,3140616191,CR @@ -88391,7 +89859,11 @@ 3156672512,3156738047,GB 3156738048,3156803583,DE 3156803584,3156869119,TR -3156869120,3156897791,LU +3156869120,3156876287,LU +3156876288,3156877311,RU +3156877312,3156893695,LU +3156893696,3156894719,IN +3156894720,3156897791,LU 3156897792,3156899839,US 3156899840,3156901887,SG 3156901888,3156906239,NL @@ -88995,9 +90467,7 @@ 3164960392,3164960395,GB 3164960396,3164960439,FR 3164960440,3164960443,DE -3164960444,3164960511,FR -3164960512,3164960527,ES -3164960528,3164960671,FR +3164960444,3164960671,FR 3164960672,3164960675,ES 3164960676,3164960699,FR 3164960700,3164960703,ES @@ -89312,7 +90782,9 @@ 3168038912,3168039935,MD 3168039936,3168040959,BE 3168040960,3168041215,DE -3168041216,3168047103,RO +3168041216,3168044799,RO +3168044800,3168045055,US +3168045056,3168047103,RO 3168047104,3168049151,IR 3168049152,3168049407,RO 3168049408,3168049663,IT @@ -89625,9 +91097,7 @@ 3170500608,3170631679,PT 3170631680,3170664447,PL 3170664448,3170697215,HR -3170697216,3170728959,IR -3170728960,3170729471,NL -3170729472,3170729983,IR +3170697216,3170729983,IR 3170729984,3170762751,AZ 3170762752,3170795519,RU 3170795520,3170828287,BG @@ -89671,7 +91141,9 @@ 3187916800,3187933183,CO 3187933184,3187933341,GT 3187933342,3187933342,HN -3187933343,3187944773,GT +3187933343,3187944351,GT +3187944352,3187944359,HN +3187944360,3187944773,GT 3187944774,3187944774,HN 3187944775,3187948031,GT 3187948032,3187948159,HN @@ -89704,9 +91176,7 @@ 3188117504,3188121599,AR 3188121600,3188125695,TT 3188125696,3188146175,AR -3188146176,3188147623,CO -3188147624,3188147631,PE -3188147632,3188149335,CO +3188146176,3188149335,CO 3188149336,3188149339,PE 3188149340,3188170751,CO 3188170752,3188174847,CR @@ -89853,7 +91323,9 @@ 3193176064,3193307135,CO 3193307136,3193438207,SV 3193438208,3193503743,CW -3193569280,3193575311,CO +3193569280,3193575167,CO +3193575168,3193575295,PE +3193575296,3193575311,CO 3193575312,3193575327,PE 3193575328,3193590655,CO 3193590656,3193590783,EC @@ -89873,7 +91345,8 @@ 3193628672,3193629183,EC 3193629184,3193631103,CO 3193631104,3193631231,EC -3193631232,3193634815,CO +3193631232,3193634687,CO +3193634688,3193634815,EC 3193634816,3193700351,CL 3193700352,3193724927,HN 3193724928,3193729023,AR @@ -89923,9 +91396,13 @@ 3194129664,3194129671,BR 3194129672,3194130047,AR 3194130048,3194130175,CO -3194130176,3194135551,AR +3194130176,3194130303,AR +3194130304,3194130431,BR +3194130432,3194135551,AR 3194135552,3194136063,BR -3194136064,3194139903,AR +3194136064,3194136575,AR +3194136576,3194137087,BR +3194137088,3194139903,AR 3194139904,3194140159,BR 3194140160,3194142719,AR 3194142720,3194159103,CL @@ -90019,7 +91496,6 @@ 3194757120,3194765311,AR 3194765312,3194767359,EC 3194767360,3194768383,CR -3194768384,3194769407,AR 3194769408,3194773503,PE 3194773504,3194781695,BR 3194781696,3194798079,CL @@ -90077,7 +91553,8 @@ 3195138048,3195139071,DO 3195139072,3195140095,CL 3195140096,3195142143,CR -3195142144,3195142911,PA +3195142144,3195142783,PA +3195142784,3195142911,VE 3195142912,3195143039,EC 3195143040,3195143167,UY 3195143168,3195143295,GT @@ -90109,7 +91586,7 @@ 3195576320,3195580415,CL 3195580416,3195584511,AR 3195584512,3195592703,HT -3195592704,3195596799,PA +3195596391,3195596391,PA 3195596800,3195597823,CR 3195597824,3195598847,AR 3195598848,3195600895,VE @@ -90146,13 +91623,16 @@ 3195764736,3195768831,CR 3195768832,3195772927,AR 3195772928,3195781119,VE +3195781120,3195785215,BR 3195785216,3195785407,HN 3195785408,3195785439,DE 3195785440,3195785735,HN 3195785736,3195785743,GB -3195785744,3195787383,HN -3195787384,3195787391,US -3195787392,3195789311,HN +3195785744,3195786239,HN +3195786240,3195786287,US +3195786288,3195786295,ES +3195786296,3195786751,US +3195786752,3195789311,HN 3195789312,3195793407,PA 3195793408,3195801599,AR 3195801600,3195803647,HN @@ -90227,8 +91707,7 @@ 3199729664,3199762431,NI 3199762432,3199778815,CO 3199778816,3199779839,AR -3199779840,3199780735,CR -3199780736,3199780863,US +3199779840,3199780863,CR 3199780864,3199782911,CO 3199782912,3199784959,AR 3199784960,3199785983,EC @@ -90245,7 +91724,9 @@ 3200516096,3200565247,CL 3200565248,3200569343,HT 3200569344,3200573439,CL -3200573440,3200581631,AR +3200573440,3200577535,AR +3200577536,3200579583,BR +3200579584,3200581631,AR 3200581632,3200614399,BZ 3200614400,3200647167,AR 3200647168,3201302527,VE @@ -90275,8 +91756,17 @@ 3201630208,3201695743,TT 3201695744,3201761279,EC 3201761280,3201826815,CL -3201826816,3201851391,AR -3201851392,3201855487,EC +3201826816,3201851863,AR +3201851864,3201851867,EC +3201851868,3201852519,AR +3201852520,3201852527,EC +3201852528,3201854143,AR +3201854144,3201854151,EC +3201854152,3201854463,AR +3201854464,3201854975,EC +3201854976,3201855295,AR +3201855296,3201855311,EC +3201855312,3201855487,AR 3201855488,3201859583,PE 3201859584,3201863679,CO 3201863680,3201864633,AR @@ -90285,13 +91775,13 @@ 3201865216,3201865471,CL 3201865472,3201866607,AR 3201866608,3201866623,CO -3201866624,3201867611,AR -3201867612,3201867615,CO -3201867616,3201867775,AR +3201866624,3201866863,AR +3201866864,3201866871,CO +3201866872,3201867775,AR 3201867776,3201869823,PE -3201869824,3201871695,AR -3201871696,3201871703,PE -3201871704,3201872739,AR +3201869824,3201870911,AR +3201870912,3201870943,PE +3201870944,3201872739,AR 3201872740,3201872740,PE 3201872741,3201873827,AR 3201873828,3201873831,PE @@ -90309,8 +91799,7 @@ 3201879040,3201880063,CO 3201880064,3201884159,EC 3201884160,3201888511,VE -3201888512,3201889263,AR -3201889264,3201889279,VE +3201888512,3201889279,AR 3201889280,3201889535,US 3201889536,3201889791,VE 3201889792,3201890097,AR @@ -90329,9 +91818,7 @@ 3201907266,3201907266,CO 3201907267,3201907359,AR 3201907360,3201907391,CO -3201907392,3201907667,AR -3201907668,3201907671,CO -3201907672,3201908223,AR +3201907392,3201908223,AR 3201908224,3201908735,CO 3201908736,3201916927,AR 3201916928,3201917183,CO @@ -90350,7 +91837,9 @@ 3202875392,3203399679,PE 3203399680,3203465215,CO 3203465216,3203530751,CR -3203530752,3203538943,CO +3203530752,3203536895,CO +3203536896,3203537919,HN +3203537920,3203538943,CO 3203538944,3203539967,BZ 3203539968,3203543551,CO 3203543552,3203544575,GT @@ -90360,10 +91849,10 @@ 3203562240,3203562495,SV 3203562496,3203564543,CO 3203564544,3203565055,DO -3203565056,3203566591,CO +3203565056,3203565567,CR +3203565568,3203566591,CO 3203566592,3203566847,PA -3203566848,3203566975,DO -3203566976,3203568639,CO +3203566848,3203568639,CO 3203568640,3203569663,SV 3203569664,3203570303,CO 3203570304,3203570431,SV @@ -90408,18 +91897,17 @@ 3210743680,3210743807,CL 3210743808,3210744063,US 3210744064,3210744079,TR -3210744080,3210744095,CL -3210744096,3210744127,BR +3210744080,3210744127,BR 3210744128,3210744191,FR -3210744192,3210744255,CL -3210744256,3210744319,BR +3210744192,3210744319,BR 3210744320,3210744575,US 3210744576,3210744591,BE 3210744592,3210744607,BR 3210744608,3210744831,CL 3210744832,3210744863,NZ 3210744864,3210744895,IS -3210744896,3210745087,BR +3210744896,3210744959,CL +3210744960,3210745087,BR 3210745088,3210745343,US 3210745344,3210745359,RU 3210745360,3210745375,BR @@ -90432,8 +91920,7 @@ 3210746048,3210746111,BR 3210746112,3210746367,US 3210746368,3210746383,SE -3210746384,3210746399,BR -3210746400,3210746495,CL +3210746384,3210746495,BR 3210746496,3210746879,US 3210746880,3210746895,CH 3210746896,3210746943,CL @@ -90454,7 +91941,9 @@ 3210756352,3210756607,US 3210756608,3210756863,DE 3210756864,3210757119,RU -3210757120,3210758911,US +3210757120,3210757631,US +3210757632,3210758143,BR +3210758144,3210758911,US 3210758912,3210759167,GH 3210759168,3210764031,US 3210764032,3210764047,IE @@ -90497,7 +91986,8 @@ 3210774528,3210774783,US 3210774784,3210774799,IT 3210774800,3210774815,BR -3210774816,3210775039,CL +3210774816,3210774911,CL +3210774912,3210775039,BR 3210775040,3210775295,US 3210775296,3210775311,CH 3210775312,3210775327,BR @@ -90519,8 +92009,7 @@ 3210778368,3210778623,IE 3210778624,3210781951,US 3210781952,3210782207,IT -3210782208,3210782719,CL -3210782720,3210782975,US +3210782208,3210782975,US 3210782976,3210782991,TR 3210782992,3210783039,CL 3210783040,3210783231,BR @@ -90551,7 +92040,9 @@ 3210788864,3210789119,HR 3210789120,3210791935,US 3210791936,3210792447,CL -3210792448,3210795007,US +3210792448,3210792959,US +3210792960,3210793471,GB +3210793472,3210795007,US 3210795008,3210796031,IL 3210796032,3210798079,US 3210798080,3210798591,CL @@ -90630,7 +92121,8 @@ 3211082240,3211082495,BN 3211082496,3211082751,GB 3211082752,3211083007,SG -3211083008,3211083519,US +3211083008,3211083263,US +3211083264,3211083519,BR 3211083520,3211083775,HK 3211083776,3211083791,RU 3211083792,3211083839,CL @@ -90762,7 +92254,8 @@ 3211104448,3211104511,BR 3211104512,3211104703,AU 3211104704,3211104767,BR -3211104768,3211105791,US +3211104768,3211105279,GB +3211105280,3211105791,US 3211105792,3211106303,ES 3211106304,3211111423,US 3211111424,3211112447,JP @@ -90785,8 +92278,7 @@ 3211129088,3211129343,AT 3211129344,3211129599,SG 3211129600,3211129855,NL -3211129856,3211129983,CL -3211129984,3211130111,HK +3211129856,3211130111,CL 3211130112,3211130367,US 3211130368,3211130623,GR 3211130624,3211130879,TR @@ -90801,25 +92293,23 @@ 3211145216,3211147263,NI 3211147264,3211148287,CR 3211148288,3211165695,CO -3211165696,3211166559,HN +3211165696,3211165727,HN +3211165728,3211165735,UY +3211165736,3211166559,HN 3211166560,3211166567,UY -3211166568,3211169279,HN -3211169280,3211169535,US -3211169536,3211171071,HN +3211166568,3211171071,HN 3211171072,3211171327,US -3211171328,3211172271,HN -3211172272,3211172279,NL -3211172280,3211172671,HN +3211171328,3211172671,HN 3211172672,3211172687,NL 3211172688,3211178583,HN 3211178584,3211178591,ES 3211178592,3211179087,HN 3211179088,3211179103,US -3211179104,3211179199,HN -3211179200,3211179231,US -3211179232,3211181215,HN -3211181216,3211181231,CR -3211181232,3211181439,HN +3211179104,3211179215,HN +3211179216,3211179231,US +3211179232,3211180687,HN +3211180688,3211180695,BR +3211180696,3211181439,HN 3211181440,3211181447,CA 3211181448,3211182079,HN 3211182080,3211194367,CO @@ -91004,7 +92494,9 @@ 3221656832,3221657087,AU 3221657088,3221664255,US 3221664512,3221757951,US -3221757952,3221759999,MY +3221757952,3221758975,MY +3221758976,3221759231,AU +3221759232,3221759999,MY 3221760000,3221761023,IN 3221761024,3221779455,US 3221779456,3221780479,IN @@ -91041,6 +92533,7 @@ 3222036992,3222037247,CA 3222037248,3222037503,GB 3222037504,3222040575,US +3222040576,3222041599,BR 3222042624,3222044927,US 3222044928,3222045183,CA 3222045184,3222056447,US @@ -92572,9 +94065,7 @@ 3227468288,3227468799,CA 3227468800,3227484159,US 3227484160,3227517183,CA -3227517184,3227518719,ZA -3227518720,3227519231,MU -3227519232,3227521279,ZA +3227517184,3227521279,ZA 3227521280,3227521791,US 3227521792,3227522559,ZA 3227522560,3227522815,MU @@ -92624,8 +94115,7 @@ 3227559168,3227559423,GB 3227559424,3227559935,ZA 3227559936,3227562239,US -3227562240,3227562495,MU -3227562496,3227566079,ZA +3227562240,3227566079,ZA 3227566080,3227566335,US 3227566336,3227566847,MU 3227566848,3227568127,ZA @@ -92836,16 +94326,14 @@ 3227804672,3227804927,US 3227804928,3227805183,CA 3227805184,3227805439,SG -3227805440,3227805695,FI +3227805440,3227805695,GB 3227805696,3227806463,US -3227806464,3227806495,FI -3227806496,3227806527,GB -3227806528,3227806719,FI +3227806464,3227806719,GB 3227806720,3227806975,US 3227806976,3227807039,SG 3227807040,3227807743,US -3227807744,3227812351,FI -3227812608,3227813375,FI +3227807744,3227812351,GB +3227812608,3227813375,GB 3227813376,3227813631,US 3227813632,3227815167,GB 3227815168,3227815935,US @@ -93716,8 +95204,8 @@ 3230318592,3230318847,GB 3230318848,3230321663,US 3230321664,3230321919,PT -3230321920,3230323199,US -3230323200,3230323711,AT +3230321920,3230323455,US +3230323456,3230323711,AT 3230323712,3230327807,US 3230327808,3230328063,AT 3230328064,3230328319,GB @@ -93757,6 +95245,12 @@ 3230387456,3230387711,US 3230387712,3230400255,CA 3230400256,3230402559,US +3230402560,3230404607,BR +3230406656,3230414847,BR +3230414848,3230415871,CL +3230415872,3230416895,AR +3230424064,3230425087,EC +3230432256,3230432767,CO 3230433280,3230436351,CN 3230436352,3230437375,AU 3230437376,3230439423,PK @@ -93771,10 +95265,15 @@ 3230460928,3230463999,IN 3230465024,3230466047,BD 3230531584,3230662655,ZA +3230679040,3230681087,BR 3230681088,3230683135,FR 3230683136,3230686207,BD 3230686208,3230687231,ID +3230687232,3230695423,BR 3230695424,3230728191,US +3230777344,3230779391,BR +3230783488,3230784511,BR +3230784512,3230785535,MX 3230785536,3230823679,US 3230823680,3230823935,DK 3230823936,3230824191,US @@ -94743,8 +96242,7 @@ 3233575936,3233576191,RU 3233576192,3233576447,GB 3233576448,3233577215,US -3233577216,3233577471,AT -3233577472,3233577727,GB +3233577216,3233577727,NL 3233577728,3233578239,US 3233578240,3233578495,GB 3233578496,3233578751,US @@ -95436,9 +96934,7 @@ 3236416256,3236416511,AU 3236416512,3236418559,US 3236418560,3236418815,AU -3236418816,3236424959,US -3236424960,3236425215,MU -3236425472,3236427519,US +3236418816,3236427519,US 3236427520,3236427775,CA 3236427776,3236429311,US 3236429312,3236429567,MU @@ -95710,61 +97206,43 @@ 3237773312,3237777407,CA 3237777408,3237781503,US 3237781504,3237785599,CA -3237785600,3237786623,US -3237786624,3237786711,CN -3237786712,3237786719,US -3237786720,3237786759,CN -3237786760,3237786767,US -3237786768,3237786975,CN -3237786976,3237786983,US -3237786984,3237787103,CN -3237787104,3237787111,US -3237787112,3237787159,CN -3237787160,3237787167,US -3237787168,3237787287,CN -3237787288,3237787295,US -3237787296,3237787375,CN -3237787376,3237787383,US -3237787384,3237787455,CN -3237787456,3237787463,US -3237787464,3237787551,CN -3237787552,3237787559,US -3237787560,3237787695,CN -3237787696,3237787703,US -3237787704,3237787719,CN -3237787720,3237787727,US -3237787728,3237787759,CN -3237787760,3237787767,US -3237787768,3237787839,CN -3237787840,3237787847,US -3237787848,3237788023,CN -3237788024,3237788031,US -3237788032,3237788079,CN -3237788080,3237788087,US -3237788088,3237788151,CN -3237788152,3237788159,US -3237788160,3237788167,CN -3237788168,3237788175,US -3237788176,3237788223,CN -3237788224,3237788263,US -3237788264,3237788279,CN -3237788280,3237788287,US -3237788288,3237788415,CN -3237788416,3237789183,US -3237789184,3237789247,CN -3237789248,3237789255,US -3237789256,3237789311,CN -3237789312,3237789319,US -3237789320,3237789367,CN -3237789368,3237789375,US -3237789376,3237789415,CN -3237789416,3237789423,US -3237789424,3237789479,CN -3237789480,3237789487,US -3237789488,3237789647,CN -3237789648,3237789655,US -3237789656,3237789695,CN -3237789696,3237797887,US +3237785600,3237786967,US +3237786968,3237786975,CN +3237786976,3237787175,US +3237787176,3237787191,CN +3237787192,3237787215,US +3237787216,3237787223,CN +3237787224,3237787279,US +3237787280,3237787287,CN +3237787288,3237787327,US +3237787328,3237787343,CN +3237787344,3237787423,US +3237787424,3237787431,CN +3237787432,3237787439,US +3237787440,3237787447,CN +3237787448,3237787463,US +3237787464,3237787471,CN +3237787472,3237787567,US +3237787568,3237787575,CN +3237787576,3237787607,US +3237787608,3237787615,CN +3237787616,3237787687,US +3237787688,3237787695,CN +3237787696,3237787847,US +3237787848,3237787855,CN +3237787856,3237788063,US +3237788064,3237788071,CN +3237788072,3237788087,US +3237788088,3237788095,CN +3237788096,3237788103,US +3237788104,3237788111,CN +3237788112,3237788135,US +3237788136,3237788143,CN +3237788144,3237788183,US +3237788184,3237788207,CN +3237788208,3237788343,US +3237788344,3237788359,CN +3237788360,3237797887,US 3237797888,3237801983,CA 3237801984,3237858303,US 3237858304,3237863423,CA @@ -96035,7 +97513,7 @@ 3237969152,3237969407,RO 3237969408,3238002687,US 3238002688,3238008831,NL -3238008832,3238010879,ES +3238008832,3238010879,HU 3238010880,3238017023,CH 3238017024,3238018303,DK 3238018304,3238018559,UA @@ -96368,8 +97846,7 @@ 3239271424,3239271935,AT 3239271936,3239272447,CH 3239272960,3239273471,GB -3239273472,3239273983,UA -3239273984,3239274495,RU +3239273472,3239274495,RU 3239274496,3239275007,PL 3239275520,3239276543,UA 3239276544,3239277055,LU @@ -97678,7 +99155,9 @@ 3242615168,3242615295,IE 3242615296,3242615871,FR 3242615872,3242615935,PL -3242615936,3242616191,FR +3242615936,3242616029,FR +3242616030,3242616030,NL +3242616031,3242616191,FR 3242616192,3242616319,ES 3242616320,3242616991,FR 3242616992,3242616992,IT @@ -98227,7 +99706,7 @@ 3244929792,3244930047,RU 3244930048,3244930303,PL 3244930304,3244930559,AT -3244930560,3244930815,GB +3244930560,3244930815,CA 3244930816,3244931071,NL 3244931328,3244931583,RO 3244931584,3244931839,FR @@ -98822,7 +100301,7 @@ 3246329088,3246329855,ES 3246350848,3246351103,ES 3246351616,3246352639,ES -3246360576,3246362623,US +3246359552,3246362623,US 3246362624,3246371073,ES 3246371074,3246371074,PT 3246371075,3246379007,ES @@ -99008,7 +100487,7 @@ 3247366144,3247370495,FI 3247371008,3247371263,PL 3247371264,3247371519,SE -3247371520,3247371775,GB +3247371520,3247371775,CA 3247371776,3247372031,RU 3247372032,3247372287,FI 3247372288,3247372543,RO @@ -99803,6 +101282,7 @@ 3250642944,3250651135,CH 3250651136,3250659327,IT 3250659328,3250660607,GB +3250661376,3250662399,GB 3250667520,3250675711,PL 3250675712,3250683903,GB 3250683904,3250692095,CH @@ -100153,7 +101633,6 @@ 3251269120,3251269375,DK 3251269376,3251269631,FR 3251269888,3251270143,GB -3251270144,3251270399,PL 3251270400,3251270655,NO 3251270656,3251270911,DE 3251270912,3251271167,PL @@ -100236,8 +101715,8 @@ 3252220928,3252221183,SE 3252221184,3252222463,LT 3252222464,3252223487,SE -3252223488,3252223999,LT -3252224000,3252232319,SE +3252223488,3252224511,LT +3252224512,3252232319,SE 3252232320,3252232576,NL 3252232577,3252256767,SE 3252256768,3252273151,EE @@ -100879,12 +102358,16 @@ 3253771000,3253771165,DE 3253771166,3253771166,GB 3253771167,3253771199,DE -3253771200,3253771263,IE +3253771200,3253771217,IE +3253771218,3253771219,GB +3253771220,3253771263,IE 3253771264,3253771519,DE 3253771520,3253771561,GB 3253771562,3253771562,DE 3253771563,3253771775,GB -3253771776,3253772191,DE +3253771776,3253771792,DE +3253771793,3253771793,GB +3253771794,3253772191,DE 3253772192,3253772207,GB 3253772208,3253772311,DE 3253772312,3253772319,GB @@ -101074,7 +102557,9 @@ 3254487264,3254487295,KM 3254487296,3254487419,CF 3254487420,3254487559,FR -3254487560,3254487803,CI +3254487560,3254487567,CI +3254487568,3254487575,FR +3254487576,3254487803,CI 3254487804,3254488431,FR 3254488432,3254488447,MG 3254488448,3254489087,FR @@ -102460,7 +103945,7 @@ 3258771456,3258772479,KZ 3258772480,3258773503,RU 3258773504,3258774015,FR -3258774016,3258774271,UA +3258774016,3258774271,RU 3258774272,3258774527,DK 3258774528,3258776063,RU 3258776064,3258776319,GE @@ -103269,10 +104754,33 @@ 3262473200,3262473203,ES 3262473204,3262473211,DE 3262473212,3262473215,FR -3262473216,3262473323,JP -3262473324,3262473327,KR -3262473328,3262473471,JP -3262473472,3262473473,DE +3262473216,3262473231,DE +3262473232,3262473239,JP +3262473240,3262473243,DE +3262473244,3262473247,JP +3262473248,3262473251,DE +3262473252,3262473255,JP +3262473256,3262473271,DE +3262473272,3262473283,JP +3262473284,3262473295,DE +3262473296,3262473299,JP +3262473300,3262473303,DE +3262473304,3262473315,JP +3262473316,3262473319,DE +3262473320,3262473323,JP +3262473324,3262473339,DE +3262473340,3262473347,JP +3262473348,3262473355,DE +3262473356,3262473371,JP +3262473372,3262473379,DE +3262473380,3262473383,JP +3262473384,3262473403,DE +3262473404,3262473415,JP +3262473416,3262473439,DE +3262473440,3262473443,JP +3262473444,3262473459,DE +3262473460,3262473467,JP +3262473468,3262473473,DE 3262473474,3262473478,US 3262473479,3262473480,CA 3262473481,3262473483,US @@ -103333,7 +104841,7 @@ 3262473972,3262473983,US 3262473984,3262473985,DE 3262473986,3262473986,TW -3262473987,3262473987,IN +3262473987,3262473987,DE 3262473988,3262473988,SG 3262473989,3262473989,IN 3262473990,3262473990,SG @@ -103342,23 +104850,26 @@ 3262473993,3262473993,IN 3262473994,3262473995,TW 3262473996,3262473996,MY -3262473997,3262473998,ID +3262473997,3262473997,ID +3262473998,3262473998,DE 3262473999,3262473999,TW 3262474000,3262474000,SG 3262474001,3262474001,TW -3262474002,3262474002,MY +3262474002,3262474002,DE 3262474003,3262474003,TW 3262474004,3262474004,SG 3262474005,3262474005,TW 3262474006,3262474007,SG 3262474008,3262474009,TW 3262474010,3262474010,SG -3262474011,3262474011,ID +3262474011,3262474011,DE 3262474012,3262474013,SG 3262474014,3262474014,HK 3262474015,3262474016,SG 3262474017,3262474018,MY -3262474019,3262474026,SG +3262474019,3262474024,SG +3262474025,3262474025,DE +3262474026,3262474026,SG 3262474027,3262474027,CN 3262474028,3262474030,SG 3262474031,3262474031,IN @@ -103371,12 +104882,15 @@ 3262474038,3262474038,MY 3262474039,3262474039,TW 3262474040,3262474041,MY -3262474042,3262474042,CN +3262474042,3262474042,DE 3262474043,3262474043,SG -3262474044,3262474044,GB -3262474045,3262474048,SG +3262474044,3262474044,DE +3262474045,3262474047,SG +3262474048,3262474048,DE 3262474049,3262474049,IN -3262474050,3262474061,SG +3262474050,3262474051,SG +3262474052,3262474052,DE +3262474053,3262474061,SG 3262474062,3262474063,CN 3262474064,3262474064,TW 3262474065,3262474065,IN @@ -103391,10 +104905,12 @@ 3262474076,3262474076,MY 3262474077,3262474077,SG 3262474078,3262474078,IN -3262474079,3262474079,MY +3262474079,3262474079,DE 3262474080,3262474083,SG -3262474084,3262474084,TW -3262474085,3262474087,SG +3262474084,3262474084,DE +3262474085,3262474085,SG +3262474086,3262474086,DE +3262474087,3262474087,SG 3262474088,3262474088,MY 3262474089,3262474089,SG 3262474090,3262474091,MY @@ -103402,10 +104918,12 @@ 3262474095,3262474095,HK 3262474096,3262474097,SG 3262474098,3262474098,MY -3262474099,3262474102,SG +3262474099,3262474100,SG +3262474101,3262474101,DE +3262474102,3262474102,SG 3262474103,3262474103,MY 3262474104,3262474104,CN -3262474105,3262474105,IN +3262474105,3262474105,DE 3262474106,3262474106,MY 3262474107,3262474107,CN 3262474108,3262474108,HK @@ -103415,36 +104933,33 @@ 3262474113,3262474113,PH 3262474114,3262474114,IN 3262474115,3262474115,SG -3262474116,3262474116,TW -3262474117,3262474117,IN +3262474116,3262474117,DE 3262474118,3262474118,TH 3262474119,3262474119,TW -3262474120,3262474120,BN -3262474121,3262474121,TW +3262474120,3262474121,DE 3262474122,3262474122,SG 3262474123,3262474125,MY 3262474126,3262474126,IN -3262474127,3262474128,SG +3262474127,3262474127,SG +3262474128,3262474128,DE 3262474129,3262474130,MY 3262474131,3262474131,IN -3262474132,3262474133,MY +3262474132,3262474133,DE 3262474134,3262474134,CN 3262474135,3262474136,SG -3262474137,3262474137,TW -3262474138,3262474139,CN +3262474137,3262474138,DE +3262474139,3262474139,CN 3262474140,3262474140,TW 3262474141,3262474142,SG 3262474143,3262474143,PH 3262474144,3262474150,SG 3262474151,3262474151,MY 3262474152,3262474152,SG -3262474153,3262474153,IN -3262474154,3262474154,SG -3262474155,3262474155,MY -3262474156,3262474156,IN +3262474153,3262474156,DE 3262474157,3262474157,SG 3262474158,3262474159,MY -3262474160,3262474162,SG +3262474160,3262474161,DE +3262474162,3262474162,SG 3262474163,3262474163,MY 3262474164,3262474164,IN 3262474165,3262474165,CN @@ -103453,83 +104968,93 @@ 3262474168,3262474168,TW 3262474169,3262474169,DE 3262474170,3262474170,SG -3262474171,3262474171,MY +3262474171,3262474171,DE 3262474172,3262474172,SG -3262474173,3262474173,CN +3262474173,3262474173,DE 3262474174,3262474174,TW 3262474175,3262474175,SG 3262474176,3262474176,MY -3262474177,3262474177,SG +3262474177,3262474177,DE 3262474178,3262474178,TW 3262474179,3262474179,CN 3262474180,3262474180,MY 3262474181,3262474181,SG 3262474182,3262474182,MY -3262474183,3262474185,SG +3262474183,3262474183,SG +3262474184,3262474184,DE +3262474185,3262474185,SG 3262474186,3262474186,MY 3262474187,3262474187,SG 3262474188,3262474188,MY 3262474189,3262474189,SG 3262474190,3262474190,CN 3262474191,3262474192,SG -3262474193,3262474193,PH +3262474193,3262474193,DE 3262474194,3262474194,SG 3262474195,3262474195,MY -3262474196,3262474196,IN -3262474197,3262474198,SG +3262474196,3262474197,DE +3262474198,3262474198,SG 3262474199,3262474199,CN -3262474200,3262474200,MY +3262474200,3262474200,DE 3262474201,3262474201,SG 3262474202,3262474203,CN 3262474204,3262474204,IN 3262474205,3262474205,SG -3262474206,3262474206,IN +3262474206,3262474206,DE 3262474207,3262474207,MY 3262474208,3262474208,SG -3262474209,3262474209,MY -3262474210,3262474210,TW +3262474209,3262474210,DE 3262474211,3262474211,SG 3262474212,3262474212,MY 3262474213,3262474213,SG 3262474214,3262474214,CN -3262474215,3262474215,IN +3262474215,3262474215,DE 3262474216,3262474216,SG -3262474217,3262474217,MY +3262474217,3262474217,DE 3262474218,3262474218,SG 3262474219,3262474219,MY -3262474220,3262474222,IN +3262474220,3262474220,IN +3262474221,3262474221,DE +3262474222,3262474222,IN 3262474223,3262474223,SG 3262474224,3262474224,MY 3262474225,3262474225,SG 3262474226,3262474226,MY -3262474227,3262474227,IN +3262474227,3262474227,DE 3262474228,3262474228,SG -3262474229,3262474230,IN +3262474229,3262474230,DE 3262474231,3262474231,SG -3262474232,3262474234,IN +3262474232,3262474232,DE +3262474233,3262474233,IN +3262474234,3262474234,DE 3262474235,3262474236,MY -3262474237,3262474238,SG -3262474239,3262474239,DE -3262474240,3262474255,AU -3262474256,3262474259,NZ -3262474260,3262474263,AU -3262474264,3262474267,NZ -3262474268,3262474271,AU -3262474272,3262474275,NZ -3262474276,3262474367,AU -3262474368,3262474371,NZ -3262474372,3262474395,AU -3262474396,3262474399,NZ -3262474400,3262474463,AU -3262474464,3262474467,NZ -3262474468,3262474495,AU -3262474496,3262474631,DE +3262474237,3262474237,DE +3262474238,3262474238,SG +3262474239,3262474475,DE +3262474476,3262474479,AU +3262474480,3262474631,DE 3262474632,3262474635,DK -3262474636,3262474791,DE -3262474792,3262474815,JP -3262474816,3262474895,DE -3262474896,3262475007,JP -3262475008,3262475009,DE +3262474636,3262474795,DE +3262474796,3262474799,JP +3262474800,3262474807,DE +3262474808,3262474815,JP +3262474816,3262474899,DE +3262474900,3262474907,JP +3262474908,3262474911,DE +3262474912,3262474915,JP +3262474916,3262474919,DE +3262474920,3262474935,JP +3262474936,3262474939,DE +3262474940,3262474947,JP +3262474948,3262474951,DE +3262474952,3262474959,JP +3262474960,3262474963,DE +3262474964,3262474971,JP +3262474972,3262474975,DE +3262474976,3262474987,JP +3262474988,3262474991,DE +3262474992,3262475003,JP +3262475004,3262475009,DE 3262475010,3262475011,US 3262475012,3262475012,DE 3262475013,3262475019,US @@ -104909,7 +106434,7 @@ 3263100416,3263100671,DE 3263100672,3263100927,GB 3263100928,3263101183,AT -3263101184,3263101439,CH +3263101184,3263101439,US 3263101440,3263101695,DK 3263101952,3263102207,LT 3263102208,3263102463,GB @@ -106317,9 +107842,7 @@ 3271163904,3271219967,FR 3271219968,3271220223,GP 3271220224,3271229439,FR -3271229440,3271280687,FI -3271280688,3271280703,SE -3271280704,3271360511,FI +3271229440,3271360511,FI 3271360512,3271363407,GB 3271363408,3271363415,AT 3271363416,3271363423,GB @@ -106825,7 +108348,6 @@ 3272478464,3272478719,FI 3272478720,3272478975,GB 3272478976,3272479231,UA -3272479232,3272479487,GB 3272479488,3272479743,SA 3272479744,3272480255,SE 3272480256,3272480511,FR @@ -107102,7 +108624,7 @@ 3273340128,3273340143,DE 3273340144,3273340415,GB 3273340928,3273341711,FR -3273341752,3273341823,FR +3273341752,3273341831,FR 3273341888,3273341951,FR 3273342022,3273342022,GB 3273342034,3273342034,GB @@ -107165,8 +108687,8 @@ 3273373568,3273374847,GB 3273374856,3273374863,GB 3273374896,3273374903,GB -3273374928,3273374931,GB -3273375136,3273375168,GB +3273374912,3273374931,GB +3273375168,3273375168,GB 3273375232,3273375551,DE 3273375744,3273375871,DE 3273376000,3273376255,DE @@ -108899,9 +110421,13 @@ 3276873760,3276873791,ES 3276873792,3276873983,GB 3276873984,3276874239,ES -3276874240,3276874959,GB +3276874240,3276874351,GB +3276874352,3276874367,ES +3276874368,3276874959,GB 3276874960,3276874975,NL -3276874976,3276880427,GB +3276874976,3276876279,GB +3276876280,3276876283,DK +3276876284,3276880427,GB 3276880428,3276880431,DK 3276880432,3276881811,GB 3276881812,3276881815,FR @@ -108925,7 +110451,9 @@ 3276889088,3276889215,IT 3276889216,3276890175,GB 3276890176,3276890191,US -3276890192,3276893695,GB +3276890192,3276892287,GB +3276892288,3276892303,IT +3276892304,3276893695,GB 3276893696,3276893951,IT 3276893952,3276897727,GB 3276897728,3276897791,BE @@ -108995,8 +110523,8 @@ 3276956160,3276957695,ES 3276957696,3276958719,GB 3276958720,3276959743,IL -3276959744,3276961791,ES -3276961792,3276963327,GB +3276959744,3276962815,ES +3276962816,3276963327,GB 3276963328,3276963839,ES 3276963840,3276964351,IL 3276964352,3276964863,RO @@ -109276,7 +110804,9 @@ 3277716480,3277716991,SE 3277716992,3277717503,IT 3277717504,3277725695,YE -3277725696,3277733887,CH +3277725696,3277730559,CH +3277730560,3277730563,GB +3277730564,3277733887,CH 3277733888,3277742079,DE 3277742080,3277745151,FI 3277745152,3277746175,CH @@ -109686,45 +111216,41 @@ 3278939900,3278939903,IT 3278939904,3278939907,HK 3278939908,3278939911,MY -3278939912,3278939915,TH -3278939916,3278939923,SG -3278939924,3278939927,CN +3278939912,3278939919,DE +3278939920,3278939923,SG +3278939924,3278939927,DE 3278939928,3278939931,SG 3278939932,3278939935,IN 3278939936,3278939939,MY -3278939940,3278939943,SG -3278939944,3278939947,TW +3278939940,3278939947,DE 3278939948,3278939951,SG 3278939952,3278939955,MY -3278939956,3278939959,SG -3278939960,3278939963,CN +3278939956,3278939963,DE 3278939964,3278939967,MY 3278939968,3278939971,TW -3278939972,3278939979,MY -3278939980,3278939983,TH -3278939984,3278939987,DE -3278939988,3278939991,CN +3278939972,3278939975,MY +3278939976,3278939991,DE 3278939992,3278939995,SG -3278939996,3278939999,MY -3278940000,3278940011,SG -3278940012,3278940015,ID -3278940016,3278940059,SG +3278939996,3278939999,DE +3278940000,3278940007,SG +3278940008,3278940015,DE +3278940016,3278940043,SG +3278940044,3278940047,DE +3278940048,3278940059,SG 3278940060,3278940067,CN 3278940068,3278940071,TW -3278940072,3278940083,SG -3278940084,3278940091,MY +3278940072,3278940079,DE +3278940080,3278940083,SG +3278940084,3278940087,DE +3278940088,3278940091,MY 3278940092,3278940095,SG -3278940096,3278940099,IN +3278940096,3278940099,DE 3278940100,3278940103,SG 3278940104,3278940107,MY -3278940108,3278940127,SG -3278940128,3278940131,TW -3278940132,3278940135,BD -3278940136,3278940139,SG -3278940140,3278940143,IN -3278940144,3278940151,MY -3278940152,3278940155,IN -3278940156,3278940159,PH +3278940108,3278940111,SG +3278940112,3278940115,DE +3278940116,3278940127,SG +3278940128,3278940159,DE 3278940160,3278940163,GR 3278940164,3278940167,CH 3278940168,3278940171,DE @@ -110034,75 +111560,50 @@ 3278942184,3278942203,DE 3278942204,3278942207,CH 3278942208,3278942211,TW -3278942212,3278942227,AU -3278942228,3278942231,NZ -3278942232,3278942243,AU -3278942244,3278942247,NZ -3278942248,3278942255,AU -3278942256,3278942259,NZ -3278942260,3278942271,AU -3278942272,3278942275,NZ -3278942276,3278942291,AU -3278942292,3278942295,NZ -3278942296,3278942299,PG -3278942300,3278942355,AU -3278942356,3278942359,NZ -3278942360,3278942383,AU -3278942384,3278942387,NZ -3278942388,3278942399,AU -3278942400,3278942403,NZ -3278942404,3278942435,AU -3278942436,3278942439,DE -3278942440,3278942443,AU +3278942212,3278942443,DE 3278942444,3278942447,NZ -3278942448,3278942455,AU -3278942456,3278942463,DE +3278942448,3278942463,DE 3278942464,3278942467,SG 3278942468,3278942471,MY -3278942472,3278942475,IN -3278942476,3278942483,SG -3278942484,3278942487,CN +3278942472,3278942479,DE +3278942480,3278942483,SG +3278942484,3278942487,DE 3278942488,3278942491,IN 3278942492,3278942495,MY -3278942496,3278942499,CN +3278942496,3278942499,DE 3278942500,3278942507,MY 3278942508,3278942511,TH 3278942512,3278942515,SG -3278942516,3278942519,PH -3278942520,3278942539,IN -3278942540,3278942543,TW -3278942544,3278942547,PK -3278942548,3278942551,MY +3278942516,3278942519,DE +3278942520,3278942523,IN +3278942524,3278942527,DE +3278942528,3278942531,IN +3278942532,3278942551,DE 3278942552,3278942555,TW 3278942556,3278942559,IN -3278942560,3278942571,MY +3278942560,3278942563,DE +3278942564,3278942571,MY 3278942572,3278942575,IN -3278942576,3278942579,MY -3278942580,3278942583,TW -3278942584,3278942587,SG -3278942588,3278942591,CN +3278942576,3278942591,DE 3278942592,3278942595,TW -3278942596,3278942599,IN +3278942596,3278942599,DE 3278942600,3278942603,SG 3278942604,3278942607,TW -3278942608,3278942611,TH -3278942612,3278942615,PH +3278942608,3278942615,DE 3278942616,3278942627,SG 3278942628,3278942635,MY -3278942636,3278942643,SG -3278942644,3278942647,MY -3278942648,3278942651,IN +3278942636,3278942639,SG +3278942640,3278942651,DE 3278942652,3278942655,MY -3278942656,3278942667,SG -3278942668,3278942671,MY +3278942656,3278942659,DE +3278942660,3278942667,SG +3278942668,3278942671,DE 3278942672,3278942675,SG -3278942676,3278942679,HK +3278942676,3278942679,DE 3278942680,3278942683,TW 3278942684,3278942687,DE 3278942688,3278942691,SG -3278942692,3278942695,IN -3278942696,3278942699,SG -3278942700,3278942703,TW +3278942692,3278942703,DE 3278942704,3278942707,MY 3278942708,3278942719,SG 3278942720,3278942721,DE @@ -112032,7 +113533,9 @@ 3280935120,3280935127,FR 3280935128,3280941387,GB 3280941388,3280941395,DE -3280941396,3280952331,GB +3280941396,3280942191,GB +3280942192,3280942207,DK +3280942208,3280952331,GB 3280952332,3280952335,DE 3280952336,3280952783,GB 3280952784,3280952799,DE @@ -112546,7 +114049,8 @@ 3283980288,3283980799,RO 3283980800,3283981823,CH 3283981824,3283982335,RO -3283982848,3283983359,RO +3283982848,3283983103,SE +3283983104,3283983359,RO 3283983360,3283983871,CY 3283983872,3283984383,GB 3283984384,3283984895,SE @@ -112681,7 +114185,7 @@ 3284084224,3284084735,UA 3284084736,3284085247,RU 3284085248,3284085759,DE -3284085760,3284086783,RO +3284086272,3284086783,RO 3284086784,3284087295,CZ 3284087296,3284087807,RU 3284087808,3284088319,IL @@ -112707,9 +114211,11 @@ 3284099328,3284099583,HU 3284099584,3284100095,GR 3284100096,3284100607,AM +3284100608,3284101119,US 3284101120,3284101631,UA 3284101632,3284102143,GB 3284102144,3284102399,DK +3284102627,3284102627,DK 3284102656,3284103167,AT 3284103168,3284103679,NL 3284103680,3284104191,DE @@ -112903,7 +114409,6 @@ 3285118976,3285119487,RU 3285119488,3285119999,RO 3285120000,3285120511,RU -3285120512,3285121023,RO 3285121024,3285121535,SE 3285121536,3285122047,CY 3285122048,3285123071,RU @@ -112966,9 +114471,9 @@ 3285409792,3285410815,UA 3285410816,3285412863,RU 3285412864,3285413887,UA -3285413888,3285414911,RU -3285414912,3285415935,UA -3285415936,3285419007,RU +3285413888,3285414978,RU +3285414979,3285414979,UA +3285414980,3285419007,RU 3285419008,3285420031,SE 3285420032,3285425151,UA 3285425152,3285426175,LV @@ -113005,7 +114510,7 @@ 3285480960,3285481215,CH 3285488576,3285488639,CY 3285495296,3285495807,ES -3285501328,3285501359,CZ +3285501312,3285501359,CZ 3285501696,3285501951,GB 3285510144,3285512191,GB 3285515776,3285515799,GR @@ -113131,7 +114636,7 @@ 3285931584,3285931599,DE 3285935872,3285936127,GB 3285936136,3285936147,FR -3285936152,3285936167,FR +3285936152,3285936175,FR 3285939136,3285939175,GB 3285939184,3285939191,GB 3285939744,3285939759,GB @@ -113686,7 +115191,6 @@ 3287668736,3287668991,SI 3287668992,3287669247,PL 3287669248,3287669503,LI -3287669504,3287669759,MD 3287669760,3287670015,RO 3287670016,3287670271,UA 3287670272,3287670527,PL @@ -113846,7 +115350,9 @@ 3287965696,3287973887,RS 3287973888,3287982079,CZ 3287982080,3287990271,EE -3287990272,3287996415,SI +3287990272,3287994367,SI +3287994368,3287995391,BA +3287995392,3287996415,SI 3287996416,3287998463,BA 3287998464,3288006655,IT 3288006656,3288072191,GR @@ -113988,6 +115494,7 @@ 3288569856,3288570111,CU 3288570112,3288570367,JM 3288570368,3288577023,ZA +3288577280,3288577535,NG 3288578048,3288580095,JM 3288580096,3288588287,BB 3288588288,3288608255,ZA @@ -114020,6 +115527,7 @@ 3288785408,3288785663,UG 3288785664,3288785919,TZ 3288785920,3288786175,NG +3288786176,3288786431,KE 3288786688,3288787967,ZA 3288787968,3288788223,EG 3288788224,3288792831,ZA @@ -114128,7 +115636,8 @@ 3289230848,3289231359,GH 3289231360,3289233919,ZA 3289233920,3289234175,TZ -3289234176,3289235455,ZA +3289234176,3289235199,ZA +3289235200,3289235455,KE 3289235456,3289237503,GH 3289237504,3289238015,ZA 3289238016,3289238271,KE @@ -114156,7 +115665,9 @@ 3289320448,3289321471,ZA 3289321472,3289325567,IN 3289325568,3289333759,SA -3289333760,3289391103,ZA +3289333760,3289382911,ZA +3289382912,3289387007,NL +3289387008,3289391103,ZA 3289391104,3289440255,SC 3289440256,3289448447,ZA 3289448448,3289645055,SC @@ -114289,12 +115800,8 @@ 3291045888,3291078655,ZA 3291078656,3291086847,DZ 3291086848,3291103231,PR -3291103232,3291123711,ZA -3291123712,3291135999,BG -3291136000,3291140095,ZA -3291140096,3291144191,BG -3291144192,3291148287,ZA -3291148288,3291152383,BG +3291103232,3291119615,ZA +3291119616,3291152383,BG 3291152384,3291168767,ZA 3291168768,3291176959,TZ 3291176960,3291185151,ZW @@ -114367,7 +115874,8 @@ 3291287552,3291291647,ZA 3291291648,3291295743,TZ 3291295744,3291299839,NG -3291299840,3291313151,ZA +3291299840,3291312127,ZA +3291312128,3291313151,MU 3291313152,3291314175,NG 3291314176,3291315199,ZA 3291315200,3291316223,UG @@ -114411,7 +115919,9 @@ 3291387904,3291388927,BJ 3291388928,3291389307,GA 3291389308,3291389311,KM -3291389312,3291389951,GA +3291389312,3291389343,GA +3291389344,3291389347,CG +3291389348,3291389951,GA 3291389952,3291397119,ZA 3291397120,3291398143,EG 3291398144,3291406335,ZM @@ -114424,8 +115934,8 @@ 3291430912,3291432703,ZA 3291432704,3291432959,NA 3291432960,3291434239,ZA -3291434752,3291435519,ZA -3291435520,3291437823,NA +3291434752,3291436031,ZA +3291436032,3291437823,NA 3291437824,3291438079,ZA 3291438080,3291439103,NA 3291439104,3291447295,NG @@ -114473,6 +115983,7 @@ 3291555328,3291555583,CM 3291555840,3291556095,GN 3291556352,3291556607,SN +3291556864,3291557119,TG 3291611136,3291611647,ZA 3291611648,3291611903,MU 3291611904,3291612159,ZA @@ -114480,30 +115991,63 @@ 3291613184,3291615231,SN 3291615232,3291616255,ML 3291616256,3291616511,TZ +3291616512,3291616767,KE 3291616768,3291617279,EG 3291617280,3291619327,GH 3291619328,3291627519,GA 3291627520,3291643903,ZA 3291643904,3291660287,MZ 3291660288,3291742207,ZA -3291742208,3291742463,US -3291742464,3291742591,GB +3291742208,3291742464,US +3291742465,3291742591,GB 3291742592,3291742719,IE -3291742720,3291750399,US -3291750400,3291750655,GB -3291750656,3291757311,US +3291742720,3291744767,US +3291744768,3291745023,MX +3291745024,3291745791,US +3291745792,3291746047,MX +3291746048,3291750399,US +3291750400,3291750655,IT +3291750656,3291750911,US +3291750912,3291751167,SG +3291751168,3291751423,US +3291751424,3291751679,SG +3291751680,3291751935,US +3291751936,3291752191,HK +3291752192,3291753471,US +3291753472,3291753727,GB +3291753728,3291753983,US +3291753984,3291754239,JP +3291754240,3291754495,US +3291754496,3291754751,AU +3291754752,3291755007,GB +3291755008,3291755263,AU +3291755264,3291755519,US +3291755520,3291755775,AU +3291755776,3291756543,US +3291756544,3291756799,AU +3291756800,3291757311,US 3291757312,3291757567,GB -3291757568,3291758079,US +3291757568,3291757823,AU +3291757824,3291758079,US 3291758080,3291758335,GB -3291758336,3291762175,US +3291758336,3291760639,US +3291760640,3291760895,AU +3291760896,3291762175,US 3291762176,3291762431,GB -3291762432,3291763199,US +3291762432,3291762687,AU +3291762688,3291763199,US 3291763200,3291763455,GB 3291763456,3291763711,US 3291763712,3291763967,GB -3291763968,3291813375,US +3291763968,3291766271,US +3291766272,3291766527,AU +3291766528,3291766783,US +3291766784,3291767039,AU +3291767040,3291813375,US 3291813376,3291813631,GB -3291813632,3291815423,US +3291813632,3291813887,US +3291813888,3291814143,GB +3291814144,3291815423,US 3291815424,3291815679,GB 3291815680,3291817471,US 3291817472,3291817983,NL @@ -114521,70 +116065,54 @@ 3291827200,3291827455,CA 3291827456,3291828223,US 3291828224,3291828479,GB -3291828480,3291878143,US -3291878144,3291878399,CA -3291878400,3291880703,US -3291880704,3291880959,CA -3291880960,3291883775,US +3291828480,3291879935,US +3291879936,3291880191,AU +3291880192,3291883775,US 3291883776,3291884031,CA -3291884032,3291884543,US -3291884544,3291884799,CA -3291884800,3291886335,US +3291884032,3291884287,US +3291884288,3291884543,NZ +3291884544,3291886335,US 3291886336,3291886591,CA -3291886592,3291887359,US +3291886592,3291887103,US +3291887104,3291887359,GB 3291887360,3291887615,FR 3291887616,3291888895,US 3291888896,3291889151,FR -3291889152,3291893759,US +3291889152,3291891455,US +3291891456,3291891711,GB +3291891712,3291893759,US 3291893760,3291894015,CA 3291894016,3291906047,US 3291906048,3291907071,LK 3291907072,3291939063,US 3291939064,3291939064,GB -3291939065,3291943423,US +3291939065,3291939327,US +3291939328,3291939583,IN +3291939584,3291943423,US 3291943424,3291943679,FR -3291943680,3291971583,US +3291943680,3291945727,US +3291945728,3291945983,GB +3291945984,3291971583,US 3291971584,3291972607,JP 3291972608,3292004351,US -3292004352,3292004607,SC +3292004352,3292004607,SE 3292004608,3292004863,DK -3292004864,3292005119,US -3292005120,3292006143,SC -3292006144,3292007423,US +3292004864,3292005375,US +3292005376,3292005631,CZ +3292005632,3292005887,SC +3292005888,3292007423,US 3292007424,3292007679,SC -3292007680,3292008703,US -3292008704,3292008959,SC -3292008960,3292012031,US -3292012032,3292012799,SC -3292012800,3292014847,US -3292014848,3292015103,SC -3292015104,3292016383,US -3292016384,3292016895,SC -3292016896,3292017407,US -3292017408,3292017663,SC -3292017664,3292018175,US -3292018176,3292018431,SC -3292018432,3292018943,US -3292018944,3292019455,SC +3292007680,3292019199,US +3292019200,3292019455,SC 3292019456,3292019711,US 3292019712,3292019967,SC 3292019968,3292022015,US 3292022016,3292022271,SC 3292022272,3292023295,US -3292023296,3292023807,SC -3292023808,3292027391,US -3292027392,3292027647,SC -3292027648,3292029183,US -3292029184,3292029439,SC -3292029440,3292029695,US -3292029696,3292030207,SC -3292030208,3292030463,US -3292030464,3292030975,SC -3292030976,3292031743,US +3292023296,3292023551,SC +3292023552,3292031743,US 3292031744,3292032255,SC -3292032256,3292032511,US -3292032512,3292032767,SC -3292032768,3292033791,US +3292032256,3292033791,US 3292033792,3292034047,SC 3292034048,3292034303,US 3292034304,3292034559,SC @@ -114593,54 +116121,22 @@ 3292036096,3292036351,US 3292036352,3292036607,SC 3292036608,3292036863,US -3292036864,3292037375,SC -3292037376,3292037631,US -3292037632,3292037887,SC -3292037888,3292038655,US -3292038656,3292038911,SC -3292038912,3292039167,US -3292039168,3292039679,SC -3292039680,3292040191,US -3292040192,3292040447,SC -3292040448,3292040703,US -3292040704,3292040959,SC -3292040960,3292041471,US -3292041472,3292041727,SC -3292041728,3292041983,US -3292041984,3292042239,SC -3292042240,3292044031,US -3292044032,3292044287,SC -3292044288,3292044543,US -3292044544,3292044799,SC -3292044800,3292047103,US +3292036864,3292037119,SC +3292037120,3292047103,US 3292047104,3292047359,SC 3292047360,3292049663,US 3292049664,3292049919,SC -3292049920,3292050175,US -3292050176,3292050687,SC -3292050688,3292051455,US -3292051456,3292051711,SC -3292051712,3292052991,US -3292052992,3292053247,SC -3292053248,3292054015,US +3292049920,3292050431,US +3292050432,3292050687,SC +3292050688,3292054015,US 3292054016,3292054271,SC -3292054272,3292058111,US -3292058112,3292058879,SC -3292058880,3292059135,US +3292054272,3292059135,US 3292059136,3292059391,SC -3292059392,3292060159,US -3292060160,3292060415,SC -3292060416,3292060671,US -3292060672,3292060927,SC -3292060928,3292061951,US -3292061952,3292062207,SC -3292062208,3292062719,US -3292062720,3292062975,SC -3292062976,3292064767,US -3292064768,3292065535,SC -3292065536,3292065791,US -3292065792,3292066303,SC -3292066304,3292069375,US +3292059392,3292065023,US +3292065024,3292065279,SC +3292065280,3292065791,US +3292065792,3292066047,SC +3292066048,3292069375,US 3292069376,3292069631,DE 3292069632,3292069887,AU 3292069888,3292070143,SE @@ -114648,283 +116144,127 @@ 3292070400,3292070655,US 3292070656,3292070911,SC 3292070912,3292071167,CZ -3292071168,3292071423,US -3292071424,3292071679,SC -3292071680,3292076543,US -3292076544,3292076799,SC -3292076800,3292078335,US -3292078336,3292078591,SC -3292078592,3292078847,US +3292071168,3292078847,US 3292078848,3292079103,SC -3292079104,3292079615,US -3292079616,3292079871,SC -3292079872,3292080383,US +3292079104,3292080383,US 3292080384,3292080639,SC 3292080640,3292081151,US 3292081152,3292081407,SC -3292081408,3292081663,US -3292081664,3292081919,SC -3292081920,3292082175,US -3292082176,3292082687,SC -3292082688,3292082943,US -3292082944,3292083199,SC -3292083200,3292083967,US -3292083968,3292084223,SC -3292084224,3292085247,US +3292081408,3292082431,US +3292082432,3292082687,SC +3292082688,3292085247,US 3292085248,3292085503,SC 3292085504,3292085759,US -3292085760,3292087295,SC -3292087296,3292088319,US -3292088320,3292088831,SC -3292088832,3292089087,US -3292089088,3292089599,SC -3292089600,3292090879,US -3292090880,3292091135,SC -3292091136,3292093183,US -3292093184,3292093439,SC -3292093440,3292093695,US +3292085760,3292086015,SC +3292086016,3292093695,US 3292093696,3292093951,SC -3292093952,3292094975,US -3292094976,3292095231,SC -3292095232,3292096767,US -3292096768,3292097023,SC -3292097024,3292098303,US -3292098304,3292098559,SC -3292098560,3292099071,US -3292099072,3292099583,SC -3292099584,3292101375,US -3292101376,3292101631,SC -3292101632,3292102911,US -3292102912,3292103167,SC -3292103168,3292104191,US -3292104192,3292104447,SC -3292104448,3292104959,US +3292093952,3292099327,US +3292099328,3292099583,SC +3292099584,3292104959,US 3292104960,3292105215,SC -3292105216,3292105727,US -3292105728,3292106239,SC +3292105216,3292105983,US +3292105984,3292106239,SC 3292106240,3292106751,US 3292106752,3292107007,SC 3292107008,3292108031,US 3292108032,3292108287,SC 3292108288,3292109567,US 3292109568,3292109823,SC -3292109824,3292110591,US -3292110592,3292110847,SC -3292110848,3292111103,US -3292111104,3292111359,SC -3292111360,3292112127,US +3292109824,3292112127,US 3292112128,3292112383,SC 3292112384,3292113919,US -3292113920,3292114431,SC -3292114432,3292115967,US +3292113920,3292114175,SC +3292114176,3292115967,US 3292115968,3292116223,SC -3292116224,3292120319,US -3292120320,3292120575,SC -3292120576,3292124671,US -3292124672,3292124927,SC -3292124928,3292125695,US +3292116224,3292125695,US 3292125696,3292125951,SC -3292125952,3292126975,US -3292126976,3292127231,SC -3292127232,3292128767,US +3292125952,3292128767,US 3292128768,3292129023,SC -3292129024,3292129535,US -3292129536,3292129791,SC -3292129792,3292131071,US -3292131072,3292131327,SC -3292131328,3292133631,US +3292129024,3292133631,US 3292133632,3292133887,SC 3292133888,3292134911,US -3292134912,3292135167,SC +3292134912,3292135167,DE 3292135168,3292135423,AU -3292135424,3292135679,SC +3292135424,3292135679,SE 3292135680,3292135935,DK 3292135936,3292136447,US 3292136448,3292136703,CZ -3292136704,3292136959,US -3292136960,3292137471,SC -3292137472,3292139775,US -3292139776,3292140799,SC -3292140800,3292141055,US -3292141056,3292141311,SC -3292141312,3292141567,US +3292136704,3292137215,US +3292137216,3292137471,SC +3292137472,3292140031,US +3292140032,3292140287,SC +3292140288,3292141567,US 3292141568,3292142079,SC -3292142080,3292142335,US -3292142336,3292142591,SC -3292142592,3292146175,US -3292146176,3292146431,SC -3292146432,3292147711,US -3292147712,3292147967,SC -3292147968,3292150527,US -3292150528,3292150783,SC -3292150784,3292151039,US -3292151040,3292151295,SC -3292151296,3292153087,US -3292153088,3292153343,SC -3292153344,3292153855,US +3292142080,3292153855,US 3292153856,3292154111,SC -3292154112,3292154879,US -3292154880,3292155135,SC -3292155136,3292156415,US -3292156416,3292156671,SC -3292156672,3292157183,US -3292157184,3292157439,SC -3292157440,3292157695,US -3292157696,3292157951,SC -3292157952,3292159999,US +3292154112,3292159999,US 3292160000,3292160255,SC -3292160256,3292161023,US -3292161024,3292161279,SC -3292161280,3292162047,US -3292162048,3292162303,SC -3292162304,3292163327,US +3292160256,3292163327,US 3292163328,3292163583,SC -3292163584,3292166655,US -3292166656,3292167167,SC -3292167168,3292167423,US -3292167424,3292168191,SC -3292168192,3292169983,US -3292169984,3292170495,SC -3292170496,3292170751,US -3292170752,3292171007,SC -3292171008,3292171519,US -3292171520,3292171775,SC -3292171776,3292172543,US -3292172544,3292172799,SC -3292172800,3292173311,US -3292173312,3292173823,SC -3292173824,3292175103,US +3292163584,3292167935,US +3292167936,3292168191,SC +3292168192,3292173311,US +3292173312,3292173567,SC +3292173568,3292175103,US 3292175104,3292175359,SC -3292175360,3292176895,US -3292176896,3292177407,SC +3292175360,3292177151,US +3292177152,3292177407,SC 3292177408,3292178175,US 3292178176,3292178431,SC -3292178432,3292179199,US -3292179200,3292179711,SC -3292179712,3292180735,US -3292180736,3292181247,SC -3292181248,3292181503,US -3292181504,3292181759,SC -3292181760,3292182015,US -3292182016,3292182271,SC -3292182272,3292183039,US +3292178432,3292180991,US +3292180992,3292181247,SC +3292181248,3292183039,US 3292183040,3292183295,SC 3292183296,3292186623,US 3292186624,3292186879,SC -3292186880,3292188671,US -3292188672,3292189183,SC -3292189184,3292189439,US -3292189440,3292189695,SC -3292189696,3292191999,US -3292192000,3292192255,SC -3292192256,3292196607,US +3292186880,3292196607,US 3292196608,3292196863,SC -3292196864,3292197375,US -3292197376,3292197631,SC -3292197632,3292197887,US -3292197888,3292198399,SC -3292198400,3292199423,US -3292199424,3292199679,SC -3292199680,3292200447,US +3292196864,3292200447,US 3292200448,3292200703,DE 3292200704,3292200959,AU 3292200960,3292201215,SE 3292201216,3292201471,DK 3292201472,3292201983,US -3292201984,3292202495,SC -3292202496,3292203007,US -3292203008,3292203263,SC -3292203264,3292204799,US -3292204800,3292205311,SC -3292205312,3292205823,US -3292205824,3292206335,SC -3292206336,3292206591,US +3292201984,3292202239,CZ +3292202240,3292205823,US +3292205824,3292206079,SC +3292206080,3292206591,US 3292206592,3292206847,SC -3292206848,3292207359,US -3292207360,3292208127,SC -3292208128,3292208639,US -3292208640,3292208895,SC -3292208896,3292209663,US +3292206848,3292207615,US +3292207616,3292207871,SC +3292207872,3292209663,US 3292209664,3292209919,SC 3292209920,3292210175,US 3292210176,3292210431,SC -3292210432,3292211455,US -3292211456,3292211967,SC -3292211968,3292212735,US -3292212736,3292212991,SC -3292212992,3292214783,US +3292210432,3292214783,US 3292214784,3292215039,SC 3292215040,3292215295,US 3292215296,3292215551,SC 3292215552,3292216319,US 3292216320,3292216575,SC -3292216576,3292217343,US -3292217344,3292217599,SC -3292217600,3292218879,US -3292218880,3292219135,SC -3292219136,3292220415,US -3292220416,3292220671,SC -3292220672,3292220927,US +3292216576,3292220927,US 3292220928,3292221183,SC -3292221184,3292222207,US -3292222208,3292222463,SC -3292222464,3292224511,US -3292224512,3292224767,SC -3292224768,3292225279,US -3292225280,3292225535,SC -3292225536,3292226303,US -3292226304,3292226559,SC -3292226560,3292227071,US +3292221184,3292227071,US 3292227072,3292227327,SC -3292227328,3292227839,US -3292227840,3292228095,SC -3292228096,3292228607,US -3292228608,3292229631,SC -3292229632,3292230911,US -3292230912,3292231167,SC -3292231168,3292231679,US +3292227328,3292231679,US 3292231680,3292231935,SC -3292231936,3292232447,US -3292232448,3292232959,SC -3292232960,3292233471,US -3292233472,3292233983,SC -3292233984,3292235007,US -3292235008,3292235519,SC -3292235520,3292236031,US -3292236032,3292236287,SC -3292236288,3292238079,US -3292238080,3292238335,SC -3292238336,3292239615,US +3292231936,3292233471,US +3292233472,3292233727,SC +3292233728,3292239615,US 3292239616,3292239871,SC -3292239872,3292240383,US -3292240384,3292240639,SC -3292240640,3292243711,US +3292239872,3292243711,US 3292243712,3292243967,SC 3292243968,3292244991,US 3292244992,3292245247,SC -3292245248,3292245503,US -3292245504,3292245759,SC -3292245760,3292246783,US +3292245248,3292246783,US 3292246784,3292247039,SC -3292247040,3292248575,US -3292248576,3292248831,SC -3292248832,3292249855,US -3292249856,3292250111,SC -3292250112,3292252159,US -3292252160,3292252671,SC -3292252672,3292253183,US -3292253184,3292253439,SC -3292253440,3292254207,US -3292254208,3292254719,SC -3292254720,3292255487,US +3292247040,3292252415,US +3292252416,3292252671,SC +3292252672,3292255487,US 3292255488,3292255743,SC 3292255744,3292259327,US -3292259328,3292259839,SC -3292259840,3292260351,US -3292260352,3292260607,SC -3292260608,3292263167,US -3292263168,3292263423,SC -3292263424,3292265983,US +3292259328,3292259583,SC +3292259584,3292265983,US 3292265984,3292266239,DE 3292266240,3292266495,SC 3292266496,3292266751,TZ @@ -114936,6 +116276,7 @@ 3292275712,3292275967,KE 3292276224,3292276479,GN 3292276736,3292276991,SN +3292277248,3292277503,TG 3292332032,3292334079,MU 3292334080,3292336127,TZ 3292336128,3292340223,ZA @@ -114976,16 +116317,19 @@ 3300953088,3300954111,MU 3300954112,3300958207,NG 3300958208,3301113855,ZA -3301113856,3301138431,NG +3301113856,3301117951,AF +3301117952,3301138431,NG 3301138432,3301140479,ZA -3301140480,3301146623,NG +3301140480,3301146111,NG +3301146112,3301146367,ZA +3301146368,3301146623,NG 3301146624,3301163007,IN 3301163008,3301171199,ZA -3301171200,3301172223,IN -3301172224,3301173247,ZA -3301173248,3301173759,UG -3301173760,3301175295,ZA -3301175296,3301179391,EG +3301171200,3301172223,NG +3301172224,3301173759,UG +3301173760,3301174271,ZA +3301174272,3301175295,UG +3301175296,3301179391,AF 3301179392,3301179903,RU 3301179904,3301181439,SC 3301181440,3301185535,US @@ -115029,115 +116373,131 @@ 3301238784,3301240831,US 3301240832,3301242879,SE 3301242880,3301244927,GB -3301244928,3301245439,US -3301245440,3301246975,SE -3301246976,3301310463,SC +3301244928,3301245951,US +3301245952,3301246975,SE +3301246976,3301252095,SC +3301252096,3301253119,US +3301253120,3301254143,SC +3301254144,3301255167,US +3301255168,3301257215,SC +3301257216,3301258239,US +3301258240,3301263359,SC +3301263360,3301264383,US +3301264384,3301271551,SC +3301271552,3301272575,US +3301272576,3301279743,SC +3301279744,3301280767,PR +3301280768,3301281791,SC +3301281792,3301282815,US +3301282816,3301283839,SC +3301283840,3301284863,US +3301284864,3301289983,SC +3301289984,3301291007,PT +3301291008,3301292031,PL +3301292032,3301294079,SC +3301294080,3301295103,LU +3301295104,3301301247,SC +3301301248,3301302271,CZ +3301302272,3301304319,SC +3301304320,3301305343,FR +3301305344,3301306367,AT +3301306368,3301307391,IN +3301307392,3301308415,SC +3301308416,3301309439,SG +3301309440,3301310463,SC 3301310464,3301310719,ZA 3301310720,3301311487,SC 3301311488,3301313535,SE 3301313536,3301314559,SC 3301314560,3301315583,SE 3301315584,3301318655,SC -3301318656,3301375999,SE -3301376000,3301376767,SC +3301318656,3301320447,SE +3301320448,3301320959,US +3301320960,3301322751,SE +3301322752,3301323007,CA +3301323008,3301325567,SE +3301325568,3301325823,US +3301325824,3301330943,SE +3301330944,3301331199,HU +3301331200,3301337087,SE +3301337088,3301337343,US +3301337344,3301343487,SE +3301343488,3301343743,US +3301343744,3301345535,SE +3301345536,3301345791,DK +3301345792,3301349119,SE +3301349120,3301349375,CH +3301349376,3301351679,SE +3301351680,3301351935,US +3301351936,3301353983,SE +3301353984,3301354239,US +3301354240,3301355263,SE +3301355264,3301355519,US +3301355520,3301364479,SE +3301364480,3301364735,NO +3301364736,3301367551,SE +3301367552,3301367807,PR +3301367808,3301373183,SE +3301373184,3301373439,US +3301373440,3301375231,SE +3301375232,3301375487,US +3301375488,3301375743,SE +3301375744,3301375999,US +3301376000,3301376255,SC +3301376256,3301376511,US +3301376512,3301376767,SC 3301376768,3301377023,US 3301377024,3301377279,SC -3301377280,3301377791,US -3301377792,3301378047,SC -3301378048,3301378559,US -3301378560,3301379327,SC -3301379328,3301379583,US +3301377280,3301378559,US +3301378560,3301379071,SC +3301379072,3301379583,US 3301379584,3301379839,SC -3301379840,3301381631,US -3301381632,3301382399,SC -3301382400,3301384447,US -3301384448,3301384703,SC -3301384704,3301385471,US -3301385472,3301385727,SC -3301385728,3301389567,US -3301389568,3301390335,SC -3301390336,3301390591,US -3301390592,3301391103,SC -3301391104,3301391359,US +3301379840,3301387007,US +3301387008,3301387263,ES +3301387264,3301390079,US +3301390080,3301390335,SC +3301390336,3301391359,US 3301391360,3301391615,SC -3301391616,3301392127,US -3301392128,3301392383,SC -3301392384,3301394175,US -3301394176,3301394431,SC -3301394432,3301396479,US -3301396480,3301396735,SC -3301396736,3301397247,US +3301391616,3301395199,US +3301395200,3301395455,PR +3301395456,3301397247,US 3301397248,3301397503,SC 3301397504,3301397759,US 3301397760,3301398015,SC -3301398016,3301398783,US -3301398784,3301399039,SC -3301399040,3301400575,US -3301400576,3301400831,SC -3301400832,3301401343,US -3301401344,3301401855,SC -3301401856,3301402111,US -3301402112,3301402367,SC -3301402368,3301402623,US -3301402624,3301402879,SC -3301402880,3301403391,US +3301398016,3301401343,US +3301401344,3301401599,SC +3301401600,3301403391,US 3301403392,3301403647,SC 3301403648,3301404415,US -3301404416,3301404671,SC +3301404416,3301404671,NZ 3301404672,3301404927,US 3301404928,3301405183,SC 3301405184,3301407999,US 3301408000,3301408255,SC -3301408256,3301409535,US -3301409536,3301409791,SC -3301409792,3301411327,US -3301411328,3301411583,SC -3301411584,3301411839,US -3301411840,3301412095,SC -3301412096,3301412607,US -3301412608,3301412863,SC -3301412864,3301413887,US -3301413888,3301414399,SC -3301414400,3301417215,US -3301417216,3301417471,SC -3301417472,3301418751,US -3301418752,3301419519,SC -3301419520,3301420799,US -3301420800,3301421567,SC +3301408256,3301411583,US +3301411584,3301411839,PR +3301411840,3301412863,US +3301412864,3301413119,CA +3301413120,3301419007,US +3301419008,3301419519,SC +3301419520,3301421311,US +3301421312,3301421567,SC 3301421568,3301422079,US 3301422080,3301422335,SC 3301422336,3301422591,US 3301422592,3301422847,SC -3301422848,3301423615,US -3301423616,3301423871,SC -3301423872,3301424383,US +3301422848,3301424383,US 3301424384,3301424639,SC 3301424640,3301424895,US -3301424896,3301425663,SC -3301425664,3301426687,US -3301426688,3301426943,SC -3301426944,3301427199,US -3301427200,3301427455,SC -3301427456,3301429503,US -3301429504,3301430015,SC -3301430016,3301431039,US -3301431040,3301431295,SC -3301431296,3301431551,US -3301431552,3301431807,SC -3301431808,3301432575,US -3301432576,3301433087,SC -3301433088,3301434623,US -3301434624,3301434879,SC -3301434880,3301435903,US -3301435904,3301436159,SC -3301436160,3301436415,US -3301436416,3301436927,SC -3301436928,3301437183,US +3301424896,3301425151,SC +3301425152,3301432831,US +3301432832,3301433087,SC +3301433088,3301437183,US 3301437184,3301437439,SC -3301437440,3301438719,US -3301438720,3301439231,SC -3301439232,3301440255,US -3301440256,3301440767,SC +3301437440,3301438975,US +3301438976,3301439231,SC +3301439232,3301440511,US +3301440512,3301440767,SC 3301440768,3301441535,US 3301441536,3301442351,ZA 3301442352,3301442359,NG @@ -115181,7 +116541,7 @@ 3301466112,3301470207,ER 3301470208,3301474303,NG 3301474304,3301490687,MA -3301490688,3301494783,ZA +3301490688,3301494783,CD 3301494784,3301498879,BW 3301502976,3301507071,MA 3301507328,3301507583,MU @@ -115236,8 +116596,11 @@ 3302496256,3302498303,EG 3302498304,3302502399,NA 3302502400,3302505471,AO -3302505472,3302506495,NA -3302506496,3302514687,KE +3302505472,3302505679,NA +3302505680,3302505681,AO +3302505682,3302506495,NA +3302506496,3302509567,KE +3302509568,3302514687,MU 3302514688,3302522879,ZA 3302522880,3302523903,KE 3302523904,3302525951,ZA @@ -115252,6 +116615,7 @@ 3302532096,3302533119,NA 3302533120,3302533631,MU 3302533632,3302533887,ZA +3302533888,3302534143,MU 3302534144,3302535167,ZA 3302535168,3302536191,UG 3302536192,3302537215,GH @@ -115354,7 +116718,7 @@ 3302961152,3302977535,ZA 3302977536,3302981631,NG 3302981632,3302985727,ZA -3302985728,3302987775,DJ +3302985728,3302987775,GM 3302987776,3302989823,SD 3302989824,3302993919,KE 3302993920,3302998015,MA @@ -115364,15 +116728,97 @@ 3303013376,3303013631,SN 3303013632,3303014399,KE 3303014400,3304062975,TN -3304062976,3304456191,SC +3304062976,3304066559,SC +3304066560,3304066815,CA +3304066816,3304077311,SC +3304077312,3304077567,DK +3304077568,3304077823,SC +3304077824,3304078079,FR +3304078080,3304084991,SC +3304084992,3304085247,US +3304085248,3304102655,SC +3304102656,3304102911,US +3304102912,3304107263,SC +3304107264,3304107519,PL +3304107520,3304108799,SC +3304108800,3304109055,AU +3304109056,3304109311,SC +3304109312,3304109567,BE +3304109568,3304115967,SC +3304115968,3304116223,US +3304116224,3304120575,SC +3304120576,3304120831,US +3304120832,3304126975,SC +3304126976,3304127231,FR +3304127232,3304194303,SC +3304194304,3304194559,US +3304194560,3304212223,SC +3304212224,3304212479,FR +3304212480,3304213247,SC +3304213248,3304213503,LV +3304213504,3304213759,SC +3304213760,3304214015,AT +3304214016,3304218367,SC +3304218368,3304218623,PR +3304218624,3304223231,SC +3304223232,3304223487,US +3304223488,3304226047,SC +3304226048,3304226559,US +3304226560,3304227839,SC +3304227840,3304228095,RU +3304228096,3304228863,SC +3304228864,3304229119,DE +3304229120,3304229375,DK +3304229376,3304232703,SC +3304232704,3304232959,CH +3304232960,3304233215,SC +3304233216,3304233471,GB +3304233472,3304233727,SC +3304233728,3304233983,US +3304233984,3304246271,SC +3304246272,3304246527,BE +3304246528,3304249343,SC +3304249344,3304249599,NL +3304249600,3304326143,SC +3304326144,3304326399,DE +3304326400,3304327935,SC +3304327936,3304328191,HK +3304328192,3304340735,SC +3304340736,3304340991,US +3304340992,3304342783,SC +3304342784,3304343039,IN +3304343040,3304343551,SC +3304343552,3304343807,DE +3304343808,3304353023,SC +3304353024,3304353535,US +3304353536,3304358399,SC +3304358400,3304358655,BR +3304358656,3304360191,SC +3304360192,3304360447,DK +3304360448,3304397823,SC +3304397824,3304399871,US +3304399872,3304408063,SC +3304408064,3304411135,US +3304411136,3304419327,SC +3304419328,3304420351,US +3304420352,3304424447,SC +3304424448,3304425471,US +3304425472,3304432639,SC +3304432640,3304433663,NL +3304433664,3304442879,SC +3304442880,3304443903,AU +3304443904,3304451071,SC +3304451072,3304452095,AT +3304452096,3304454143,SC +3304454144,3304455167,SG +3304455168,3304456191,SC 3304456192,3304521727,NG 3304521728,3304528895,US 3304528896,3304529919,SC 3304529920,3304535295,US 3304535296,3304536063,SC 3304536064,3304538111,CA -3304538112,3304539135,SC -3304539136,3304548351,US +3304538112,3304548351,US 3304548352,3304549375,SC 3304549376,3304562687,US 3304562688,3304563711,GB @@ -115411,8 +116857,37 @@ 3304775680,3304781823,ZA 3304781824,3304782847,AO 3304782848,3304783871,MU -3304783872,3304800255,ZA -3304800256,3304816639,SC +3304783872,3304801023,ZA +3304801024,3304801279,GH +3304801280,3304801791,SC +3304801792,3304802047,GH +3304802048,3304802559,SC +3304802560,3304802815,GH +3304802816,3304803327,SC +3304803328,3304803583,GH +3304803584,3304804095,SC +3304804096,3304804351,NG +3304804352,3304804863,SC +3304804864,3304805119,NG +3304805120,3304805631,SC +3304805632,3304805887,NG +3304805888,3304806399,SC +3304806400,3304806655,ZA +3304806656,3304807167,SC +3304807168,3304807423,ZA +3304807424,3304807935,SC +3304807936,3304808191,ZA +3304808192,3304808703,SC +3304808704,3304808959,ZA +3304808960,3304809471,SC +3304809472,3304809727,KE +3304809728,3304810239,SC +3304810240,3304810495,KE +3304810496,3304811007,SC +3304811008,3304811263,KE +3304811264,3304811775,SC +3304811776,3304812031,KE +3304812032,3304816639,SC 3304816640,3304820735,ZA 3304821760,3304822783,MU 3304822784,3304823807,BJ @@ -115470,18 +116945,16 @@ 3315204096,3315269631,ET 3315269632,3315286015,ZA 3315286016,3315286527,KE -3315286528,3315288413,MU -3315288414,3315288414,KE -3315288415,3315289343,MU +3315286528,3315288319,MU +3315288320,3315288575,KE +3315288576,3315289343,MU 3315289344,3315289599,KE 3315289600,3315291135,MU 3315291136,3315293183,KE 3315293184,3315294207,MU 3315294208,3315302399,ZA 3315302400,3315318783,ML -3315318784,3315319935,LS -3315319936,3315320831,ZA -3315320832,3315322879,LS +3315318784,3315322879,LS 3315322880,3315326975,ZA 3315326976,3315331071,ZW 3315331072,3315333119,GH @@ -115668,7 +117141,9 @@ 3321364480,3321430015,KE 3321430016,3321495551,MZ 3321495552,3321561087,TZ -3321561088,3321593855,SD +3321561088,3321570815,SD +3321570816,3321571071,SS +3321571072,3321593855,SD 3321593856,3321626623,GH 3321626624,3321692159,SD 3321692160,3321708543,NG @@ -115882,7 +117357,9 @@ 3322683392,3322691583,AR 3322691584,3322691607,US 3322691608,3322691615,RO -3322691616,3322691839,US +3322691616,3322691775,US +3322691776,3322691791,CA +3322691792,3322691839,US 3322691840,3322692095,SE 3322692096,3322692103,US 3322692104,3322692111,RO @@ -115900,7 +117377,10 @@ 3322693248,3322693263,BR 3322693264,3322693271,US 3322693272,3322693279,BR -3322693280,3322694319,US +3322693280,3322693287,SG +3322693288,3322693307,US +3322693308,3322693311,CA +3322693312,3322694319,US 3322694320,3322694327,CA 3322694328,3322694895,US 3322694896,3322694911,GB @@ -115920,12 +117400,17 @@ 3322697416,3322697423,RO 3322697424,3322697431,US 3322697432,3322697439,CA -3322697440,3322698303,US +3322697440,3322697951,US +3322697952,3322697983,CA +3322697984,3322698303,US 3322698304,3322698367,IL 3322698368,3322698383,US 3322698384,3322698391,CA 3322698392,3322698399,RO -3322698400,3322699223,US +3322698400,3322699199,US +3322699200,3322699207,PK +3322699208,3322699215,US +3322699216,3322699223,CA 3322699224,3322699231,RO 3322699232,3322700095,US 3322700096,3322700127,FR @@ -115939,9 +117424,7 @@ 3322706632,3322706639,GB 3322706640,3322706651,US 3322706652,3322706655,CA -3322706656,3322707119,US -3322707120,3322707127,CA -3322707128,3322707359,US +3322706656,3322707359,US 3322707360,3322707391,PK 3322707392,3322707743,US 3322707744,3322707751,CA @@ -116360,7 +117843,9 @@ 3323660544,3323661311,US 3323661312,3323662335,CA 3323662336,3323674623,US -3323674624,3323678031,CA +3323674624,3323677991,CA +3323677992,3323677995,US +3323677996,3323678031,CA 3323678032,3323678047,US 3323678048,3323678055,CA 3323678056,3323678059,MX @@ -116379,8 +117864,7 @@ 3323678172,3323678175,US 3323678176,3323678195,CA 3323678196,3323678199,VE -3323678200,3323678207,CA -3323678208,3323678463,US +3323678200,3323678463,US 3323678464,3323678523,CA 3323678524,3323678527,US 3323678528,3323678583,CA @@ -116405,14 +117889,14 @@ 3323681424,3323681439,CA 3323681440,3323681455,AE 3323681456,3323681479,CA -3323681480,3323681487,IN +3323681480,3323681487,GB 3323681488,3323681519,CA 3323681520,3323681527,SI 3323681528,3323681535,CA 3323681536,3323681567,IN 3323681568,3323681583,US 3323681584,3323681591,CA -3323681592,3323681599,PL +3323681592,3323681599,US 3323681600,3323681631,CA 3323681632,3323681663,NO 3323681664,3323681727,CA @@ -116428,7 +117912,8 @@ 3323682752,3323682767,US 3323682768,3323682771,CA 3323682772,3323682775,RO -3323682776,3323682839,CA +3323682776,3323682831,CA +3323682832,3323682839,IN 3323682840,3323682843,BD 3323682844,3323682947,CA 3323682948,3323682951,US @@ -116443,13 +117928,17 @@ 3323683008,3323683039,AU 3323683040,3323683071,CA 3323683072,3323683103,BA -3323683104,3323683215,CA +3323683104,3323683123,CA +3323683124,3323683127,BR +3323683128,3323683215,CA 3323683216,3323683223,VN 3323683224,3323683295,CA 3323683296,3323683299,CL 3323683300,3323683359,CA 3323683360,3323683367,MY -3323683368,3323683427,CA +3323683368,3323683399,CA +3323683400,3323683403,BR +3323683404,3323683427,CA 3323683428,3323683431,IT 3323683432,3323683439,PL 3323683440,3323683447,CA @@ -116458,7 +117947,9 @@ 3323683536,3323683551,AU 3323683552,3323683583,CA 3323683584,3323683591,PA -3323683592,3323683707,CA +3323683592,3323683679,CA +3323683680,3323683683,FR +3323683684,3323683707,CA 3323683708,3323683711,US 3323683712,3323683839,GP 3323683840,3323683871,CA @@ -116476,7 +117967,8 @@ 3323684232,3323684239,CA 3323684240,3323684243,GB 3323684244,3323684271,CA -3323684272,3323684287,US +3323684272,3323684279,FR +3323684280,3323684287,ES 3323684288,3323684291,IN 3323684292,3323684387,CA 3323684388,3323684391,MX @@ -116484,12 +117976,14 @@ 3323684396,3323684399,IN 3323684400,3323684415,CA 3323684416,3323684431,DE -3323684432,3323684439,US -3323684440,3323684443,CA +3323684432,3323684435,US +3323684436,3323684443,CA 3323684444,3323684447,IN 3323684448,3323684463,CA 3323684464,3323684479,US -3323684480,3323684543,CA +3323684480,3323684503,CA +3323684504,3323684507,IN +3323684508,3323684543,CA 3323684544,3323684559,US 3323684560,3323684607,CA 3323684608,3323684611,BR @@ -116499,8 +117993,7 @@ 3323684696,3323684703,US 3323684704,3323684735,CA 3323684736,3323684739,IN -3323684740,3323684767,CA -3323684768,3323684783,VG +3323684740,3323684783,CA 3323684784,3323684799,CO 3323684800,3323684835,CA 3323684836,3323684839,MX @@ -116521,7 +118014,8 @@ 3323685264,3323685271,US 3323685272,3323685275,CA 3323685276,3323685287,US -3323685288,3323685311,CA +3323685288,3323685295,CA +3323685296,3323685311,PL 3323685312,3323685315,VG 3323685316,3323685319,CA 3323685320,3323685327,CO @@ -116529,7 +118023,9 @@ 3323685344,3323685347,BZ 3323685348,3323685351,IN 3323685352,3323685359,US -3323685360,3323685407,CA +3323685360,3323685391,CA +3323685392,3323685399,MX +3323685400,3323685407,CA 3323685408,3323685411,MX 3323685412,3323685415,US 3323685416,3323685419,AR @@ -116556,7 +118052,9 @@ 3323685952,3323686047,CA 3323686048,3323686051,US 3323686052,3323686055,AR -3323686056,3323686135,CA +3323686056,3323686095,CA +3323686096,3323686111,US +3323686112,3323686135,CA 3323686136,3323686143,MX 3323686144,3323686159,NO 3323686160,3323686163,US @@ -116568,9 +118066,9 @@ 3323686264,3323686271,US 3323686272,3323686287,CA 3323686288,3323686303,US -3323686304,3323686335,ES +3323686304,3323686335,IT 3323686336,3323686367,CA -3323686368,3323686371,VI +3323686368,3323686371,IN 3323686372,3323686383,CA 3323686384,3323686391,US 3323686392,3323686439,CA @@ -116581,12 +118079,13 @@ 3323686624,3323686631,NL 3323686632,3323686639,BR 3323686640,3323686655,US -3323686656,3323686683,CA +3323686656,3323686663,CA +3323686664,3323686667,US +3323686668,3323686683,CA 3323686684,3323686687,IN 3323686688,3323686847,CA -3323686848,3323686851,VE -3323686852,3323686907,CA -3323686908,3323686911,US +3323686848,3323686851,US +3323686852,3323686911,CA 3323686912,3323686943,BR 3323686944,3323686975,IN 3323686976,3323687031,CA @@ -116612,7 +118111,9 @@ 3323687428,3323687431,BZ 3323687432,3323687567,CA 3323687568,3323687571,PL -3323687572,3323687591,CA +3323687572,3323687575,CA +3323687576,3323687583,ES +3323687584,3323687591,CA 3323687592,3323687599,US 3323687600,3323687711,CA 3323687712,3323687715,US @@ -116624,9 +118125,7 @@ 3323687916,3323687919,US 3323687920,3323687935,CA 3323687936,3323687999,US -3323688000,3323688047,CA -3323688048,3323688051,BD -3323688052,3323688059,CA +3323688000,3323688059,CA 3323688060,3323688063,GB 3323688064,3323688135,CA 3323688136,3323688143,US @@ -116634,7 +118133,9 @@ 3323688168,3323688175,BR 3323688176,3323688207,CA 3323688208,3323688215,AR -3323688216,3323688287,CA +3323688216,3323688255,CA +3323688256,3323688271,BR +3323688272,3323688287,CA 3323688288,3323688303,PA 3323688304,3323688319,CA 3323688320,3323688335,US @@ -116642,13 +118143,15 @@ 3323688392,3323688395,ID 3323688396,3323688415,CA 3323688416,3323688447,DE -3323688448,3323688471,CA +3323688448,3323688463,CA +3323688464,3323688467,US +3323688468,3323688471,CA 3323688472,3323688479,US -3323688480,3323688543,CA +3323688480,3323688531,CA +3323688532,3323688535,EC +3323688536,3323688543,CA 3323688544,3323688551,VE -3323688552,3323688555,CA -3323688556,3323688559,IN -3323688560,3323688563,CA +3323688552,3323688563,CA 3323688564,3323688567,CL 3323688568,3323688571,VE 3323688572,3323688603,CA @@ -116662,14 +118165,11 @@ 3323688844,3323688847,CA 3323688848,3323688855,PT 3323688856,3323688863,CL -3323688864,3323688879,US -3323688880,3323688895,CA -3323688896,3323688911,IN -3323688912,3323688943,CA +3323688864,3323688943,CA 3323688944,3323688947,AU -3323688948,3323689023,CA -3323689024,3323689039,US -3323689040,3323689071,CA +3323688948,3323689055,CA +3323689056,3323689059,FR +3323689060,3323689071,CA 3323689072,3323689079,ID 3323689080,3323689167,CA 3323689168,3323689183,US @@ -116689,8 +118189,10 @@ 3323689400,3323689403,DE 3323689404,3323689407,BR 3323689408,3323689435,CA -3323689436,3323689439,US -3323689440,3323689519,CA +3323689436,3323689439,MY +3323689440,3323689455,CA +3323689456,3323689471,PK +3323689472,3323689519,CA 3323689520,3323689527,ES 3323689528,3323689559,CA 3323689560,3323689583,US @@ -116698,20 +118200,24 @@ 3323689600,3323689663,US 3323689664,3323689715,CA 3323689716,3323689719,US -3323689720,3323689863,CA +3323689720,3323689815,CA +3323689816,3323689823,US +3323689824,3323689863,CA 3323689864,3323689871,PE 3323689872,3323689879,IT 3323689880,3323689927,CA 3323689928,3323689935,US 3323689936,3323689983,CA 3323689984,3323690015,RS -3323690016,3323690095,CA +3323690016,3323690047,CA +3323690048,3323690063,PK +3323690064,3323690095,CA 3323690096,3323690111,PK -3323690112,3323690223,CA +3323690112,3323690199,CA +3323690200,3323690207,US +3323690208,3323690223,CA 3323690224,3323690235,US -3323690236,3323690251,CA -3323690252,3323690255,BR -3323690256,3323690263,CA +3323690236,3323690263,CA 3323690264,3323690267,BR 3323690268,3323690351,CA 3323690352,3323690359,AE @@ -116722,15 +118228,7 @@ 3323740160,3323748351,GB 3323748352,3323805695,US 3323805696,3323805951,GB -3323805952,3324031999,US -3324032000,3324032255,KN -3324032256,3324035583,US -3324035584,3324035839,KN -3324035840,3324036351,US -3324036352,3324036607,KN -3324036608,3324047359,US -3324047360,3324047615,KN -3324047616,3324051455,US +3323805952,3324051455,US 3324051456,3324182527,CA 3324182528,3324193279,US 3324193280,3324193791,CA @@ -117319,7 +118817,9 @@ 3324939520,3324939535,RO 3324939536,3324939567,US 3324939568,3324939583,RO -3324939584,3324942855,US +3324939584,3324939735,US +3324939736,3324939739,CA +3324939740,3324942855,US 3324942856,3324942863,RO 3324942864,3324943047,US 3324943048,3324943055,CA @@ -117382,7 +118882,8 @@ 3325198424,3325198559,CA 3325198560,3325198575,PA 3325198576,3325198583,CA -3325198584,3325198591,US +3325198584,3325198587,ES +3325198588,3325198591,US 3325198592,3325198619,CA 3325198620,3325198623,AR 3325198624,3325198627,ES @@ -117395,7 +118896,11 @@ 3325198704,3325198719,US 3325198720,3325198751,CA 3325198752,3325198755,LK -3325198756,3325198815,CA +3325198756,3325198759,US +3325198760,3325198779,CA +3325198780,3325198783,MX +3325198784,3325198811,CA +3325198812,3325198815,US 3325198816,3325198823,DE 3325198824,3325198831,CA 3325198832,3325198847,US @@ -117411,9 +118916,11 @@ 3325199072,3325199079,US 3325199080,3325199103,CA 3325199104,3325199119,DE -3325199120,3325199123,CA -3325199124,3325199127,TR -3325199128,3325199255,CA +3325199120,3325199127,CA +3325199128,3325199131,US +3325199132,3325199143,CA +3325199144,3325199147,US +3325199148,3325199255,CA 3325199256,3325199259,BR 3325199260,3325199291,CA 3325199292,3325199295,US @@ -117431,10 +118938,10 @@ 3325199492,3325199495,BR 3325199496,3325199559,CA 3325199560,3325199567,US -3325199568,3325199623,CA +3325199568,3325199583,BR +3325199584,3325199623,CA 3325199624,3325199627,BE -3325199628,3325199647,CA -3325199648,3325199655,ID +3325199628,3325199655,CA 3325199656,3325199663,US 3325199664,3325199775,CA 3325199776,3325199779,BR @@ -117471,9 +118978,9 @@ 3325200312,3325200315,IN 3325200316,3325200323,CA 3325200324,3325200327,IL -3325200328,3325200451,CA -3325200452,3325200455,US -3325200456,3325200463,CA +3325200328,3325200455,CA +3325200456,3325200459,US +3325200460,3325200463,CA 3325200464,3325200467,US 3325200468,3325200567,CA 3325200568,3325200571,US @@ -117482,10 +118989,13 @@ 3325200728,3325200731,US 3325200732,3325200739,CA 3325200740,3325200747,US -3325200748,3325200807,CA +3325200748,3325200767,CA +3325200768,3325200783,ID +3325200784,3325200807,CA 3325200808,3325200811,TR 3325200812,3325200815,IE -3325200816,3325200831,CA +3325200816,3325200827,CA +3325200828,3325200831,CO 3325200832,3325200863,BA 3325200864,3325200879,ES 3325200880,3325200891,CA @@ -117520,8 +119030,8 @@ 3325201288,3325201367,CA 3325201368,3325201375,MY 3325201376,3325201391,CA -3325201392,3325201415,US -3325201416,3325201427,CA +3325201392,3325201407,US +3325201408,3325201427,CA 3325201428,3325201431,US 3325201432,3325201439,CA 3325201440,3325201447,IN @@ -117534,7 +119044,9 @@ 3325201592,3325201599,PT 3325201600,3325201603,CA 3325201604,3325201615,US -3325201616,3325201647,CA +3325201616,3325201627,CA +3325201628,3325201631,US +3325201632,3325201647,CA 3325201648,3325201655,US 3325201656,3325201663,ES 3325201664,3325201671,CO @@ -117562,7 +119074,7 @@ 3325202280,3325202327,CA 3325202328,3325202331,AU 3325202332,3325202367,CA -3325202368,3325202371,PE +3325202368,3325202371,PH 3325202372,3325202375,FR 3325202376,3325202395,CA 3325202396,3325202399,IN @@ -117570,29 +119082,33 @@ 3325204480,3325205503,US 3325205504,3325206428,CA 3325206429,3325206429,US -3325206430,3325206623,CA +3325206430,3325206543,CA +3325206544,3325206551,DO +3325206552,3325206555,US +3325206556,3325206559,CZ +3325206560,3325206623,CA 3325206624,3325206625,RO 3325206626,3325206626,CA 3325206627,3325206627,RO 3325206628,3325206639,CA 3325206640,3325206671,US 3325206672,3325206679,BR -3325206680,3325206683,US -3325206684,3325206687,CA +3325206680,3325206683,CL +3325206684,3325206687,SE 3325206688,3325206719,US 3325206720,3325206799,CA 3325206800,3325206815,US -3325206816,3325206823,CA -3325206824,3325206831,PL +3325206816,3325206831,CA 3325206832,3325206839,US 3325206840,3325206847,BG 3325206848,3325206879,CA 3325206880,3325206911,BA -3325206912,3325206915,CA +3325206912,3325206915,BR 3325206916,3325206919,US 3325206920,3325206935,CA 3325206936,3325206943,HR -3325206944,3325207055,CA +3325206944,3325207051,CA +3325207052,3325207055,US 3325207056,3325207059,GB 3325207060,3325207071,CA 3325207072,3325207103,MX @@ -117602,13 +119118,18 @@ 3325207120,3325207131,CA 3325207132,3325207135,US 3325207136,3325207167,BD -3325207168,3325207283,CA +3325207168,3325207271,CA +3325207272,3325207279,IN +3325207280,3325207283,CA 3325207284,3325207287,US 3325207288,3325207379,CA 3325207380,3325207383,US -3325207384,3325207455,CA -3325207456,3325207471,GB -3325207472,3325207591,CA +3325207384,3325207415,CA +3325207416,3325207423,US +3325207424,3325207439,UA +3325207440,3325207503,CA +3325207504,3325207519,US +3325207520,3325207591,CA 3325207592,3325207599,EC 3325207600,3325207699,CA 3325207700,3325207703,LU @@ -117622,8 +119143,7 @@ 3325208064,3325208095,BS 3325208096,3325208119,CA 3325208120,3325208123,US -3325208124,3325208127,IN -3325208128,3325208171,CA +3325208124,3325208171,CA 3325208172,3325208175,BR 3325208176,3325208187,CA 3325208188,3325208191,IN @@ -117641,9 +119161,7 @@ 3325208492,3325208495,US 3325208496,3325208543,CA 3325208544,3325208547,US -3325208548,3325208639,CA -3325208640,3325208647,US -3325208648,3325208735,CA +3325208548,3325208735,CA 3325208736,3325208743,HK 3325208744,3325208747,CA 3325208748,3325208751,CZ @@ -117651,13 +119169,12 @@ 3325208828,3325208831,EG 3325208832,3325208939,CA 3325208940,3325208943,AU -3325208944,3325208999,CA +3325208944,3325208947,BR +3325208948,3325208999,CA 3325209000,3325209003,AU 3325209004,3325209023,CA 3325209024,3325209055,US -3325209056,3325209063,CA -3325209064,3325209067,US -3325209068,3325209083,CA +3325209056,3325209083,CA 3325209084,3325209087,US 3325209088,3325209091,CA 3325209092,3325209095,AR @@ -117672,8 +119189,7 @@ 3325209232,3325209247,DE 3325209248,3325209295,CA 3325209296,3325209311,US -3325209312,3325209323,CA -3325209324,3325209327,BR +3325209312,3325209327,CA 3325209328,3325209343,US 3325209344,3325209359,RO 3325209360,3325209379,CA @@ -117681,11 +119197,13 @@ 3325209384,3325209387,CA 3325209388,3325209407,US 3325209408,3325209411,GB -3325209412,3325209423,CA -3325209424,3325209439,US -3325209440,3325209475,CA +3325209412,3325209435,CA +3325209436,3325209439,NG +3325209440,3325209447,CA +3325209448,3325209451,MT +3325209452,3325209475,CA 3325209476,3325209479,US -3325209480,3325209483,FR +3325209480,3325209483,IN 3325209484,3325209491,CA 3325209492,3325209495,CN 3325209496,3325209543,CA @@ -117694,17 +119212,13 @@ 3325209568,3325209575,US 3325209576,3325209579,CA 3325209580,3325209583,US -3325209584,3325209631,CA -3325209632,3325209635,US -3325209636,3325209639,CA +3325209584,3325209639,CA 3325209640,3325209647,TR 3325209648,3325209655,CA 3325209656,3325209663,CH 3325209664,3325209679,US -3325209680,3325209691,CA -3325209692,3325209695,US -3325209696,3325209759,CA -3325209760,3325209775,US +3325209680,3325209767,CA +3325209768,3325209775,US 3325209776,3325209779,CA 3325209780,3325209783,ID 3325209784,3325209915,CA @@ -117742,7 +119256,9 @@ 3325210636,3325210639,FR 3325210640,3325210671,CA 3325210672,3325210687,BR -3325210688,3325210711,CA +3325210688,3325210703,CA +3325210704,3325210707,US +3325210708,3325210711,CA 3325210712,3325210719,IN 3325210720,3325210751,US 3325210752,3325210791,CA @@ -117752,18 +119268,19 @@ 3325210852,3325210863,CA 3325210864,3325210879,US 3325210880,3325210959,CA -3325210960,3325210991,US +3325210960,3325210975,IN +3325210976,3325210991,US 3325210992,3325211087,CA 3325211088,3325211091,US 3325211092,3325211095,CA 3325211096,3325211103,US -3325211104,3325211111,FR -3325211112,3325211115,CA -3325211116,3325211119,GB +3325211104,3325211119,CA 3325211120,3325211127,US 3325211128,3325211135,CA 3325211136,3325211143,ID -3325211144,3325211159,CA +3325211144,3325211151,CA +3325211152,3325211155,US +3325211156,3325211159,CA 3325211160,3325211167,US 3325211168,3325211175,CA 3325211176,3325211183,US @@ -117787,12 +119304,12 @@ 3325211420,3325211423,US 3325211424,3325211647,CA 3325211648,3325211807,US -3325211808,3325211855,CA +3325211808,3325211839,CA +3325211840,3325211855,US 3325211856,3325211859,CL 3325211860,3325211863,CA 3325211864,3325211871,NO -3325211872,3325211879,CA -3325211880,3325211883,PE +3325211872,3325211883,CA 3325211884,3325211887,US 3325211888,3325211895,RO 3325211896,3325211967,CA @@ -117800,7 +119317,8 @@ 3325212000,3325212007,US 3325212008,3325212087,CA 3325212088,3325212091,BZ -3325212092,3325212127,CA +3325212092,3325212095,US +3325212096,3325212127,CA 3325212128,3325212143,IN 3325212144,3325212151,US 3325212152,3325212155,MX @@ -117813,17 +119331,20 @@ 3325212204,3325212207,ID 3325212208,3325212215,CA 3325212216,3325212223,HR -3325212224,3325212495,CA -3325212496,3325212511,ID +3325212224,3325212295,CA +3325212296,3325212303,IN +3325212304,3325212495,CA +3325212496,3325212503,FR +3325212504,3325212511,HU 3325212512,3325212515,CY 3325212516,3325212559,CA 3325212560,3325212575,BR -3325212576,3325212579,CA -3325212580,3325212583,US -3325212584,3325212587,CA +3325212576,3325212587,CA 3325212588,3325212591,BR 3325212592,3325212599,US -3325212600,3325212647,CA +3325212600,3325212611,CA +3325212612,3325212615,BR +3325212616,3325212647,CA 3325212648,3325212655,US 3325212656,3325212719,CA 3325212720,3325212727,ID @@ -117831,9 +119352,7 @@ 3325212732,3325212735,AE 3325212736,3325212771,CA 3325212772,3325212775,US -3325212776,3325212783,CA -3325212784,3325212799,US -3325212800,3325212927,CA +3325212776,3325212927,CA 3325212928,3325212943,LK 3325212944,3325213023,CA 3325213024,3325213055,EE @@ -117872,9 +119391,7 @@ 3325213712,3325213715,AR 3325213716,3325213951,CA 3325213952,3325213983,BA -3325213984,3325213991,CA -3325213992,3325213995,US -3325213996,3325214015,CA +3325213984,3325214015,CA 3325214016,3325214063,US 3325214064,3325214071,CA 3325214072,3325214079,AE @@ -117886,10 +119403,11 @@ 3325214152,3325214155,US 3325214156,3325214163,CA 3325214164,3325214167,BR -3325214168,3325214187,CA +3325214168,3325214171,CA +3325214172,3325214175,US +3325214176,3325214187,CA 3325214188,3325214191,US -3325214192,3325214239,CA -3325214240,3325214255,US +3325214192,3325214255,CA 3325214256,3325214259,SA 3325214260,3325214263,US 3325214264,3325214463,CA @@ -117897,26 +119415,24 @@ 3325214480,3325214499,CA 3325214500,3325214503,PA 3325214504,3325214583,CA -3325214584,3325214587,US -3325214588,3325214623,CA +3325214584,3325214591,US +3325214592,3325214623,CA 3325214624,3325214639,DE 3325214640,3325214647,FR 3325214648,3325214703,CA 3325214704,3325214719,AU 3325214720,3325214735,CA 3325214736,3325214739,US -3325214740,3325214815,CA +3325214740,3325214783,CA +3325214784,3325214791,US +3325214792,3325214815,CA 3325214816,3325214823,US 3325214824,3325214831,BR -3325214832,3325214975,CA -3325214976,3325214979,ES -3325214980,3325215055,CA +3325214832,3325215055,CA 3325215056,3325215059,IT 3325215060,3325215079,CA 3325215080,3325215087,BR -3325215088,3325215103,CA -3325215104,3325215107,IN -3325215108,3325215127,CA +3325215088,3325215127,CA 3325215128,3325215131,US 3325215132,3325215135,BZ 3325215136,3325215175,CA @@ -117924,8 +119440,7 @@ 3325215184,3325215203,CA 3325215204,3325215207,GB 3325215208,3325215211,FR -3325215212,3325215247,CA -3325215248,3325215263,US +3325215212,3325215263,CA 3325215264,3325215295,IN 3325215296,3325215299,US 3325215300,3325215303,IN @@ -117938,10 +119453,12 @@ 3325215472,3325215475,ES 3325215476,3325215495,CA 3325215496,3325215503,BR -3325215504,3325215667,CA +3325215504,3325215611,CA +3325215612,3325215615,BR +3325215616,3325215667,CA 3325215668,3325215675,BR 3325215676,3325215719,CA -3325215720,3325215727,US +3325215720,3325215727,MX 3325215728,3325215731,CA 3325215732,3325215735,BR 3325215736,3325215743,CA @@ -117956,7 +119473,9 @@ 3325215912,3325215915,IN 3325215916,3325215919,GB 3325215920,3325215927,US -3325215928,3325215951,CA +3325215928,3325215931,CA +3325215932,3325215935,BR +3325215936,3325215951,CA 3325215952,3325215967,BE 3325215968,3325215983,CA 3325215984,3325215999,VE @@ -117975,14 +119494,15 @@ 3325216116,3325216119,US 3325216120,3325216239,CA 3325216240,3325216243,BR -3325216244,3325216247,IN -3325216248,3325216319,CA +3325216244,3325216319,CA 3325216320,3325216327,US 3325216328,3325216359,CA 3325216360,3325216363,GB 3325216364,3325216367,CA -3325216368,3325216375,US -3325216376,3325216447,CA +3325216368,3325216383,US +3325216384,3325216399,CA +3325216400,3325216415,BR +3325216416,3325216447,CA 3325216448,3325216463,FR 3325216464,3325216527,CA 3325216528,3325216531,US @@ -118080,7 +119600,9 @@ 3325219468,3325219475,US 3325219476,3325219503,CA 3325219504,3325219511,VG -3325219512,3325219535,CA +3325219512,3325219515,CA +3325219516,3325219519,BR +3325219520,3325219535,CA 3325219536,3325219551,PK 3325219552,3325219583,CA 3325219584,3325219599,US @@ -118098,7 +119620,8 @@ 3325219808,3325219811,US 3325219812,3325219839,CA 3325219840,3325219871,TN -3325219872,3325219919,CA +3325219872,3325219875,BR +3325219876,3325219919,CA 3325219920,3325219931,US 3325219932,3325219935,CA 3325219936,3325219951,US @@ -118120,7 +119643,7 @@ 3325220408,3325220411,US 3325220412,3325220415,BZ 3325220416,3325220511,CA -3325220512,3325220519,PL +3325220512,3325220519,BR 3325220520,3325220579,CA 3325220580,3325220583,BZ 3325220584,3325220587,US @@ -118140,7 +119663,9 @@ 3325220896,3325220927,FR 3325220928,3325220959,CA 3325220960,3325220967,EC -3325220968,3325221043,CA +3325220968,3325220975,CA +3325220976,3325220983,MX +3325220984,3325221043,CA 3325221044,3325221047,CL 3325221048,3325221055,CA 3325221056,3325221119,BR @@ -118151,28 +119676,34 @@ 3325221264,3325221279,TW 3325221280,3325221295,CA 3325221296,3325221299,US -3325221300,3325221439,CA +3325221300,3325221307,CA +3325221308,3325221311,VE +3325221312,3325221439,CA 3325221440,3325221443,PE 3325221444,3325221451,CA 3325221452,3325221455,US 3325221456,3325221467,CA 3325221468,3325221471,FR 3325221472,3325221567,CA -3325221568,3325221599,US +3325221568,3325221575,MX +3325221576,3325221583,CA +3325221584,3325221599,US 3325221600,3325221615,CA 3325221616,3325221623,GB 3325221624,3325221727,CA 3325221728,3325221731,US -3325221732,3325221751,CA +3325221732,3325221739,CA +3325221740,3325221743,BR +3325221744,3325221751,CA 3325221752,3325221755,IN 3325221756,3325221779,CA 3325221780,3325221783,US 3325221784,3325221787,BR -3325221788,3325221795,CA -3325221796,3325221807,US -3325221808,3325221819,CA -3325221820,3325221823,US -3325221824,3325221831,CA +3325221788,3325221791,VN +3325221792,3325221795,CA +3325221796,3325221799,US +3325221800,3325221807,BR +3325221808,3325221831,CA 3325221832,3325221839,BG 3325221840,3325221851,CA 3325221852,3325221855,BZ @@ -118195,8 +119726,10 @@ 3325222392,3325222395,BR 3325222396,3325222399,FR 3325222400,3325222463,US -3325222464,3325222535,CA -3325222536,3325222559,US +3325222464,3325222479,CA +3325222480,3325222483,US +3325222484,3325222543,CA +3325222544,3325222559,ID 3325222560,3325222567,CA 3325222568,3325222571,US 3325222572,3325222575,LK @@ -118211,7 +119744,8 @@ 3325222668,3325222671,MX 3325222672,3325222687,CA 3325222688,3325222703,GB -3325222704,3325222735,CA +3325222704,3325222719,CA +3325222720,3325222735,AU 3325222736,3325222751,US 3325222752,3325222783,MX 3325222784,3325222843,CA @@ -118219,7 +119753,7 @@ 3325222848,3325222851,CA 3325222852,3325222855,BZ 3325222856,3325222947,CA -3325222948,3325222951,US +3325222948,3325222951,AE 3325222952,3325222963,CA 3325222964,3325222967,VE 3325222968,3325222983,CA @@ -118246,20 +119780,23 @@ 3325223304,3325223311,RO 3325223312,3325223335,CA 3325223336,3325223343,US -3325223344,3325223375,CA +3325223344,3325223347,CA +3325223348,3325223351,IN +3325223352,3325223355,MX +3325223356,3325223375,CA 3325223376,3325223391,US 3325223392,3325223399,CA 3325223400,3325223407,US 3325223408,3325223427,CA 3325223428,3325223431,US 3325223432,3325223463,CA -3325223464,3325223471,PL +3325223464,3325223471,US 3325223472,3325223535,CA 3325223536,3325223551,AT 3325223552,3325223583,IE 3325223584,3325223619,CA -3325223620,3325223623,BR -3325223624,3325223643,CA +3325223620,3325223631,BR +3325223632,3325223643,CA 3325223644,3325223647,CZ 3325223648,3325223663,DE 3325223664,3325223723,CA @@ -118273,13 +119810,11 @@ 3325223856,3325223871,AU 3325223872,3325223907,CA 3325223908,3325223911,VE -3325223912,3325223915,US -3325223916,3325223919,CA +3325223912,3325223919,CA 3325223920,3325223935,BR 3325223936,3325223967,CA 3325223968,3325223991,US -3325223992,3325223995,FR -3325223996,3325224031,CA +3325223992,3325224031,CA 3325224032,3325224039,US 3325224040,3325224043,CO 3325224044,3325224047,CA @@ -118300,7 +119835,9 @@ 3325224392,3325224399,CA 3325224400,3325224415,AU 3325224416,3325224419,US -3325224420,3325224551,CA +3325224420,3325224479,CA +3325224480,3325224511,US +3325224512,3325224551,CA 3325224552,3325224559,BR 3325224560,3325224647,CA 3325224648,3325224651,IN @@ -118316,9 +119853,9 @@ 3325224736,3325224751,LK 3325224752,3325224767,CA 3325224768,3325224783,FR -3325224784,3325224787,CA -3325224788,3325224791,FR -3325224792,3325224807,CA +3325224784,3325224795,CA +3325224796,3325224799,HR +3325224800,3325224807,CA 3325224808,3325224815,GB 3325224816,3325224823,FR 3325224824,3325224831,CA @@ -118349,8 +119886,7 @@ 3325225316,3325225319,ES 3325225320,3325225367,CA 3325225368,3325225371,US -3325225372,3325225375,IN -3325225376,3325225407,CA +3325225372,3325225407,CA 3325225408,3325225411,IN 3325225412,3325225415,CA 3325225416,3325225419,AU @@ -118372,14 +119908,14 @@ 3325225736,3325225743,US 3325225744,3325225775,CA 3325225776,3325225783,US -3325225784,3325225787,TR -3325225788,3325225799,CA +3325225784,3325225799,CA 3325225800,3325225807,IN 3325225808,3325225819,CA 3325225820,3325225823,US 3325225824,3325225899,CA 3325225900,3325225911,CY -3325225912,3325225919,CA +3325225912,3325225915,CA +3325225916,3325225919,BR 3325225920,3325225923,EG 3325225924,3325225943,CA 3325225944,3325225951,PL @@ -118392,7 +119928,11 @@ 3325226072,3325226075,BR 3325226076,3325226087,CA 3325226088,3325226091,EC -3325226092,3325226179,CA +3325226092,3325226095,CA +3325226096,3325226099,PL +3325226100,3325226159,CA +3325226160,3325226167,FR +3325226168,3325226179,CA 3325226180,3325226183,BR 3325226184,3325226187,US 3325226188,3325226239,CA @@ -118401,13 +119941,19 @@ 3325226288,3325226303,GB 3325226304,3325226307,CA 3325226308,3325226311,FR -3325226312,3325226343,CA +3325226312,3325226315,DE +3325226316,3325226343,CA 3325226344,3325226347,IN -3325226348,3325226495,CA +3325226348,3325226439,CA +3325226440,3325226443,VN +3325226444,3325226495,CA 3325226496,3325227007,US 3325227008,3325227039,CA 3325227040,3325227071,BR -3325227072,3325227107,CA +3325227072,3325227087,US +3325227088,3325227099,CA +3325227100,3325227103,US +3325227104,3325227107,CA 3325227108,3325227111,AR 3325227112,3325227119,US 3325227120,3325227223,CA @@ -118464,9 +120010,7 @@ 3325228616,3325228623,US 3325228624,3325228675,CA 3325228676,3325228683,US -3325228684,3325228695,CA -3325228696,3325228703,FR -3325228704,3325228735,CA +3325228684,3325228735,CA 3325228736,3325228739,FR 3325228740,3325228783,CA 3325228784,3325228787,US @@ -118474,9 +120018,8 @@ 3325228808,3325228815,PL 3325228816,3325228823,CA 3325228824,3325228831,BR -3325228832,3325228871,CA -3325228872,3325228875,US -3325228876,3325228931,CA +3325228832,3325228863,US +3325228864,3325228931,CA 3325228932,3325228935,LU 3325228936,3325228991,CA 3325228992,3325229007,BR @@ -118484,8 +120027,7 @@ 3325229072,3325229079,IN 3325229080,3325229083,CA 3325229084,3325229087,US -3325229088,3325229167,CA -3325229168,3325229175,PL +3325229088,3325229175,CA 3325229176,3325229183,IN 3325229184,3325229247,US 3325229248,3325229255,CA @@ -118497,11 +120039,10 @@ 3325229328,3325229331,US 3325229332,3325229351,CA 3325229352,3325229359,BR -3325229360,3325229363,CA -3325229364,3325229367,US -3325229368,3325229411,CA +3325229360,3325229411,CA 3325229412,3325229415,RU -3325229416,3325229471,CA +3325229416,3325229463,CA +3325229464,3325229471,BR 3325229472,3325229487,US 3325229488,3325229499,CA 3325229500,3325229503,IN @@ -118531,7 +120072,7 @@ 3325229956,3325229959,US 3325229960,3325229975,CA 3325229976,3325229979,IN -3325229980,3325229983,US +3325229980,3325229983,BR 3325229984,3325229991,CA 3325229992,3325229999,IN 3325230000,3325230007,CA @@ -118545,7 +120086,7 @@ 3325230096,3325230103,CA 3325230104,3325230111,US 3325230112,3325230119,CA -3325230120,3325230123,US +3325230120,3325230123,MA 3325230124,3325230127,CL 3325230128,3325230135,CA 3325230136,3325230143,FR @@ -118567,10 +120108,12 @@ 3325230716,3325230751,US 3325230752,3325230779,CA 3325230780,3325230783,BR -3325230784,3325230975,CA -3325230976,3325230991,US +3325230784,3325230983,CA +3325230984,3325230991,US 3325230992,3325231007,FR -3325231008,3325231095,CA +3325231008,3325231071,CA +3325231072,3325231079,US +3325231080,3325231095,CA 3325231096,3325231099,US 3325231100,3325231103,BR 3325231104,3325232127,US @@ -119579,7 +121122,9 @@ 3337961664,3337961671,CA 3337961672,3337962623,US 3337962624,3337962751,CA -3337962752,3337963639,US +3337962752,3337962799,US +3337962800,3337962807,GB +3337962808,3337963639,US 3337963640,3337963647,CA 3337963648,3337963775,US 3337963776,3337963783,AZ @@ -120019,8 +121564,7 @@ 3340085248,3340086271,US 3340087296,3340088319,US 3340088320,3340089343,CA -3340089344,3340090367,US -3340091392,3340097535,US +3340089344,3340097535,US 3340097536,3340098559,CA 3340098560,3340107775,US 3340107776,3340369919,CA @@ -120241,8 +121785,8 @@ 3341535040,3341535047,MA 3341535048,3341535055,GH 3341535056,3341535151,US -3341535152,3341535171,CN -3341535172,3341535183,US +3341535152,3341535167,CN +3341535168,3341535183,US 3341535184,3341535187,ID 3341535188,3341535195,US 3341535196,3341535199,SA @@ -120399,7 +121943,6 @@ 3342831104,3342831359,IN 3342831360,3342878967,US 3342878976,3342879231,US -3342879232,3342879487,BE 3342879488,3342879551,NL 3342879568,3342879743,NL 3342879744,3342979587,US @@ -120537,9 +122080,7 @@ 3343656512,3343656575,VI 3343656576,3343656703,US 3343656704,3343656959,VI -3343656960,3343747583,US -3343747584,3343748095,VE -3343748096,3343858687,US +3343656960,3343858687,US 3343858688,3343859199,VG 3343859200,3343922975,US 3343922976,3343923007,PA @@ -120601,9 +122142,19 @@ 3344381224,3344381255,US 3344381256,3344381263,CA 3344381264,3344381271,MX -3344381272,3344406527,US +3344381272,3344381887,US +3344381888,3344381893,ES +3344381894,3344406527,US 3344406528,3344408575,CA -3344408576,3344415679,US +3344408576,3344411135,US +3344411136,3344411151,BM +3344411152,3344411295,US +3344411296,3344411327,BM +3344411328,3344411519,US +3344411520,3344411535,BM +3344411536,3344411631,US +3344411632,3344411647,BM +3344411648,3344415679,US 3344415680,3344415743,AR 3344415744,3344429055,US 3344429056,3344429343,CA @@ -120667,9 +122218,7 @@ 3344964608,3344965631,CA 3344965632,3344973823,US 3344973824,3344974847,BM -3344974848,3344978207,US -3344978208,3344978215,BD -3344978216,3344979967,US +3344974848,3344979967,US 3344979968,3344982015,CA 3344982016,3345007615,US 3345007616,3345008639,CA @@ -120695,7 +122244,7 @@ 3345332288,3345332295,GH 3345332296,3345332303,PK 3345332304,3345332311,US -3345332312,3345332319,BR +3345332312,3345332319,LK 3345332320,3345332327,PT 3345332328,3345332339,US 3345332340,3345332343,GH @@ -120703,18 +122252,18 @@ 3345332348,3345332351,CY 3345332352,3345332375,US 3345332376,3345332383,CA -3345332384,3345332399,US -3345332400,3345332403,BR +3345332384,3345332403,US 3345332404,3345332407,GH 3345332408,3345332411,ID 3345332412,3345332423,US 3345332424,3345332431,MY 3345332432,3345332435,VN 3345332436,3345332439,GB -3345332440,3345332455,US +3345332440,3345332451,US +3345332452,3345332455,IN 3345332456,3345332459,GH 3345332460,3345332463,US -3345332464,3345332471,BR +3345332464,3345332471,VN 3345332472,3345332487,US 3345332488,3345332495,AU 3345332496,3345332503,CA @@ -120829,7 +122378,8 @@ 3345409950,3345410032,US 3345410033,3345410036,GB 3345410037,3345412095,US -3345414144,3345418239,US +3345412096,3345413119,CA +3345413120,3345418239,US 3345418240,3345419519,NL 3345419520,3345422847,US 3345423360,3345424383,TC @@ -121230,7 +122780,7 @@ 3350836268,3350836275,IN 3350836276,3350836279,ZA 3350836280,3350836283,CA -3350836284,3350836991,US +3350836736,3350836991,US 3350836992,3350837247,CA 3350837248,3350837759,US 3350837760,3350843391,CA @@ -121439,8 +122989,7 @@ 3351197752,3351197759,PT 3351197760,3351197775,US 3351197776,3351197783,BR -3351197784,3351197787,US -3351197788,3351197791,GT +3351197784,3351197791,US 3351197792,3351197795,IN 3351197796,3351197803,BR 3351197804,3351197807,AE @@ -121452,7 +123001,7 @@ 3351197844,3351197847,CN 3351197848,3351197859,US 3351197860,3351197863,CY -3351197864,3351197867,VN +3351197864,3351197867,US 3351197868,3351197871,CY 3351197872,3351197879,US 3351197880,3351197887,GH @@ -121485,8 +123034,7 @@ 3351198176,3351198179,BD 3351198180,3351198183,US 3351198184,3351198191,GH -3351198192,3351198195,CN -3351198196,3351198207,US +3351198192,3351198207,US 3351198208,3351198215,VN 3351198216,3351198223,AE 3351198224,3351198231,US @@ -121515,7 +123063,7 @@ 3351198412,3351198415,GB 3351198416,3351198423,GT 3351198424,3351198427,RO -3351198428,3351198431,US +3351198428,3351198431,BR 3351198432,3351198439,IN 3351198440,3351198447,US 3351198448,3351198463,JO @@ -121850,9 +123398,15 @@ 3352916535,3352916541,BR 3352916542,3352916542,US 3352916543,3352916557,BR -3352916558,3352916566,US +3352916558,3352916561,US +3352916562,3352916562,GB +3352916563,3352916564,BR +3352916565,3352916566,US 3352916567,3352916584,BR -3352916585,3352916607,US +3352916585,3352916586,US +3352916587,3352916592,BR +3352916593,3352916593,AE +3352916594,3352916607,US 3352916608,3352916615,BR 3352916616,3352916619,US 3352916620,3352916635,BR @@ -121862,7 +123416,9 @@ 3352916640,3352916640,BR 3352916641,3352916648,US 3352916649,3352916689,BR -3352916690,3352918015,US +3352916690,3352916690,US +3352916691,3352916694,BR +3352916695,3352918015,US 3352918016,3352919039,CA 3352919040,3353335303,US 3353335304,3353335309,NL @@ -122080,7 +123636,9 @@ 3354507300,3354507303,US 3354507304,3354507307,IN 3354507308,3354507315,BR -3354507316,3354507327,US +3354507316,3354507319,US +3354507320,3354507323,PK +3354507324,3354507327,US 3354507328,3354507335,RU 3354507336,3354507343,US 3354507344,3354507347,BR @@ -122106,8 +123664,7 @@ 3354507472,3354507475,MY 3354507476,3354507479,CY 3354507480,3354507483,BR -3354507484,3354507507,US -3354507508,3354507511,PK +3354507484,3354507511,US 3354507512,3354507519,MA 3354507520,3354507535,US 3354507536,3354507539,ID @@ -122182,7 +123739,7 @@ 3354508036,3354508039,BR 3354508040,3354508043,US 3354508044,3354508047,DK -3354508048,3354508051,US +3354508048,3354508051,BR 3354508052,3354508055,VN 3354508056,3354508059,AU 3354508060,3354508063,BR @@ -122239,8 +123796,7 @@ 3354508360,3354508367,AU 3354508368,3354508375,BD 3354508376,3354508383,MA -3354508384,3354508391,US -3354508392,3354508395,BR +3354508384,3354508395,US 3354508396,3354508399,VN 3354508400,3354508423,US 3354508424,3354508431,MD @@ -122250,8 +123806,7 @@ 3354508456,3354508487,US 3354508488,3354508491,VN 3354508492,3354508495,CY -3354508496,3354508515,US -3354508516,3354508519,VN +3354508496,3354508519,US 3354508520,3354508527,IN 3354508528,3354508535,AE 3354508536,3354508543,BD @@ -122303,7 +123858,7 @@ 3354509280,3354509283,AU 3354509284,3354509287,GH 3354509288,3354509291,CY -3354509292,3354509295,US +3354509292,3354509295,IN 3354509296,3354509299,CA 3354509300,3354509391,US 3354509392,3354509399,CN @@ -122373,8 +123928,8 @@ 3355012608,3355017215,CA 3355017216,3355052287,US 3355052288,3355052543,AU -3355052544,3355053311,CA -3355053312,3355249151,US +3355052544,3355053055,CA +3355053056,3355249151,US 3355249152,3355249663,CA 3355249664,3355260927,US 3355260928,3355262719,CA @@ -122532,7 +124087,9 @@ 3355538432,3355539199,AR 3355539200,3355539455,VE 3355539456,3355540479,CL -3355540480,3355541503,CO +3355540480,3355540735,CO +3355540736,3355540991,BR +3355540992,3355541503,CO 3355541504,3355545599,CL 3355545600,3355547647,VE 3355547648,3355547903,NI @@ -122572,8 +124129,8 @@ 3355643904,3355647999,BR 3355648000,3355668991,AR 3355668992,3355669247,PE -3355669248,3355670015,AR -3355670016,3355670527,VE +3355669248,3355669503,AR +3355669504,3355670527,VE 3355670528,3355672575,AR 3355672576,3355677183,CO 3355677184,3355677439,GT @@ -122650,7 +124207,8 @@ 3355928064,3355928575,CA 3355928576,3355929087,GB 3355929088,3355929599,US -3355929600,3355930623,PA +3355929600,3355930367,PA +3355930368,3355930623,HK 3355930624,3355934719,BR 3355934720,3355939839,AR 3355939840,3355940863,SR @@ -122664,6 +124222,7 @@ 3356033792,3356034047,CL 3356034048,3356035071,PY 3356035072,3356037119,MX +3356037120,3356041215,BR 3356041216,3356049407,CR 3356049408,3356049663,CL 3356049664,3356051455,BR @@ -122726,8 +124285,7 @@ 3356089088,3356089343,AR 3356089344,3356090623,BR 3356090624,3356090879,CL -3356090880,3356091135,PE -3356091136,3356091391,AR +3356090880,3356091391,AR 3356091392,3356091647,CL 3356091648,3356091903,AR 3356091904,3356093183,CL @@ -122747,11 +124305,7 @@ 3356102400,3356102655,PA 3356102656,3356105727,CL 3356105728,3356106751,SV -3356106752,3356106975,HN -3356106976,3356107007,FR -3356107008,3356108511,HN -3356108512,3356108519,US -3356108520,3356110495,HN +3356106752,3356110495,HN 3356110496,3356110503,US 3356110504,3356110847,HN 3356110848,3356113919,BR @@ -122907,9 +124461,7 @@ 3356334080,3356336127,BO 3356336128,3356336895,SV 3356336896,3356337151,HN -3356337152,3356337663,SV -3356337664,3356337919,HN -3356337920,3356344319,SV +3356337152,3356344319,SV 3356344320,3356360703,CO 3356360704,3356362751,CL 3356362752,3356363519,VE @@ -122938,7 +124490,11 @@ 3356391168,3356391423,PA 3356393472,3356413567,CL 3356413568,3356413823,CO -3356413824,3356421119,CL +3356413824,3356420287,CL +3356420288,3356420351,CO +3356420352,3356420863,CL +3356420864,3356420991,CO +3356420992,3356421119,CL 3356421120,3356421247,CO 3356421248,3356426239,CL 3356426240,3356427263,BR @@ -123050,13 +124606,9 @@ 3357424640,3357425663,CL 3357425664,3357442047,CO 3357442048,3357442303,NI -3357442304,3357448311,GT -3357448312,3357448319,SV -3357448320,3357449471,GT +3357442304,3357449471,GT 3357449472,3357449727,HN -3357449728,3357452287,GT -3357452288,3357452543,HN -3357452544,3357453311,GT +3357449728,3357453311,GT 3357453312,3357453567,HN 3357453568,3357455871,GT 3357455872,3357456127,NI @@ -123064,15 +124616,15 @@ 3357457920,3357458431,HN 3357458432,3357474815,CL 3357474816,3357475071,US -3357475072,3357476351,AR -3357476352,3357476607,EC -3357476608,3357476863,AR +3357475072,3357476863,AR 3357476864,3357477375,EC -3357477376,3357478473,AR -3357478474,3357478474,CO -3357478475,3357480423,AR +3357477376,3357477887,AR +3357477888,3357478911,CO +3357478912,3357480423,AR 3357480424,3357480427,CO -3357480428,3357482865,AR +3357480428,3357482591,AR +3357482592,3357482623,EC +3357482624,3357482865,AR 3357482866,3357482866,EC 3357482867,3357483007,AR 3357483008,3357491199,CL @@ -123081,11 +124633,13 @@ 3357507584,3357515775,VE 3357515776,3357523967,SV 3357523968,3357532159,CO -3357532160,3357561167,AR -3357561168,3357561175,CO -3357561176,3357561199,AR +3357532160,3357556991,AR +3357556992,3357557247,MX +3357557248,3357561199,AR 3357561200,3357561215,CO -3357561216,3357581311,AR +3357561216,3357561247,AR +3357561248,3357561279,CO +3357561280,3357581311,AR 3357581312,3357589503,CL 3357589504,3357605887,BZ 3357605888,3357606911,MX @@ -123152,18 +124706,17 @@ 3358023680,3358064639,MX 3358064640,3358130175,UY 3358130176,3358131199,EC -3358131200,3358143999,AR -3358144000,3358144127,CL -3358144128,3358149735,AR -3358149736,3358149743,CO -3358149744,3358151551,AR -3358151552,3358151679,EC -3358151680,3358151807,PE -3358151808,3358154495,AR +3358131200,3358144639,AR +3358144640,3358144767,VE +3358144768,3358154495,AR 3358154496,3358154751,CL -3358154752,3358158335,AR +3358154752,3358158079,AR +3358158080,3358158207,PE +3358158208,3358158335,AR 3358158336,3358158591,PE -3358158592,3358236671,AR +3358158592,3358159871,AR +3358159872,3358160895,VE +3358160896,3358236671,AR 3358236672,3358244863,CL 3358244864,3358261247,DO 3358261248,3358326783,AR @@ -123173,26 +124726,24 @@ 3358482176,3358482431,BZ 3358482432,3358523391,PA 3358523392,3358523903,AR -3358523904,3358526463,VE -3358526464,3358526719,AR +3358523904,3358525951,VE +3358525952,3358526719,AR 3358526720,3358527487,VE 3358527488,3358530047,AR -3358530048,3358530559,VE -3358530560,3358530815,AR +3358530048,3358530303,VE +3358530304,3358530815,AR 3358530816,3358534143,VE -3358534144,3358534399,AR -3358534400,3358535167,VE +3358534144,3358534655,AR +3358534656,3358535167,VE 3358535168,3358535679,AR 3358535680,3358536447,VE 3358536448,3358536703,AR -3358536704,3358538751,VE -3358538752,3358539263,AR -3358539264,3358539775,VE -3358539776,3358541823,AR -3358541824,3358543359,VE +3358536704,3358543359,VE 3358543360,3358543615,AR -3358543616,3358545663,VE -3358545664,3358547967,AR +3358543616,3358544127,VE +3358544128,3358544383,AR +3358544384,3358545919,VE +3358545920,3358547967,AR 3358547968,3358548623,VE 3358548624,3358548639,AR 3358548640,3358550015,VE @@ -123200,10 +124751,10 @@ 3358552064,3358553087,VE 3358553088,3358553599,AR 3358553600,3358554111,VE -3358554112,3358556159,AR -3358556160,3358560255,VE -3358560256,3358562303,AR -3358562304,3358564095,VE +3358554112,3358560767,AR +3358560768,3358562303,VE +3358562304,3358563327,AR +3358563328,3358564095,VE 3358564096,3358564351,AR 3358564352,3358565375,VE 3358565376,3358566399,AR @@ -123214,7 +124765,9 @@ 3358570496,3358578687,AR 3358578688,3358579711,CO 3358579712,3358580735,VE -3358580736,3358587903,AR +3358580736,3358584831,AR +3358584832,3358586879,VE +3358586880,3358587903,AR 3358587904,3358588927,VE 3358588928,3358654463,PE 3358654464,3358658559,AR @@ -123318,6 +124871,7 @@ 3360014336,3360096255,AR 3360096256,3360104447,UY 3360104448,3360112639,CO +3360112640,3360116735,BR 3360116736,3360118783,BO 3360118784,3360120831,AR 3360124928,3360125439,US @@ -123379,7 +124933,9 @@ 3361030144,3361034239,VE 3361034240,3361036287,EC 3361036288,3361046527,AR -3361046528,3361052671,BO +3361046528,3361048575,BO +3361048576,3361049599,AR +3361049600,3361052671,BO 3361052672,3361054463,AR 3361054464,3361054719,PE 3361054720,3361058815,NI @@ -123431,6 +124987,7 @@ 3362357248,3362381823,BO 3362381824,3362390015,EC 3362390016,3362422783,PE +3362426880,3362428927,BR 3362428928,3362430975,CL 3362430976,3362447359,CO 3362447360,3362448383,SV @@ -123465,9 +125022,7 @@ 3362545664,3362549759,PE 3362549760,3362552575,AR 3362552576,3362552591,MX -3362552592,3362553791,AR -3362553792,3362553807,VI -3362553808,3362553855,AR +3362552592,3362553855,AR 3362553856,3362557951,PY 3362557952,3362562047,AR 3362570240,3362586623,UY @@ -123534,7 +125089,9 @@ 3363471360,3363487743,CR 3363487744,3363504127,CO 3363504128,3363512319,PE -3363512320,3363554175,AR +3363512320,3363553919,AR +3363553920,3363554047,US +3363554048,3363554175,AR 3363554176,3363554303,US 3363554304,3363557375,AR 3363557376,3363559423,BZ @@ -123564,9 +125121,7 @@ 3363713280,3363714047,CL 3363714048,3363715839,PE 3363715840,3363716095,CL -3363716096,3363716607,PE -3363716608,3363716863,AR -3363716864,3363717119,PE +3363716096,3363717119,PE 3363717120,3363733503,CL 3363733504,3363831807,AR 3363831808,3367763967,BR @@ -123602,15 +125157,14 @@ 3378511872,3380506879,MX 3380506880,3380507135,BR 3380507136,3380744191,MX +3380744192,3380745215,CO 3380745216,3380746239,BR 3380746240,3380747263,PE 3380747264,3380748287,BR 3380748288,3380761087,MX 3380761088,3380761599,VE 3380761600,3380764671,BR -3380764672,3380808191,MX -3380808192,3380808703,CR -3380808704,3380811775,MX +3380764672,3380811775,MX 3380811776,3380813823,BR 3380813824,3380815103,MX 3380815104,3380815359,CR @@ -123647,6 +125201,7 @@ 3380830720,3380831231,PA 3380831232,3380831743,MX 3380831744,3380831999,AR +3380832000,3380832255,BR 3380832256,3380832767,MX 3380832768,3380833279,DO 3380833280,3380833791,MX @@ -123683,7 +125238,7 @@ 3381387264,3381448703,MX 3381448704,3381452799,BR 3381452800,3381453823,AR -3381453824,3381455871,BR +3381453824,3381456383,BR 3381456384,3381456895,US 3381456896,3381460991,BR 3381460992,3381944319,MX @@ -123692,9 +125247,7 @@ 3381947392,3381952511,BR 3381952512,3381960703,MX 3381960704,3381962751,BR -3381962752,3381962991,HN -3381962992,3381962999,FR -3381963000,3381963711,HN +3381962752,3381963711,HN 3381963712,3381963727,CA 3381963728,3381963775,HN 3381963776,3381968895,BR @@ -123864,24 +125417,18 @@ 3387570848,3387570863,PE 3387570864,3387570943,AR 3387570944,3387571071,PE -3387571072,3387571967,AR -3387571968,3387572095,PE -3387572096,3387572223,AR +3387571072,3387572223,AR 3387572224,3387576319,CO 3387576320,3387578367,EC 3387578368,3387584511,AR 3387584512,3387585535,PE 3387585536,3387600895,AR 3387600896,3387604991,CO -3387604992,3387607295,AR -3387607296,3387607423,EC -3387607424,3387609959,AR +3387604992,3387609959,AR 3387609960,3387609967,EC 3387609968,3387611007,AR 3387611008,3387611135,EC -3387611136,3387611547,AR -3387611548,3387611551,EC -3387611552,3387613811,AR +3387611136,3387613811,AR 3387613812,3387613812,VE 3387613813,3387613831,AR 3387613832,3387613839,VE @@ -124012,7 +125559,6 @@ 3389212672,3389213183,IN 3389213184,3389213439,AU 3389213440,3389213695,MY -3389213696,3389213951,US 3389213952,3389214207,IN 3389214208,3389214463,SG 3389214464,3389214719,AU @@ -124370,9 +125916,7 @@ 3389970432,3389971199,NZ 3389971200,3389971711,CN 3389971712,3389971967,AU -3389971968,3389972479,CN -3389972480,3389972735,US -3389972736,3389973503,CN +3389971968,3389973503,CN 3389973504,3389973759,NZ 3389973760,3389974271,AU 3389974272,3389974527,CN @@ -125027,7 +126571,9 @@ 3392073728,3392077823,ID 3392077824,3392079871,AU 3392079872,3392086015,JP -3392086016,3392094207,AU +3392086016,3392089599,PK +3392089600,3392089855,AU +3392089856,3392094207,PK 3392094208,3392098559,ID 3392098560,3392098815,AU 3392098816,3392099327,CN @@ -126567,7 +128113,10 @@ 3399924736,3399925759,PH 3399925760,3399933951,SG 3399933952,3399942143,CN -3399942144,3399954943,AU +3399942144,3399945983,HK +3399945984,3399946239,AU +3399946240,3399950335,HK +3399950336,3399954943,AU 3399954944,3399974911,US 3399974912,3399979007,HK 3399979008,3399982963,US @@ -127331,7 +128880,9 @@ 3406864640,3406865151,CN 3406865152,3406865663,AU 3406865664,3406865919,IN -3406865920,3406871039,AU +3406865920,3406869503,AU +3406869504,3406870527,JP +3406870528,3406871039,AU 3406871040,3406871551,CN 3406871552,3406881791,AU 3406881792,3406882047,CN @@ -127616,7 +129167,9 @@ 3407282176,3407282431,CN 3407282688,3407294207,AU 3407294208,3407294463,CN -3407294464,3407300863,AU +3407294464,3407297791,AU +3407297792,3407298559,CN +3407298560,3407300863,AU 3407300864,3407301119,CN 3407301120,3407303935,AU 3407303936,3407304191,CN @@ -128535,7 +130088,9 @@ 3410959360,3410959615,VN 3410959616,3410959871,ID 3410959872,3410960383,AU -3410960384,3410964479,GB +3410960384,3410960447,GB +3410960448,3410960463,SG +3410960464,3410964479,GB 3410964480,3410968575,JP 3410968576,3410984959,NZ 3410984960,3411017727,TW @@ -129482,7 +131037,9 @@ 3416514560,3416522751,IN 3416522752,3416588287,AU 3416588288,3416653823,JP -3416653824,3416686591,AU +3416653824,3416667135,AU +3416667136,3416668159,US +3416668160,3416686591,AU 3416686592,3416694783,SG 3416694784,3416702975,CN 3416702976,3416707071,ID @@ -129687,7 +131244,6 @@ 3418162688,3418163199,CN 3418163200,3418165247,PH 3418165248,3418167295,MY -3418167296,3418167551,IN 3418167552,3418167807,AU 3418167808,3418168319,HK 3418168320,3418169343,VN @@ -129762,7 +131318,8 @@ 3418304512,3418306559,VN 3418306560,3418308607,IN 3418308608,3418324991,CN -3418324992,3418326271,AU +3418324992,3418326015,VU +3418326016,3418326271,AU 3418326272,3418326527,CN 3418326528,3418327039,PH 3418327040,3418329087,JP @@ -130019,7 +131576,9 @@ 3423092848,3423093759,VI 3423093760,3423094783,US 3423094784,3423095807,CA -3423095808,3423131647,US +3423095808,3423128575,US +3423129088,3423129343,NG +3423129600,3423131647,US 3423131648,3423133695,PL 3423133696,3423135999,US 3423136000,3423136255,CA @@ -130052,7 +131611,9 @@ 3423366496,3423371263,US 3423371264,3423375359,ZA 3423375360,3423379455,CA -3423379456,3423416319,US +3423379456,3423410175,US +3423410176,3423412223,BM +3423412224,3423416319,US 3423416320,3423417343,CA 3423417344,3423430655,US 3423430656,3423431679,TC @@ -130858,7 +132419,9 @@ 3438542848,3438608383,CA 3438608384,3438610125,US 3438610126,3438610126,DE -3438610127,3438610325,US +3438610127,3438610169,US +3438610170,3438610170,PL +3438610171,3438610325,US 3438610326,3438610326,GB 3438610327,3438610408,US 3438610409,3438610410,GB @@ -132283,7 +133846,8 @@ 3466489856,3466490111,CA 3466490112,3466558207,US 3466558208,3466558463,EC -3466558464,3466756095,US +3466558464,3466717445,US +3466717450,3466756095,US 3466756096,3466772479,CA 3466772480,3466846207,US 3466846208,3466854399,CA @@ -132660,7 +134224,10 @@ 3471570944,3471572991,CA 3471572992,3472249343,US 3472249344,3472249599,CA -3472249600,3472375807,US +3472249600,3472257599,US +3472257600,3472257631,MX +3472257632,3472257663,MY +3472257664,3472375807,US 3472375808,3472392191,PR 3472392192,3472408575,CA 3472408576,3472678911,US @@ -133126,7 +134693,9 @@ 3482910720,3482927103,CA 3482927104,3483025407,US 3483025408,3483041791,DE -3483041792,3483435007,US +3483041792,3483296004,US +3483296005,3483296005,BE +3483296006,3483435007,US 3483435008,3483533311,CA 3483533312,3483631615,US 3483631616,3483697151,CA @@ -133655,11 +135224,15 @@ 3492866048,3492868095,GB 3492868096,3492877954,US 3492877955,3492877955,CA -3492877956,3492894015,US +3492877956,3492880745,US +3492880746,3492880746,ES +3492880747,3492894015,US 3492894016,3492894207,GB 3492894208,3492896767,US 3492896768,3492897791,GB -3492897792,3492906495,US +3492897792,3492904217,US +3492904218,3492904218,AT +3492904219,3492906495,US 3492906752,3492909989,US 3492909990,3492909990,DE 3492909991,3492912127,US @@ -133707,8 +135280,7 @@ 3493140224,3493140479,DE 3493140480,3493244927,US 3493244928,3493249023,PR -3493249024,3493863423,US -3493864448,3493866495,US +3493249024,3493866495,US 3493866496,3493867519,VG 3493867520,3493881855,US 3493881856,3493882879,CA @@ -133776,7 +135348,9 @@ 3494192384,3494192639,JP 3494192640,3494197247,US 3494197248,3494198271,CA -3494198272,3494244351,US +3494198272,3494211583,US +3494211584,3494212607,NL +3494212608,3494244351,US 3494244352,3494246399,CA 3494246400,3494247423,US 3494247424,3494250495,CA @@ -133846,9 +135420,7 @@ 3494627328,3494628351,BM 3494628352,3494651903,US 3494651904,3494652927,CA -3494652928,3494655359,US -3494655360,3494655423,GB -3494655424,3494655743,US +3494652928,3494655743,US 3494655744,3494655759,GB 3494655760,3494660095,US 3494660096,3494661119,CA @@ -134033,7 +135605,9 @@ 3495749632,3495749856,CA 3495749857,3495749861,RU 3495749862,3495750655,CA -3495750656,3495815167,US +3495750656,3495758335,US +3495758336,3495758847,CA +3495758848,3495815167,US 3495815168,3495817215,CA 3495817216,3495828479,US 3495828480,3495829503,CA @@ -134285,7 +135859,9 @@ 3507012608,3507012639,GR 3507012640,3507025407,US 3507025408,3507025663,IQ -3507025664,3507054591,US +3507025664,3507037183,US +3507037184,3507037439,DE +3507037440,3507054591,US 3507054592,3507055615,CN 3507055616,3507055903,US 3507055904,3507055911,HK @@ -135202,7 +136778,8 @@ 3520937984,3520954367,CA 3520954368,3520994815,US 3520994816,3520995071,GB -3520995072,3520999423,US +3520995072,3520995135,JP +3520995136,3520999423,US 3520999424,3521003519,CA 3521003520,3521028095,US 3521028096,3521032191,CA @@ -135429,7 +137006,8 @@ 3524282368,3524288511,IN 3524288512,3524289535,HK 3524289536,3524290559,IN -3524290560,3524291583,CN +3524290560,3524291327,CN +3524291328,3524291583,TW 3524291584,3524294655,IN 3524294656,3524295679,SG 3524295680,3524296703,MY @@ -136018,9 +137596,15 @@ 3558244352,3558252543,IT 3558252544,3558260735,KE 3558260736,3558268927,UA -3558268928,3558275839,GI +3558268928,3558269439,GB +3558269440,3558269695,GI +3558269696,3558270167,GB +3558270168,3558270168,GI +3558270169,3558270463,GB +3558270464,3558275839,GI 3558275840,3558276095,HK -3558276096,3558277119,GI +3558276096,3558276351,GB +3558276352,3558277119,GI 3558277120,3558285951,GB 3558285952,3558286079,DE 3558286080,3558286591,GB @@ -136176,8 +137760,8 @@ 3559164160,3559178239,GB 3559178240,3559186431,LB 3559186432,3559194623,RU -3559194624,3559197535,SE -3559197536,3559197567,FI +3559194624,3559197551,SE +3559197552,3559197567,FI 3559197568,3559200143,SE 3559200144,3559200151,FI 3559200152,3559200255,SE @@ -137081,7 +138665,7 @@ 3560943196,3560943197,IT 3560943198,3560943198,DE 3560943199,3560943199,PT -3560943200,3560943200,AT +3560943200,3560943200,DE 3560943201,3560943201,IT 3560943202,3560943202,IL 3560943203,3560943204,DE @@ -137706,50 +139290,50 @@ 3560944880,3560944883,DE 3560944884,3560944887,ES 3560944888,3560944891,CH -3560944892,3560944895,DE -3560944896,3560944899,TW +3560944892,3560944899,DE 3560944900,3560944903,SG 3560944904,3560944907,MY -3560944908,3560944919,SG -3560944920,3560944923,MY +3560944908,3560944915,DE +3560944916,3560944919,SG +3560944920,3560944923,DE 3560944924,3560944927,CN -3560944928,3560944931,MY +3560944928,3560944931,DE 3560944932,3560944935,SG 3560944936,3560944943,CN 3560944944,3560944947,MY -3560944948,3560944951,SG -3560944952,3560944955,TW +3560944948,3560944955,DE 3560944956,3560944959,SG -3560944960,3560944963,IN +3560944960,3560944963,DE 3560944964,3560944967,MY 3560944968,3560944971,SG 3560944972,3560944975,CN -3560944976,3560944987,IN +3560944976,3560944979,IN +3560944980,3560944983,DE +3560944984,3560944987,IN 3560944988,3560944991,SG 3560944992,3560944995,MY 3560944996,3560944999,SG 3560945000,3560945003,MY -3560945004,3560945007,IN +3560945004,3560945007,DE 3560945008,3560945011,SG -3560945012,3560945015,DE -3560945016,3560945027,IN +3560945012,3560945019,DE +3560945020,3560945023,IN +3560945024,3560945027,DE 3560945028,3560945031,MY 3560945032,3560945035,IN 3560945036,3560945039,CN 3560945040,3560945043,SG 3560945044,3560945047,TW -3560945048,3560945059,IN +3560945048,3560945059,DE 3560945060,3560945063,SG 3560945064,3560945067,MY 3560945068,3560945075,IN -3560945076,3560945083,CN -3560945084,3560945087,IN -3560945088,3560945091,DE +3560945076,3560945091,DE 3560945092,3560945095,SG 3560945096,3560945099,CN 3560945100,3560945103,SG 3560945104,3560945107,MY -3560945108,3560945111,TW +3560945108,3560945111,DE 3560945112,3560945115,SG 3560945116,3560945119,IN 3560945120,3560945123,CN @@ -137759,31 +139343,24 @@ 3560945140,3560945143,SG 3560945144,3560945147,IN 3560945148,3560945151,SG -3560945152,3560945153,DE -3560945154,3560945156,AU -3560945157,3560945157,NZ -3560945158,3560945167,AU -3560945168,3560945168,DE -3560945169,3560945169,AU -3560945170,3560945191,DE -3560945192,3560945192,AU -3560945193,3560945194,DE -3560945195,3560945195,AU -3560945196,3560945204,DE -3560945205,3560945205,AU -3560945206,3560945206,IN -3560945207,3560945209,AU -3560945210,3560945227,DE -3560945228,3560945231,IN -3560945232,3560945267,DE -3560945268,3560945271,AU -3560945272,3560945275,DE -3560945276,3560945279,AU -3560945280,3560945355,JP +3560945152,3560945279,DE +3560945280,3560945295,JP +3560945296,3560945299,DE +3560945300,3560945311,JP +3560945312,3560945315,DE +3560945316,3560945323,JP +3560945324,3560945327,DE +3560945328,3560945331,JP +3560945332,3560945335,DE +3560945336,3560945339,JP +3560945340,3560945343,DE +3560945344,3560945351,JP +3560945352,3560945355,DE 3560945356,3560945359,TH -3560945360,3560945403,JP -3560945404,3560945407,TH -3560945408,3560945409,DE +3560945360,3560945379,JP +3560945380,3560945387,DE +3560945388,3560945403,JP +3560945404,3560945409,DE 3560945410,3560945410,MY 3560945411,3560945411,TW 3560945412,3560945412,CN @@ -137855,23 +139432,21 @@ 3560945503,3560945539,DE 3560945540,3560945543,SG 3560945544,3560945551,IN -3560945552,3560945555,DE -3560945556,3560945559,IN -3560945560,3560945563,DE +3560945552,3560945563,DE 3560945564,3560945567,SG -3560945568,3560945571,DE -3560945572,3560945575,IN +3560945568,3560945575,DE 3560945576,3560945579,SG 3560945580,3560945583,MY 3560945584,3560945587,SG 3560945588,3560945591,TW -3560945592,3560945603,SG -3560945604,3560945607,US -3560945608,3560945611,IN +3560945592,3560945595,SG +3560945596,3560945599,DE +3560945600,3560945603,SG +3560945604,3560945611,DE 3560945612,3560945619,SG 3560945620,3560945627,CN 3560945628,3560945635,SG -3560945636,3560945639,CN +3560945636,3560945639,DE 3560945640,3560945643,SG 3560945644,3560945647,MY 3560945648,3560945651,IN @@ -138177,13 +139752,32 @@ 3560947436,3560947439,DE 3560947440,3560947443,BR 3560947444,3560947455,US -3560947456,3560947495,JP -3560947496,3560947499,KR -3560947500,3560947663,JP -3560947664,3560947667,DE -3560947668,3560947686,JP -3560947687,3560947687,DE -3560947688,3560947711,JP +3560947456,3560947463,DE +3560947464,3560947475,JP +3560947476,3560947507,DE +3560947508,3560947511,JP +3560947512,3560947523,DE +3560947524,3560947527,JP +3560947528,3560947535,DE +3560947536,3560947543,JP +3560947544,3560947551,DE +3560947552,3560947555,JP +3560947556,3560947559,DE +3560947560,3560947567,JP +3560947568,3560947571,DE +3560947572,3560947591,JP +3560947592,3560947603,DE +3560947604,3560947607,JP +3560947608,3560947623,DE +3560947624,3560947631,JP +3560947632,3560947655,DE +3560947656,3560947659,JP +3560947660,3560947667,DE +3560947668,3560947683,JP +3560947684,3560947687,DE +3560947688,3560947703,JP +3560947704,3560947707,DE +3560947708,3560947711,JP 3560947712,3560955903,SE 3560955904,3560964095,BE 3560964096,3560996863,NL @@ -138366,7 +139960,9 @@ 3562059520,3562061823,ES 3562070016,3562078207,DE 3562078208,3562086399,SK -3562094592,3562102449,GB +3562094592,3562094911,GB +3562094912,3562094975,CH +3562094976,3562102449,GB 3562102450,3562102450,DE 3562102451,3562110607,GB 3562110608,3562110623,FR @@ -138415,7 +140011,13 @@ 3562422272,3562430463,IR 3562430464,3562431231,UA 3562431232,3562431487,RU -3562431488,3562438655,UA +3562431488,3562431999,UA +3562432000,3562432255,NL +3562432256,3562433535,UA +3562433536,3562434047,NL +3562434048,3562435071,UA +3562435072,3562435583,NL +3562435584,3562438655,UA 3562438656,3562463231,DE 3562463232,3562471423,UA 3562471424,3562479615,PL @@ -138731,7 +140333,9 @@ 3564363776,3564371967,UA 3564371968,3564380159,DE 3564380160,3564388351,FI -3564388352,3564396543,SE +3564388352,3564391135,SE +3564391136,3564391167,US +3564391168,3564396543,SE 3564396544,3564404735,RU 3564404736,3564412927,BG 3564412928,3564421119,IL @@ -139729,7 +141333,9 @@ 3575624960,3575631103,GB 3575631360,3575638181,GB 3575638183,3575644159,GB -3575644160,3575646975,FR +3575644160,3575646303,FR +3575646304,3575646319,ES +3575646320,3575646975,FR 3575646976,3575647231,GB 3575647232,3575648223,FR 3575648224,3575648255,PT @@ -139775,9 +141381,7 @@ 3575671616,3575671679,FI 3575671680,3575671855,FR 3575671856,3575671871,GB -3575671872,3575672879,FR -3575672880,3575672895,GB -3575672896,3575673087,FR +3575671872,3575673087,FR 3575673088,3575673343,GB 3575673344,3575676255,FR 3575676256,3575676271,GB @@ -140317,8 +141921,8 @@ 3580265472,3580265727,SE 3580265728,3580268543,EE 3580268544,3580272639,LV -3580272640,3580289023,SE -3580289024,3580297215,HR +3580272640,3580280831,SE +3580280832,3580297215,HR 3580297216,3580329983,SE 3580329984,3580338175,EE 3580338176,3580338687,SE @@ -140409,7 +142013,9 @@ 3582074880,3582077439,GB 3582077440,3582077471,DE 3582077472,3582083071,GB -3582083072,3582087167,BG +3582083072,3582085631,BG +3582085632,3582085887,DK +3582085888,3582087167,BG 3582087168,3582089215,DK 3582089216,3582091263,BG 3582091264,3582099455,QA @@ -140885,11 +142491,11 @@ 3585523712,3585531903,LV 3585531904,3585540095,AT 3585540096,3585548287,DE -3585548288,3585550335,RU +3585548288,3585550335,NL 3585550336,3585550399,DE -3585550400,3585553151,RU -3585553152,3585553407,NL -3585553408,3585556479,RU +3585550400,3585553919,NL +3585553920,3585555007,RU +3585555008,3585556479,NL 3585556480,3585564671,DE 3585564672,3585572863,RU 3585572864,3585581055,IT @@ -141022,13 +142628,12 @@ 3586162688,3586179071,FI 3586179072,3586195455,ES 3586195456,3586203647,RU -3586203648,3586205695,KE +3586203648,3586205695,ZA 3586205696,3586207743,BW 3586207744,3586207999,ZA -3586208256,3586208767,ZA -3586208768,3586211071,KE +3586208256,3586211071,ZA 3586211072,3586211327,BW -3586211328,3586211839,KE +3586211328,3586211839,ZA 3586211840,3586228223,CH 3586228224,3586244607,BE 3586244608,3586246655,NL @@ -141048,7 +142653,9 @@ 3586342912,3586359295,ES 3586359296,3586375679,PL 3586375680,3586392063,CZ -3586392064,3586408447,NL +3586392064,3586405375,NL +3586405376,3586406399,RU +3586406400,3586408447,NL 3586408448,3586424831,BA 3586424832,3586441215,CH 3586441216,3586457599,DE @@ -141181,7 +142788,8 @@ 3587194880,3587211263,GB 3587211264,3587219455,AT 3587219456,3587227647,RU -3587227648,3587231231,GB +3587227648,3587227648,NL +3587227649,3587231231,GB 3587231232,3587231263,NL 3587231264,3587233087,GB 3587233088,3587233095,NL @@ -141204,8 +142812,11 @@ 3587242680,3587244031,GB 3587244032,3587260415,IT 3587260416,3587278591,DE -3587278592,3587279359,GB -3587279360,3587284991,DE +3587278592,3587279359,PT +3587279360,3587279615,DE +3587279616,3587280383,PT +3587280384,3587281151,DE +3587281152,3587284991,PT 3587291136,3587292159,FR 3587293184,3587309567,IT 3587309568,3587325951,GB @@ -141215,7 +142826,11 @@ 3587375104,3587383295,TR 3587383296,3587391487,CZ 3587391488,3587407871,KZ -3587407872,3587420159,BE +3587407872,3587408127,BE +3587408128,3587408383,NL +3587408384,3587415039,BE +3587415040,3587415807,NL +3587415808,3587420159,BE 3587420160,3587421183,NL 3587421184,3587421439,BE 3587421440,3587423743,NL @@ -141437,14 +143052,18 @@ 3589722032,3589734399,BE 3589734400,3589738495,ZA 3589738496,3589739519,EG -3589739520,3589742591,ZA +3589739520,3589740543,GB +3589740544,3589742591,ZA 3589742592,3589746175,NL 3589746176,3589746687,US 3589746688,3589767167,NL 3589767168,3589810431,RU 3589810432,3589810687,PL 3589810688,3589816319,RU -3589825792,3589826047,DE +3589819562,3589819563,GB +3589825792,3589825807,DE +3589825808,3589825809,US +3589825810,3589826047,DE 3589826718,3589826718,AT 3589827584,3589827647,DE 3589827712,3589827839,DE @@ -141456,9 +143075,13 @@ 3589849088,3589865471,GB 3589865472,3589881855,GR 3589881856,3589890047,NL -3589890048,3589904383,GB -3589904384,3589906431,KZ -3589906432,3589931007,GB +3589890048,3589904639,GB +3589904640,3589905151,KZ +3589905152,3589905407,GB +3589905408,3589905663,KZ +3589905664,3589905919,GB +3589905920,3589906175,KZ +3589906176,3589931007,GB 3589931008,3589947391,SI 3589947392,3589963775,FI 3589963776,3589980159,ES @@ -141696,7 +143319,9 @@ 3625959424,3625963519,GB 3625963520,3626091519,US 3626091520,3626092031,AR -3626092032,3626234111,US +3626092032,3626233655,US +3626233656,3626233663,GB +3626233664,3626234111,US 3626234112,3626234367,GB 3626234368,3626270719,US 3626270720,3626287103,CA @@ -141718,8 +143343,7 @@ 3626934272,3627044863,US 3627044864,3627048959,CA 3627048960,3627049983,AG -3627049984,3627050495,US -3627051008,3627065343,US +3627049984,3627065343,US 3627065344,3627069439,CA 3627069440,3627220223,US 3627220224,3627220479,CA @@ -141986,7 +143610,9 @@ 3630169856,3630170111,CA 3630170112,3630313471,US 3630313472,3630317567,CA -3630317568,3630375423,US +3630317568,3630354431,US +3630354432,3630358527,BR +3630358528,3630375423,US 3630375424,3630383103,CA 3630383104,3630391295,US 3630391296,3630395391,CA @@ -142466,9 +144092,7 @@ 3639400448,3639401471,RS 3639401472,3639402239,US 3639402240,3639402495,GH -3639402496,3639513239,US -3639513240,3639513243,AE -3639513244,3639525375,US +3639402496,3639525375,US 3639529472,3639533567,US 3639533568,3639537663,CA 3639537664,3639550207,US @@ -142882,7 +144506,13 @@ 3642048768,3642049023,DE 3642049024,3642049279,CH 3642049280,3642049535,NO -3642049536,3642051327,GB +3642049536,3642049791,SE +3642049792,3642050047,FI +3642050048,3642050303,FR +3642050304,3642050559,GB +3642050560,3642050815,ES +3642050816,3642051071,IT +3642051072,3642051327,CA 3642051328,3642051583,US 3642051584,3642051839,TR 3642051840,3642054399,DE @@ -143054,7 +144684,6 @@ 3642609664,3642613759,ZA 3642613760,3642617855,FI 3642617856,3642621951,JO -3642621952,3642626047,IT 3642626048,3642628607,BE 3642628864,3642630143,BE 3642630144,3642634239,DK @@ -144241,8 +145870,9 @@ 3647965696,3647965951,CH 3647965952,3647966207,DE 3647966208,3647967231,GB -3647967232,3647968255,BE -3647968256,3647968895,DE +3647967232,3647967759,DE +3647967760,3647967775,BE +3647967776,3647968895,DE 3647968896,3647968911,FR 3647968912,3647969327,DE 3647969328,3647969335,IT @@ -144785,8 +146415,10 @@ 3651870720,3651874815,IT 3651874816,3651878911,PL 3651878912,3651883007,IT -3651883008,3651884287,CD -3651884288,3651885839,BE +3651883008,3651884543,CD +3651884544,3651885055,BE +3651885056,3651885311,CD +3651885312,3651885839,BE 3651885840,3651885843,CD 3651885844,3651887103,BE 3651887104,3651891199,GB @@ -144893,7 +146525,9 @@ 3652596480,3652596543,ES 3652596544,3652597887,FR 3652597888,3652597903,GB -3652597904,3652609023,FR +3652597904,3652608191,FR +3652608192,3652608223,PT +3652608224,3652609023,FR 3652609024,3652609279,GB 3652609280,3652609503,FR 3652609504,3652609535,FI @@ -144945,7 +146579,15 @@ 3652644248,3652644255,ES 3652644256,3652644351,FR 3652644352,3652644383,FI -3652644384,3652648959,FR +3652644384,3652645119,FR +3652645120,3652645503,GB +3652645504,3652645663,FR +3652645664,3652645695,FI +3652645696,3652646015,FR +3652646016,3652646079,ES +3652646080,3652646655,FR +3652646656,3652646719,ES +3652646720,3652648959,FR 3652648960,3652714495,IE 3652714496,3653238783,DE 3653238784,3653369855,CH @@ -145322,7 +146964,9 @@ 3715653632,3715655679,BD 3715655680,3715657727,IN 3715657728,3715661823,SG -3715661824,3715672063,AU +3715661824,3715665919,AU +3715665920,3715666175,GB +3715666176,3715672063,AU 3715672064,3715674111,JP 3715674112,3715678207,HK 3715678208,3715694591,PK diff --git a/src/config/geoip6 b/src/config/geoip6 index 296429c03a..529dc8f8f3 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -1,4 +1,4 @@ -# Last updated based on April 4 2017 Maxmind GeoLite2 Country +# Last updated based on May 2 2017 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -177,9 +177,13 @@ 2001:470:1f0b:11d3::,2001:470:1f14:ffff:ffff:ffff:ffff:ffff,US 2001:470:1f15::,2001:470:1f15:b3:ffff:ffff:ffff:ffff,RU 2001:470:1f15:b4::,2001:470:1f15:b4:ffff:ffff:ffff:ffff,NL -2001:470:1f15:b5::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,RU +2001:470:1f15:b5::,2001:470:1f15:16b:ffff:ffff:ffff:ffff,RU +2001:470:1f15:16c::,2001:470:1f15:16c:ffff:ffff:ffff:ffff,NL +2001:470:1f15:16d::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,RU 2001:470:1f15:450::,2001:470:1f15:450:ffff:ffff:ffff:ffff,NL -2001:470:1f15:451::,2001:470:1f15:582:ffff:ffff:ffff:ffff,RU +2001:470:1f15:451::,2001:470:1f15:500:ffff:ffff:ffff:ffff,RU +2001:470:1f15:501::,2001:470:1f15:501:ffff:ffff:ffff:ffff,NL +2001:470:1f15:502::,2001:470:1f15:582:ffff:ffff:ffff:ffff,RU 2001:470:1f15:583::,2001:470:1f15:583:ffff:ffff:ffff:ffff,NL 2001:470:1f15:584::,2001:470:1f15:5ab:ffff:ffff:ffff:ffff,RU 2001:470:1f15:5ac::,2001:470:1f15:5ac:ffff:ffff:ffff:ffff,NL @@ -187,7 +191,9 @@ 2001:470:1f15:9c6::,2001:470:1f15:9c6:ffff:ffff:ffff:ffff,AT 2001:470:1f15:9c7::,2001:470:1f15:a5e:ffff:ffff:ffff:ffff,RU 2001:470:1f15:a5f::,2001:470:1f15:a60:ffff:ffff:ffff:ffff,NL -2001:470:1f15:a61::,2001:470:1f15:10db:ffff:ffff:ffff:ffff,RU +2001:470:1f15:a61::,2001:470:1f15:b25:ffff:ffff:ffff:ffff,RU +2001:470:1f15:b26::,2001:470:1f15:b26:ffff:ffff:ffff:ffff,NL +2001:470:1f15:b27::,2001:470:1f15:10db:ffff:ffff:ffff:ffff,RU 2001:470:1f15:10dc::,2001:470:1f15:10dc:ffff:ffff:ffff:ffff,NL 2001:470:1f15:10dd::,2001:470:1f15:110b:ffff:ffff:ffff:ffff,RU 2001:470:1f15:110c::,2001:470:1f15:110c:ffff:ffff:ffff:ffff,BE @@ -264,7 +270,9 @@ 2001:470:7bb0::,2001:470:7bb0:7fff:ffff:ffff:ffff:ffff,BE 2001:470:7bb0:8000::,2001:470:7bbf:ffff:ffff:ffff:ffff:ffff,US 2001:470:7bc0::,2001:470:7bc0:ffff:ffff:ffff:ffff:ffff,NL -2001:470:7bc1::,2001:470:7e38:ffff:ffff:ffff:ffff:ffff,US +2001:470:7bc1::,2001:470:7d6a:ffff:ffff:ffff:ffff:ffff,US +2001:470:7d6b::,2001:470:7d6b:ffff:ffff:ffff:ffff:ffff,NL +2001:470:7d6c::,2001:470:7e38:ffff:ffff:ffff:ffff:ffff,US 2001:470:7e39::,2001:470:7e39:7fff:ffff:ffff:ffff:ffff,NL 2001:470:7e39:8000::,2001:470:7ea5:ffff:ffff:ffff:ffff:ffff,US 2001:470:7ea6::,2001:470:7ea6:ffff:ffff:ffff:ffff:ffff,NL @@ -792,6 +800,20 @@ 2001:678:3f4::,2001:678:3f4:ffff:ffff:ffff:ffff:ffff,DE 2001:678:3f8::,2001:678:3f8:ffff:ffff:ffff:ffff:ffff,UA 2001:678:3fc::,2001:678:3fc:ffff:ffff:ffff:ffff:ffff,FR +2001:678:400::,2001:678:400:ffff:ffff:ffff:ffff:ffff,DE +2001:678:404::,2001:678:404:ffff:ffff:ffff:ffff:ffff,RS +2001:678:408::,2001:678:408:ffff:ffff:ffff:ffff:ffff,ME +2001:678:40c::,2001:678:40c:ffff:ffff:ffff:ffff:ffff,RU +2001:678:410::,2001:678:410:ffff:ffff:ffff:ffff:ffff,RU +2001:678:414::,2001:678:414:ffff:ffff:ffff:ffff:ffff,DE +2001:678:418::,2001:678:418:ffff:ffff:ffff:ffff:ffff,GB +2001:678:41c::,2001:678:41c:ffff:ffff:ffff:ffff:ffff,UA +2001:678:420::,2001:678:420:ffff:ffff:ffff:ffff:ffff,RU +2001:678:424::,2001:678:424:ffff:ffff:ffff:ffff:ffff,GB +2001:678:428::,2001:678:428:ffff:ffff:ffff:ffff:ffff,NL +2001:678:42c::,2001:678:42c:ffff:ffff:ffff:ffff:ffff,SI +2001:678:430::,2001:678:433:ffff:ffff:ffff:ffff:ffff,GB +2001:678:440::,2001:678:440:ffff:ffff:ffff:ffff:ffff,SE 2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE 2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH @@ -815,7 +837,7 @@ 2001:67c:58::,2001:67c:58:ffff:ffff:ffff:ffff:ffff,SI 2001:67c:5c::,2001:67c:5c:ffff:ffff:ffff:ffff:ffff,BE 2001:67c:60::,2001:67c:60:ffff:ffff:ffff:ffff:ffff,NL -2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,HU 2001:67c:68::,2001:67c:68:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:6c::,2001:67c:6c:ffff:ffff:ffff:ffff:ffff,IS 2001:67c:70::,2001:67c:70:ffff:ffff:ffff:ffff:ffff,FR @@ -1407,6 +1429,10 @@ 2001:67c:11f4::,2001:67c:11f4:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:11f8::,2001:67c:11f8:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:11fc::,2001:67c:11fc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1200::,2001:67c:1200:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1204::,2001:67c:1204:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1208::,2001:67c:1208:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:120c::,2001:67c:120c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,US @@ -1453,10 +1479,12 @@ 2001:67c:12e4::,2001:67c:12e4:ffff:ffff:ffff:ffff:ffff,SA 2001:67c:12e8::,2001:67c:12e9:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:12f0::,2001:67c:12f0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:12f4::,2001:67c:12f4:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:12f8::,2001:67c:12f8:ffff:ffff:ffff:ffff:ffff,DK 2001:67c:12fc::,2001:67c:12fc:ffff:ffff:ffff:ffff:ffff,PL 2001:67c:1300::,2001:67c:1300:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:1304::,2001:67c:1304:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1308::,2001:67c:1308:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:130c::,2001:67c:130c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:1310::,2001:67c:1310:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:1314::,2001:67c:1314:ffff:ffff:ffff:ffff:ffff,CZ @@ -1850,7 +1878,6 @@ 2001:67c:1b6c::,2001:67c:1b6c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:1b70::,2001:67c:1b70:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:1b74::,2001:67c:1b74:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:1b78::,2001:67c:1b78:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b7c::,2001:67c:1b7c:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b80::,2001:67c:1b80:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b84::,2001:67c:1b84:ffff:ffff:ffff:ffff:ffff,DE @@ -2021,7 +2048,6 @@ 2001:67c:2224::,2001:67c:2224:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2228::,2001:67c:2228:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:222c::,2001:67c:222c:ffff:ffff:ffff:ffff:ffff,SK -2001:67c:2230::,2001:67c:2230:ffff:ffff:ffff:ffff:ffff,BE 2001:67c:2234::,2001:67c:2234:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2238::,2001:67c:2238:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:223c::,2001:67c:223c:ffff:ffff:ffff:ffff:ffff,DE @@ -2575,7 +2601,6 @@ 2001:67c:2bb8::,2001:67c:2bb8:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2bbc::,2001:67c:2bbc:ffff:ffff:ffff:ffff:ffff,RO 2001:67c:2bc0::,2001:67c:2bc0:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:2bc4::,2001:67c:2bc4:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2bc8::,2001:67c:2bc8:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2bcc::,2001:67c:2bcc:ffff:ffff:ffff:ffff:ffff,LV 2001:67c:2bd0::,2001:67c:2bd0:ffff:ffff:ffff:ffff:ffff,SE @@ -2772,7 +2797,6 @@ 2001:67c:2f04::,2001:67c:2f04:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:2f08::,2001:67c:2f08:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2f0c::,2001:67c:2f0c:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:2f10::,2001:67c:2f10:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2f14::,2001:67c:2f14:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f18::,2001:67c:2f18:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:2f1c::,2001:67c:2f1c:ffff:ffff:ffff:ffff:ffff,GB @@ -2783,6 +2807,7 @@ 2001:67c:2f30::,2001:67c:2f30:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f34::,2001:67c:2f34:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:2f38::,2001:67c:2f38:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2f3c::,2001:67c:2f3c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f40::,2001:67c:2f40:ffff:ffff:ffff:ffff:ffff,BG 2001:67c:2f44::,2001:67c:2f44:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f48::,2001:67c:2f48:ffff:ffff:ffff:ffff:ffff,UA @@ -3058,6 +3083,8 @@ 2001:7f8:af::,2001:7f8:af:ffff:ffff:ffff:ffff:ffff,FI 2001:7f8:b0::,2001:7f8:b0:ffff:ffff:ffff:ffff:ffff,SE 2001:7f8:b1::,2001:7f8:b1:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:b2::,2001:7f8:b2:ffff:ffff:ffff:ffff:ffff,CZ +2001:7f8:b3::,2001:7f8:b3:ffff:ffff:ffff:ffff:ffff,PL 2001:7f9:4::,2001:7f9:4:ffff:ffff:ffff:ffff:ffff,AL 2001:7f9:8::,2001:7f9:8:ffff:ffff:ffff:ffff:ffff,AM 2001:7f9:c::,2001:7f9:c:ffff:ffff:ffff:ffff:ffff,PL @@ -3748,7 +3775,7 @@ 2001:df0:1b00::,2001:df0:1b00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:1c00::,2001:df0:1c00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:1d00::,2001:df0:1d00:ffff:ffff:ffff:ffff:ffff,MV -2001:df0:1e00::,2001:df0:1e00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:1e00::,2001:df0:1e01:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:1f00::,2001:df0:1f00:ffff:ffff:ffff:ffff:ffff,MV 2001:df0:2000::,2001:df0:2000:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:2100::,2001:df0:2100:ffff:ffff:ffff:ffff:ffff,AU @@ -3779,13 +3806,11 @@ 2001:df0:3d00::,2001:df0:3d00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:3e00::,2001:df0:3e00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:3f00::,2001:df0:3f00:ffff:ffff:ffff:ffff:ffff,ID -2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:4100::,2001:df0:4100:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:4200::,2001:df0:4200:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:4300::,2001:df0:4300:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:4400::,2001:df0:4400:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:4500::,2001:df0:4500:ffff:ffff:ffff:ffff:ffff,CN -2001:df0:4600::,2001:df0:4601:ffff:ffff:ffff:ffff:ffff,US 2001:df0:4700::,2001:df0:4700:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:4900::,2001:df0:4900:ffff:ffff:ffff:ffff:ffff,IN @@ -3890,44 +3915,87 @@ 2001:df0:b400::,2001:df0:b400:ffff:ffff:ffff:ffff:ffff,JP 2001:df0:b500::,2001:df0:b500:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:b600::,2001:df0:b600:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:b700::,2001:df0:b700:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:b800::,2001:df0:b800:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:b900::,2001:df0:b900:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:ba00::,2001:df0:ba00:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:bb00::,2001:df0:bb00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:bc00::,2001:df0:bc00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:bd00::,2001:df0:bd00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:be00::,2001:df0:be00:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:bf00::,2001:df0:bf00:ffff:ffff:ffff:ffff:ffff,PH 2001:df0:c000::,2001:df0:c000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:c100::,2001:df0:c100:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:c200::,2001:df0:c200:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c300::,2001:df0:c300:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:c400::,2001:df0:c400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:c500::,2001:df0:c500:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:c600::,2001:df0:c600:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:c700::,2001:df0:c700:ffff:ffff:ffff:ffff:ffff,SG 2001:df0:c800::,2001:df0:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c900::,2001:df0:c900:ffff:ffff:ffff:ffff:ffff,PK 2001:df0:ca00::,2001:df0:ca00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:cb00::,2001:df0:cb00:ffff:ffff:ffff:ffff:ffff,NZ 2001:df0:cc00::,2001:df0:cc00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:cd00::,2001:df0:cd00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:ce00::,2001:df0:ce00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:cf00::,2001:df0:cf00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:d000::,2001:df0:d000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:d100::,2001:df0:d100:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:d200::,2001:df0:d200:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:d300::,2001:df0:d301:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:d400::,2001:df0:d400:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:d500::,2001:df0:d500:ffff:ffff:ffff:ffff:ffff,AF 2001:df0:d600::,2001:df0:d600:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:d700::,2001:df0:d700:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:d900::,2001:df0:d900:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:db00::,2001:df0:db03:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:dc00::,2001:df0:dc00:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:dd00::,2001:df0:dd00:ffff:ffff:ffff:ffff:ffff,KH 2001:df0:de00::,2001:df0:de00:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:df00::,2001:df0:df00:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:e100::,2001:df0:e100:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:e200::,2001:df0:e200:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:e300::,2001:df0:e300:ffff:ffff:ffff:ffff:ffff,HK 2001:df0:e400::,2001:df0:e400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:e500::,2001:df0:e500:ffff:ffff:ffff:ffff:ffff,NZ 2001:df0:e600::,2001:df0:e600:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:e700::,2001:df0:e700:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:e800::,2001:df0:e800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:e900::,2001:df0:e900:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:ea00::,2001:df0:ea00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:eb00::,2001:df0:eb00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:ec00::,2001:df0:ec00:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:ed00::,2001:df0:ed00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:ee00::,2001:df0:ee00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:ef00::,2001:df0:ef00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:f000::,2001:df0:f000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:f100::,2001:df0:f100:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:f200::,2001:df0:f200:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:f300::,2001:df0:f300:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:f400::,2001:df0:f401:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:f500::,2001:df0:f500:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:f600::,2001:df0:f600:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:f700::,2001:df0:f700:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:f800::,2001:df0:f800:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:f900::,2001:df0:f900:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:fa00::,2001:df0:fa00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:fb00::,2001:df0:fb00:ffff:ffff:ffff:ffff:ffff,ID 2001:df0:fc00::,2001:df0:fc01:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:fd00::,2001:df0:fd00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:fe00::,2001:df0:fe00:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:ff00::,2001:df0:ff00:ffff:ffff:ffff:ffff:ffff,PH +2001:df1:100::,2001:df1:100:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:200::,2001:df1:200:ffff:ffff:ffff:ffff:ffff,NZ +2001:df1:300::,2001:df1:300:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:400::,2001:df1:400:ffff:ffff:ffff:ffff:ffff,BD +2001:df1:500::,2001:df1:500:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:600::,2001:df1:600:ffff:ffff:ffff:ffff:ffff,HK +2001:df1:700::,2001:df1:700:ffff:ffff:ffff:ffff:ffff,BD 2001:df1:800::,2001:df1:801:ffff:ffff:ffff:ffff:ffff,SG +2001:df1:900::,2001:df1:900:ffff:ffff:ffff:ffff:ffff,PH 2001:df1:a00::,2001:df1:a00:ffff:ffff:ffff:ffff:ffff,NZ +2001:df1:b00::,2001:df1:b00:ffff:ffff:ffff:ffff:ffff,PG 2001:df1:c00::,2001:df1:c00:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:e00::,2001:df1:e00:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:1200::,2001:df1:1200:ffff:ffff:ffff:ffff:ffff,ID @@ -4472,6 +4540,7 @@ 2001:df5:7800::,2001:df5:7800:ffff:ffff:ffff:ffff:ffff,CN 2001:df5:7a00::,2001:df5:7a00:ffff:ffff:ffff:ffff:ffff,SG 2001:df5:7c00::,2001:df5:7c00:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:7e00::,2001:df5:7e00:ffff:ffff:ffff:ffff:ffff,BD 2001:df5:8000::,2001:df5:8000:ffff:ffff:ffff:ffff:ffff,SG 2001:df5:8200::,2001:df5:8200:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:8400::,2001:df5:8400:ffff:ffff:ffff:ffff:ffff,SG @@ -4669,7 +4738,6 @@ 2001:df7:1600::,2001:df7:1600:ffff:ffff:ffff:ffff:ffff,HK 2001:df7:1a00::,2001:df7:1a00:ffff:ffff:ffff:ffff:ffff,ID 2001:df7:1c00::,2001:df7:1c00:ffff:ffff:ffff:ffff:ffff,ID -2001:df7:1e00::,2001:df7:1e00:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:2000::,2001:df7:2000:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:2200::,2001:df7:2200:ffff:ffff:ffff:ffff:ffff,TH 2001:df7:2400::,2001:df7:2400:ffff:ffff:ffff:ffff:ffff,AU @@ -5155,9 +5223,9 @@ 2001:1b20::,2001:1b20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:1b28::,2001:1b28:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:1b30::,2001:1b37:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:1b38::,2001:1b38:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:1b38::,2001:1b3f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1b40::,2001:1b40:ffff:ffff:ffff:ffff:ffff:ffff,GB -2001:1b48::,2001:1b48:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:1b48::,2001:1b4f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1b50::,2001:1b57:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:1b58::,2001:1b58:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1b60::,2001:1b67:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -5557,8 +5625,12 @@ 2001:43f8:cc0::,2001:43f8:ccf:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:ce0::,2001:43f8:ce0:ffff:ffff:ffff:ffff:ffff,TZ 2001:43f8:cf0::,2001:43f8:cf1:ffff:ffff:ffff:ffff:ffff,SN +2001:43f8:d00::,2001:43f8:d00:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:d10::,2001:43f8:d11:ffff:ffff:ffff:ffff:ffff,TG +2001:43f8:d20::,2001:43f8:d2f:ffff:ffff:ffff:ffff:ffff,ZA +2001:43f8:d40::,2001:43f8:d40:ffff:ffff:ffff:ffff:ffff,UG +2001:43f8:d50::,2001:43f8:d50:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:e00::,2001:43f8:eff:ffff:ffff:ffff:ffff:ffff,MU -2001:43f8:a700::,2001:43f8:a700:ffff:ffff:ffff:ffff:ffff,MU 2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN 2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ @@ -5820,7 +5892,7 @@ 2001:4b88::,2001:4b88:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4b90::,2001:4b90:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4b98::,2001:4b9f:ffff:ffff:ffff:ffff:ffff:ffff,FR -2001:4ba0::,2001:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ba0::,2001:4ba7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4ba8::,2001:4baf:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4bb0::,2001:4bb0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:4bb8::,2001:4bb8:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -5857,16 +5929,14 @@ 2001:4c88::,2001:4c88:ffff:ffff:ffff:ffff:ffff:ffff,IR 2001:4c90::,2001:4c97:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:4c98::,2001:4c98:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:4ca0::,2001:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:4ca8::,2001:4ca8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ca0::,2001:4ca8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4cb0::,2001:4cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4cb8::,2001:4cbf:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:4cc0::,2001:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,PT 2001:4cc8::,2001:4cc8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4cd0::,2001:4cd0:ffff:ffff:ffff:ffff:ffff:ffff,IL 2001:4cd8::,2001:4cd8:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:4ce0::,2001:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:4ce8::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ce0::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4d00::,2001:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AM 2001:4d08::,2001:4d08:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4d10::,2001:4d10:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -5890,7 +5960,9 @@ 2001:4dc8::,2001:4dc8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4dd0::,2001:4dd7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4dd8::,2001:4dd8:ffff:ffff:ffff:ffff:ffff:ffff,NO -2001:4de0::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4de0::,2001:4de0:4ff:ffff:ffff:ffff:ffff:ffff,NL +2001:4de0:500::,2001:4de0:5ff:ffff:ffff:ffff:ffff:ffff,SE +2001:4de0:600::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL 2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -6161,8 +6233,8 @@ 2400:6500:0:7400::,2400:6500::74ff:ffff:ffff:ffff:ffff,KR 2400:6500:0:7500::,2400:6500::75ff:ffff:ffff:ffff:ffff,IN 2400:6500:0:7600::,2400:6500:100:70ff:ffff:ffff:ffff:ffff,SG -2400:6500:100:7100::,2400:6500:100:71ff:ffff:ffff:ffff:ffff,CN -2400:6500:100:7200::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:6500:100:7100::,2400:6500:100:72ff:ffff:ffff:ffff:ffff,CN +2400:6500:100:7300::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:6540::,2400:6540:ffff:ffff:ffff:ffff:ffff:ffff,VN 2400:6580::,2400:6580:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:65c0::,2400:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -6622,8 +6694,7 @@ 2400:cb00:81::,2400:cb00:81:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:82::,2400:cb00:82:ffff:ffff:ffff:ffff:ffff,UA 2400:cb00:83::,2400:cb00:83:ffff:ffff:ffff:ffff:ffff,NO -2400:cb00:84::,2400:cb00:84:ffff:ffff:ffff:ffff:ffff,AU -2400:cb00:85::,2400:cb00:85:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:84::,2400:cb00:85:ffff:ffff:ffff:ffff:ffff,AU 2400:cb00:86::,2400:cb00:86:ffff:ffff:ffff:ffff:ffff,TH 2400:cb00:87::,2400:cb00:87:ffff:ffff:ffff:ffff:ffff,RU 2400:cb00:88::,2400:cb00:88:ffff:ffff:ffff:ffff:ffff,GR @@ -6641,7 +6712,9 @@ 2400:cb00:105::,2400:cb00:105:ffff:ffff:ffff:ffff:ffff,CW 2400:cb00:106::,2400:cb00:106:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:107::,2400:cb00:107:ffff:ffff:ffff:ffff:ffff,PT -2400:cb00:108::,2400:cb00:112:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:108::,2400:cb00:110:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:111::,2400:cb00:111:ffff:ffff:ffff:ffff:ffff,LK +2400:cb00:112::,2400:cb00:112:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:113::,2400:cb00:113:ffff:ffff:ffff:ffff:ffff,ZA 2400:cb00:114::,2400:cb00:114:ffff:ffff:ffff:ffff:ffff,AT 2400:cb00:115::,2400:cb00:116:ffff:ffff:ffff:ffff:ffff,US @@ -6650,7 +6723,8 @@ 2400:cb00:120::,2400:cb00:120:ffff:ffff:ffff:ffff:ffff,RS 2400:cb00:121::,2400:cb00:121:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:122::,2400:cb00:122:ffff:ffff:ffff:ffff:ffff,DJ -2400:cb00:123::,2400:cb00:125:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:123::,2400:cb00:123:ffff:ffff:ffff:ffff:ffff,HU +2400:cb00:124::,2400:cb00:125:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:126::,2400:cb00:126:ffff:ffff:ffff:ffff:ffff,IT 2400:cb00:127::,2400:cb00:127:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:128::,2400:cb00:128:ffff:ffff:ffff:ffff:ffff,SE @@ -6797,65 +6871,127 @@ 2400:f000::,2400:f000:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:f040::,2400:f040:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:f080::,2400:f080:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:f0c0::,2400:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,NP 2400:f100::,2400:f100:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:f140::,2400:f140:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:f180::,2400:f180:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:f1c0::,2400:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,MM 2400:f200::,2400:f200:ffff:ffff:ffff:ffff:ffff:ffff,PH +2400:f240::,2400:f240:ffff:ffff:ffff:ffff:ffff:ffff,MM 2400:f280::,2400:f280:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:f2c0::,2400:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,PH 2400:f300::,2400:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:f340::,2400:f340:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:f380::,2400:f380:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:f3c0::,2400:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:f400::,2400:f400:ffff:ffff:ffff:ffff:ffff:ffff,JP +2400:f440::,2400:f440:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:f480::,2400:f480:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:f4c0::,2400:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,TH +2400:f540::,2400:f540:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:f580::,2400:f580:ffff:ffff:ffff:ffff:ffff:ffff,ID +2400:f5c0::,2400:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:f600::,2400:f600:ffff:ffff:ffff:ffff:ffff:ffff,PH +2400:f640::,2400:f640:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:f680::,2400:f680:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:f6c0::,2400:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,NP 2400:f700::,2400:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:f740::,2400:f740:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:f780::,2400:f780:ffff:ffff:ffff:ffff:ffff:ffff,IN +2400:f7c0::,2400:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:f800::,2400:f800:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:f840::,2400:f840:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:f880::,2400:f880:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:f8c0::,2400:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:f900::,2400:f900:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:f940::,2400:f940:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:f980::,2400:f980:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:f9c0::,2400:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:fa00::,2400:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:fa40::,2400:fa40:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:fa80::,2400:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:fac0::,2400:fac0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:fb00::,2400:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2400:fb40::,2400:fb40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:fb80::,2400:fb80:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:fbc0::,2400:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:fc00::,2400:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2400:fc40::,2400:fc40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:fc80::,2400:fc80:ffff:ffff:ffff:ffff:ffff:ffff,TW +2400:fcc0::,2400:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:fd00::,2400:fd00:ffff:ffff:ffff:ffff:ffff:ffff,BD +2400:fd40::,2400:fd40:ffff:ffff:ffff:ffff:ffff:ffff,SC 2400:fd80::,2400:fd80:ffff:ffff:ffff:ffff:ffff:ffff,KR +2400:fdc0::,2400:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:fe00::,2400:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2400:fe40::,2400:fe40:ffff:ffff:ffff:ffff:ffff:ffff,MM 2400:fe80::,2400:fe80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:fec0::,2400:fec0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:ff00::,2400:ff00:ffff:ffff:ffff:ffff:ffff:ffff,LK +2400:ff40::,2400:ff40:ffff:ffff:ffff:ffff:ffff:ffff,AU +2400:ffc0::,2400:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401::,2401:1:ffff:ffff:ffff:ffff:ffff:ffff,PK +2401:40::,2401:40:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:80::,2401:80:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:c0::,2401:c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:100::,2401:100:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:140::,2401:140:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:180::,2401:180:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:1c0::,2401:1c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:200::,2401:200:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:240::,2401:240:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:280::,2401:280:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:2c0::,2401:2c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:300::,2401:300:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:340::,2401:340:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:380::,2401:380:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:3c0::,2401:3c0:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:400::,2401:403:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:440::,2401:440:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:4c0::,2401:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:4c1:c202:1193:f0a8:d737:3761:2b87,2401:4c1:c202:1193:f0a8:d737:3761:2b87,US 2401:500::,2401:500:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:540::,2401:540:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:580::,2401:580:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:5c0::,2401:5c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2401:600::,2401:600:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:640::,2401:640:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:680::,2401:680:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:6c0::,2401:6c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:700::,2401:700:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:740::,2401:740:ffff:ffff:ffff:ffff:ffff:ffff,PH 2401:780::,2401:780:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:7c0::,2401:7c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:800::,2401:800:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:840::,2401:840:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:880::,2401:880:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:8c0::,2401:8c0:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:900::,2401:900:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:940::,2401:940:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:980::,2401:980:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:9c0::,2401:9c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:a00::,2401:a00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:a40::,2401:a40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:a80::,2401:a80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:ac0::,2401:ac0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b00::,2401:b00:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:b40::,2401:b40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b80::,2401:b80:ffff:ffff:ffff:ffff:ffff:ffff,PH +2401:bc0::,2401:bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:c00::,2401:c00:ffff:ffff:ffff:ffff:ffff:ffff,NC +2401:c40::,2401:c40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:c80::,2401:c80:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:cc0::,2401:cc0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:d00::,2401:d00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:d40::,2401:d40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:d80::,2401:d80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:dc0::,2401:dc0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:e00::,2401:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:e40::,2401:e40:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:e80::,2401:e80:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:ec0::,2401:ec0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:f00::,2401:f00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:f40::,2401:f40:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:f80::,2401:f80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:1000::,2401:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:1100::,2401:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -6864,7 +7000,6 @@ 2401:1300::,2401:1300:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:1380::,2401:1380:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:1400::,2401:1400:ffff:ffff:ffff:ffff:ffff:ffff,AU -2401:1480::,2401:1480:ffff:ffff:ffff:ffff:ffff:ffff,KH 2401:1500::,2401:1500:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:1580::,2401:1580:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:1600::,2401:1600:ffff:ffff:ffff:ffff:ffff:ffff,PH @@ -7310,7 +7445,8 @@ 2401:fa00:11:8000::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:12::,2401:fa00:12:ffff:ffff:ffff:ffff:ffff,NZ 2401:fa00:13::,2401:fa00:13:ffff:ffff:ffff:ffff:ffff,HK -2401:fa00:14::,2401:fa00:17:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:14::,2401:fa00:16:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:17::,2401:fa00:17:ffff:ffff:ffff:ffff:ffff,KR 2401:fa00:18::,2401:fa00:18:7fff:ffff:ffff:ffff:ffff,PH 2401:fa00:18:8000::,2401:fa00:18:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:19::,2401:fa00:19:ffff:ffff:ffff:ffff:ffff,TH @@ -7378,7 +7514,6 @@ 2402:1200::,2402:1200:ffff:ffff:ffff:ffff:ffff:ffff,ID 2402:1280::,2402:1280:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:1300::,2402:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU -2402:1380::,2402:1380:ffff:ffff:ffff:ffff:ffff:ffff,BD 2402:1400::,2402:1400:ffff:ffff:ffff:ffff:ffff:ffff,JP 2402:1500::,2402:1500:ffff:ffff:ffff:ffff:ffff:ffff,HK 2402:1580::,2402:1580:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -7514,7 +7649,6 @@ 2402:5900::,2402:5900:ffff:ffff:ffff:ffff:ffff:ffff,SG 2402:5980::,2402:5980:ffff:ffff:ffff:ffff:ffff:ffff,SG 2402:5a00::,2402:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP -2402:5a80::,2402:5a80:ffff:ffff:ffff:ffff:ffff:ffff,PG 2402:5b00::,2402:5b00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2402:5b80::,2402:5b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2402:5c00::,2402:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -7564,7 +7698,6 @@ 2402:7300::,2402:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK 2402:7380::,2402:7380:7ff:ffff:ffff:ffff:ffff:ffff,JP 2402:7380:800::,2402:7380:fff:ffff:ffff:ffff:ffff:ffff,HK -2402:7380:1000::,2402:7380:ffff:ffff:ffff:ffff:ffff:ffff,CN 2402:7400::,2402:7400:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:7480::,2402:7481:ffff:ffff:ffff:ffff:ffff:ffff,SG 2402:7500::,2402:7500:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -7601,7 +7734,6 @@ 2402:8400::,2402:8400:ffff:ffff:ffff:ffff:ffff:ffff,IN 2402:8480::,2402:8480:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:8500::,2402:8500:ffff:ffff:ffff:ffff:ffff:ffff,AU -2402:8580::,2402:8580:ffff:ffff:ffff:ffff:ffff:ffff,HK 2402:8600::,2402:8600:ffff:ffff:ffff:ffff:ffff:ffff,ID 2402:8680::,2402:8680:ffff:ffff:ffff:ffff:ffff:ffff,IN 2402:8700::,2402:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -7650,7 +7782,9 @@ 2402:9e80::,2402:9e80:13:ffff:ffff:ffff:ffff:ffff,HK 2402:9e80:14::,2402:9e80:14:ffff:ffff:ffff:ffff:ffff,VN 2402:9e80:15::,2402:9e80:15:ffff:ffff:ffff:ffff:ffff,US -2402:9e80:16::,2402:9e80:ffff:ffff:ffff:ffff:ffff:ffff,HK +2402:9e80:16::,2402:9e80:18:ffff:ffff:ffff:ffff:ffff,HK +2402:9e80:19::,2402:9e80:19:ffff:ffff:ffff:ffff:ffff,KR +2402:9e80:1a::,2402:9e80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2402:9f00::,2402:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:9f80::,2402:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2402:a000::,2402:a000:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -8469,7 +8603,6 @@ 2404:2a80:15::,2404:2a80:15:ffff:ffff:ffff:ffff:ffff,US 2404:2a80:16::,2404:2a80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:2b00::,2404:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2404:2b80::,2404:2b80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:2c00::,2404:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NP 2404:2c80::,2404:2c80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:2d00::,2404:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -8559,10 +8692,11 @@ 2404:5a80::,2404:5a80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:5b00::,2404:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:5b80::,2404:5b80:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2404:5c00::,2404:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:5c80::,2404:5c80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:5d00::,2404:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN -2404:5d80::,2404:5d80:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:5d80::,2404:5d80:5fff:ffff:ffff:ffff:ffff:ffff,JP +2404:5d80:6000::,2404:5d80:60ff:ffff:ffff:ffff:ffff:ffff,AU +2404:5d80:6100::,2404:5d80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:5e00::,2404:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:5e80::,2404:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:5f00::,2404:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -8614,7 +8748,6 @@ 2404:7400::,2404:7400:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:7480::,2404:7480:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:7500::,2404:7500:ffff:ffff:ffff:ffff:ffff:ffff,BD -2404:7580::,2404:7580:ffff:ffff:ffff:ffff:ffff:ffff,PK 2404:7600::,2404:7600:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:7680::,2404:7680:ffff:ffff:ffff:ffff:ffff:ffff,PK 2404:7700::,2404:7700:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -8635,7 +8768,6 @@ 2404:7f00::,2404:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:7f80::,2404:7f80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:8000::,2404:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID -2404:8080::,2404:8081:ffff:ffff:ffff:ffff:ffff:ffff,US 2404:8100::,2404:8100:ffff:ffff:ffff:ffff:ffff:ffff,MY 2404:8180::,2404:8180:ffff:ffff:ffff:ffff:ffff:ffff,PK 2404:8200::,2404:8200:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -8903,7 +9035,9 @@ 2405:80::,2405:80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:100::,2405:100:ffff:ffff:ffff:ffff:ffff:ffff,ID 2405:180::,2405:180:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:200::,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN +2405:200::,2405:205:4204:563c::1e49:20a4,IN +2405:205:4204:563c::1e49:20a5,2405:205:4204:563c::1e49:20a5,US +2405:205:4204:563c::1e49:20a6,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:400::,2405:400:ffff:ffff:ffff:ffff:ffff:ffff,MH 2405:480::,2405:480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:500::,2405:500:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -8985,7 +9119,9 @@ 2405:2000:2200::,2405:2000:2200:ff:ffff:ffff:ffff:ffff,MY 2405:2000:2200:100::,2405:2000:22ff:ffff:ffff:ffff:ffff:ffff,IN 2405:2000:2300::,2405:2000:2300:ff:ffff:ffff:ffff:ffff,MY -2405:2000:2300:100::,2405:2000:ffc7:ffff:ffff:ffff:ffff:ffff,IN +2405:2000:2300:100::,2405:2000:24ff:ffff:ffff:ffff:ffff:ffff,IN +2405:2000:2500::,2405:2000:2500:ffff:ffff:ffff:ffff:ffff,JP +2405:2000:2501::,2405:2000:ffc7:ffff:ffff:ffff:ffff:ffff,IN 2405:2000:ffc8::,2405:2000:ffc8:ffff:ffff:ffff:ffff:ffff,SG 2405:2000:ffc9::,2405:2001::ffff:ffff:ffff:ffff:ffff,IN 2405:2001:1::,2405:2001:1:ff:ffff:ffff:ffff:ffff,SG @@ -9238,7 +9374,6 @@ 2405:9b00::,2405:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:9b80::,2405:9b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:9c00::,2405:9c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2405:9c80::,2405:9c83:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:9d00::,2405:9d00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:9d80::,2405:9d80:ffff:ffff:ffff:ffff:ffff:ffff,VN 2405:9e00::,2405:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -9914,7 +10049,17 @@ 2406:dafc:a000::,2406:dafc:a0ff:ffff:ffff:ffff:ffff:ffff,IN 2406:dafc:a100::,2406:dafc:bfff:ffff:ffff:ffff:ffff:ffff,US 2406:dafc:c000::,2406:dafc:c0ff:ffff:ffff:ffff:ffff:ffff,AU -2406:dafc:c100::,2406:daff:ffff:ffff:ffff:ffff:ffff:ffff,US +2406:dafc:c100::,2406:daff:1fff:ffff:ffff:ffff:ffff:ffff,US +2406:daff:2000::,2406:daff:20ff:ffff:ffff:ffff:ffff:ffff,KR +2406:daff:2100::,2406:daff:3fff:ffff:ffff:ffff:ffff:ffff,US +2406:daff:4000::,2406:daff:40ff:ffff:ffff:ffff:ffff:ffff,JP +2406:daff:4100::,2406:daff:7fff:ffff:ffff:ffff:ffff:ffff,US +2406:daff:8000::,2406:daff:80ff:ffff:ffff:ffff:ffff:ffff,SG +2406:daff:8100::,2406:daff:9fff:ffff:ffff:ffff:ffff:ffff,US +2406:daff:a000::,2406:daff:a0ff:ffff:ffff:ffff:ffff:ffff,IN +2406:daff:a100::,2406:daff:bfff:ffff:ffff:ffff:ffff:ffff,US +2406:daff:c000::,2406:daff:c0ff:ffff:ffff:ffff:ffff:ffff,AU +2406:daff:c100::,2406:daff:ffff:ffff:ffff:ffff:ffff:ffff,US 2406:db00::,2406:db00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2406:db80::,2406:db80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:dc00::,2406:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -10543,7 +10688,11 @@ 2600:1ffc:1000::,2600:1ffc:10ff:ffff:ffff:ffff:ffff:ffff,CA 2600:1ffc:1100::,2600:1ffc:dfff:ffff:ffff:ffff:ffff:ffff,US 2600:1ffc:e000::,2600:1ffc:e0ff:ffff:ffff:ffff:ffff:ffff,BR -2600:1ffc:e100::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US +2600:1ffc:e100::,2600:1fff:fff:ffff:ffff:ffff:ffff:ffff,US +2600:1fff:1000::,2600:1fff:10ff:ffff:ffff:ffff:ffff:ffff,CA +2600:1fff:1100::,2600:1fff:dfff:ffff:ffff:ffff:ffff:ffff,US +2600:1fff:e000::,2600:1fff:e0ff:ffff:ffff:ffff:ffff:ffff,BR +2600:1fff:e100::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2100::,2600:210f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2200::,2600:220f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2300::,2600:230f:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10573,7 +10722,7 @@ 2600:7000::,2600:70ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:7400::,2600:740f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:7800::,2600:780f:ffff:ffff:ffff:ffff:ffff:ffff,US -2600:7c00::,2600:7c0f:ffff:ffff:ffff:ffff:ffff:ffff,VC +2600:7c00::,2600:7c0f:ffff:ffff:ffff:ffff:ffff:ffff,LC 2600:8000::,2600:80ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:8400::,2600:840f:ffff:ffff:ffff:ffff:ffff:ffff,BB 2600:8800::,2600:880f:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10592,6 +10741,17 @@ 2602:233::,2602:233:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:fef4::,2602:fef4:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fef5::,2602:fef5:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fef6::,2602:fef6:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fef7::,2602:fef7:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fef8::,2602:fef8:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fef9::,2602:fef9:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fefa::,2602:fefa:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fefb::,2602:fefb:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fefc::,2602:fefc:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:fefd::,2602:fefd:fff:ffff:ffff:ffff:ffff:ffff,US +2602:fefe::,2602:fefe:fff:ffff:ffff:ffff:ffff:ffff,US 2602:feff::,2602:feff:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff00::,2602:ff00:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff01::,2602:ff01:fff:ffff:ffff:ffff:ffff:ffff,US @@ -11250,29 +11410,55 @@ 2604:2d00::,2604:2d00:fff:ffff:ffff:ffff:ffff:ffff,US 2604:2d40::,2604:2d40:ffff:ffff:ffff:ffff:ffff:ffff,PR 2604:2d80::,2604:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2dc0::,2604:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2e00::,2604:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2e40::,2604:2e40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2e80::,2604:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2ec0::,2604:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2f00::,2604:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2f40::,2604:2f40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2f80::,2604:2f80:ffff:ffff:ffff:ffff:ffff:ffff,CA +2604:2fc0::,2604:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3000::,2604:3000:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3040::,2604:3040:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3080::,2604:3080:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:30c0::,2604:30c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3100::,2604:3100:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3140::,2604:3140:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3180::,2604:3180:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:31c0::,2604:31c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3200::,2604:3200:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3240::,2604:3240:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3280::,2604:3280:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:32c0::,2604:32c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3300::,2604:3300:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3340::,2604:3340:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3380::,2604:3380:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:33c0::,2604:33c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3400::,2604:3400:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3440::,2604:3440:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3480::,2604:3480:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:34c0::,2604:34c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3500::,2604:3500:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3540::,2604:3540:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3580::,2604:3580:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:35c0::,2604:35c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3600::,2604:3600:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3640::,2604:3640:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3680::,2604:3680:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:36c0::,2604:36c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3700::,2604:3700:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3740::,2604:3740:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3780::,2604:3780:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:37c0::,2604:37c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3800::,2604:3800:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3840::,2604:3840:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3880::,2604:3880:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:38c0::,2604:38c0:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3940::,2604:3940:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:39c0::,2604:39c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3a00::,2604:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:3a40::,2604:3a40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:3a80::,2604:3a80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:3b00::,2604:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:3b80::,2604:3b80:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11733,7 +11919,6 @@ 2605:2c00::,2605:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2c80::,2605:2c80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2e00::,2605:2e00:fff:ffff:ffff:ffff:ffff:ffff,CA -2605:2e80::,2605:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2f00::,2605:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:3000::,2605:3000:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:3080::,2605:3080:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12074,7 +12259,6 @@ 2605:e100::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e180::,2605:e180:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e200::,2605:e200:ffff:ffff:ffff:ffff:ffff:ffff,CA -2605:e280::,2605:e280:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e300::,2605:e300:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e380::,2605:e380:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e400::,2605:e400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12149,7 +12333,6 @@ 2605:fe80::,2605:fe80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ff00::,2605:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ff80::,2605:ff80:ffff:ffff:ffff:ffff:ffff:ffff,US -2606::,2606::ffff:ffff:ffff:ffff:ffff:ffff,US 2606:80::,2606:80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:100::,2606:100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:180::,2606:180:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14128,7 +14311,6 @@ 2620:11:e000::,2620:11:e000:ffff:ffff:ffff:ffff:ffff,US 2620:12::,2620:12::ffff:ffff:ffff:ffff:ffff,US 2620:12:2000::,2620:12:2000:ffff:ffff:ffff:ffff:ffff,US -2620:12:4000::,2620:12:4000:ffff:ffff:ffff:ffff:ffff,US 2620:12:6000::,2620:12:6000:ffff:ffff:ffff:ffff:ffff,US 2620:12:8000::,2620:12:8000:ffff:ffff:ffff:ffff:ffff,US 2620:12:a000::,2620:12:a000:ffff:ffff:ffff:ffff:ffff,US @@ -14186,17 +14368,30 @@ 2620:19:4000::,2620:19:4000:ffff:ffff:ffff:ffff:ffff,CA 2620:19:6000::,2620:19:6000:ffff:ffff:ffff:ffff:ffff,US 2620:19:8000::,2620:19:8000:ffff:ffff:ffff:ffff:ffff,US +2620:19:a000::,2620:19:a000:ffff:ffff:ffff:ffff:ffff,US +2620:19:e000::,2620:19:e00f:ffff:ffff:ffff:ffff:ffff,CA 2620:1a::,2620:1a::ffff:ffff:ffff:ffff:ffff,US +2620:1a:2000::,2620:1a:200f:ffff:ffff:ffff:ffff:ffff,US 2620:1a:4000::,2620:1a:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1a:6000::,2620:1a:6000:ffff:ffff:ffff:ffff:ffff,CA 2620:1a:8000::,2620:1a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1a:a000::,2620:1a:a000:ffff:ffff:ffff:ffff:ffff,US 2620:1a:c000::,2620:1a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1a:e000::,2620:1a:e000:ffff:ffff:ffff:ffff:ffff,US 2620:1b::,2620:1b:f:ffff:ffff:ffff:ffff:ffff,US +2620:1b:2000::,2620:1b:2000:ffff:ffff:ffff:ffff:ffff,US 2620:1b:4000::,2620:1b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1b:6000::,2620:1b:6000:ffff:ffff:ffff:ffff:ffff,US 2620:1b:8000::,2620:1b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1b:a000::,2620:1b:a000:ffff:ffff:ffff:ffff:ffff,US 2620:1b:c000::,2620:1b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1b:e000::,2620:1b:e000:ffff:ffff:ffff:ffff:ffff,US 2620:1c::,2620:1c::ffff:ffff:ffff:ffff:ffff,US +2620:1c:2000::,2620:1c:2000:ffff:ffff:ffff:ffff:ffff,US 2620:1c:4000::,2620:1c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1c:6000::,2620:1c:6000:ffff:ffff:ffff:ffff:ffff,US 2620:1c:8000::,2620:1c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1c:a000::,2620:1c:a000:ffff:ffff:ffff:ffff:ffff,US 2620:1c:c000::,2620:1c:c000:ffff:ffff:ffff:ffff:ffff,US 2620:1d::,2620:1d:f:ffff:ffff:ffff:ffff:ffff,US 2620:1d:4000::,2620:1d:4000:ffff:ffff:ffff:ffff:ffff,US @@ -14340,7 +14535,6 @@ 2620:40:8000::,2620:40:8000:ffff:ffff:ffff:ffff:ffff,US 2620:40:c000::,2620:40:c000:ffff:ffff:ffff:ffff:ffff,US 2620:41::,2620:41:1:ffff:ffff:ffff:ffff:ffff,US -2620:41:4000::,2620:41:4000:ffff:ffff:ffff:ffff:ffff,US 2620:41:8000::,2620:41:8000:ffff:ffff:ffff:ffff:ffff,US 2620:42::,2620:42::ffff:ffff:ffff:ffff:ffff,US 2620:42:4000::,2620:42:4000:ffff:ffff:ffff:ffff:ffff,US @@ -14391,7 +14585,6 @@ 2620:4e::,2620:4e::ffff:ffff:ffff:ffff:ffff,US 2620:4e:4000::,2620:4e:4000:ffff:ffff:ffff:ffff:ffff,CA 2620:4e:8000::,2620:4e:8000:ffff:ffff:ffff:ffff:ffff,US -2620:4e:c000::,2620:4e:c000:ffff:ffff:ffff:ffff:ffff,US 2620:4f::,2620:4f::ffff:ffff:ffff:ffff:ffff,US 2620:4f:4000::,2620:4f:4000:ffff:ffff:ffff:ffff:ffff,US 2620:4f:8000::,2620:4f:8000:ffff:ffff:ffff:ffff:ffff,US @@ -14717,7 +14910,7 @@ 2620:a3:c020::,2620:a3:c020:ffff:ffff:ffff:ffff:ffff,US 2620:a3:e030::,2620:a3:e030:ffff:ffff:ffff:ffff:ffff,US 2620:a4:40::,2620:a4:40:ffff:ffff:ffff:ffff:ffff,US -2620:a4:2050::,2620:a4:2050:ffff:ffff:ffff:ffff:ffff,US +2620:a4:2050::,2620:a4:205f:ffff:ffff:ffff:ffff:ffff,US 2620:a4:4060::,2620:a4:4060:ffff:ffff:ffff:ffff:ffff,US 2620:a4:6070::,2620:a4:6070:ffff:ffff:ffff:ffff:ffff,US 2620:a4:8080::,2620:a4:8080:ffff:ffff:ffff:ffff:ffff,US @@ -15169,7 +15362,6 @@ 2620:105:a000::,2620:105:a00f:ffff:ffff:ffff:ffff:ffff,US 2620:105:b000::,2620:105:b0ff:ffff:ffff:ffff:ffff:ffff,US 2620:105:c000::,2620:105:c00f:ffff:ffff:ffff:ffff:ffff,US -2620:105:d000::,2620:105:d0ff:ffff:ffff:ffff:ffff:ffff,US 2620:105:e000::,2620:105:e0ff:ffff:ffff:ffff:ffff:ffff,US 2620:105:f000::,2620:105:f0ff:ffff:ffff:ffff:ffff:ffff,US 2620:106::,2620:106:f:ffff:ffff:ffff:ffff:ffff,US @@ -15822,6 +16014,21 @@ 2620:12e:3000::,2620:12e:300f:ffff:ffff:ffff:ffff:ffff,US 2620:12e:4000::,2620:12e:400f:ffff:ffff:ffff:ffff:ffff,US 2620:12e:5000::,2620:12e:50ff:ffff:ffff:ffff:ffff:ffff,US +2620:12e:6000::,2620:12e:60ff:ffff:ffff:ffff:ffff:ffff,US +2620:12e:7000::,2620:12e:700f:ffff:ffff:ffff:ffff:ffff,US +2620:12e:8000::,2620:12e:80ff:ffff:ffff:ffff:ffff:ffff,US +2620:12e:9000::,2620:12e:900f:ffff:ffff:ffff:ffff:ffff,US +2620:12e:a000::,2620:12e:a0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12e:b000::,2620:12e:b00f:ffff:ffff:ffff:ffff:ffff,US +2620:12e:c000::,2620:12e:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:12e:d000::,2620:12e:d00f:ffff:ffff:ffff:ffff:ffff,US +2620:12e:e000::,2620:12e:e0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12e:f000::,2620:12e:f0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12f::,2620:12f:f:ffff:ffff:ffff:ffff:ffff,US +2620:12f:1000::,2620:12f:100f:ffff:ffff:ffff:ffff:ffff,US +2620:12f:2000::,2620:12f:20ff:ffff:ffff:ffff:ffff:ffff,US +2620:12f:3000::,2620:12f:30ff:ffff:ffff:ffff:ffff:ffff,US +2620:12f:4000::,2620:12f:400f:ffff:ffff:ffff:ffff:ffff,US 2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US 2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US 2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US @@ -15851,8 +16058,7 @@ 2620:15c::,2620:15c:4:ffff:ffff:ffff:ffff:ffff,US 2620:15c:5::,2620:15c:5:ffff:ffff:ffff:ffff:ffff,BR 2620:15c:6::,2620:15c:fff:ffff:ffff:ffff:ffff:ffff,US -2620:15e::,2620:15e:fff:ffff:ffff:ffff:ffff:ffff,US -2620:15f::,2620:15f:fff:ffff:ffff:ffff:ffff:ffff,US +2620:15d::,2620:15f:fff:ffff:ffff:ffff:ffff:ffff,US 2620:160::,2620:160:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:162::,2620:162:fff:ffff:ffff:ffff:ffff:ffff,US 2620:163::,2620:163:fff:ffff:ffff:ffff:ffff:ffff,US @@ -15882,6 +16088,7 @@ 2620:183::,2620:183:fff:ffff:ffff:ffff:ffff:ffff,US 2620:184::,2620:184:fff:ffff:ffff:ffff:ffff:ffff,US 2620:185::,2620:185:fff:ffff:ffff:ffff:ffff:ffff,US +2620:186::,2620:186:fff:ffff:ffff:ffff:ffff:ffff,US 2620:190::,2620:190:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1a0::,2620:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1b0::,2620:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -16199,6 +16406,7 @@ 2801:10::,2801:10:7:ffff:ffff:ffff:ffff:ffff,AR 2801:10:1000::,2801:10:1000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:2000::,2801:10:2000:ffff:ffff:ffff:ffff:ffff,AR +2801:10:3000::,2801:10:3000:ffff:ffff:ffff:ffff:ffff,CO 2801:10:4000::,2801:10:4000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:5000::,2801:10:5000:ffff:ffff:ffff:ffff:ffff,BO 2801:10:6000::,2801:10:6000:ffff:ffff:ffff:ffff:ffff,HN @@ -16246,6 +16454,7 @@ 2801:14::,2801:14::ffff:ffff:ffff:ffff:ffff,CO 2801:14:1000::,2801:14:1000:ffff:ffff:ffff:ffff:ffff,CL 2801:14:2000::,2801:14:2000:ffff:ffff:ffff:ffff:ffff,AR +2801:14:3000::,2801:14:3000:ffff:ffff:ffff:ffff:ffff,CO 2801:14:5000::,2801:14:5000:ffff:ffff:ffff:ffff:ffff,NI 2801:14:6000::,2801:14:6000:ffff:ffff:ffff:ffff:ffff,BO 2801:14:8000::,2801:14:8000:ffff:ffff:ffff:ffff:ffff,CO @@ -16288,10 +16497,12 @@ 2801:17:9000::,2801:17:9000:ffff:ffff:ffff:ffff:ffff,PA 2801:17:a000::,2801:17:a000:ffff:ffff:ffff:ffff:ffff,HT 2801:17:c000::,2801:17:c000:ffff:ffff:ffff:ffff:ffff,PA +2801:17:d000::,2801:17:d000:ffff:ffff:ffff:ffff:ffff,CO 2801:17:e000::,2801:17:e000:ffff:ffff:ffff:ffff:ffff,AR 2801:18::,2801:18::ffff:ffff:ffff:ffff:ffff,CR 2801:18:1000::,2801:18:1000:ffff:ffff:ffff:ffff:ffff,PA 2801:18:2000::,2801:18:2000:ffff:ffff:ffff:ffff:ffff,CO +2801:18:3000::,2801:18:3000:ffff:ffff:ffff:ffff:ffff,CO 2801:18:5000::,2801:18:5000:ffff:ffff:ffff:ffff:ffff,CO 2801:18:6000::,2801:18:6000:ffff:ffff:ffff:ffff:ffff,AR 2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR @@ -16331,10 +16542,12 @@ 2801:1b:9000::,2801:1b:9000:ffff:ffff:ffff:ffff:ffff,CL 2801:1b:a000::,2801:1b:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:1b:c000::,2801:1b:c000:ffff:ffff:ffff:ffff:ffff,PA +2801:1b:d000::,2801:1b:d000:ffff:ffff:ffff:ffff:ffff,CO 2801:1b:e000::,2801:1b:e000:ffff:ffff:ffff:ffff:ffff,NI 2801:1c::,2801:1c::ffff:ffff:ffff:ffff:ffff,PY -2801:1c:1000::,2801:1c:1000:ffff:ffff:ffff:ffff:ffff,PE +2801:1c:1000::,2801:1c:1000:ffff:ffff:ffff:ffff:ffff,AR 2801:1c:2000::,2801:1c:2000:ffff:ffff:ffff:ffff:ffff,PE +2801:1c:3000::,2801:1c:3000:ffff:ffff:ffff:ffff:ffff,SV 2801:1c:4000::,2801:1c:4000:ffff:ffff:ffff:ffff:ffff,CO 2801:1c:5000::,2801:1c:5000:ffff:ffff:ffff:ffff:ffff,CL 2801:1c:6000::,2801:1c:6000:ffff:ffff:ffff:ffff:ffff,PA @@ -16375,6 +16588,7 @@ 2801:1f:9000::,2801:1f:9000:ffff:ffff:ffff:ffff:ffff,AR 2801:1f:a000::,2801:1f:a000:ffff:ffff:ffff:ffff:ffff,CL 2801:1f:c000::,2801:1f:c000:ffff:ffff:ffff:ffff:ffff,CR +2801:1f:d000::,2801:1f:d000:ffff:ffff:ffff:ffff:ffff,CO 2801:1f:e000::,2801:1f:e000:ffff:ffff:ffff:ffff:ffff,AR 2801:80::,2801:80::ffff:ffff:ffff:ffff:ffff,BR 2801:80:10::,2801:80:10:ffff:ffff:ffff:ffff:ffff,BR @@ -16717,6 +16931,10 @@ 2801:80:1c40::,2801:80:1c4f:ffff:ffff:ffff:ffff:ffff,BR 2801:80:1c60::,2801:80:1c60:ffff:ffff:ffff:ffff:ffff,BR 2801:80:1c70::,2801:80:1c70:ffff:ffff:ffff:ffff:ffff,BR +2801:80:1c80::,2801:80:1c80:ffff:ffff:ffff:ffff:ffff,BR +2801:80:1c90::,2801:80:1c90:ffff:ffff:ffff:ffff:ffff,BR +2801:80:1ca0::,2801:80:1ca0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:1cb0::,2801:80:1cb0:ffff:ffff:ffff:ffff:ffff,BR 2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -16775,6 +16993,7 @@ 2801:110::,2801:110:1fff:ffff:ffff:ffff:ffff:ffff,CO 2801:118::,2801:118:ff:ffff:ffff:ffff:ffff:ffff,AR 2801:120::,2801:120:ffff:ffff:ffff:ffff:ffff:ffff,AR +2801:124::,2801:124:f:ffff:ffff:ffff:ffff:ffff,CO 2801:128::,2801:128:fff:ffff:ffff:ffff:ffff:ffff,UY 2801:130::,2801:130:fff:ffff:ffff:ffff:ffff:ffff,CO 2801:138::,2801:138:ff:ffff:ffff:ffff:ffff:ffff,PA @@ -16797,6 +17016,7 @@ 2801:1b0::,2801:1b0:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:1b8::,2801:1b8:f:ffff:ffff:ffff:ffff:ffff,UY 2801:1c0::,2801:1c0:1ff:ffff:ffff:ffff:ffff:ffff,AR +2801:1c4::,2801:1c4:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1c8::,2801:1c8:fff:ffff:ffff:ffff:ffff:ffff,CO 2801:1d0::,2801:1d0:f:ffff:ffff:ffff:ffff:ffff,CO 2801:1d8::,2801:1d8:fff:ffff:ffff:ffff:ffff:ffff,CO @@ -16840,6 +17060,7 @@ 2803:500::,2803:500:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:540::,2803:540:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:580::,2803:580:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:5c0::,2803:5c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:600::,2803:600:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:640::,2803:640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:680::,2803:680:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -16854,6 +17075,7 @@ 2803:900::,2803:900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:940::,2803:940:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:980::,2803:980:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:9c0::,2803:9c0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a40::,2803:a40:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -16911,6 +17133,7 @@ 2803:1840::,2803:1840:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1900::,2803:1900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1940::,2803:1940:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:19c0::,2803:19c0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:1a00::,2803:1a00:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1a40::,2803:1a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -16966,6 +17189,7 @@ 2803:2900::,2803:2900:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:2940::,2803:2940:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:2980::,2803:2980:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:29c0::,2803:29c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2a00::,2803:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:2a40::,2803:2a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2a80::,2803:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -17022,6 +17246,7 @@ 2803:3900::,2803:3900:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:3940::,2803:3940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3980::,2803:3980:ffff:ffff:ffff:ffff:ffff:ffff,VE +2803:39c0::,2803:39c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3a00::,2803:3a00:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:3a40::,2803:3a40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3a80::,2803:3a80:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -17065,6 +17290,7 @@ 2803:4500::,2803:4500:ffff:ffff:ffff:ffff:ffff:ffff,CW 2803:4540::,2803:4540:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4580::,2803:4580:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:45c0::,2803:45c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:4640::,2803:4640:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4680::,2803:4680:ffff:ffff:ffff:ffff:ffff:ffff,TT @@ -17079,6 +17305,7 @@ 2803:4900::,2803:4900:ffff:ffff:ffff:ffff:ffff:ffff,BQ 2803:4940::,2803:4940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4980::,2803:4980:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:49c0::,2803:49c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4a40::,2803:4a40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4a80::,2803:4a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4ac0::,2803:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,BO @@ -17134,6 +17361,7 @@ 2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GF 2803:5940::,2803:5940:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:5980::,2803:5980:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:59c0::,2803:59c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:5a00::,2803:5a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5a40::,2803:5a40:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:5a80::,2803:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -17189,6 +17417,7 @@ 2803:6900::,2803:6900:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:6940::,2803:6940:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:6980::,2803:6980:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:69c0::,2803:69c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:6a40::,2803:6a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6a80::,2803:6a80:ffff:ffff:ffff:ffff:ffff:ffff,NI @@ -17246,6 +17475,7 @@ 2803:7900::,2803:7900:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:7940::,2803:7940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7980::,2803:7980:ffff:ffff:ffff:ffff:ffff:ffff,VE +2803:79c0::,2803:79c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7a00::,2803:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:7a40::,2803:7a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7a80::,2803:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -17289,6 +17519,7 @@ 2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8540::,2803:8540:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8580::,2803:8580:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:85c0::,2803:85c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8600::,2803:8600:ffff:ffff:ffff:ffff:ffff:ffff,HT 2803:8640::,2803:8640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8680::,2803:8680:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -17303,6 +17534,7 @@ 2803:8900::,2803:8900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8940::,2803:8940:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8980::,2803:8980:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:89c0::,2803:89c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:8a40::,2803:8a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8ac0::,2803:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -17358,6 +17590,7 @@ 2803:9900::,2803:9900:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:9940::,2803:9940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9980::,2803:9980:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:99c0::,2803:99c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9a00::,2803:9a00:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:9a40::,2803:9a40:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -17414,6 +17647,7 @@ 2803:a900::,2803:a900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a940::,2803:a940:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:a980::,2803:a980:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:a9c0::,2803:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:aa00::,2803:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:aa40::,2803:aa40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:aa80::,2803:aa80:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -17469,6 +17703,7 @@ 2803:b8c0::,2803:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b900::,2803:b900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b940::,2803:b940:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:b9c0::,2803:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:ba40::,2803:ba40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ba80::,2803:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -17512,6 +17747,7 @@ 2803:c500::,2803:c500:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c540::,2803:c540:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:c580::,2803:c580:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:c5c0::,2803:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:c640::,2803:c640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c680::,2803:c680:ffff:ffff:ffff:ffff:ffff:ffff,HT @@ -17526,6 +17762,7 @@ 2803:c900::,2803:c900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c940::,2803:c940:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:c980::,2803:c980:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:c9c0::,2803:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca00::,2803:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca40::,2803:ca40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca80::,2803:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -17584,6 +17821,7 @@ 2803:d900::,2803:d900:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:d940::,2803:d940:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d980::,2803:d980:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:d9c0::,2803:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:da00::,2803:da00:ffff:ffff:ffff:ffff:ffff:ffff,GY 2803:da40::,2803:da40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:da80::,2803:da80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -17640,6 +17878,7 @@ 2803:e8c0::,2803:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:e900::,2803:e900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e940::,2803:e940:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:e9c0::,2803:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea00::,2803:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea40::,2803:ea40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea80::,2803:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -17697,6 +17936,7 @@ 2803:f900::,2803:f900:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:f940::,2803:f940:ffff:ffff:ffff:ffff:ffff:ffff,SX 2803:f980::,2803:f980:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:f9c0::,2803:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:fa40::,2803:fa40:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -21388,6 +21628,111 @@ 2804:3b1c::,2804:3b1c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3b20::,2804:3b20:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3b24::,2804:3b24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b28::,2804:3b28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b2c::,2804:3b2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b30::,2804:3b30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b34::,2804:3b34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b38::,2804:3b38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b3c::,2804:3b3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b40::,2804:3b40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b44::,2804:3b44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b48::,2804:3b48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b4c::,2804:3b4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b50::,2804:3b50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b54::,2804:3b54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b58::,2804:3b58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b5c::,2804:3b5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b60::,2804:3b60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b64::,2804:3b64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b68::,2804:3b68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b6c::,2804:3b6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b70::,2804:3b70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b74::,2804:3b74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b78::,2804:3b78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b7c::,2804:3b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b80::,2804:3b80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b84::,2804:3b84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b88::,2804:3b88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b8c::,2804:3b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b90::,2804:3b90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b94::,2804:3b94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b98::,2804:3b98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3b9c::,2804:3b9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ba0::,2804:3ba0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ba4::,2804:3ba4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ba8::,2804:3ba8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bac::,2804:3bac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bb0::,2804:3bb0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bb4::,2804:3bb4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bb8::,2804:3bb8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bbc::,2804:3bbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bc0::,2804:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bc4::,2804:3bc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bc8::,2804:3bc8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bcc::,2804:3bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bd0::,2804:3bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bd4::,2804:3bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bd8::,2804:3bd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bdc::,2804:3bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3be0::,2804:3be0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3be4::,2804:3be4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3be8::,2804:3be8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bec::,2804:3bec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bf0::,2804:3bf0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bf4::,2804:3bf4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bf8::,2804:3bf8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3bfc::,2804:3bfc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c00::,2804:3c00:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c04::,2804:3c04:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c08::,2804:3c08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c0c::,2804:3c0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c10::,2804:3c10:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c14::,2804:3c14:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c18::,2804:3c18:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c1c::,2804:3c1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c20::,2804:3c20:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c24::,2804:3c24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c28::,2804:3c28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c2c::,2804:3c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c30::,2804:3c30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c34::,2804:3c34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c38::,2804:3c38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c3c::,2804:3c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c40::,2804:3c40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c44::,2804:3c44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c48::,2804:3c48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c4c::,2804:3c4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c50::,2804:3c50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c54::,2804:3c54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c58::,2804:3c58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c5c::,2804:3c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c60::,2804:3c60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c64::,2804:3c64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c68::,2804:3c68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c6c::,2804:3c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c70::,2804:3c70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c74::,2804:3c74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c78::,2804:3c78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c7c::,2804:3c7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c80::,2804:3c80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c84::,2804:3c84:ffff:ffff:ffff:ffff:ffff:ffff,US +2804:3c88::,2804:3c88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c8c::,2804:3c8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c90::,2804:3c90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c94::,2804:3c94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c98::,2804:3c98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3c9c::,2804:3c9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ca0::,2804:3ca0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ca4::,2804:3ca4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3ca8::,2804:3ca8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cac::,2804:3cac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cb0::,2804:3cb0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cb4::,2804:3cb4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cb8::,2804:3cb8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cbc::,2804:3cbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cc0::,2804:3cc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cc4::,2804:3cc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3cc8::,2804:3cc8:ffff:ffff:ffff:ffff:ffff:ffff,BR 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:216::ffff:ffff:ffff:ffff:ffff,MX 2806:217::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -21403,7 +21748,8 @@ 2806:2b0::,2806:2b0:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:2c0::,2806:2c0:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:2d0::,2806:2d0:ffff:ffff:ffff:ffff:ffff:ffff,MX -2806:2e0::,2806:2e1:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:2e0::,2806:2e2:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:2e4::,2806:2e4:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:2f0::,2806:2f0:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:300::,2806:300:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:310::,2806:310:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -21729,7 +22075,7 @@ 2a00:15f0::,2a00:15f0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:15f8::,2a00:15f8:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:1600::,2a00:1607:ffff:ffff:ffff:ffff:ffff:ffff,SI -2a00:1610::,2a00:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a00:1610::,2a00:161f:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a00:1620::,2a00:1620:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:1628::,2a00:1628:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a00:1630::,2a00:1637:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -21925,7 +22271,7 @@ 2a00:1c60::,2a00:1c60:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a00:1c68::,2a00:1c68:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:1c70::,2a00:1c70:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:1c78::,2a00:1c78:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a00:1c78::,2a00:1c7f:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:1c80::,2a00:1c87:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a00:1c88::,2a00:1c88:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:1c90::,2a00:1c90:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -22016,7 +22362,7 @@ 2a00:1f48::,2a00:1f4f:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:1f50::,2a00:1f50:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a00:1f58::,2a00:1f5f:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a00:1f60::,2a00:1f60:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:1f60::,2a00:1f67:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:1f68::,2a00:1f68:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a00:1f70::,2a00:1f70:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:1f78::,2a00:1f7f:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -22301,7 +22647,7 @@ 2a00:6120::,2a00:6120:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a00:6140::,2a00:6140:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:6160::,2a00:6160:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:6180::,2a00:6180:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a00:6180::,2a00:6187:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a00:61a0::,2a00:61a7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:61c0::,2a00:61c7:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a00:61e0::,2a00:61e0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -22509,7 +22855,9 @@ 2a00:79e0:23::,2a00:79e0:23:ffff:ffff:ffff:ffff:ffff,GB 2a00:79e0:24::,2a00:79e0:26:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:27::,2a00:79e0:27:ffff:ffff:ffff:ffff:ffff,NL -2a00:79e0:28::,2a00:79e0:ffe2:4ff:ffff:ffff:ffff:ffff,CH +2a00:79e0:28::,2a00:79e0:30:ffff:ffff:ffff:ffff:ffff,CH +2a00:79e0:31::,2a00:79e0:31:ffff:ffff:ffff:ffff:ffff,SK +2a00:79e0:32::,2a00:79e0:ffe2:4ff:ffff:ffff:ffff:ffff,CH 2a00:79e0:ffe2:500::,2a00:79e0:ffe2:5ff:ffff:ffff:ffff:ffff,IE 2a00:79e0:ffe2:600::,2a00:79e1:abb:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e1:abc::,2a00:79e1:abc:ff:ffff:ffff:ffff:ffff,GB @@ -22947,7 +23295,6 @@ 2a00:b0a0::,2a00:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:b0c0::,2a00:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:b0e0::,2a00:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a00:b100::,2a00:b100:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:b120::,2a00:b120:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:b140::,2a00:b140:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a00:b160::,2a00:b160:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -23548,7 +23895,7 @@ 2a00:fd20::,2a00:fd20:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a00:fd40::,2a00:fd40:5:ffff:ffff:ffff:ffff:ffff,NL 2a00:fd40:6::,2a00:fd40:7:ffff:ffff:ffff:ffff:ffff,SK -2a00:fd40:8::,2a00:fd40:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a00:fd40:8::,2a00:fd47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:fd60::,2a00:fd60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:fd80::,2a00:fd80:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:fda0::,2a00:fda0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -24523,7 +24870,7 @@ 2a01:7c8::,2a01:7c8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:7d0::,2a01:7d0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:7d8::,2a01:7d8:ffff:ffff:ffff:ffff:ffff:ffff,RO -2a01:7e0::,2a01:7e0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:7e0::,2a01:7e7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7e8::,2a01:7e8:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:7f0::,2a01:7f0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -24800,7 +25147,7 @@ 2a01:61e0::,2a01:61e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:6200::,2a01:6200:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:6220::,2a01:6220:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a01:6240::,2a01:6240:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:6240::,2a01:6247:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:6260::,2a01:6260:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:6280::,2a01:6280:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:62a0::,2a01:62a0:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -25223,7 +25570,7 @@ 2a01:9620::,2a01:9627:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a01:9640::,2a01:9640:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:9660::,2a01:9660:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:9680::,2a01:9680:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:9680::,2a01:9687:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:96a0::,2a01:96a0:ffff:ffff:ffff:ffff:ffff:ffff,KG 2a01:96c0::,2a01:96c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:96e0::,2a01:96e0:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -25485,7 +25832,7 @@ 2a01:b760::,2a01:b760:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a01:b780::,2a01:b780:ffff:ffff:ffff:ffff:ffff:ffff,MK 2a01:b7a0::,2a01:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:b7c0::,2a01:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a01:b7c0::,2a01:b7c7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:b7e0::,2a01:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:b800::,2a01:b800:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a01:b820::,2a01:b820:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -25858,7 +26205,7 @@ 2a02:9a8::,2a02:9a8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:9b0::,2a02:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a02:9b8::,2a02:9b9:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a02:9c0::,2a02:9c0:ffff:ffff:ffff:ffff:ffff:ffff,JO +2a02:9c0::,2a02:9c7:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a02:9c8::,2a02:9cf:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:9d0::,2a02:9d0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:9d8::,2a02:9d8:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -26174,7 +26521,7 @@ 2a02:20b8::,2a02:20b8:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a02:20c0::,2a02:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:20c8::,2a02:20c8:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a02:20d0::,2a02:20d0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:20d0::,2a02:20d7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:20d8::,2a02:20d8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:20e0::,2a02:20e7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:20f0::,2a02:20f0:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -26505,7 +26852,9 @@ 2a02:2b00::,2a02:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:2b08::,2a02:2b08:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:2b10::,2a02:2b10:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a02:2b18::,2a02:2b18:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:2b18::,2a02:2b18::7fff:ffff:ffff:ffff:ffff,RU +2a02:2b18:0:8000::,2a02:2b18::ffff:ffff:ffff:ffff:ffff,UA +2a02:2b18:1::,2a02:2b18:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:2b20::,2a02:2b20:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a02:2b28::,2a02:2b28:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:2b30::,2a02:2b30:ffff:ffff:ffff:ffff:ffff:ffff,UA @@ -26715,7 +27064,7 @@ 2a02:5480::,2a02:5480:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:54a0::,2a02:54a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:54c0::,2a02:54c0:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a02:54e0::,2a02:54e0:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a02:54e0::,2a02:54e7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:5500::,2a02:5507:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:5520::,2a02:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:5540::,2a02:5540:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -26825,7 +27174,6 @@ 2a02:6280::,2a02:6280:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:62a0::,2a02:62a0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:62c0::,2a02:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a02:62e0::,2a02:62e0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:6300::,2a02:6300:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a02:6320::,2a02:6320:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a02:6340::,2a02:6340:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -27906,6 +28254,7 @@ 2a03:40a0::,2a03:40a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:40e0::,2a03:40e0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4160::,2a03:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -28516,7 +28865,7 @@ 2a03:8ac0:251::,2a03:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,US 2a03:8ae0::,2a03:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:8b00::,2a03:8b00:ffff:ffff:ffff:ffff:ffff:ffff,SM -2a03:8b20::,2a03:8b20:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:8b20::,2a03:8b20:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a03:8b40::,2a03:8b40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:8b60::,2a03:8b60:ffff:ffff:ffff:ffff:ffff:ffff,SY 2a03:8b80::,2a03:8b80:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -29084,7 +29433,6 @@ 2a03:e040::,2a03:e040:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:e080::,2a03:e080:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:e0c0::,2a03:e0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a03:e100::,2a03:e100:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:e140::,2a03:e140:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:e180::,2a03:e180:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a03:e1c0::,2a03:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -29143,7 +29491,13 @@ 2a03:ef00::,2a03:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:ef40::,2a03:ef47:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:ef80::,2a03:ef80:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a03:efc0::,2a03:efc7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:efc0::,2a03:efc0:6ff:ffff:ffff:ffff:ffff:ffff,GB +2a03:efc0:700::,2a03:efc0:7ff:ffff:ffff:ffff:ffff:ffff,FR +2a03:efc0:800::,2a03:efc0:8ff:ffff:ffff:ffff:ffff:ffff,GB +2a03:efc0:900::,2a03:efc0:9ff:ffff:ffff:ffff:ffff:ffff,ES +2a03:efc0:a00::,2a03:efc0:10ff:ffff:ffff:ffff:ffff:ffff,GB +2a03:efc0:1100::,2a03:efc0:11ff:ffff:ffff:ffff:ffff:ffff,DE +2a03:efc0:1200::,2a03:efc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:f000::,2a03:f000:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a03:f040::,2a03:f040:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a03:f080::,2a03:f080:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -31098,11 +31452,19 @@ 2a05:d050:c080::,2a05:d050:c08f:ffff:ffff:ffff:ffff:ffff,GB 2a05:d050:c090::,2a05:d050:c0bf:ffff:ffff:ffff:ffff:ffff,IE 2a05:d050:c0c0::,2a05:d050:c0cf:ffff:ffff:ffff:ffff:ffff,GB -2a05:d050:c0d0::,2a05:d07c:3fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d050:c0d0::,2a05:d07c:1fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07c:2000::,2a05:d07c:20ff:ffff:ffff:ffff:ffff:ffff,FR +2a05:d07c:2100::,2a05:d07c:3fff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07c:4000::,2a05:d07c:40ff:ffff:ffff:ffff:ffff:ffff,DE 2a05:d07c:4100::,2a05:d07c:bfff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d07c:c000::,2a05:d07c:c0ff:ffff:ffff:ffff:ffff:ffff,GB -2a05:d07c:c100::,2a05:d07f:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07c:c100::,2a05:d07f:1fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07f:2000::,2a05:d07f:20ff:ffff:ffff:ffff:ffff:ffff,FR +2a05:d07f:2100::,2a05:d07f:3fff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07f:4000::,2a05:d07f:40ff:ffff:ffff:ffff:ffff:ffff,DE +2a05:d07f:4100::,2a05:d07f:bfff:ffff:ffff:ffff:ffff:ffff,IE +2a05:d07f:c000::,2a05:d07f:c0ff:ffff:ffff:ffff:ffff:ffff,GB +2a05:d07f:c100::,2a05:d07f:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:d400::,2a05:d407:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:d440::,2a05:d447:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:d480::,2a05:d487:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -31210,7 +31572,6 @@ 2a05:e840::,2a05:e847:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:e880::,2a05:e887:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a05:e8c0::,2a05:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a05:e900::,2a05:e907:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a05:e940::,2a05:e947:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:e980::,2a05:e987:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:e9c0::,2a05:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -32268,7 +32629,9 @@ 2a06:e881:200::,2a06:e881:2ff:ffff:ffff:ffff:ffff:ffff,AT 2a06:e881:300::,2a06:e881:14ff:ffff:ffff:ffff:ffff:ffff,CH 2a06:e881:1500::,2a06:e881:150f:ffff:ffff:ffff:ffff:ffff,GB -2a06:e881:1510::,2a06:e881:1fff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e881:1510::,2a06:e881:16ff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e881:1700::,2a06:e881:170f:ffff:ffff:ffff:ffff:ffff,DE +2a06:e881:1710::,2a06:e881:1fff:ffff:ffff:ffff:ffff:ffff,CH 2a06:e881:2000::,2a06:e881:200f:ffff:ffff:ffff:ffff:ffff,DE 2a06:e881:2010::,2a06:e881:20ff:ffff:ffff:ffff:ffff:ffff,CH 2a06:e881:2100::,2a06:e881:210f:ffff:ffff:ffff:ffff:ffff,DE @@ -32483,7 +32846,13 @@ 2a07:1b80::,2a07:1b87:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a07:1bc0::,2a07:1bc7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a07:1c00::,2a07:1c07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a07:1c40::,2a07:1c47:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a07:1c40::,2a07:1c44:609:ffff:ffff:ffff:ffff:ffff,AT +2a07:1c44:60a::,2a07:1c44:60a:ffff:ffff:ffff:ffff:ffff,DE +2a07:1c44:60b::,2a07:1c44:619:ffff:ffff:ffff:ffff:ffff,AT +2a07:1c44:61a::,2a07:1c44:61a:ffff:ffff:ffff:ffff:ffff,KR +2a07:1c44:61b::,2a07:1c44:6ff:ffff:ffff:ffff:ffff:ffff,AT +2a07:1c44:700::,2a07:1c44:70f:ffff:ffff:ffff:ffff:ffff,US +2a07:1c44:710::,2a07:1c47:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a07:1c80::,2a07:1c87:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a07:1cc0::,2a07:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a07:1d00::,2a07:1d07:ffff:ffff:ffff:ffff:ffff:ffff,IR @@ -33186,6 +33555,7 @@ 2a07:cac0::,2a07:cac7:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a07:cb00::,2a07:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a07:cb40::,2a07:cb47:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a07:d000::,2a07:d0ff:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a08::,2a08:1fff:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a::,2a0a:7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:40::,2a0a:47:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -33353,7 +33723,7 @@ 2a0a:2880::,2a0a:2887:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:28c0::,2a0a:28c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:2900::,2a0a:2907:ffff:ffff:ffff:ffff:ffff:ffff,GE -2a0a:2940::,2a0a:2947:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:2940::,2a0a:2947:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:2980::,2a0a:2987:ffff:ffff:ffff:ffff:ffff:ffff,TJ 2a0a:29c0::,2a0a:29c0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0a:2a00::,2a0a:2a00:ffff:ffff:ffff:ffff:ffff:ffff,BE @@ -33686,155 +34056,293 @@ 2a0a:7a80::,2a0a:7a80:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:7ac0::,2a0a:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:7b00::,2a0a:7b07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:7b40::,2a0a:7b47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:7b80::,2a0a:7b87:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0a:7bc0::,2a0a:7bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:7c00::,2a0a:7c07:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0a:7c40::,2a0a:7c40:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:7c80::,2a0a:7c80:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0a:7cc0::,2a0a:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:7d00::,2a0a:7d07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0a:7d40::,2a0a:7d40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:7d80::,2a0a:7d87:ffff:ffff:ffff:ffff:ffff:ffff,BY +2a0a:7dc0::,2a0a:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:7e00::,2a0a:7e03:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:7e04::,2a0a:7e04::ffff:ffff:ffff:ffff:ffff,US 2a0a:7e04:1::,2a0a:7e07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:7e40::,2a0a:7e47:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a0a:7e80::,2a0a:7e87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:7ec0::,2a0a:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:7f00::,2a0a:7f07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:7f40::,2a0a:7f47:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:7f80::,2a0a:7f87:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:7fc0::,2a0a:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8000::,2a0a:8007:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:8040::,2a0a:8047:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:80c0::,2a0a:80c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:8100::,2a0a:8107:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0a:8140::,2a0a:8140:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:8180::,2a0a:8187:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:81c0::,2a0a:81c7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:8200::,2a0a:8207:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a0a:8240::,2a0a:8247:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:8280::,2a0a:8287:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:82c0::,2a0a:82c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:8300::,2a0a:8307:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:8340::,2a0a:8347:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:8380::,2a0a:8387:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:83c0::,2a0a:83c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8400::,2a0a:8407:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:8440::,2a0a:8447:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:8480::,2a0a:8480:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:84c0::,2a0a:84c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8500::,2a0a:8507:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:8540::,2a0a:8547:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8580::,2a0a:8587:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:85c0::,2a0a:85c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:8600::,2a0a:8604:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8605::,2a0a:8605::ffff:ffff:ffff:ffff:ffff,US 2a0a:8605:1::,2a0a:8605:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8606::,2a0a:8606:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:8607::,2a0a:8607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:8640::,2a0a:8647:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8680::,2a0a:8687:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:86c0::,2a0a:86c7:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0a:8700::,2a0a:8707:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:8740::,2a0a:8747:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0a:8780::,2a0a:8787:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:87c0::,2a0a:87c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:8800::,2a0a:8807:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0a:8840::,2a0a:8847:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0a:8880::,2a0a:8887:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0a:88c0::,2a0a:88c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:8900::,2a0a:8907:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0a:8940::,2a0a:8947:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8980::,2a0a:8987:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:89c0::,2a0a:89c7:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a0a:8a00::,2a0a:8a00:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:8a40::,2a0a:8a40:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0a:8a80::,2a0a:8a87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:8ac0::,2a0a:8ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:8b00::,2a0a:8b07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:8b40::,2a0a:8b47:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:8b80::,2a0a:8b87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:8bc0::,2a0a:8bc7:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0a:8c00::,2a0a:8c07:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a0a:8c40::,2a0a:8c47:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0a:8c80::,2a0a:8c87:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:8cc0::,2a0a:8cc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:8d00::,2a0a:8d07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:8d40::,2a0a:8d47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:8d80::,2a0a:8d87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:8dc0::,2a0a:8dc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:8e00::,2a0a:8e01:1236:ffff:ffff:ffff:ffff:ffff,US 2a0a:8e01:1237::,2a0a:8e01:1237:ffff:ffff:ffff:ffff:ffff,CA 2a0a:8e01:1238::,2a0a:8e07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:8e40::,2a0a:8e47:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:8e80::,2a0a:8e87:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0a:8ec0::,2a0a:8ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8f00::,2a0a:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:8f40::,2a0a:8f47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:8f80::,2a0a:8f87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:8fc0::,2a0a:8fc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:9000::,2a0a:9007:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a0a:9040::,2a0a:9047:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9080::,2a0a:9087:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:90c0::,2a0a:90c7:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0a:9100::,2a0a:9107:ffff:ffff:ffff:ffff:ffff:ffff,LB +2a0a:9140::,2a0a:9147:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:9180::,2a0a:9180:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:91c0::,2a0a:91c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:9200::,2a0a:9204:ab6c:ffff:ffff:ffff:ffff:ffff,US 2a0a:9204:ab6d::,2a0a:9204:ab6d:ffff:ffff:ffff:ffff:ffff,CA 2a0a:9204:ab6e::,2a0a:9207:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9240::,2a0a:9247:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9280::,2a0a:9287:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:92c0::,2a0a:92c7:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a0a:9300::,2a0a:9307:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:9340::,2a0a:9340:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0a:9380::,2a0a:9387:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:93c0::,2a0a:93c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:9400::,2a0a:9407:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a0a:9440::,2a0a:9447:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:9480::,2a0a:9480:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a0a:94c0::,2a0a:94c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:9500::,2a0a:9507:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0a:9540::,2a0a:9547:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:9580::,2a0a:9587:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:95c0::,2a0a:95c0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0a:9600::,2a0a:9603:49cd:ffff:ffff:ffff:ffff:ffff,US 2a0a:9603:49ce::,2a0a:9603:49ce:ffff:ffff:ffff:ffff:ffff,CA 2a0a:9603:49cf::,2a0a:9607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9640::,2a0a:9647:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:9680::,2a0a:9687:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0a:96c0::,2a0a:96c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:9700::,2a0a:9700:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:9740::,2a0a:9740:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:9780::,2a0a:9787:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:97c0::,2a0a:97c7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0a:9800::,2a0a:9807:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9840::,2a0a:9847:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0a:9880::,2a0a:9887:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:98c0::,2a0a:98c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9900::,2a0a:9907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9940::,2a0a:9947:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0a:9980::,2a0a:9987:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:99c0::,2a0a:99c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:9a00::,2a0a:9a02:b3d1:ffff:ffff:ffff:ffff:ffff,US 2a0a:9a02:b3d2::,2a0a:9a02:b3d2:ffff:ffff:ffff:ffff:ffff,CA 2a0a:9a02:b3d3::,2a0a:9a07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9a40::,2a0a:9a47:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:9a80::,2a0a:9a80:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:9ac0::,2a0a:9ac7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:9b00::,2a0a:9b07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9b40::,2a0a:9b47:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0a:9b80::,2a0a:9b80:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0a:9bc0::,2a0a:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9c00::,2a0a:9c07:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a0a:9c40::,2a0a:9c47:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:9c80::,2a0a:9c80:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0a:9cc0::,2a0a:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:9d00::,2a0a:9d00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9d40::,2a0a:9d47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:9d80::,2a0a:9d87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:9dc0::,2a0a:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0a:9e00::,2a0a:9e07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9e40::,2a0a:9e47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:9e80::,2a0a:9e87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:9ec0::,2a0a:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:9f00::,2a0a:9f07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9f40::,2a0a:9f47:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0a:9f80::,2a0a:9f87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:9fc0::,2a0a:9fc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:a000::,2a0a:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:a040::,2a0a:a047:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:a080::,2a0a:a087:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0a:a0c0::,2a0a:a0c7:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a0a:a100::,2a0a:a100:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:a140::,2a0a:a147:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a0a:a180::,2a0a:a180:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:a1c0::,2a0a:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:a200::,2a0a:a207:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:a280::,2a0a:a280:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:a2c0::,2a0a:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:a300::,2a0a:a307:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0a:a340::,2a0a:a347:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:a380::,2a0a:a387:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0a:a3c0::,2a0a:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a400::,2a0a:a407:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:a440::,2a0a:a447:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:a480::,2a0a:a487:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0a:a4c0::,2a0a:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:a500::,2a0a:a507:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:a540::,2a0a:a547:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a580::,2a0a:a587:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:a5c0::,2a0a:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:a600::,2a0a:a607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:a640::,2a0a:a640:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a680::,2a0a:a687:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a0a:a6c0::,2a0a:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:a700::,2a0a:a707:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:a740::,2a0a:a747:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a0a:a780::,2a0a:a787:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a0a:a7c0::,2a0a:a7c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:a800::,2a0a:a807:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0a:a840::,2a0a:a847:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0a:a880::,2a0a:a887:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:a8c0::,2a0a:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a900::,2a0a:a900:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:a940::,2a0a:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a980::,2a0a:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:a9c0::,2a0a:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:aa00::,2a0a:aa03:ffff:ffff:ffff:ffff:ffff:ffff,CY +2a0a:aa40::,2a0a:aa40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:aa80::,2a0a:aa87:ffff:ffff:ffff:ffff:ffff:ffff,IM +2a0a:aac0::,2a0a:aac0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:ab00::,2a0a:ab07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:ab40::,2a0a:ab47:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a0a:ab80::,2a0a:ab80:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:abc0::,2a0a:abc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:ac00::,2a0a:ac07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:ac40::,2a0a:ac40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:ac80::,2a0a:ac87:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0a:acc0::,2a0a:acc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:ad00::,2a0a:ad07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0a:ad40::,2a0a:ad47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:ad80::,2a0a:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:adc0::,2a0a:adc7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:ae00::,2a0a:ae07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:ae40::,2a0a:ae47:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:ae80::,2a0a:ae87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:aec0::,2a0a:aec7:ffff:ffff:ffff:ffff:ffff:ffff,LI 2a0a:af00::,2a0a:af07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:af40::,2a0a:af47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:af80::,2a0a:af87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:afc0::,2a0a:afc7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:b000::,2a0a:b000:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b040::,2a0a:b047:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:b080::,2a0a:b087:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:b0c0::,2a0a:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:b100::,2a0a:b107:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:b140::,2a0a:b140:ffff:ffff:ffff:ffff:ffff:ffff,MK 2a0a:b180::,2a0a:b187:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0a:b1c0::,2a0a:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:b200::,2a0a:b207:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:b240::,2a0a:b247:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0a:b280::,2a0a:b287:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0a:b2c0::,2a0a:b2c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:b300::,2a0a:b307:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0a:b340::,2a0a:b347:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:b380::,2a0a:b387:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:b3c0::,2a0a:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:b400::,2a0a:b407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:b440::,2a0a:b447:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:b480::,2a0a:b487:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b4c0::,2a0a:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:b500::,2a0a:b507:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:b540::,2a0a:b540:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:b580::,2a0a:b587:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:b5c0::,2a0a:b5c7:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a0a:b600::,2a0a:b607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:b640::,2a0a:b640::ffff:ffff:ffff:ffff:ffff,GB +2a0a:b640:1::,2a0a:b640:1:ffff:ffff:ffff:ffff:ffff,SG +2a0a:b640:2::,2a0a:b647:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:b680::,2a0a:b687:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0a:b6c0::,2a0a:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:b700::,2a0a:b707:ffff:ffff:ffff:ffff:ffff:ffff,GE +2a0a:b740::,2a0a:b747:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:b780::,2a0a:b787:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0a:b7c0::,2a0a:b7c7:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a0a:b800::,2a0a:b807:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b840::,2a0a:b847:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0a:b880::,2a0a:b887:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0a:b8c0::,2a0a:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:b900::,2a0a:b907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b940::,2a0a:b947:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:b980::,2a0a:b980:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b9c0::,2a0a:b9c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:ba00::,2a0a:ba07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:ba40::,2a0a:ba47:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:ba80::,2a0a:ba87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:bac0::,2a0a:bac7:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a0a:bb00::,2a0a:bb07:ffff:ffff:ffff:ffff:ffff:ffff,LI +2a0a:bb40::,2a0a:bb47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:bb80::,2a0a:bb87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:bbc0::,2a0a:bbc7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:bc00::,2a0a:bc07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:bc40::,2a0a:bc40:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0a:bc80::,2a0a:bc87:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0a:bcc0::,2a0a:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0a:bd00::,2a0a:bd00:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0a:bd40::,2a0a:bd47:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:bd80::,2a0a:bd80:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0a:bdc0::,2a0a:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:be00::,2a0a:be07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:be40::,2a0a:be47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:be80::,2a0a:be87:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0a:bec0::,2a0a:bec7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:bf00::,2a0a:bf07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:bf40::,2a0a:bf47:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a0a:bf80::,2a0a:bf87:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0a:c000::,2a0a:c007:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:c080::,2a0a:c087:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -33974,7 +34482,7 @@ 2a0b:380::,2a0b:387:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0b:400::,2a0b:407:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:480::,2a0b:487:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a0b:500::,2a0b:507:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:500::,2a0b:507:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0b:580::,2a0b:580:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:600::,2a0b:600:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0b:680::,2a0b:687:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -34066,7 +34574,7 @@ 2a0b:3180::,2a0b:3187:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:3200::,2a0b:3207:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0b:3280::,2a0b:3280:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0b:3300::,2a0b:3307:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:3300::,2a0b:3307:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0b:3380::,2a0b:3387:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0b:3400::,2a0b:3407:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:3480::,2a0b:3487:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -34235,7 +34743,7 @@ 2a0b:8580::,2a0b:8587:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:8600::,2a0b:8607:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a0b:8680::,2a0b:8687:ffff:ffff:ffff:ffff:ffff:ffff,BY -2a0b:8700::,2a0b:8707:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:8700::,2a0b:8707:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0b:8780::,2a0b:8787:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0b:8800::,2a0b:8807:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a0b:8880::,2a0b:8887:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -34358,7 +34866,7 @@ 2a0b:c300::,2a0b:c307:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a0b:c380::,2a0b:c387:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:c400::,2a0b:c407:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a0b:c480::,2a0b:c480:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:c480::,2a0b:c487:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:c500::,2a0b:c500:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:c580::,2a0b:c587:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:c600::,2a0b:c607:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -34489,6 +34997,11 @@ 2c0f:f030::,2c0f:f030:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f038::,2c0f:f038:ffff:ffff:ffff:ffff:ffff:ffff,GA 2c0f:f040::,2c0f:f040:ffff:ffff:ffff:ffff:ffff:ffff,SN +2c0f:f048::,2c0f:f048:ffff:ffff:ffff:ffff:ffff:ffff,CG +2c0f:f050::,2c0f:f050:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f058::,2c0f:f058:ffff:ffff:ffff:ffff:ffff:ffff,TZ +2c0f:f060::,2c0f:f060:ffff:ffff:ffff:ffff:ffff:ffff,AO +2c0f:f068::,2c0f:f068:ffff:ffff:ffff:ffff:ffff:ffff,SO 2c0f:f200::,2c0f:f200:ffff:ffff:ffff:ffff:ffff:ffff,UG 2c0f:f208::,2c0f:f208:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f210::,2c0f:f210:ffff:ffff:ffff:ffff:ffff:ffff,ZA diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake index 2ac98cd372..429ae67858 100644 --- a/src/or/Makefile.nmake +++ b/src/or/Makefile.nmake @@ -14,6 +14,7 @@ LIBTOR_OBJECTS = \ addressmap.obj \ buffers.obj \ channel.obj \ + channelpadding.obj \ channeltls.obj \ circpathbias.obj \ circuitbuild.obj \ diff --git a/src/or/buffers.c b/src/or/buffers.c index 4f22935d26..58cfdeee84 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -1319,7 +1319,7 @@ fetch_from_buf_http(buf_t *buf, /** * Wait this many seconds before warning the user about using SOCKS unsafely - * again (requires that WarnUnsafeSocks is turned on). */ + * again. */ #define SOCKS_WARN_INTERVAL 5 /** Warn that the user application has made an unsafe socks request using @@ -1331,9 +1331,6 @@ log_unsafe_socks_warning(int socks_protocol, const char *address, { static ratelim_t socks_ratelim = RATELIM_INIT(SOCKS_WARN_INTERVAL); - const or_options_t *options = get_options(); - if (! options->WarnUnsafeSocks) - return; if (safe_socks) { log_fn_ratelim(&socks_ratelim, LOG_WARN, LD_APP, "Your application (using socks%d to port %d) is giving " diff --git a/src/or/channel.c b/src/or/channel.c index e79fc0760b..df6d7d3423 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -49,6 +49,7 @@ #include "or.h" #include "channel.h" #include "channeltls.h" +#include "channelpadding.h" #include "circuitbuild.h" #include "circuitlist.h" #include "circuitstats.h" @@ -63,6 +64,7 @@ #include "router.h" #include "routerlist.h" #include "scheduler.h" +#include "compat_time.h" /* Global lists of channels */ @@ -84,6 +86,28 @@ static smartlist_t *active_listeners = NULL; /* All channel_listener_t instances in LISTENING state */ static smartlist_t *finished_listeners = NULL; +/** Map from channel->global_identifier to channel. Contains the same + * elements as all_channels. */ +static HT_HEAD(channel_gid_map, channel_s) channel_gid_map = HT_INITIALIZER(); + +static unsigned +channel_id_hash(const channel_t *chan) +{ + return (unsigned) chan->global_identifier; +} +static int +channel_id_eq(const channel_t *a, const channel_t *b) +{ + return a->global_identifier == b->global_identifier; +} +HT_PROTOTYPE(channel_gid_map, channel_s, gidmap_node, + channel_id_hash, channel_id_eq) +HT_GENERATE2(channel_gid_map, channel_s, gidmap_node, + channel_id_hash, channel_id_eq, + 0.6, tor_reallocarray_, tor_free_) + +HANDLE_IMPL(channel, channel_s,) + /* Counter for ID numbers */ static uint64_t n_channels_allocated = 0; /* @@ -429,6 +453,7 @@ void channel_register(channel_t *chan) { tor_assert(chan); + tor_assert(chan->global_identifier); /* No-op if already registered */ if (chan->registered) return; @@ -443,6 +468,8 @@ channel_register(channel_t *chan) /* Make sure we have all_channels, then add it */ if (!all_channels) all_channels = smartlist_new(); smartlist_add(all_channels, chan); + channel_t *oldval = HT_REPLACE(channel_gid_map, &channel_gid_map, chan); + tor_assert(! oldval); /* Is it finished? */ if (CHANNEL_FINISHED(chan)) { @@ -498,7 +525,9 @@ channel_unregister(channel_t *chan) } /* Get it out of all_channels */ - if (all_channels) smartlist_remove(all_channels, chan); + if (all_channels) smartlist_remove(all_channels, chan); + channel_t *oldval = HT_REMOVE(channel_gid_map, &channel_gid_map, chan); + tor_assert(oldval == NULL || oldval == chan); /* Mark it as unregistered */ chan->registered = 0; @@ -533,7 +562,7 @@ channel_listener_register(channel_listener_t *chan_l) channel_listener_state_to_string(chan_l->state), chan_l->state); - /* Make sure we have all_channels, then add it */ + /* Make sure we have all_listeners, then add it */ if (!all_listeners) all_listeners = smartlist_new(); smartlist_add(all_listeners, chan_l); @@ -578,7 +607,7 @@ channel_listener_unregister(channel_listener_t *chan_l) if (active_listeners) smartlist_remove(active_listeners, chan_l); } - /* Get it out of all_channels */ + /* Get it out of all_listeners */ if (all_listeners) smartlist_remove(all_listeners, chan_l); /* Mark it as unregistered */ @@ -719,15 +748,13 @@ channel_remove_from_digest_map(channel_t *chan) channel_t * channel_find_by_global_id(uint64_t global_identifier) { + channel_t lookup; channel_t *rv = NULL; - if (all_channels && smartlist_len(all_channels) > 0) { - SMARTLIST_FOREACH_BEGIN(all_channels, channel_t *, curr) { - if (curr->global_identifier == global_identifier) { - rv = curr; - break; - } - } SMARTLIST_FOREACH_END(curr); + lookup.global_identifier = global_identifier; + rv = HT_FIND(channel_gid_map, &channel_gid_map, &lookup); + if (rv) { + tor_assert(rv->global_identifier == global_identifier); } return rv; @@ -809,6 +836,83 @@ channel_next_with_rsa_identity(channel_t *chan) } /** + * Relays run this once an hour to look over our list of channels to other + * relays. It prints out some statistics if there are multiple connections + * to many relays. + * + * This function is similar to connection_or_set_bad_connections(), + * and probably could be adapted to replace it, if it was modified to actually + * take action on any of these connections. + */ +void +channel_check_for_duplicates(void) +{ + channel_idmap_entry_t **iter; + channel_t *chan; + int total_relay_connections = 0, total_relays = 0, total_canonical = 0; + int total_half_canonical = 0; + int total_gt_one_connection = 0, total_gt_two_connections = 0; + int total_gt_four_connections = 0; + + HT_FOREACH(iter, channel_idmap, &channel_identity_map) { + int connections_to_relay = 0; + + /* Only consider relay connections */ + if (!connection_or_digest_is_known_relay((char*)(*iter)->digest)) + continue; + + total_relays++; + + for (chan = TOR_LIST_FIRST(&(*iter)->channel_list); chan; + chan = channel_next_with_rsa_identity(chan)) { + + if (CHANNEL_CONDEMNED(chan) || !CHANNEL_IS_OPEN(chan)) + continue; + + connections_to_relay++; + total_relay_connections++; + + if (chan->is_canonical(chan, 0)) total_canonical++; + + if (!chan->is_canonical_to_peer && chan->is_canonical(chan, 0) + && chan->is_canonical(chan, 1)) { + total_half_canonical++; + } + } + + if (connections_to_relay > 1) total_gt_one_connection++; + if (connections_to_relay > 2) total_gt_two_connections++; + if (connections_to_relay > 4) total_gt_four_connections++; + } + +#define MIN_RELAY_CONNECTIONS_TO_WARN 5 + + /* If we average 1.5 or more connections per relay, something is wrong */ + if (total_relays > MIN_RELAY_CONNECTIONS_TO_WARN && + total_relay_connections >= 1.5*total_relays) { + log_notice(LD_OR, + "Your relay has a very large number of connections to other relays. " + "Is your outbound address the same as your relay address? " + "Found %d connections to %d relays. Found %d current canonical " + "connections, in %d of which we were a non-canonical peer. " + "%d relays had more than 1 connection, %d had more than 2, and " + "%d had more than 4 connections.", + total_relay_connections, total_relays, total_canonical, + total_half_canonical, total_gt_one_connection, + total_gt_two_connections, total_gt_four_connections); + } else { + log_info(LD_OR, "Performed connection pruning. " + "Found %d connections to %d relays. Found %d current canonical " + "connections, in %d of which we were a non-canonical peer. " + "%d relays had more than 1 connection, %d had more than 2, and " + "%d had more than 4 connections.", + total_relay_connections, total_relays, total_canonical, + total_half_canonical, total_gt_one_connection, + total_gt_two_connections, total_gt_four_connections); + } +} + +/** * Initialize a channel * * This function should be called by subclasses to set up some per-channel @@ -822,7 +926,7 @@ channel_init(channel_t *chan) tor_assert(chan); /* Assign an ID and bump the counter */ - chan->global_identifier = n_channels_allocated++; + chan->global_identifier = ++n_channels_allocated; /* Init timestamp */ chan->timestamp_last_had_circuits = time(NULL); @@ -861,7 +965,7 @@ channel_init_listener(channel_listener_t *chan_l) tor_assert(chan_l); /* Assign an ID and bump the counter */ - chan_l->global_identifier = n_channels_allocated++; + chan_l->global_identifier = ++n_channels_allocated; /* Timestamp it */ channel_listener_timestamp_created(chan_l); @@ -898,6 +1002,11 @@ channel_free(channel_t *chan) circuitmux_set_policy(chan->cmux, NULL); } + /* Remove all timers and associated handle entries now */ + timer_free(chan->padding_timer); + channel_handle_free(chan->timer_handle); + channel_handles_clear(chan); + /* Call a free method if there is one */ if (chan->free_fn) chan->free_fn(chan); @@ -976,6 +1085,11 @@ channel_force_free(channel_t *chan) circuitmux_set_policy(chan->cmux, NULL); } + /* Remove all timers and associated handle entries now */ + timer_free(chan->padding_timer); + channel_handle_free(chan->timer_handle); + channel_handles_clear(chan); + /* Call a free method if there is one */ if (chan->free_fn) chan->free_fn(chan); @@ -2595,6 +2709,19 @@ channel_do_open_actions(channel_t *chan) } } + /* Disable or reduce padding according to user prefs. */ + if (chan->padding_enabled || get_options()->ConnectionPadding == 1) { + if (!get_options()->ConnectionPadding) { + channelpadding_disable_padding_on_channel(chan); + } + + /* Padding can be forced and/or reduced by clients, regardless of if + * the channel supports it */ + if (get_options()->ReducedConnectionPadding) { + channelpadding_reduce_padding_on_channel(chan); + } + } + circuit_n_chan_done(chan, 1, close_origin_circuits); } @@ -3232,6 +3359,11 @@ channel_free_all(void) /* Geez, anything still left over just won't die ... let it leak then */ HT_CLEAR(channel_idmap, &channel_identity_map); + /* Same with channel_gid_map */ + log_debug(LD_CHANNEL, + "Freeing channel_gid_map"); + HT_CLEAR(channel_gid_map, &channel_gid_map); + log_debug(LD_CHANNEL, "Done cleaning up after channels"); } @@ -3267,22 +3399,20 @@ channel_connect(const tor_addr_t *addr, uint16_t port, */ int -channel_is_better(time_t now, channel_t *a, channel_t *b, - int forgive_new_connections) +channel_is_better(channel_t *a, channel_t *b) { - int a_grace, b_grace; int a_is_canonical, b_is_canonical; - int a_has_circs, b_has_circs; - - /* - * Do not definitively deprecate a new channel with no circuits on it - * until this much time has passed. - */ -#define NEW_CHAN_GRACE_PERIOD (15*60) tor_assert(a); tor_assert(b); + /* If one channel is bad for new circuits, and the other isn't, + * use the one that is still good. */ + if (!channel_is_bad_for_new_circs(a) && channel_is_bad_for_new_circs(b)) + return 1; + if (channel_is_bad_for_new_circs(a) && !channel_is_bad_for_new_circs(b)) + return 0; + /* Check if one is canonical and the other isn't first */ a_is_canonical = channel_is_canonical(a); b_is_canonical = channel_is_canonical(b); @@ -3290,26 +3420,31 @@ channel_is_better(time_t now, channel_t *a, channel_t *b, if (a_is_canonical && !b_is_canonical) return 1; if (!a_is_canonical && b_is_canonical) return 0; + /* Check if we suspect that one of the channels will be preferred + * by the peer */ + if (a->is_canonical_to_peer && !b->is_canonical_to_peer) return 1; + if (!a->is_canonical_to_peer && b->is_canonical_to_peer) return 0; + /* - * Okay, if we're here they tied on canonicity. Next we check if - * they have any circuits, and if one does and the other doesn't, - * we prefer the one that does, unless we are forgiving and the - * one that has no circuits is in its grace period. + * Okay, if we're here they tied on canonicity, the prefer the older + * connection, so that the adversary can't create a new connection + * and try to switch us over to it (which will leak information + * about long-lived circuits). Additionally, switching connections + * too often makes us more vulnerable to attacks like Torscan and + * passive netflow-based equivalents. + * + * Connections will still only live for at most a week, due to + * the check in connection_or_group_set_badness() against + * TIME_BEFORE_OR_CONN_IS_TOO_OLD, which marks old connections as + * unusable for new circuits after 1 week. That check sets + * is_bad_for_new_circs, which is checked in channel_get_for_extend(). + * + * We check channel_is_bad_for_new_circs() above here anyway, for safety. */ + if (channel_when_created(a) < channel_when_created(b)) return 1; + else if (channel_when_created(a) > channel_when_created(b)) return 0; - a_has_circs = (channel_num_circuits(a) > 0); - b_has_circs = (channel_num_circuits(b) > 0); - a_grace = (forgive_new_connections && - (now < channel_when_created(a) + NEW_CHAN_GRACE_PERIOD)); - b_grace = (forgive_new_connections && - (now < channel_when_created(b) + NEW_CHAN_GRACE_PERIOD)); - - if (a_has_circs && !b_has_circs && !b_grace) return 1; - if (!a_has_circs && b_has_circs && !a_grace) return 0; - - /* They tied on circuits too; just prefer whichever is newer */ - - if (channel_when_created(a) > channel_when_created(b)) return 1; + if (channel_num_circuits(a) > channel_num_circuits(b)) return 1; else return 0; } @@ -3334,7 +3469,6 @@ channel_get_for_extend(const char *rsa_id_digest, channel_t *chan, *best = NULL; int n_inprogress_goodaddr = 0, n_old = 0; int n_noncanonical = 0, n_possible = 0; - time_t now = approx_time(); tor_assert(msg_out); tor_assert(launch_out); @@ -3404,7 +3538,7 @@ channel_get_for_extend(const char *rsa_id_digest, continue; } - if (channel_is_better(now, chan, best, 0)) + if (channel_is_better(chan, best)) best = chan; } @@ -4186,8 +4320,12 @@ channel_timestamp_active(channel_t *chan) time_t now = time(NULL); tor_assert(chan); + chan->timestamp_xfer_ms = monotime_coarse_absolute_msec(); chan->timestamp_active = now; + + /* Clear any potential netflow padding timer. We're active */ + chan->next_padding_time_ms = 0; } /** @@ -4270,11 +4408,14 @@ void channel_timestamp_recv(channel_t *chan) { time_t now = time(NULL); - tor_assert(chan); + chan->timestamp_xfer_ms = monotime_coarse_absolute_msec(); chan->timestamp_active = now; chan->timestamp_recv = now; + + /* Clear any potential netflow padding timer. We're active */ + chan->next_padding_time_ms = 0; } /** @@ -4287,11 +4428,15 @@ void channel_timestamp_xmit(channel_t *chan) { time_t now = time(NULL); - tor_assert(chan); + chan->timestamp_xfer_ms = monotime_coarse_absolute_msec(); + chan->timestamp_active = now; chan->timestamp_xmit = now; + + /* Clear any potential netflow padding timer. We're active */ + chan->next_padding_time_ms = 0; } /*************************************************************** diff --git a/src/or/channel.h b/src/or/channel.h index 3d97b8e306..ea280f2fd2 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -11,6 +11,8 @@ #include "or.h" #include "circuitmux.h" +#include "timers.h" +#include "handles.h" /* Channel handler function pointer typedefs */ typedef void (*channel_listener_fn_ptr)(channel_listener_t *, channel_t *); @@ -22,6 +24,17 @@ TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s); typedef struct chan_cell_queue chan_cell_queue_t; /** + * This enum is used by channelpadding to decide when to pad channels. + * Don't add values to it without updating the checks in + * channelpadding_decide_to_pad_channel(). + */ +typedef enum { + CHANNEL_USED_NOT_USED_FOR_FULL_CIRCS = 0, + CHANNEL_USED_FOR_FULL_CIRCS, + CHANNEL_USED_FOR_USER_TRAFFIC, +} channel_usage_info_t; + +/** * Channel struct; see the channel_t typedef in or.h. A channel is an * abstract interface for the OR-to-OR connection, similar to connection_or_t, * but without the strong coupling to the underlying TLS implementation. They @@ -34,11 +47,17 @@ struct channel_s { /** Magic number for type-checking cast macros */ uint32_t magic; + /** List entry for hashtable for global-identifier lookup. */ + HT_ENTRY(channel_s) gidmap_node; + + /** Handle entry for handle-based lookup */ + HANDLE_ENTRY(channel, channel_s); + /** Current channel state */ channel_state_t state; /** Globally unique ID number for a channel over the lifetime of a Tor - * process. + * process. This may not be 0. */ uint64_t global_identifier; @@ -48,6 +67,61 @@ struct channel_s { /** has this channel ever been open? */ unsigned int has_been_open:1; + /** + * This field indicates if the other side has enabled or disabled + * padding via either the link protocol version or + * channelpadding_negotiate cells. + * + * Clients can override this with ConnectionPadding in torrc to + * disable or force padding to relays, but relays cannot override the + * client's request. + */ + unsigned int padding_enabled:1; + + /** Cached value of our decision to pad (to avoid expensive + * checks during critical path statistics counting). */ + unsigned int currently_padding:1; + + /** Is there a pending netflow padding callback? */ + unsigned int pending_padding_callback:1; + + /** Is our peer likely to consider this channel canonical? */ + unsigned int is_canonical_to_peer:1; + + /** Has this channel ever been used for non-directory traffic? + * Used to decide what channels to pad, and when. */ + channel_usage_info_t channel_usage; + + /** When should we send a cell for netflow padding, in absolute + * milliseconds since monotime system start. 0 means no padding + * is scheduled. */ + uint64_t next_padding_time_ms; + + /** The callback pointer for the padding callbacks */ + tor_timer_t *padding_timer; + /** The handle to this channel (to free on canceled timers) */ + struct channel_handle_t *timer_handle; + + /** + * These two fields specify the minimum and maximum negotiated timeout + * values for inactivity (send or receive) before we decide to pad a + * channel. These fields can be set either via a PADDING_NEGOTIATE cell, + * or the torrc option ReducedConnectionPadding. The consensus parameters + * nf_ito_low and nf_ito_high are used to ensure that padding can only be + * negotiated to be less frequent than what is specified in the consensus. + * (This is done to prevent wingnut clients from requesting excessive + * padding). + * + * The actual timeout value is randomly chosen between these two values + * as per the table in channelpadding_get_netflow_inactive_timeout_ms(), + * after ensuring that these values do not specify lower timeouts than + * the consensus parameters. + * + * If these are 0, we have not negotiated or specified custom padding + * times, and instead use consensus defaults. */ + uint16_t padding_timeout_low_ms; + uint16_t padding_timeout_high_ms; + /** Why did we close? */ enum { @@ -87,6 +161,18 @@ struct channel_s { time_t timestamp_created; /* Channel created */ time_t timestamp_active; /* Any activity */ + /** + * This is a high-resolution monotonic timestamp that marks when we + * believe the channel has actually sent or received data to/from + * the wire. Right now, it is used to determine when we should send + * a padding cell for channelpadding. + * + * XXX: Are we setting timestamp_xfer_ms in the right places to + * accurately reflect actual network data transfer? Or might this be + * very wrong wrt when bytes actually go on the wire? + */ + uint64_t timestamp_xfer_ms; + /* Methods implemented by the lower layer */ /** Free a channel */ @@ -516,9 +602,7 @@ channel_t * channel_get_for_extend(const char *rsa_id_digest, int *launch_out); /* Ask which of two channels is better for circuit-extension purposes */ -int channel_is_better(time_t now, - channel_t *a, channel_t *b, - int forgive_new_connections); +int channel_is_better(channel_t *a, channel_t *b); /** Channel lookups */ @@ -601,6 +685,7 @@ void channel_listener_dump_statistics(channel_listener_t *chan_l, int severity); void channel_listener_dump_transport_statistics(channel_listener_t *chan_l, int severity); +void channel_check_for_duplicates(void); void channel_update_bad_for_new_circs(const char *digest, int force); @@ -630,5 +715,8 @@ int packed_cell_is_destroy(channel_t *chan, const packed_cell_t *packed_cell, circid_t *circid_out); +/* Declare the handle helpers */ +HANDLE_DECL(channel, channel_s,) + #endif diff --git a/src/or/channelpadding.c b/src/or/channelpadding.c new file mode 100644 index 0000000000..f5248e8960 --- /dev/null +++ b/src/or/channelpadding.c @@ -0,0 +1,749 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2015, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/* TOR_CHANNEL_INTERNAL_ define needed for an O(1) implementation of + * channelpadding_channel_to_channelinfo() */ +#define TOR_CHANNEL_INTERNAL_ + +#include "or.h" +#include "channel.h" +#include "channelpadding.h" +#include "channeltls.h" +#include "config.h" +#include "networkstatus.h" +#include "connection.h" +#include "connection_or.h" +#include "main.h" +#include "rephist.h" +#include "router.h" +#include "compat_time.h" +#include <event2/event.h> + +STATIC int channelpadding_get_netflow_inactive_timeout_ms(const channel_t *); +STATIC int channelpadding_send_disable_command(channel_t *); +STATIC int64_t channelpadding_compute_time_until_pad_for_netflow(channel_t *); + +/** The total number of pending channelpadding timers */ +static uint64_t total_timers_pending; + +/** These are cached consensus parameters for netflow */ +/** The timeout lower bound that is allowed before sending padding */ +static int consensus_nf_ito_low; +/** The timeout upper bound that is allowed before sending padding */ +static int consensus_nf_ito_high; +/** The timeout lower bound that is allowed before sending reduced padding */ +static int consensus_nf_ito_low_reduced; +/** The timeout upper bound that is allowed before sending reduced padding */ +static int consensus_nf_ito_high_reduced; +/** The connection timeout between relays */ +static int consensus_nf_conntimeout_relays; +/** The connection timeout for client connections */ +static int consensus_nf_conntimeout_clients; +/** Should we pad before circuits are actually used for client data? */ +static int consensus_nf_pad_before_usage; +/** Should we pad relay-to-relay connections? */ +static int consensus_nf_pad_relays; + +#define TOR_MSEC_PER_SEC 1000 +#define TOR_USEC_PER_MSEC 1000 + +/** + * How often do we get called by the connection housekeeping (ie: once + * per second) */ +#define TOR_HOUSEKEEPING_CALLBACK_MSEC 1000 +/** + * Additional extra time buffer on the housekeeping callback, since + * it can be delayed. This extra slack is used to decide if we should + * schedule a timer or wait for the next callback. */ +#define TOR_HOUSEKEEPING_CALLBACK_SLACK_MSEC 100 + +/** + * This macro tells us if either end of the channel is connected to a client. + * (If we're not a server, we're definitely a client. If the channel thinks + * its a client, use that. Then finally verify in the consensus). + */ +#define CHANNEL_IS_CLIENT(chan, options) \ + (!public_server_mode((options)) || (chan)->is_client || \ + !connection_or_digest_is_known_relay((chan)->identity_digest)) + +/** + * This function is called to update cached consensus parameters every time + * there is a consensus update. This allows us to move the consensus param + * search off of the critical path, so it does not need to be evaluated + * for every single connection, every second. + */ +void +channelpadding_new_consensus_params(networkstatus_t *ns) +{ +#define DFLT_NETFLOW_INACTIVE_KEEPALIVE_LOW 1500 +#define DFLT_NETFLOW_INACTIVE_KEEPALIVE_HIGH 9500 +#define DFLT_NETFLOW_INACTIVE_KEEPALIVE_MIN 0 +#define DFLT_NETFLOW_INACTIVE_KEEPALIVE_MAX 60000 + consensus_nf_ito_low = networkstatus_get_param(ns, "nf_ito_low", + DFLT_NETFLOW_INACTIVE_KEEPALIVE_LOW, + DFLT_NETFLOW_INACTIVE_KEEPALIVE_MIN, + DFLT_NETFLOW_INACTIVE_KEEPALIVE_MAX); + consensus_nf_ito_high = networkstatus_get_param(ns, "nf_ito_high", + DFLT_NETFLOW_INACTIVE_KEEPALIVE_HIGH, + consensus_nf_ito_low, + DFLT_NETFLOW_INACTIVE_KEEPALIVE_MAX); + +#define DFLT_NETFLOW_REDUCED_KEEPALIVE_LOW 9000 +#define DFLT_NETFLOW_REDUCED_KEEPALIVE_HIGH 14000 +#define DFLT_NETFLOW_REDUCED_KEEPALIVE_MIN 0 +#define DFLT_NETFLOW_REDUCED_KEEPALIVE_MAX 60000 + consensus_nf_ito_low_reduced = + networkstatus_get_param(ns, "nf_ito_low_reduced", + DFLT_NETFLOW_REDUCED_KEEPALIVE_LOW, + DFLT_NETFLOW_REDUCED_KEEPALIVE_MIN, + DFLT_NETFLOW_REDUCED_KEEPALIVE_MAX); + + consensus_nf_ito_high_reduced = + networkstatus_get_param(ns, "nf_ito_high_reduced", + DFLT_NETFLOW_REDUCED_KEEPALIVE_HIGH, + consensus_nf_ito_low_reduced, + DFLT_NETFLOW_REDUCED_KEEPALIVE_MAX); + +#define CONNTIMEOUT_RELAYS_DFLT (60*60) // 1 hour +#define CONNTIMEOUT_RELAYS_MIN 60 +#define CONNTIMEOUT_RELAYS_MAX (7*24*60*60) // 1 week + consensus_nf_conntimeout_relays = + networkstatus_get_param(ns, "nf_conntimeout_relays", + CONNTIMEOUT_RELAYS_DFLT, + CONNTIMEOUT_RELAYS_MIN, + CONNTIMEOUT_RELAYS_MAX); + +#define CIRCTIMEOUT_CLIENTS_DFLT (30*60) // 30 minutes +#define CIRCTIMEOUT_CLIENTS_MIN 60 +#define CIRCTIMEOUT_CLIENTS_MAX (24*60*60) // 24 hours + consensus_nf_conntimeout_clients = + networkstatus_get_param(ns, "nf_conntimeout_clients", + CIRCTIMEOUT_CLIENTS_DFLT, + CIRCTIMEOUT_CLIENTS_MIN, + CIRCTIMEOUT_CLIENTS_MAX); + + consensus_nf_pad_before_usage = + networkstatus_get_param(ns, "nf_pad_before_usage", 1, 0, 1); + + consensus_nf_pad_relays = + networkstatus_get_param(ns, "nf_pad_relays", 0, 0, 1); +} + +/** + * Get a random netflow inactive timeout keepalive period in milliseconds, + * the range for which is determined by consensus parameters, negotiation, + * configuration, or default values. The consensus parameters enforce the + * minimum possible value, to avoid excessively frequent padding. + * + * The ranges for this value were chosen to be low enough to ensure that + * routers do not emit a new netflow record for a connection due to it + * being idle. + * + * Specific timeout values for major routers are listed in Proposal 251. + * No major router appeared capable of setting an inactive timeout below 10 + * seconds, so we set the defaults below that value, since we can always + * scale back if it ends up being too much padding. + * + * Returns the next timeout period (in milliseconds) after which we should + * send a padding packet, or 0 if padding is disabled. + */ +STATIC int +channelpadding_get_netflow_inactive_timeout_ms(const channel_t *chan) +{ + int low_timeout = consensus_nf_ito_low; + int high_timeout = consensus_nf_ito_high; + int X1, X2; + + if (low_timeout == 0 && low_timeout == high_timeout) + return 0; // No padding + + /* If we have negotiated different timeout values, use those, but + * don't allow them to be lower than the consensus ones */ + if (chan->padding_timeout_low_ms && chan->padding_timeout_high_ms) { + low_timeout = MAX(low_timeout, chan->padding_timeout_low_ms); + high_timeout = MAX(high_timeout, chan->padding_timeout_high_ms); + } + + if (low_timeout == high_timeout) + return low_timeout; // No randomization + + /* + * This MAX() hack is here because we apply the timeout on both the client + * and the server. This creates the situation where the total time before + * sending a packet in either direction is actually + * min(client_timeout,server_timeout). + * + * If X is a random variable uniform from 0..R-1 (where R=high-low), + * then Y=max(X,X) has Prob(Y == i) = (2.0*i + 1)/(R*R). + * + * If we create a third random variable Z=min(Y,Y), then it turns out that + * Exp[Z] ~= Exp[X]. Here's a table: + * + * R Exp[X] Exp[Z] Exp[min(X,X)] Exp[max(X,X)] + * 2000 999.5 1066 666.2 1332.8 + * 3000 1499.5 1599.5 999.5 1999.5 + * 5000 2499.5 2666 1666.2 3332.8 + * 6000 2999.5 3199.5 1999.5 3999.5 + * 7000 3499.5 3732.8 2332.8 4666.2 + * 8000 3999.5 4266.2 2666.2 5332.8 + * 10000 4999.5 5328 3332.8 6666.2 + * 15000 7499.5 7995 4999.5 9999.5 + * 20000 9900.5 10661 6666.2 13332.8 + * + * In other words, this hack makes it so that when both the client and + * the guard are sending this padding, then the averages work out closer + * to the midpoint of the range, making the overhead easier to tune. + * If only one endpoint is padding (for example: if the relay does not + * support padding, but the client has set ConnectionPadding 1; or + * if the relay does support padding, but the client has set + * ReducedConnectionPadding 1), then the defense will still prevent + * record splitting, but with less overhead than the midpoint + * (as seen by the Exp[max(X,X)] column). + * + * To calculate average padding packet frequency (and thus overhead), + * index into the table by picking a row based on R = high-low. Then, + * use the appropriate column (Exp[Z] for two-sided padding, and + * Exp[max(X,X)] for one-sided padding). Finally, take this value + * and add it to the low timeout value. This value is the average + * frequency which padding packets will be sent. + */ + + X1 = crypto_rand_int(high_timeout - low_timeout); + X2 = crypto_rand_int(high_timeout - low_timeout); + return low_timeout + MAX(X1, X2); +} + +/** + * Update this channel's padding settings based on the PADDING_NEGOTIATE + * contents. + * + * Returns -1 on error; 1 on success. + */ +int +channelpadding_update_padding_for_channel(channel_t *chan, + const channelpadding_negotiate_t *pad_vars) +{ + if (pad_vars->version != 0) { + static ratelim_t version_limit = RATELIM_INIT(600); + + log_fn_ratelim(&version_limit,LOG_PROTOCOL_WARN,LD_PROTOCOL, + "Got a PADDING_NEGOTIATE cell with an unknown version. Ignoring."); + return -1; + } + + // We should not allow malicious relays to disable or reduce padding for + // us as clients. In fact, we should only accept this cell at all if we're + // operating as a relay. Bridges should not accept it from relays, either + // (only from their clients). + if ((get_options()->BridgeRelay && + connection_or_digest_is_known_relay(chan->identity_digest)) || + !get_options()->ORPort_set) { + static ratelim_t relay_limit = RATELIM_INIT(600); + + log_fn_ratelim(&relay_limit,LOG_PROTOCOL_WARN,LD_PROTOCOL, + "Got a PADDING_NEGOTIATE from relay at %s (%s). " + "This should not happen.", + chan->get_remote_descr(chan, 0), + hex_str(chan->identity_digest, DIGEST_LEN)); + return -1; + } + + chan->padding_enabled = (pad_vars->command == CHANNELPADDING_COMMAND_START); + + /* Min must not be lower than the current consensus parameter + nf_ito_low. */ + chan->padding_timeout_low_ms = MAX(consensus_nf_ito_low, + pad_vars->ito_low_ms); + + /* Max must not be lower than ito_low_ms */ + chan->padding_timeout_high_ms = MAX(chan->padding_timeout_low_ms, + pad_vars->ito_high_ms); + + log_fn(LOG_INFO,LD_OR, + "Negotiated padding=%d, lo=%d, hi=%d on "U64_FORMAT, + chan->padding_enabled, chan->padding_timeout_low_ms, + chan->padding_timeout_high_ms, + U64_PRINTF_ARG(chan->global_identifier)); + + return 1; +} + +/** + * Sends a CELL_PADDING_NEGOTIATE on the channel to tell the other side not + * to send padding. + * + * Returns -1 on error, 0 on success. + */ +STATIC int +channelpadding_send_disable_command(channel_t *chan) +{ + channelpadding_negotiate_t disable; + cell_t cell; + + tor_assert(BASE_CHAN_TO_TLS(chan)->conn->link_proto >= + MIN_LINK_PROTO_FOR_CHANNEL_PADDING); + + memset(&cell, 0, sizeof(cell_t)); + memset(&disable, 0, sizeof(channelpadding_negotiate_t)); + cell.command = CELL_PADDING_NEGOTIATE; + + channelpadding_negotiate_set_command(&disable, CHANNELPADDING_COMMAND_STOP); + + if (channelpadding_negotiate_encode(cell.payload, CELL_PAYLOAD_SIZE, + &disable) < 0) + return -1; + + if (chan->write_cell(chan, &cell) == 1) + return 0; + else + return -1; +} + +/** + * Sends a CELL_PADDING_NEGOTIATE on the channel to tell the other side to + * resume sending padding at some rate. + * + * Returns -1 on error, 0 on success. + */ +int +channelpadding_send_enable_command(channel_t *chan, uint16_t low_timeout, + uint16_t high_timeout) +{ + channelpadding_negotiate_t enable; + cell_t cell; + + tor_assert(BASE_CHAN_TO_TLS(chan)->conn->link_proto >= + MIN_LINK_PROTO_FOR_CHANNEL_PADDING); + + memset(&cell, 0, sizeof(cell_t)); + memset(&enable, 0, sizeof(channelpadding_negotiate_t)); + cell.command = CELL_PADDING_NEGOTIATE; + + channelpadding_negotiate_set_command(&enable, CHANNELPADDING_COMMAND_START); + channelpadding_negotiate_set_ito_low_ms(&enable, low_timeout); + channelpadding_negotiate_set_ito_high_ms(&enable, high_timeout); + + if (channelpadding_negotiate_encode(cell.payload, CELL_PAYLOAD_SIZE, + &enable) < 0) + return -1; + + if (chan->write_cell(chan, &cell) == 1) + return 0; + else + return -1; +} + +/** + * Sends a CELL_PADDING cell on a channel if it has been idle since + * our callback was scheduled. + * + * This function also clears the pending padding timer and the callback + * flags. + */ +static void +channelpadding_send_padding_cell_for_callback(channel_t *chan) +{ + cell_t cell; + + /* Check that the channel is still valid and open */ + if (!chan || chan->state != CHANNEL_STATE_OPEN) { + if (chan) chan->pending_padding_callback = 0; + log_fn(LOG_INFO,LD_OR, + "Scheduled a netflow padding cell, but connection already closed."); + return; + } + + /* We should have a pending callback flag set. */ + if (BUG(chan->pending_padding_callback == 0)) + return; + + chan->pending_padding_callback = 0; + + if (!chan->next_padding_time_ms || + chan->has_queued_writes(chan)) { + /* We must have been active before the timer fired */ + chan->next_padding_time_ms = 0; + return; + } + + { + uint64_t now = monotime_coarse_absolute_msec(); + + log_fn(LOG_INFO,LD_OR, + "Sending netflow keepalive on "U64_FORMAT" to %s (%s) after " + I64_FORMAT" ms. Delta "I64_FORMAT"ms", + U64_PRINTF_ARG(chan->global_identifier), + safe_str_client(chan->get_remote_descr(chan, 0)), + safe_str_client(hex_str(chan->identity_digest, DIGEST_LEN)), + U64_PRINTF_ARG(now - chan->timestamp_xfer_ms), + U64_PRINTF_ARG(now - chan->next_padding_time_ms)); + } + + /* Clear the timer */ + chan->next_padding_time_ms = 0; + + /* Send the padding cell. This will cause the channel to get a + * fresh timestamp_active */ + memset(&cell, 0, sizeof(cell)); + cell.command = CELL_PADDING; + chan->write_cell(chan, &cell); +} + +/** + * tor_timer callback function for us to send padding on an idle channel. + * + * This function just obtains the channel from the callback handle, ensures + * it is still valid, and then hands it off to + * channelpadding_send_padding_cell_for_callback(), which checks if + * the channel is still idle before sending padding. + */ +static void +channelpadding_send_padding_callback(tor_timer_t *timer, void *args, + const struct monotime_t *when) +{ + channel_t *chan = channel_handle_get((struct channel_handle_t*)args); + (void)timer; (void)when; + + if (chan && CHANNEL_CAN_HANDLE_CELLS(chan)) { + /* Hrmm.. It might be nice to have an equivalent to assert_connection_ok + * for channels. Then we could get rid of the channeltls dependency */ + tor_assert(TO_CONN(BASE_CHAN_TO_TLS(chan)->conn)->magic == + OR_CONNECTION_MAGIC); + assert_connection_ok(TO_CONN(BASE_CHAN_TO_TLS(chan)->conn), approx_time()); + + channelpadding_send_padding_cell_for_callback(chan); + } else { + log_fn(LOG_INFO,LD_OR, + "Channel closed while waiting for timer."); + } + + total_timers_pending--; +} + +/** + * Schedules a callback to send padding on a channel in_ms milliseconds from + * now. + * + * Returns CHANNELPADDING_WONTPAD on error, CHANNELPADDING_PADDING_SENT if we + * sent the packet immediately without a timer, and + * CHANNELPADDING_PADDING_SCHEDULED if we decided to schedule a timer. + */ +static channelpadding_decision_t +channelpadding_schedule_padding(channel_t *chan, int in_ms) +{ + struct timeval timeout; + tor_assert(!chan->pending_padding_callback); + + if (in_ms <= 0) { + chan->pending_padding_callback = 1; + channelpadding_send_padding_cell_for_callback(chan); + return CHANNELPADDING_PADDING_SENT; + } + + timeout.tv_sec = in_ms/TOR_MSEC_PER_SEC; + timeout.tv_usec = (in_ms%TOR_USEC_PER_MSEC)*TOR_USEC_PER_MSEC; + + if (!chan->timer_handle) { + chan->timer_handle = channel_handle_new(chan); + } + + if (chan->padding_timer) { + timer_set_cb(chan->padding_timer, + channelpadding_send_padding_callback, + chan->timer_handle); + } else { + chan->padding_timer = timer_new(channelpadding_send_padding_callback, + chan->timer_handle); + } + timer_schedule(chan->padding_timer, &timeout); + + rep_hist_padding_count_timers(++total_timers_pending); + + chan->pending_padding_callback = 1; + return CHANNELPADDING_PADDING_SCHEDULED; +} + +/** + * Calculates the number of milliseconds from now to schedule a padding cell. + * + * Returns the number of milliseconds from now (relative) to schedule the + * padding callback. If the padding timer is more than 1.1 seconds in the + * future, we return -1, to avoid scheduling excessive callbacks. If padding + * is disabled in the consensus, we return -2. + * + * Side-effects: Updates chan->next_padding_time_ms, storing an (absolute, not + * relative) millisecond representation of when we should send padding, unless + * other activity happens first. This side-effect allows us to avoid + * scheduling a libevent callback until we're within 1.1 seconds of the padding + * time. + */ +#define CHANNELPADDING_TIME_LATER -1 +#define CHANNELPADDING_TIME_DISABLED -2 +STATIC int64_t +channelpadding_compute_time_until_pad_for_netflow(channel_t *chan) +{ + uint64_t long_now = monotime_coarse_absolute_msec(); + + if (!chan->next_padding_time_ms) { + /* If the below line or crypto_rand_int() shows up on a profile, + * we can avoid getting a timeout until we're at least nf_ito_lo + * from a timeout window. That will prevent us from setting timers + * on connections that were active up to 1.5 seconds ago. + * Idle connections should only call this once every 5.5s on average + * though, so that might be a micro-optimization for little gain. */ + int64_t padding_timeout = + channelpadding_get_netflow_inactive_timeout_ms(chan); + + if (!padding_timeout) + return CHANNELPADDING_TIME_DISABLED; + + chan->next_padding_time_ms = padding_timeout + + chan->timestamp_xfer_ms; + } + + /* If the next padding time is beyond the maximum possible consensus value, + * then this indicates a clock jump, so just send padding now. This is + * better than using monotonic time because we want to avoid the situation + * where we wait around forever for monotonic time to move forward after + * a clock jump far into the past. + */ + if (chan->next_padding_time_ms > long_now + + DFLT_NETFLOW_INACTIVE_KEEPALIVE_MAX) { + tor_fragile_assert(); + log_warn(LD_BUG, + "Channel padding timeout scheduled "I64_FORMAT"ms in the future. " + "Did the monotonic clock just jump?", + I64_PRINTF_ARG(chan->next_padding_time_ms - long_now)); + return 0; /* Clock jumped: Send padding now */ + } + + /* If the timeout will expire before the next time we're called (1000ms + from now, plus some slack), then calculate the number of milliseconds + from now which we should send padding, so we can schedule a callback + then. + */ + if (long_now + + (TOR_HOUSEKEEPING_CALLBACK_MSEC + TOR_HOUSEKEEPING_CALLBACK_SLACK_MSEC) + >= chan->next_padding_time_ms) { + int64_t ms_until_pad_for_netflow = chan->next_padding_time_ms - + long_now; + if (ms_until_pad_for_netflow < 0) { + log_warn(LD_BUG, + "Channel padding timeout scheduled "I64_FORMAT"ms in the past. " + "Did the monotonic clock just jump?", + I64_PRINTF_ARG(-ms_until_pad_for_netflow)); + return 0; /* Clock jumped: Send padding now */ + } + + return ms_until_pad_for_netflow; + } + return CHANNELPADDING_TIME_LATER; +} + +/** + * Returns a randomized value for channel idle timeout in seconds. + * The channel idle timeout governs how quickly we close a channel + * after its last circuit has disappeared. + * + * There are three classes of channels: + * 1. Client+non-canonical. These live for 3-4.5 minutes + * 2. relay to relay. These live for 45-75 min by default + * 3. Reduced padding clients. These live for 1.5-2.25 minutes. + * + * Also allows the default relay-to-relay value to be controlled by the + * consensus. + */ +unsigned int +channelpadding_get_channel_idle_timeout(const channel_t *chan, + int is_canonical) +{ + const or_options_t *options = get_options(); + unsigned int timeout; + + /* Non-canonical and client channels only last for 3-4.5 min when idle */ + if (!is_canonical || CHANNEL_IS_CLIENT(chan, options)) { +#define CONNTIMEOUT_CLIENTS_BASE 180 // 3 to 4.5 min + timeout = CONNTIMEOUT_CLIENTS_BASE + + crypto_rand_int(CONNTIMEOUT_CLIENTS_BASE/2); + } else { // Canonical relay-to-relay channels + // 45..75min or consensus +/- 25% + timeout = consensus_nf_conntimeout_relays; + timeout = 3*timeout/4 + crypto_rand_int(timeout/2); + } + + /* If ReducedConnectionPadding is set, we want to halve the duration of + * the channel idle timeout, since reducing the additional time that + * a channel stays open will reduce the total overhead for making + * new channels. This reduction in overhead/channel expense + * is important for mobile users. The option cannot be set by relays. + * + * We also don't reduce any values for timeout that the user explicitly + * set. + */ + if (options->ReducedConnectionPadding + && !options->CircuitsAvailableTimeout) { + timeout /= 2; + } + + return timeout; +} + +/** + * This function controls how long we keep idle circuits open, + * and how long we build predicted circuits. This behavior is under + * the control of channelpadding because circuit availability is the + * dominant factor in channel lifespan, which influences total padding + * overhead. + * + * Returns a randomized number of seconds in a range from + * CircuitsAvailableTimeout to 2*CircuitsAvailableTimeout. This value is halved + * if ReducedConnectionPadding is set. The default value of + * CircuitsAvailableTimeout can be controlled by the consensus. + */ +int +channelpadding_get_circuits_available_timeout(void) +{ + const or_options_t *options = get_options(); + int timeout = options->CircuitsAvailableTimeout; + + if (!timeout) { + timeout = consensus_nf_conntimeout_clients; + + /* If ReducedConnectionPadding is set, we want to halve the duration of + * the channel idle timeout, since reducing the additional time that + * a channel stays open will reduce the total overhead for making + * new connections. This reduction in overhead/connection expense + * is important for mobile users. The option cannot be set by relays. + * + * We also don't reduce any values for timeout that the user explicitly + * set. + */ + if (options->ReducedConnectionPadding) { + // half the value to 15..30min by default + timeout /= 2; + } + } + + // 30..60min by default + timeout = timeout + crypto_rand_int(timeout); + + return timeout; +} + +/** + * Calling this function on a channel causes it to tell the other side + * not to send padding, and disables sending padding from this side as well. + */ +void +channelpadding_disable_padding_on_channel(channel_t *chan) +{ + chan->padding_enabled = 0; + + // Send cell to disable padding on the other end + channelpadding_send_disable_command(chan); +} + +/** + * Calling this function on a channel causes it to tell the other side + * not to send padding, and reduces the rate that padding is sent from + * this side. + */ +void +channelpadding_reduce_padding_on_channel(channel_t *chan) +{ + /* Padding can be forced and reduced by clients, regardless of if + * the channel supports it. So we check for support here before + * sending any commands. */ + if (chan->padding_enabled) { + channelpadding_send_disable_command(chan); + } + + chan->padding_timeout_low_ms = consensus_nf_ito_low_reduced; + chan->padding_timeout_high_ms = consensus_nf_ito_high_reduced; + + log_fn(LOG_INFO,LD_OR, + "Reduced padding on channel "U64_FORMAT": lo=%d, hi=%d", + U64_PRINTF_ARG(chan->global_identifier), + chan->padding_timeout_low_ms, chan->padding_timeout_high_ms); +} + +/** + * This function is called once per second by run_connection_housekeeping(), + * but only if the channel is still open, valid, and non-wedged. + * + * It decides if and when we should send a padding cell, and if needed, + * schedules a callback to send that cell at the appropriate time. + * + * Returns an enum that represents the current padding decision state. + * Return value is currently used only by unit tests. + */ +channelpadding_decision_t +channelpadding_decide_to_pad_channel(channel_t *chan) +{ + const or_options_t *options = get_options(); + + /* Only pad open channels */ + if (chan->state != CHANNEL_STATE_OPEN) + return CHANNELPADDING_WONTPAD; + + if (chan->channel_usage == CHANNEL_USED_FOR_FULL_CIRCS) { + if (!consensus_nf_pad_before_usage) + return CHANNELPADDING_WONTPAD; + } else if (chan->channel_usage != CHANNEL_USED_FOR_USER_TRAFFIC) { + return CHANNELPADDING_WONTPAD; + } + + if (chan->pending_padding_callback) + return CHANNELPADDING_PADDING_ALREADY_SCHEDULED; + + /* Don't pad the channel if we didn't negotiate it, but still + * allow clients to force padding if options->ChannelPadding is + * explicitly set to 1. + */ + if (!chan->padding_enabled && options->ConnectionPadding != 1) { + return CHANNELPADDING_WONTPAD; + } + + if (!chan->has_queued_writes(chan)) { + int is_client_channel = 0; + + if (CHANNEL_IS_CLIENT(chan, options)) { + is_client_channel = 1; + } + + /* If nf_pad_relays=1 is set in the consensus, we pad + * on *all* idle connections, relay-relay or relay-client. + * Otherwise pad only for client+bridge cons */ + if (is_client_channel || consensus_nf_pad_relays) { + int64_t pad_time_ms = + channelpadding_compute_time_until_pad_for_netflow(chan); + + if (pad_time_ms == CHANNELPADDING_TIME_DISABLED) { + return CHANNELPADDING_WONTPAD; + } else if (pad_time_ms == CHANNELPADDING_TIME_LATER) { + chan->currently_padding = 1; + return CHANNELPADDING_PADLATER; + } else { + if (BUG(pad_time_ms > INT_MAX)) { + pad_time_ms = INT_MAX; + } + /* We have to schedule a callback because we're called exactly once per + * second, but we don't want padding packets to go out exactly on an + * integer multiple of seconds. This callback will only be scheduled + * if we're within 1.1 seconds of the padding time. + */ + chan->currently_padding = 1; + return channelpadding_schedule_padding(chan, (int)pad_time_ms); + } + } else { + chan->currently_padding = 0; + return CHANNELPADDING_WONTPAD; + } + } else { + return CHANNELPADDING_PADLATER; + } +} + diff --git a/src/or/channelpadding.h b/src/or/channelpadding.h new file mode 100644 index 0000000000..2708ee9739 --- /dev/null +++ b/src/or/channelpadding.h @@ -0,0 +1,40 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2015, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file circuitbuild.h + * \brief Header file for circuitbuild.c. + **/ +#ifndef TOR_CHANNELPADDING_H +#define TOR_CHANNELPADDING_H + +#include "channelpadding_negotiation.h" + +typedef enum { + CHANNELPADDING_WONTPAD, + CHANNELPADDING_PADLATER, + CHANNELPADDING_PADDING_SCHEDULED, + CHANNELPADDING_PADDING_ALREADY_SCHEDULED, + CHANNELPADDING_PADDING_SENT, +} channelpadding_decision_t; + +channelpadding_decision_t channelpadding_decide_to_pad_channel(channel_t + *chan); +int channelpadding_update_padding_for_channel(channel_t *, + const channelpadding_negotiate_t + *chan); + +void channelpadding_disable_padding_on_channel(channel_t *chan); +void channelpadding_reduce_padding_on_channel(channel_t *chan); +int channelpadding_send_enable_command(channel_t *chan, uint16_t low_timeout, + uint16_t high_timeout); + +int channelpadding_get_circuits_available_timeout(void); +unsigned int channelpadding_get_channel_idle_timeout(const channel_t *, int); +void channelpadding_new_consensus_params(networkstatus_t *ns); + +#endif + diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 7c4dc9aa09..f44e4fc8ea 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -57,6 +57,9 @@ #include "routerlist.h" #include "scheduler.h" #include "torcert.h" +#include "networkstatus.h" +#include "channelpadding_negotiation.h" +#include "channelpadding.h" /** How many CELL_PADDING cells have we received, ever? */ uint64_t stats_n_padding_cells_processed = 0; @@ -122,6 +125,8 @@ static void channel_tls_process_netinfo_cell(cell_t *cell, static int command_allowed_before_handshake(uint8_t command); static int enter_v3_handshake_with_cell(var_cell_t *cell, channel_tls_t *tlschan); +static void channel_tls_process_padding_negotiate_cell(cell_t *cell, + channel_tls_t *chan); /** * Do parts of channel_tls_t initialization common to channel_tls_connect() @@ -734,6 +739,15 @@ channel_tls_matches_target_method(channel_t *chan, return 0; } + /* real_addr is the address this connection came from. + * base_.addr is updated by connection_or_init_conn_from_address() + * to be the address in the descriptor. It may be tempting to + * allow either address to be allowed, but if we did so, it would + * enable someone who steals a relay's keys to impersonate/MITM it + * from anywhere on the Internet! (Because they could make long-lived + * TLS connections from anywhere to all relays, and wait for them to + * be used for extends). + */ return tor_addr_eq(&(tlschan->conn->real_addr), target); } @@ -1098,9 +1112,16 @@ channel_tls_handle_cell(cell_t *cell, or_connection_t *conn) /* We note that we're on the internet whenever we read a cell. This is * a fast operation. */ entry_guards_note_internet_connectivity(get_guard_selection_info()); + rep_hist_padding_count_read(PADDING_TYPE_TOTAL); + + if (TLS_CHAN_TO_BASE(chan)->currently_padding) + rep_hist_padding_count_read(PADDING_TYPE_ENABLED_TOTAL); switch (cell->command) { case CELL_PADDING: + rep_hist_padding_count_read(PADDING_TYPE_CELL); + if (TLS_CHAN_TO_BASE(chan)->currently_padding) + rep_hist_padding_count_read(PADDING_TYPE_ENABLED_CELL); ++stats_n_padding_cells_processed; /* do nothing */ break; @@ -1111,6 +1132,10 @@ channel_tls_handle_cell(cell_t *cell, or_connection_t *conn) ++stats_n_netinfo_cells_processed; PROCESS_CELL(netinfo, cell, chan); break; + case CELL_PADDING_NEGOTIATE: + ++stats_n_netinfo_cells_processed; + PROCESS_CELL(padding_negotiate, cell, chan); + break; case CELL_CREATE: case CELL_CREATE_FAST: case CELL_CREATED: @@ -1566,9 +1591,12 @@ channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan) /* We set this after sending the verions cell. */ /*XXXXX symbolic const.*/ - chan->base_.wide_circ_ids = + TLS_CHAN_TO_BASE(chan)->wide_circ_ids = chan->conn->link_proto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS; - chan->conn->wide_circ_ids = chan->base_.wide_circ_ids; + chan->conn->wide_circ_ids = TLS_CHAN_TO_BASE(chan)->wide_circ_ids; + + TLS_CHAN_TO_BASE(chan)->padding_enabled = + chan->conn->link_proto >= MIN_LINK_PROTO_FOR_CHANNEL_PADDING; if (send_certs) { if (connection_or_send_certs_cell(chan->conn) < 0) { @@ -1595,6 +1623,43 @@ channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan) } /** + * Process a 'padding_negotiate' cell + * + * This function is called to handle an incoming PADDING_NEGOTIATE cell; + * enable or disable padding accordingly, and read and act on its timeout + * value contents. + */ +static void +channel_tls_process_padding_negotiate_cell(cell_t *cell, channel_tls_t *chan) +{ + channelpadding_negotiate_t *negotiation; + tor_assert(cell); + tor_assert(chan); + tor_assert(chan->conn); + + if (chan->conn->link_proto < MIN_LINK_PROTO_FOR_CHANNEL_PADDING) { + log_fn(LOG_PROTOCOL_WARN, LD_OR, + "Received a PADDING_NEGOTIATE cell on v%d connection; dropping.", + chan->conn->link_proto); + return; + } + + if (channelpadding_negotiate_parse(&negotiation, cell->payload, + CELL_PAYLOAD_SIZE) < 0) { + log_fn(LOG_PROTOCOL_WARN, LD_OR, + "Received malformed PADDING_NEGOTIATE cell on v%d connection; " + "dropping.", chan->conn->link_proto); + + return; + } + + channelpadding_update_padding_for_channel(TLS_CHAN_TO_BASE(chan), + negotiation); + + channelpadding_negotiate_free(negotiation); +} + +/** * Process a 'netinfo' cell * * This function is called to handle an incoming NETINFO cell; read and act @@ -1611,6 +1676,7 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan) const uint8_t *cp, *end; uint8_t n_other_addrs; time_t now = time(NULL); + const routerinfo_t *me = router_get_my_routerinfo(); long apparent_skew = 0; tor_addr_t my_apparent_addr = TOR_ADDR_NULL; @@ -1693,8 +1759,20 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan) if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) { tor_addr_from_ipv4n(&my_apparent_addr, get_uint32(my_addr_ptr)); + + if (!get_options()->BridgeRelay && me && + get_uint32(my_addr_ptr) == htonl(me->addr)) { + TLS_CHAN_TO_BASE(chan)->is_canonical_to_peer = 1; + } + } else if (my_addr_type == RESOLVED_TYPE_IPV6 && my_addr_len == 16) { tor_addr_from_ipv6_bytes(&my_apparent_addr, (const char *) my_addr_ptr); + + if (!get_options()->BridgeRelay && me && + !tor_addr_is_null(&me->ipv6_addr) && + tor_addr_eq(&my_apparent_addr, &me->ipv6_addr)) { + TLS_CHAN_TO_BASE(chan)->is_canonical_to_peer = 1; + } } n_other_addrs = (uint8_t) *cp++; @@ -1710,6 +1788,14 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan) connection_or_close_for_error(chan->conn, 0); return; } + /* A relay can connect from anywhere and be canonical, so + * long as it tells you from where it came. This may be a bit + * concerning.. Luckily we have another check in + * channel_tls_matches_target_method() to ensure that extends + * only go to the IP they ask for. + * + * XXX: Bleh. That check is not used if the connection is canonical. + */ if (tor_addr_eq(&addr, &(chan->conn->real_addr))) { connection_or_set_canonical(chan->conn, 1); break; @@ -1718,6 +1804,21 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan) --n_other_addrs; } + if (me && !TLS_CHAN_TO_BASE(chan)->is_canonical_to_peer && + channel_is_canonical(TLS_CHAN_TO_BASE(chan))) { + const char *descr = + TLS_CHAN_TO_BASE(chan)->get_remote_descr(TLS_CHAN_TO_BASE(chan), 0); + log_info(LD_OR, + "We made a connection to a relay at %s (fp=%s) but we think " + "they will not consider this connection canonical. They " + "think we are at %s, but we think its %s.", + safe_str(descr), + safe_str(hex_str(chan->conn->identity_digest, DIGEST_LEN)), + safe_str(tor_addr_is_null(&my_apparent_addr) ? + "<none>" : fmt_and_decorate_addr(&my_apparent_addr)), + safe_str(fmt_addr32(me->addr))); + } + /* Act on apparent skew. */ /** Warn when we get a netinfo skew with at least this value. */ #define NETINFO_NOTICE_SKEW 3600 diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index f8b3609757..16cef0e56b 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -816,12 +816,7 @@ should_use_create_fast_for_circuit(origin_circuit_t *circ) * creating on behalf of others. */ return 0; } - if (options->FastFirstHopPK == -1) { - /* option is "auto", so look at the consensus. */ - return networkstatus_get_param(NULL, "usecreatefast", 0, 0, 1); - } - - return options->FastFirstHopPK; + return networkstatus_get_param(NULL, "usecreatefast", 0, 0, 1); } /** Return true if <b>circ</b> is the type of circuit we want to count @@ -939,9 +934,18 @@ circuit_send_next_onion_skin(origin_circuit_t *circ) memset(&cc, 0, sizeof(cc)); if (circ->build_state->onehop_tunnel) control_event_bootstrap(BOOTSTRAP_STATUS_ONEHOP_CREATE, 0); - else + else { control_event_bootstrap(BOOTSTRAP_STATUS_CIRCUIT_CREATE, 0); + /* If this is not a one-hop tunnel, the channel is being used + * for traffic that wants anonymity and protection from traffic + * analysis (such as netflow record retention). That means we want + * to pad it. + */ + if (circ->base_.n_chan->channel_usage < CHANNEL_USED_FOR_FULL_CIRCS) + circ->base_.n_chan->channel_usage = CHANNEL_USED_FOR_FULL_CIRCS; + } + node = node_get_by_id(circ->base_.n_chan->identity_digest); fast = should_use_create_fast_for_circuit(circ); if (!fast) { @@ -1828,15 +1832,16 @@ choose_good_exit_server_general(int need_uptime, int need_capacity) * we'll retry later in this function with need_update and * need_capacity set to 0. */ } - if (!(node->is_valid || options->AllowInvalid_ & ALLOW_INVALID_EXIT)) { + if (!(node->is_valid)) { /* if it's invalid and we don't want it */ n_supported[i] = -1; // log_fn(LOG_DEBUG,"Skipping node %s (index %d) -- invalid router.", // router->nickname, i); continue; /* skip invalid routers */ } - if (options->ExcludeSingleHopRelays && - node_allows_single_hop_exits(node)) { + /* We do not allow relays that allow single hop exits by default. Option + * was deprecated in 0.2.9.2-alpha and removed in 0.3.1.0-alpha. */ + if (node_allows_single_hop_exits(node)) { n_supported[i] = -1; continue; } @@ -1968,7 +1973,6 @@ pick_tor2web_rendezvous_node(router_crn_flags_t flags, const or_options_t *options) { const node_t *rp_node = NULL; - const int allow_invalid = (flags & CRN_ALLOW_INVALID) != 0; const int need_desc = (flags & CRN_NEED_DESC) != 0; const int pref_addr = (flags & CRN_PREF_ADDR) != 0; const int direct_conn = (flags & CRN_DIRECT_CONN) != 0; @@ -1980,7 +1984,6 @@ pick_tor2web_rendezvous_node(router_crn_flags_t flags, /* Add all running nodes to all_live_nodes */ router_add_running_nodes_to_smartlist(all_live_nodes, - allow_invalid, 0, 0, 0, need_desc, pref_addr, @@ -2022,9 +2025,6 @@ pick_rendezvous_node(router_crn_flags_t flags) { const or_options_t *options = get_options(); - if (options->AllowInvalid_ & ALLOW_INVALID_RENDEZVOUS) - flags |= CRN_ALLOW_INVALID; - #ifdef ENABLE_TOR2WEB_MODE /* We want to connect directly to the node if we can */ router_crn_flags_t direct_flags = flags; @@ -2081,8 +2081,6 @@ choose_good_exit_server(uint8_t purpose, switch (purpose) { case CIRCUIT_PURPOSE_C_GENERAL: - if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE) - flags |= CRN_ALLOW_INVALID; if (is_internal) /* pick it like a middle hop */ return router_choose_random_node(NULL, options->ExcludeNodes, flags); else @@ -2280,10 +2278,6 @@ count_acceptable_nodes, (smartlist_t *nodes)) if (! node->is_running) // log_debug(LD_CIRC,"Nope, the directory says %d is not running.",i); continue; - /* XXX This clause makes us count incorrectly: if AllowInvalidRouters - * allows this node in some places, then we're getting an inaccurate - * count. For now, be conservative and don't count it. But later we - * should try to be smarter. */ if (! node->is_valid) // log_debug(LD_CIRC,"Nope, the directory says %d is not valid.",i); continue; @@ -2354,8 +2348,6 @@ choose_good_middle_server(uint8_t purpose, flags |= CRN_NEED_UPTIME; if (state->need_capacity) flags |= CRN_NEED_CAPACITY; - if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE) - flags |= CRN_ALLOW_INVALID; choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); smartlist_free(excluded); return choice; @@ -2408,8 +2400,6 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state, if (state->need_capacity) flags |= CRN_NEED_CAPACITY; } - if (options->AllowInvalid_ & ALLOW_INVALID_ENTRY) - flags |= CRN_ALLOW_INVALID; choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); smartlist_free(excluded); diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 365e5b2f89..5761890924 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -78,6 +78,7 @@ #include "rephist.h" #include "routerlist.h" #include "routerset.h" +#include "channelpadding.h" #include "ht.h" @@ -814,6 +815,11 @@ init_circuit_base(circuit_t *circ) circ->global_circuitlist_idx = smartlist_len(circuit_get_global_list()) - 1; } +/** If we haven't yet decided on a good timeout value for circuit + * building, we close idle circuits aggressively so we can get more + * data points. */ +#define IDLE_TIMEOUT_WHILE_LEARNING (1*60) + /** Allocate space for a new circuit, initializing with <b>p_circ_id</b> * and <b>p_conn</b>. Add it to the global circuit list. */ @@ -841,6 +847,41 @@ origin_circuit_new(void) circuit_build_times_update_last_circ(get_circuit_build_times_mutable()); + if (! circuit_build_times_disabled(get_options()) && + circuit_build_times_needs_circuits(get_circuit_build_times())) { + /* Circuits should be shorter lived if we need more of them + * for learning a good build timeout */ + circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING; + } else { + // This should always be larger than the current port prediction time + // remaining, or else we'll end up with the case where a circuit times out + // and another one is built, effectively doubling the timeout window. + // + // We also randomize it by up to 5% more (ie 5% of 0 to 3600 seconds, + // depending on how much circuit prediction time is remaining) so that + // we don't close a bunch of unused circuits all at the same time. + int prediction_time_remaining = + predicted_ports_prediction_time_remaining(time(NULL)); + circ->circuit_idle_timeout = prediction_time_remaining+1+ + crypto_rand_int(1+prediction_time_remaining/20); + + if (circ->circuit_idle_timeout <= 0) { + log_warn(LD_BUG, + "Circuit chose a negative idle timeout of %d based on " + "%d seconds of predictive building remaining.", + circ->circuit_idle_timeout, + prediction_time_remaining); + circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING; + } + + log_info(LD_CIRC, + "Circuit " U64_FORMAT " chose an idle timeout of %d based on " + "%d seconds of predictive building remaining.", + U64_PRINTF_ARG(circ->global_identifier), + circ->circuit_idle_timeout, + prediction_time_remaining); + } + return circ; } diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 8d233e0cb6..9f9d3abf7c 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -705,18 +705,15 @@ circuit_expire_building(void) } } - /* If this is a hidden service client circuit which is far enough - * along in connecting to its destination, and we haven't already - * flagged it as 'timed out', and the user has not told us to - * close such circs immediately on timeout, flag it as 'timed out' - * so we'll launch another intro or rend circ, but don't mark it - * for close yet. + /* If this is a hidden service client circuit which is far enough along in + * connecting to its destination, and we haven't already flagged it as + * 'timed out', flag it so we'll launch another intro or rend circ, but + * don't mark it for close yet. * * (Circs flagged as 'timed out' are given a much longer timeout * period above, so we won't close them in the next call to * circuit_expire_building.) */ - if (!(options->CloseHSClientCircuitsImmediatelyOnTimeout) && - !(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out)) { + if (!(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out)) { switch (victim->purpose) { case CIRCUIT_PURPOSE_C_REND_READY: /* We only want to spare a rend circ if it has been specified in @@ -750,8 +747,7 @@ circuit_expire_building(void) /* If this is a service-side rendezvous circuit which is far * enough along in connecting to its destination, consider sparing * it. */ - if (!(options->CloseHSServiceRendCircuitsImmediatelyOnTimeout) && - !(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out) && + if (!(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out) && victim->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) { log_info(LD_CIRC,"Marking circ %u (state %d:%s, purpose %d) " "as timed-out HS circ; relaunching rendezvous attempt.", @@ -1383,11 +1379,6 @@ circuit_detach_stream(circuit_t *circ, edge_connection_t *conn) tor_fragile_assert(); } -/** If we haven't yet decided on a good timeout value for circuit - * building, we close idles circuits aggressively so we can get more - * data points. */ -#define IDLE_TIMEOUT_WHILE_LEARNING (10*60) - /** Find each circuit that has been unused for too long, or dirty * for too long and has no streams on it: mark it for close. */ @@ -1397,21 +1388,15 @@ circuit_expire_old_circuits_clientside(void) struct timeval cutoff, now; tor_gettimeofday(&now); - cutoff = now; last_expired_clientside_circuits = now.tv_sec; - if (! circuit_build_times_disabled(get_options()) && - circuit_build_times_needs_circuits(get_circuit_build_times())) { - /* Circuits should be shorter lived if we need more of them - * for learning a good build timeout */ - cutoff.tv_sec -= IDLE_TIMEOUT_WHILE_LEARNING; - } else { - cutoff.tv_sec -= get_options()->CircuitIdleTimeout; - } - SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) { if (circ->marked_for_close || !CIRCUIT_IS_ORIGIN(circ)) continue; + + cutoff = now; + cutoff.tv_sec -= TO_ORIGIN_CIRCUIT(circ)->circuit_idle_timeout; + /* If the circuit has been dirty for too long, and there are no streams * on it, mark it for close. */ @@ -1437,8 +1422,10 @@ circuit_expire_old_circuits_clientside(void) (circ->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING && circ->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) || circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) { - log_debug(LD_CIRC, - "Closing circuit that has been unused for %ld msec.", + log_info(LD_CIRC, + "Closing circuit "U64_FORMAT + " that has been unused for %ld msec.", + U64_PRINTF_ARG(TO_ORIGIN_CIRCUIT(circ)->global_identifier), tv_mdiff(&circ->timestamp_began, &now)); circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); } else if (!TO_ORIGIN_CIRCUIT(circ)->is_ancient) { diff --git a/src/or/command.c b/src/or/command.c index c91a967fd4..c667cbbe52 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -326,10 +326,19 @@ command_process_create_cell(cell_t *cell, channel_t *chan) return; } + if (connection_or_digest_is_known_relay(chan->identity_digest)) { + rep_hist_note_circuit_handshake_requested(create_cell->handshake_type); + // Needed for chutney: Sometimes relays aren't in the consensus yet, and + // get marked as clients. This resets their channels once they appear. + // Probably useful for normal operation wrt relay flapping, too. + chan->is_client = 0; + } else { + channel_mark_client(chan); + } + if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) { /* hand it off to the cpuworkers, and then return. */ - if (connection_or_digest_is_known_relay(chan->identity_digest)) - rep_hist_note_circuit_handshake_requested(create_cell->handshake_type); + if (assign_onionskin_to_cpuworker(circ, create_cell) < 0) { log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing."); circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT); diff --git a/src/or/config.c b/src/or/config.c index 201cca7941..09d558e1b4 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -206,10 +206,10 @@ static config_var_t option_vars_[] = { V(AccountingStart, STRING, NULL), V(Address, STRING, NULL), V(AllowDotExit, BOOL, "0"), - V(AllowInvalidNodes, CSV, "middle,rendezvous"), + OBSOLETE("AllowInvalidNodes"), V(AllowNonRFC953Hostnames, BOOL, "0"), - V(AllowSingleHopCircuits, BOOL, "0"), - V(AllowSingleHopExits, BOOL, "0"), + OBSOLETE("AllowSingleHopCircuits"), + OBSOLETE("AllowSingleHopExits"), V(AlternateBridgeAuthority, LINELIST, NULL), V(AlternateDirAuthority, LINELIST, NULL), OBSOLETE("AlternateHSAuthority"), @@ -243,9 +243,11 @@ static config_var_t option_vars_[] = { V(BridgeRecordUsageByCountry, BOOL, "1"), V(BridgeRelay, BOOL, "0"), V(CellStatistics, BOOL, "0"), + V(PaddingStatistics, BOOL, "1"), V(LearnCircuitBuildTimeout, BOOL, "1"), V(CircuitBuildTimeout, INTERVAL, "0"), - V(CircuitIdleTimeout, INTERVAL, "1 hour"), + OBSOLETE("CircuitIdleTimeout"), + V(CircuitsAvailableTimeout, INTERVAL, "0"), V(CircuitStreamTimeout, INTERVAL, "0"), V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/ V(ClientDNSRejectInternalAddresses, BOOL,"1"), @@ -262,7 +264,7 @@ static config_var_t option_vars_[] = { V(ConstrainedSockets, BOOL, "0"), V(ConstrainedSockSize, MEMUNIT, "8192"), V(ContactInfo, STRING, NULL), - V(ControlListenAddress, LINELIST, NULL), + OBSOLETE("ControlListenAddress"), VPORT(ControlPort), V(ControlPortFileGroupReadable,BOOL, "0"), V(ControlPortWriteToFile, FILENAME, NULL), @@ -279,7 +281,7 @@ static config_var_t option_vars_[] = { V(DisableNetwork, BOOL, "0"), V(DirAllowPrivateAddresses, BOOL, "0"), V(TestingAuthDirTimeToLearnReachability, INTERVAL, "30 minutes"), - V(DirListenAddress, LINELIST, NULL), + OBSOLETE("DirListenAddress"), V(DirPolicy, LINELIST, NULL), VPORT(DirPort), V(DirPortFrontPage, FILENAME, NULL), @@ -293,7 +295,7 @@ static config_var_t option_vars_[] = { OBSOLETE("DisableV2DirectoryInfo_"), OBSOLETE("DynamicDHGroups"), VPORT(DNSPort), - V(DNSListenAddress, LINELIST, NULL), + OBSOLETE("DNSListenAddress"), V(DownloadExtraInfo, BOOL, "0"), V(TestingEnableConnBwEvent, BOOL, "0"), V(TestingEnableCellStatsEvent, BOOL, "0"), @@ -304,7 +306,7 @@ static config_var_t option_vars_[] = { V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "10 minutes"), V(ExcludeNodes, ROUTERSET, NULL), V(ExcludeExitNodes, ROUTERSET, NULL), - V(ExcludeSingleHopRelays, BOOL, "1"), + OBSOLETE("ExcludeSingleHopRelays"), V(ExitNodes, ROUTERSET, NULL), V(ExitPolicy, LINELIST, NULL), V(ExitPolicyRejectPrivate, BOOL, "1"), @@ -324,7 +326,7 @@ static config_var_t option_vars_[] = { OBSOLETE("FallbackNetworkstatusFile"), V(FascistFirewall, BOOL, "0"), V(FirewallPorts, CSV, ""), - V(FastFirstHopPK, AUTOBOOL, "auto"), + OBSOLETE("FastFirstHopPK"), V(FetchDirInfoEarly, BOOL, "0"), V(FetchDirInfoExtraEarly, BOOL, "0"), V(FetchServerDescriptors, BOOL, "1"), @@ -361,8 +363,8 @@ static config_var_t option_vars_[] = { VAR("HiddenServiceNumIntroductionPoints", LINELIST_S, RendConfigLines, NULL), VAR("HiddenServiceStatistics", BOOL, HiddenServiceStatistics_option, "1"), V(HidServAuth, LINELIST, NULL), - V(CloseHSClientCircuitsImmediatelyOnTimeout, BOOL, "0"), - V(CloseHSServiceRendCircuitsImmediatelyOnTimeout, BOOL, "0"), + OBSOLETE("CloseHSClientCircuitsImmediatelyOnTimeout"), + OBSOLETE("CloseHSServiceRendCircuitsImmediatelyOnTimeout"), V(HiddenServiceSingleHopMode, BOOL, "0"), V(HiddenServiceNonAnonymousMode,BOOL, "0"), V(HTTPProxy, STRING, NULL), @@ -396,20 +398,20 @@ static config_var_t option_vars_[] = { V(MaxOnionQueueDelay, MSEC_INTERVAL, "1750 msec"), V(MaxUnparseableDescSizeToLog, MEMUNIT, "10 MB"), V(MinMeasuredBWsForAuthToIgnoreAdvertised, INT, "500"), - V(MyFamily, STRING, NULL), + VAR("MyFamily", LINELIST, MyFamily_lines, NULL), V(NewCircuitPeriod, INTERVAL, "30 seconds"), OBSOLETE("NamingAuthoritativeDirectory"), - V(NATDListenAddress, LINELIST, NULL), + OBSOLETE("NATDListenAddress"), VPORT(NATDPort), V(Nickname, STRING, NULL), - V(PredictedPortsRelevanceTime, INTERVAL, "1 hour"), - V(WarnUnsafeSocks, BOOL, "1"), + OBSOLETE("PredictedPortsRelevanceTime"), + OBSOLETE("WarnUnsafeSocks"), VAR("NodeFamily", LINELIST, NodeFamilies, NULL), V(NumCPUs, UINT, "0"), V(NumDirectoryGuards, UINT, "0"), V(NumEntryGuards, UINT, "0"), V(OfflineMasterKey, BOOL, "0"), - V(ORListenAddress, LINELIST, NULL), + OBSOLETE("ORListenAddress"), VPORT(ORPort), V(OutboundBindAddress, LINELIST, NULL), V(OutboundBindAddressOR, LINELIST, NULL), @@ -459,6 +461,8 @@ static config_var_t option_vars_[] = { V(RecommendedClientVersions, LINELIST, NULL), V(RecommendedServerVersions, LINELIST, NULL), V(RecommendedPackages, LINELIST, NULL), + V(ReducedConnectionPadding, BOOL, "0"), + V(ConnectionPadding, AUTOBOOL, "auto"), V(RefuseUnknownExits, AUTOBOOL, "auto"), V(RejectPlaintextPorts, CSV, ""), V(RelayBandwidthBurst, MEMUNIT, "0"), @@ -482,7 +486,7 @@ static config_var_t option_vars_[] = { V(SchedulerHighWaterMark__, MEMUNIT, "101 MB"), V(SchedulerMaxFlushCells__, UINT, "1000"), V(ShutdownWaitLength, INTERVAL, "30 seconds"), - V(SocksListenAddress, LINELIST, NULL), + OBSOLETE("SocksListenAddress"), V(SocksPolicy, LINELIST, NULL), VPORT(SocksPort), V(SocksTimeout, INTERVAL, "2 minutes"), @@ -495,10 +499,10 @@ static config_var_t option_vars_[] = { V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"), V(Tor2webMode, BOOL, "0"), V(Tor2webRendezvousPoints, ROUTERSET, NULL), - V(TLSECGroup, STRING, NULL), + OBSOLETE("TLSECGroup"), V(TrackHostExits, CSV, NULL), V(TrackHostExitsExpire, INTERVAL, "30 minutes"), - V(TransListenAddress, LINELIST, NULL), + OBSOLETE("TransListenAddress"), VPORT(TransPort), V(TransProxyType, STRING, "default"), OBSOLETE("TunnelDirConns"), @@ -663,35 +667,8 @@ static const config_deprecation_t option_deprecation_notes_[] = { /* Deprecated since 0.2.9.2-alpha... */ { "AllowDotExit", "Unrestricted use of the .exit notation can be used for " "a wide variety of application-level attacks." }, - { "AllowInvalidNodes", "There is no reason to enable this option; at best " - "it will make you easier to track." }, - { "AllowSingleHopCircuits", "Almost no relays actually allow single-hop " - "exits, making this option pointless." }, - { "AllowSingleHopExits", "Turning this on will make your relay easier " - "to abuse." }, { "ClientDNSRejectInternalAddresses", "Turning this on makes your client " "easier to fingerprint, and may open you to esoteric attacks." }, - { "ExcludeSingleHopRelays", "Turning it on makes your client easier to " - "fingerprint." }, - { "FastFirstHopPK", "Changing this option does not make your client more " - "secure, but does make it easier to fingerprint." }, - { "CloseHSClientCircuitsImmediatelyOnTimeout", "This option makes your " - "client easier to fingerprint." }, - { "CloseHSServiceRendCircuitsImmediatelyOnTimeout", "This option makes " - "your hidden services easier to fingerprint." }, - { "WarnUnsafeSocks", "Changing this option makes it easier for you " - "to accidentally lose your anonymity by leaking DNS information" }, - { "TLSECGroup", "The default is a nice secure choice; the other option " - "is less secure." }, - { "ControlListenAddress", "Use ControlPort instead." }, - { "DirListenAddress", "Use DirPort instead, possibly with the " - "NoAdvertise sub-option" }, - { "DNSListenAddress", "Use DNSPort instead." }, - { "SocksListenAddress", "Use SocksPort instead." }, - { "TransListenAddress", "Use TransPort instead." }, - { "NATDListenAddress", "Use NATDPort instead." }, - { "ORListenAddress", "Use ORPort instead, possibly with the " - "NoAdvertise sub-option" }, /* End of options deprecated since 0.2.9.2-alpha. */ { NULL, NULL } @@ -708,7 +685,9 @@ static int options_transition_affects_workers( const or_options_t *old_options, const or_options_t *new_options); static int options_transition_affects_descriptor( const or_options_t *old_options, const or_options_t *new_options); -static int check_nickname_list(char **lst, const char *name, char **msg); +static int normalize_nickname_list(config_line_t **normalized_out, + const config_line_t *lst, const char *name, + char **msg); static char *get_bindaddr_from_transport_listen_line(const char *line, const char *transport); static int parse_ports(or_options_t *options, int validate_only, @@ -916,6 +895,7 @@ or_options_free(or_options_t *options) tor_free(options->BridgePassword_AuthDigest_); tor_free(options->command_arg); tor_free(options->master_key_fname); + config_free_lines(options->MyFamily); config_free(&options_format, options); } @@ -1554,23 +1534,6 @@ get_effective_bwburst(const or_options_t *options) return (uint32_t)bw; } -/** Return True if any changes from <b>old_options</b> to - * <b>new_options</b> needs us to refresh our TLS context. */ -static int -options_transition_requires_fresh_tls_context(const or_options_t *old_options, - const or_options_t *new_options) -{ - tor_assert(new_options); - - if (!old_options) - return 0; - - if (!opt_streq(old_options->TLSECGroup, new_options->TLSECGroup)) - return 1; - - return 0; -} - /** * Return true if changing the configuration from <b>old</b> to <b>new</b> * affects the guard susbsystem. @@ -1789,13 +1752,6 @@ options_act(const or_options_t *old_options) log_warn(LD_BUG,"Error initializing keys; exiting"); return -1; } - } else if (old_options && - options_transition_requires_fresh_tls_context(old_options, - options)) { - if (router_initialize_tls_context() < 0) { - log_warn(LD_BUG,"Error initializing TLS context."); - return -1; - } } /* Write our PID to the PID file. If we do not have write permissions we @@ -2819,10 +2775,10 @@ compute_publishserverdescriptor(or_options_t *options) #define MIN_REND_POST_PERIOD (10*60) #define MIN_REND_POST_PERIOD_TESTING (5) -/** Highest allowable value for PredictedPortsRelevanceTime; if this is - * too high, our selection of exits will decrease for an extended - * period of time to an uncomfortable level .*/ -#define MAX_PREDICTED_CIRCS_RELEVANCE (60*60) +/** Higest allowable value for CircuitsAvailableTimeout. + * If this is too large, client connections will stay open for too long, + * incurring extra padding overhead. */ +#define MAX_CIRCS_AVAILABLE_TIME (24*60*60) /** Highest allowable value for RendPostPeriod. */ #define MAX_DIR_PERIOD ((7*24*60*60)/2) @@ -3008,6 +2964,10 @@ options_validate(or_options_t *old_options, or_options_t *options, tor_assert(msg); *msg = NULL; + if (parse_ports(options, 1, msg, &n_ports, + &world_writable_control_socket) < 0) + return -1; + /* Set UseEntryGuards from the configured value, before we check it below. * We change UseEntryGuards when it's incompatible with other options, * but leave UseEntryGuards_option with the original value. @@ -3026,10 +2986,6 @@ options_validate(or_options_t *old_options, or_options_t *options, "for details.", uname); } - if (parse_ports(options, 1, msg, &n_ports, - &world_writable_control_socket) < 0) - return -1; - if (parse_outbound_addresses(options, 1, msg) < 0) return -1; @@ -3122,14 +3078,12 @@ options_validate(or_options_t *old_options, or_options_t *options, if (strcasecmp(options->TransProxyType, "default") && !options->TransPort_set) { - REJECT("Cannot use TransProxyType without any valid TransPort or " - "TransListenAddress."); + REJECT("Cannot use TransProxyType without any valid TransPort."); } } #else if (options->TransPort_set) - REJECT("TransPort and TransListenAddress are disabled " - "in this build."); + REJECT("TransPort is disabled in this build."); #endif if (options->TokenBucketRefillInterval <= 0 @@ -3166,15 +3120,6 @@ options_validate(or_options_t *old_options, or_options_t *options, } } - if (options->TLSECGroup && (strcasecmp(options->TLSECGroup, "P256") && - strcasecmp(options->TLSECGroup, "P224"))) { - COMPLAIN("Unrecognized TLSECGroup: Falling back to the default."); - tor_free(options->TLSECGroup); - } - if (!evaluate_ecgroup_for_tls(options->TLSECGroup)) { - REJECT("Unsupported TLSECGroup."); - } - if (options->ExcludeNodes && options->StrictNodes) { COMPLAIN("You have asked to exclude certain relays from all positions " "in your circuits. Expect hidden services and other Tor " @@ -3382,28 +3327,6 @@ options_validate(or_options_t *old_options, or_options_t *options, server_mode(options)); options->MaxMemInQueues_low_threshold = (options->MaxMemInQueues / 4) * 3; - options->AllowInvalid_ = 0; - - if (options->AllowInvalidNodes) { - SMARTLIST_FOREACH_BEGIN(options->AllowInvalidNodes, const char *, cp) { - if (!strcasecmp(cp, "entry")) - options->AllowInvalid_ |= ALLOW_INVALID_ENTRY; - else if (!strcasecmp(cp, "exit")) - options->AllowInvalid_ |= ALLOW_INVALID_EXIT; - else if (!strcasecmp(cp, "middle")) - options->AllowInvalid_ |= ALLOW_INVALID_MIDDLE; - else if (!strcasecmp(cp, "introduction")) - options->AllowInvalid_ |= ALLOW_INVALID_INTRODUCTION; - else if (!strcasecmp(cp, "rendezvous")) - options->AllowInvalid_ |= ALLOW_INVALID_RENDEZVOUS; - else { - tor_asprintf(msg, - "Unrecognized value '%s' in AllowInvalidNodes", cp); - return -1; - } - } SMARTLIST_FOREACH_END(cp); - } - if (!options->SafeLogging || !strcasecmp(options->SafeLogging, "0")) { options->SafeLogging_ = SAFELOG_SCRUB_NONE; @@ -3439,6 +3362,14 @@ options_validate(or_options_t *old_options, or_options_t *options, options->DirPort_set = 0; } + if (server_mode(options) && options->ConnectionPadding != -1) { + REJECT("Relays must use 'auto' for the ConnectionPadding setting."); + } + + if (server_mode(options) && options->ReducedConnectionPadding != 0) { + REJECT("Relays cannot set ReducedConnectionPadding. "); + } + if (options->MinUptimeHidServDirectoryV2 < 0) { log_warn(LD_CONFIG, "MinUptimeHidServDirectoryV2 option must be at " "least 0 seconds. Changing to 0."); @@ -3460,17 +3391,17 @@ options_validate(or_options_t *old_options, or_options_t *options, options->RendPostPeriod = MAX_DIR_PERIOD; } - if (options->PredictedPortsRelevanceTime > - MAX_PREDICTED_CIRCS_RELEVANCE) { - log_warn(LD_CONFIG, "PredictedPortsRelevanceTime is too large; " - "clipping to %ds.", MAX_PREDICTED_CIRCS_RELEVANCE); - options->PredictedPortsRelevanceTime = MAX_PREDICTED_CIRCS_RELEVANCE; - } - /* Check the Single Onion Service options */ if (options_validate_single_onion(options, msg) < 0) return -1; + if (options->CircuitsAvailableTimeout > MAX_CIRCS_AVAILABLE_TIME) { + // options_t is immutable for new code (the above code is older), + // so just make the user fix the value themselves rather than + // silently keep a shadow value lower than what they asked for. + REJECT("CircuitsAvailableTimeout is too large. Max is 24 hours."); + } + #ifdef ENABLE_TOR2WEB_MODE if (options->Tor2webMode && options->UseEntryGuards) { /* tor2web mode clients do not (and should not) use entry guards @@ -3889,13 +3820,14 @@ options_validate(or_options_t *old_options, or_options_t *options, "have it group-readable."); } - if (options->MyFamily && options->BridgeRelay) { + if (options->MyFamily_lines && options->BridgeRelay) { log_warn(LD_CONFIG, "Listing a family for a bridge relay is not " "supported: it can reveal bridge fingerprints to censors. " "You should also make sure you aren't listing this bridge's " "fingerprint in any other MyFamily."); } - if (check_nickname_list(&options->MyFamily, "MyFamily", msg)) + if (normalize_nickname_list(&options->MyFamily, + options->MyFamily_lines, "MyFamily", msg)) return -1; for (cl = options->NodeFamilies; cl; cl = cl->next) { routerset_t *rs = routerset_new(); @@ -4092,13 +4024,6 @@ options_validate(or_options_t *old_options, or_options_t *options, "AlternateDirAuthority and AlternateBridgeAuthority configured."); } - if (options->AllowSingleHopExits && !options->DirAuthorities) { - COMPLAIN("You have set AllowSingleHopExits; now your relay will allow " - "others to make one-hop exits. However, since by default most " - "clients avoid relays that set this option, most clients will " - "ignore you."); - } - #define CHECK_DEFAULT(arg) \ STMT_BEGIN \ if (!options->TestingTorNetwork && \ @@ -4603,7 +4528,7 @@ options_transition_affects_descriptor(const or_options_t *old_options, get_effective_bwburst(old_options) != get_effective_bwburst(new_options) || !opt_streq(old_options->ContactInfo, new_options->ContactInfo) || - !opt_streq(old_options->MyFamily, new_options->MyFamily) || + !config_lines_eq(old_options->MyFamily, new_options->MyFamily) || !opt_streq(old_options->AccountingStart, new_options->AccountingStart) || old_options->AccountingMax != new_options->AccountingMax || old_options->AccountingRule != new_options->AccountingRule || @@ -4699,27 +4624,36 @@ get_default_conf_file(int defaults_file) #endif } -/** Verify whether lst is a string containing valid-looking comma-separated - * nicknames, or NULL. Will normalise <b>lst</b> to prefix '$' to any nickname - * or fingerprint that needs it. Return 0 on success. +/** Verify whether lst is a list of strings containing valid-looking + * comma-separated nicknames, or NULL. Will normalise <b>lst</b> to prefix '$' + * to any nickname or fingerprint that needs it. Also splits comma-separated + * list elements into multiple elements. Return 0 on success. * Warn and return -1 on failure. */ static int -check_nickname_list(char **lst, const char *name, char **msg) +normalize_nickname_list(config_line_t **normalized_out, + const config_line_t *lst, const char *name, + char **msg) { - int r = 0; - smartlist_t *sl; - int changes = 0; - - if (!*lst) + if (!lst) return 0; - sl = smartlist_new(); - smartlist_split_string(sl, *lst, ",", - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK|SPLIT_STRIP_SPACE, 0); + config_line_t *new_nicknames = NULL; + config_line_t **new_nicknames_next = &new_nicknames; - SMARTLIST_FOREACH_BEGIN(sl, char *, s) + const config_line_t *cl; + for (cl = lst; cl; cl = cl->next) { + const char *line = cl->value; + if (!line) + continue; + + int valid_line = 1; + smartlist_t *sl = smartlist_new(); + smartlist_split_string(sl, line, ",", + SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK|SPLIT_STRIP_SPACE, 0); + SMARTLIST_FOREACH_BEGIN(sl, char *, s) { + char *normalized = NULL; if (!is_legal_nickname_or_hexdigest(s)) { // check if first char is dollar if (s[0] != '$') { @@ -4728,36 +4662,45 @@ check_nickname_list(char **lst, const char *name, char **msg) tor_asprintf(&prepended, "$%s", s); if (is_legal_nickname_or_hexdigest(prepended)) { - // The nickname is valid when it's prepended, swap the current - // version with a prepended one - tor_free(s); - SMARTLIST_REPLACE_CURRENT(sl, s, prepended); - changes = 1; - continue; + // The nickname is valid when it's prepended, set it as the + // normalized version + normalized = prepended; + } else { + // Still not valid, free and fallback to error message + tor_free(prepended); } - - // Still not valid, free and fallback to error message - tor_free(prepended); } - tor_asprintf(msg, "Invalid nickname '%s' in %s line", s, name); - r = -1; - break; + if (!normalized) { + tor_asprintf(msg, "Invalid nickname '%s' in %s line", s, name); + valid_line = 0; + break; + } + } else { + normalized = tor_strdup(s); } - } - SMARTLIST_FOREACH_END(s); - // Replace the caller's nickname list with a fixed one - if (changes && r == 0) { - char *newNicknames = smartlist_join_strings(sl, ", ", 0, NULL); - tor_free(*lst); - *lst = newNicknames; + config_line_t *next = tor_malloc_zero(sizeof(*next)); + next->key = tor_strdup(cl->key); + next->value = normalized; + next->next = NULL; + + *new_nicknames_next = next; + new_nicknames_next = &next->next; + } SMARTLIST_FOREACH_END(s); + + SMARTLIST_FOREACH(sl, char *, s, tor_free(s)); + smartlist_free(sl); + + if (!valid_line) { + config_free_lines(new_nicknames); + return -1; + } } - SMARTLIST_FOREACH(sl, char *, s, tor_free(s)); - smartlist_free(sl); + *normalized_out = new_nicknames; - return r; + return 0; } /** Learn config file name from command line arguments, or use the default. @@ -6459,14 +6402,9 @@ warn_client_dns_cache(const char *option, int disabling) /** * Parse port configuration for a single port type. * - * Read entries of the "FooPort" type from the list <b>ports</b>, and - * entries of the "FooListenAddress" type from the list - * <b>listenaddrs</b>. Two syntaxes are supported: a legacy syntax - * where FooPort is at most a single entry containing a port number and - * where FooListenAddress has any number of address:port combinations; - * and a new syntax where there are no FooListenAddress entries and - * where FooPort can have any number of entries of the format - * "[Address:][Port] IsolationOptions". + * Read entries of the "FooPort" type from the list <b>ports</b>. Syntax is + * that FooPort can have any number of entries of the format + * "[Address:][Port] IsolationOptions". * * In log messages, describe the port type as <b>portname</b>. * @@ -6480,9 +6418,6 @@ warn_client_dns_cache(const char *option, int disabling) * ports are not on a local address. If CL_PORT_FORBID_NONLOCAL is set, * this is a control port with no password set: don't even allow it. * - * Unless CL_PORT_ALLOW_EXTRA_LISTENADDR is set in <b>flags</b>, warn - * if FooListenAddress is set but FooPort is 0. - * * If CL_PORT_SERVER_OPTIONS is set in <b>flags</b>, do not allow stream * isolation options in the FooPort entries; instead allow the * server-port option set. @@ -6497,7 +6432,6 @@ warn_client_dns_cache(const char *option, int disabling) STATIC int parse_port_config(smartlist_t *out, const config_line_t *ports, - const config_line_t *listenaddrs, const char *portname, int listener_type, const char *defaultaddr, @@ -6514,90 +6448,12 @@ parse_port_config(smartlist_t *out, const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL; const unsigned default_to_group_writable = flags & CL_PORT_DFLT_GROUP_WRITABLE; - const unsigned allow_spurious_listenaddr = - flags & CL_PORT_ALLOW_EXTRA_LISTENADDR; const unsigned takes_hostnames = flags & CL_PORT_TAKES_HOSTNAMES; const unsigned is_unix_socket = flags & CL_PORT_IS_UNIXSOCKET; int got_zero_port=0, got_nonzero_port=0; char *unix_socket_path = NULL; - /* FooListenAddress is deprecated; let's make it work like it used to work, - * though. */ - if (listenaddrs) { - int mainport = defaultport; - - if (ports && ports->next) { - log_warn(LD_CONFIG, "%sListenAddress can't be used when there are " - "multiple %sPort lines", portname, portname); - return -1; - } else if (ports) { - if (!strcmp(ports->value, "auto")) { - mainport = CFG_AUTO_PORT; - } else { - int ok; - mainport = (int)tor_parse_long(ports->value, 10, 0, 65535, &ok, NULL); - if (!ok) { - log_warn(LD_CONFIG, "%sListenAddress can only be used with a single " - "%sPort with value \"auto\" or 1-65535 and no options set.", - portname, portname); - return -1; - } - } - } - - if (mainport == 0) { - if (allow_spurious_listenaddr) - return 1; /*DOCDOC*/ - log_warn(LD_CONFIG, "%sPort must be defined if %sListenAddress is used", - portname, portname); - return -1; - } - - if (use_server_options && out) { - /* Add a no_listen port. */ - port_cfg_t *cfg = port_cfg_new(0); - cfg->type = listener_type; - cfg->port = mainport; - tor_addr_make_unspec(&cfg->addr); /* Server ports default to 0.0.0.0 */ - cfg->server_cfg.no_listen = 1; - cfg->server_cfg.bind_ipv4_only = 1; - /* cfg->entry_cfg defaults are already set by port_cfg_new */ - smartlist_add(out, cfg); - } - - for (; listenaddrs; listenaddrs = listenaddrs->next) { - tor_addr_t addr; - uint16_t port = 0; - if (tor_addr_port_lookup(listenaddrs->value, &addr, &port) < 0) { - log_warn(LD_CONFIG, "Unable to parse %sListenAddress '%s'", - portname, listenaddrs->value); - return -1; - } - if (out) { - port_cfg_t *cfg = port_cfg_new(0); - cfg->type = listener_type; - cfg->port = port ? port : mainport; - tor_addr_copy(&cfg->addr, &addr); - cfg->entry_cfg.session_group = SESSION_GROUP_UNSET; - cfg->entry_cfg.isolation_flags = ISO_DEFAULT; - cfg->server_cfg.no_advertise = 1; - smartlist_add(out, cfg); - } - } - - if (warn_nonlocal && out) { - if (is_control) - warn_nonlocal_controller_ports(out, forbid_nonlocal); - else if (is_ext_orport) - warn_nonlocal_ext_orports(out, portname); - else - warn_nonlocal_client_ports(out, portname, listener_type); - } - return 0; - } /* end if (listenaddrs) */ - - /* No ListenAddress lines. If there's no FooPort, then maybe make a default - * one. */ + /* If there's no FooPort, then maybe make a default one. */ if (! ports) { if (defaultport && defaultaddr && out) { port_cfg_t *cfg = port_cfg_new(is_unix_socket ? strlen(defaultaddr) : 0); @@ -7068,36 +6924,35 @@ parse_ports(or_options_t *options, int validate_only, const unsigned gw_flag = options->SocksSocketsGroupWritable ? CL_PORT_DFLT_GROUP_WRITABLE : 0; if (parse_port_config(ports, - options->SocksPort_lines, options->SocksListenAddress, + options->SocksPort_lines, "Socks", CONN_TYPE_AP_LISTENER, "127.0.0.1", 9050, - CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR| - CL_PORT_TAKES_HOSTNAMES|gw_flag) < 0) { - *msg = tor_strdup("Invalid SocksPort/SocksListenAddress configuration"); + CL_PORT_WARN_NONLOCAL|CL_PORT_TAKES_HOSTNAMES|gw_flag) < 0) { + *msg = tor_strdup("Invalid SocksPort configuration"); goto err; } if (parse_port_config(ports, - options->DNSPort_lines, options->DNSListenAddress, + options->DNSPort_lines, "DNS", CONN_TYPE_AP_DNS_LISTENER, "127.0.0.1", 0, CL_PORT_WARN_NONLOCAL|CL_PORT_TAKES_HOSTNAMES) < 0) { - *msg = tor_strdup("Invalid DNSPort/DNSListenAddress configuration"); + *msg = tor_strdup("Invalid DNSPort configuration"); goto err; } if (parse_port_config(ports, - options->TransPort_lines, options->TransListenAddress, + options->TransPort_lines, "Trans", CONN_TYPE_AP_TRANS_LISTENER, "127.0.0.1", 0, CL_PORT_WARN_NONLOCAL) < 0) { - *msg = tor_strdup("Invalid TransPort/TransListenAddress configuration"); + *msg = tor_strdup("Invalid TransPort configuration"); goto err; } if (parse_port_config(ports, - options->NATDPort_lines, options->NATDListenAddress, + options->NATDPort_lines, "NATD", CONN_TYPE_AP_NATD_LISTENER, "127.0.0.1", 0, CL_PORT_WARN_NONLOCAL) < 0) { - *msg = tor_strdup("Invalid NatdPort/NatdListenAddress configuration"); + *msg = tor_strdup("Invalid NatdPort configuration"); goto err; } { @@ -7113,16 +6968,14 @@ parse_ports(or_options_t *options, int validate_only, if (parse_port_config(ports, options->ControlPort_lines, - options->ControlListenAddress, "Control", CONN_TYPE_CONTROL_LISTENER, "127.0.0.1", 0, control_port_flags) < 0) { - *msg = tor_strdup("Invalid ControlPort/ControlListenAddress " - "configuration"); + *msg = tor_strdup("Invalid ControlPort configuration"); goto err; } - if (parse_port_config(ports, options->ControlSocket, NULL, + if (parse_port_config(ports, options->ControlSocket, "ControlSocket", CONN_TYPE_CONTROL_LISTENER, NULL, 0, control_port_flags | CL_PORT_IS_UNIXSOCKET) < 0) { @@ -7132,15 +6985,15 @@ parse_ports(or_options_t *options, int validate_only, } if (! options->ClientOnly) { if (parse_port_config(ports, - options->ORPort_lines, options->ORListenAddress, + options->ORPort_lines, "OR", CONN_TYPE_OR_LISTENER, "0.0.0.0", 0, CL_PORT_SERVER_OPTIONS) < 0) { - *msg = tor_strdup("Invalid ORPort/ORListenAddress configuration"); + *msg = tor_strdup("Invalid ORPort configuration"); goto err; } if (parse_port_config(ports, - options->ExtORPort_lines, NULL, + options->ExtORPort_lines, "ExtOR", CONN_TYPE_EXT_OR_LISTENER, "127.0.0.1", 0, CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) { @@ -7148,11 +7001,11 @@ parse_ports(or_options_t *options, int validate_only, goto err; } if (parse_port_config(ports, - options->DirPort_lines, options->DirListenAddress, + options->DirPort_lines, "Dir", CONN_TYPE_DIR_LISTENER, "0.0.0.0", 0, CL_PORT_SERVER_OPTIONS) < 0) { - *msg = tor_strdup("Invalid DirPort/DirListenAddress configuration"); + *msg = tor_strdup("Invalid DirPort configuration"); goto err; } } diff --git a/src/or/config.h b/src/or/config.h index bb7802c990..27aec7fe3d 100644 --- a/src/or/config.h +++ b/src/or/config.h @@ -157,7 +157,7 @@ smartlist_t *get_options_for_server_transport(const char *transport); #define CL_PORT_NO_STREAM_OPTIONS (1u<<0) #define CL_PORT_WARN_NONLOCAL (1u<<1) -#define CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2) +/* Was CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2) */ #define CL_PORT_SERVER_OPTIONS (1u<<3) #define CL_PORT_FORBID_NONLOCAL (1u<<4) #define CL_PORT_TAKES_HOSTNAMES (1u<<5) @@ -193,7 +193,6 @@ STATIC int have_enough_mem_for_dircache(const or_options_t *options, size_t total_mem, char **msg); STATIC int parse_port_config(smartlist_t *out, const config_line_t *ports, - const config_line_t *listenaddrs, const char *portname, int listener_type, const char *defaultaddr, diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index d1728eca6d..fd9c97bd3d 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -1987,8 +1987,8 @@ destination_from_socket(entry_connection_t *conn, socks_request_t *req) socklen_t orig_dst_len = sizeof(orig_dst); tor_addr_t addr; -#ifdef TRANS_TRPOXY - if (options->TransProxyType_parsed == TPT_TPROXY) { +#ifdef TRANS_TPROXY + if (get_options()->TransProxyType_parsed == TPT_TPROXY) { if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&orig_dst, &orig_dst_len) < 0) { int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s); @@ -3133,15 +3133,13 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) port = bcell.port; if (or_circ && or_circ->p_chan) { - if (!options->AllowSingleHopExits && - (or_circ->is_first_hop || - (!connection_or_digest_is_known_relay( + if ((or_circ->is_first_hop || + (!connection_or_digest_is_known_relay( or_circ->p_chan->identity_digest) && should_refuse_unknown_exits(options)))) { - /* Don't let clients use us as a single-hop proxy, unless the user - * has explicitly allowed that in the config. It attracts attackers - * and users who'd be better off with, well, single-hop proxies. - */ + /* Don't let clients use us as a single-hop proxy. It attracts + * attackers and users who'd be better off with, well, single-hop + * proxies. */ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Attempt by %s to open a stream %s. Closing.", safe_str(channel_get_canonical_remote_descr(or_circ->p_chan)), diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 61da43e119..280f8f70ad 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -55,6 +55,7 @@ #include "ext_orport.h" #include "scheduler.h" #include "torcert.h" +#include "channelpadding.h" static int connection_tls_finish_handshake(or_connection_t *conn); static int connection_or_launch_v3_or_handshake(or_connection_t *conn); @@ -814,24 +815,6 @@ connection_or_update_token_buckets(smartlist_t *conns, }); } -/** How long do we wait before killing non-canonical OR connections with no - * circuits? In Tor versions up to 0.2.1.25 and 0.2.2.12-alpha, we waited 15 - * minutes before cancelling these connections, which caused fast relays to - * accrue many many idle connections. Hopefully 3-4.5 minutes is low enough - * that it kills most idle connections, without being so low that we cause - * clients to bounce on and off. - * - * For canonical connections, the limit is higher, at 15-22.5 minutes. - * - * For each OR connection, we randomly add up to 50% extra to its idle_timeout - * field, to avoid exposing when exactly the last circuit closed. Since we're - * storing idle_timeout in a uint16_t, don't let these values get higher than - * 12 hours or so without revising connection_or_set_canonical and/or expanding - * idle_timeout. - */ -#define IDLE_OR_CONN_TIMEOUT_NONCANONICAL 180 -#define IDLE_OR_CONN_TIMEOUT_CANONICAL 900 - /* Mark <b>or_conn</b> as canonical if <b>is_canonical</b> is set, and * non-canonical otherwise. Adjust idle_timeout accordingly. */ @@ -839,9 +822,6 @@ void connection_or_set_canonical(or_connection_t *or_conn, int is_canonical) { - const unsigned int timeout_base = is_canonical ? - IDLE_OR_CONN_TIMEOUT_CANONICAL : IDLE_OR_CONN_TIMEOUT_NONCANONICAL; - if (bool_eq(is_canonical, or_conn->is_canonical) && or_conn->idle_timeout != 0) { /* Don't recalculate an existing idle_timeout unless the canonical @@ -850,7 +830,14 @@ connection_or_set_canonical(or_connection_t *or_conn, } or_conn->is_canonical = !! is_canonical; /* force to a 1-bit boolean */ - or_conn->idle_timeout = timeout_base + crypto_rand_int(timeout_base / 2); + or_conn->idle_timeout = channelpadding_get_channel_idle_timeout( + TLS_CHAN_TO_BASE(or_conn->chan), is_canonical); + + log_info(LD_CIRC, + "Channel " U64_FORMAT " chose an idle timeout of %d.", + or_conn->chan ? + U64_PRINTF_ARG(TLS_CHAN_TO_BASE(or_conn->chan)->global_identifier):0, + or_conn->idle_timeout); } /** If we don't necessarily know the router we're connecting to, but we @@ -1053,10 +1040,8 @@ connection_or_group_set_badness_(smartlist_t *group, int force) } if (!best || - channel_is_better(now, - TLS_CHAN_TO_BASE(or_conn->chan), - TLS_CHAN_TO_BASE(best->chan), - 0)) { + channel_is_better(TLS_CHAN_TO_BASE(or_conn->chan), + TLS_CHAN_TO_BASE(best->chan))) { best = or_conn; } } SMARTLIST_FOREACH_END(or_conn); @@ -1084,11 +1069,9 @@ connection_or_group_set_badness_(smartlist_t *group, int force) or_conn->base_.state != OR_CONN_STATE_OPEN) continue; if (or_conn != best && - channel_is_better(now, - TLS_CHAN_TO_BASE(best->chan), - TLS_CHAN_TO_BASE(or_conn->chan), 1)) { - /* This isn't the best conn, _and_ the best conn is better than it, - even when we're being forgiving. */ + channel_is_better(TLS_CHAN_TO_BASE(best->chan), + TLS_CHAN_TO_BASE(or_conn->chan))) { + /* This isn't the best conn, _and_ the best conn is better than it */ if (best->is_canonical) { log_info(LD_OR, "Marking OR conn to %s:%d as unsuitable for new circuits: " @@ -1983,12 +1966,23 @@ connection_or_write_cell_to_buf(const cell_t *cell, or_connection_t *conn) cell_pack(&networkcell, cell, conn->wide_circ_ids); + rep_hist_padding_count_write(PADDING_TYPE_TOTAL); + if (cell->command == CELL_PADDING) + rep_hist_padding_count_write(PADDING_TYPE_CELL); + connection_write_to_buf(networkcell.body, cell_network_size, TO_CONN(conn)); /* Touch the channel's active timestamp if there is one */ - if (conn->chan) + if (conn->chan) { channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan)); + if (TLS_CHAN_TO_BASE(conn->chan)->currently_padding) { + rep_hist_padding_count_write(PADDING_TYPE_ENABLED_TOTAL); + if (cell->command == CELL_PADDING) + rep_hist_padding_count_write(PADDING_TYPE_ENABLED_CELL); + } + } + if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3) or_handshake_state_record_cell(conn, conn->handshake_state, cell, 0); } @@ -2094,7 +2088,7 @@ connection_or_process_cells_from_inbuf(or_connection_t *conn) } /** Array of recognized link protocol versions. */ -static const uint16_t or_protocol_versions[] = { 1, 2, 3, 4 }; +static const uint16_t or_protocol_versions[] = { 1, 2, 3, 4, 5 }; /** Number of versions in <b>or_protocol_versions</b>. */ static const int n_or_protocol_versions = (int)( sizeof(or_protocol_versions)/sizeof(uint16_t) ); diff --git a/src/or/connection_or.h b/src/or/connection_or.h index 40008426e9..4261658932 100644 --- a/src/or/connection_or.h +++ b/src/or/connection_or.h @@ -109,6 +109,8 @@ void var_cell_free(var_cell_t *cell); /* DOCDOC */ #define MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4 +#define MIN_LINK_PROTO_FOR_CHANNEL_PADDING 5 +#define MAX_LINK_PROTO MIN_LINK_PROTO_FOR_CHANNEL_PADDING void connection_or_group_set_badness_(smartlist_t *group, int force); diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c index 6ec031e9a5..068f9c5ea7 100644 --- a/src/or/consdiffmgr.c +++ b/src/or/consdiffmgr.c @@ -32,6 +32,15 @@ /* The valid-after time for a consensus (or for the target consensus of a * diff), encoded as ISO UTC. */ #define LABEL_VALID_AFTER "consensus-valid-after" +/* The fresh-until time for a consensus (or for the target consensus of a + * diff), encoded as ISO UTC. */ +#define LABEL_FRESH_UNTIL "consensus-fresh-until" +/* The valid-until time for a consensus (or for the target consensus of a + * diff), encoded as ISO UTC. */ +#define LABEL_VALID_UNTIL "consensus-valid-until" +/* Comma-separated list of hex-encoded identity digests for the voting + * authorities. */ +#define LABEL_SIGNATORIES "consensus-signatories" /* A hex encoded SHA3 digest of the object, as compressed (if any) */ #define LABEL_SHA3_DIGEST "sha3-digest" /* A hex encoded SHA3 digest of the object before compression. */ @@ -96,6 +105,36 @@ n_diff_compression_methods(void) return ARRAY_LENGTH(compress_diffs_with); } +/** Which methods do we use for precompressing consensuses? */ +static const compress_method_t compress_consensus_with[] = { + ZLIB_METHOD, +#ifdef HAVE_LZMA + LZMA_METHOD, +#endif +#ifdef HAVE_ZSTD + ZSTD_METHOD, +#endif +}; + +/** How many different methods will we try to use for diff compression? */ +STATIC unsigned +n_consensus_compression_methods(void) +{ + return ARRAY_LENGTH(compress_consensus_with); +} + +/** For which compression method do we retain old consensuses? There's no + * need to keep all of them, since we won't be serving them. We'll + * go with ZLIB_METHOD because it's pretty fast and everyone has it. + */ +#define RETAIN_CONSENSUS_COMPRESSED_WITH_METHOD ZLIB_METHOD + +/** Handles pointing to the latest consensus entries as compressed and + * stored. */ +static consensus_cache_entry_handle_t * + latest_consensus[N_CONSENSUS_FLAVORS] + [ARRAY_LENGTH(compress_consensus_with)]; + /** Hashtable node used to remember the current status of the diff * from a given sha3 digest to the current consensus. */ typedef struct cdm_diff_t { @@ -134,13 +173,12 @@ static consdiff_cfg_t consdiff_cfg = { }; static int consdiffmgr_ensure_space_for_files(int n); +static int consensus_queue_compression_work(const char *consensus, + const networkstatus_t *as_parsed); static int consensus_diff_queue_diff_work(consensus_cache_entry_t *diff_from, consensus_cache_entry_t *diff_to); static void consdiffmgr_set_cache_flags(void); -/* Just gzip consensuses for now. */ -#define COMPRESS_CONSENSUS_WITH GZIP_METHOD - /* ===== * Hashtable setup * ===== */ @@ -409,11 +447,6 @@ cdm_cache_lookup_consensus(consensus_flavor_t flavor, time_t valid_after) consensus_cache_filter_list(matches, LABEL_DOCTYPE, DOCTYPE_CONSENSUS); consensus_cache_entry_t *result = NULL; - if (smartlist_len(matches) > 1) { - log_warn(LD_BUG, "How odd; there appear to be two matching consensuses " - "with flavor %s published at %s.", - flavname, formatted_time); - } if (smartlist_len(matches)) { result = smartlist_get(matches, 0); } @@ -476,59 +509,7 @@ consdiffmgr_add_consensus(const char *consensus, } /* We don't have it. Add it to the cache. */ - consdiffmgr_ensure_space_for_files(1); - - { - size_t bodylen = strlen(consensus); - config_line_t *labels = NULL; - char formatted_time[ISO_TIME_LEN+1]; - format_iso_time_nospace(formatted_time, valid_after); - const char *flavname = networkstatus_get_flavor_name(flavor); - - cdm_labels_prepend_sha3(&labels, LABEL_SHA3_DIGEST_UNCOMPRESSED, - (const uint8_t *)consensus, bodylen); - { - const char *start, *end; - if (router_get_networkstatus_v3_signed_boundaries(consensus, - &start, &end) < 0) { - start = consensus; - end = consensus+bodylen; - } - cdm_labels_prepend_sha3(&labels, LABEL_SHA3_DIGEST_AS_SIGNED, - (const uint8_t *)start, - end - start); - } - - char *body_compressed = NULL; - size_t size_compressed = 0; - if (tor_compress(&body_compressed, &size_compressed, - consensus, bodylen, COMPRESS_CONSENSUS_WITH) < 0) { - config_free_lines(labels); - return -1; - } - cdm_labels_prepend_sha3(&labels, LABEL_SHA3_DIGEST, - (const uint8_t *)body_compressed, size_compressed); - config_line_prepend(&labels, LABEL_COMPRESSION_TYPE, - compression_method_get_name(COMPRESS_CONSENSUS_WITH)); - config_line_prepend(&labels, LABEL_FLAVOR, flavname); - config_line_prepend(&labels, LABEL_VALID_AFTER, formatted_time); - config_line_prepend(&labels, LABEL_DOCTYPE, DOCTYPE_CONSENSUS); - - entry = consensus_cache_add(cdm_cache_get(), - labels, - (const uint8_t *)body_compressed, - size_compressed); - tor_free(body_compressed); - config_free_lines(labels); - } - - if (entry) { - consensus_cache_entry_mark_for_aggressive_release(entry); - consensus_cache_entry_decref(entry); - } - - cdm_cache_dirty = 1; - return entry ? 0 : -1; + return consensus_queue_compression_work(consensus, as_parsed); } /** @@ -561,6 +542,47 @@ sort_and_find_most_recent(smartlist_t *lst) } } +/** Return i such that compress_consensus_with[i] == method. Return + * -1 if no such i exists. */ +static int +consensus_compression_method_pos(compress_method_t method) +{ + unsigned i; + for (i = 0; i < n_consensus_compression_methods(); ++i) { + if (compress_consensus_with[i] == method) { + return i; + } + } + return -1; +} + +/** + * If we know a consensus with the flavor <b>flavor</b> compressed with + * <b>method</b>, set *<b>entry_out</b> to that value. Return values are as + * for consdiffmgr_find_diff_from(). + */ +consdiff_status_t +consdiffmgr_find_consensus(struct consensus_cache_entry_t **entry_out, + consensus_flavor_t flavor, + compress_method_t method) +{ + tor_assert((int)flavor < N_CONSENSUS_FLAVORS); + + int pos = consensus_compression_method_pos(method); + if (pos < 0) { + // We don't compress consensuses with this method. + return CONSDIFF_NOT_FOUND; + } + consensus_cache_entry_handle_t *handle = latest_consensus[flavor][pos]; + if (!handle) + return CONSDIFF_NOT_FOUND; + *entry_out = consensus_cache_entry_handle_get(handle); + if (entry_out) + return CONSDIFF_AVAILABLE; + else + return CONSDIFF_NOT_FOUND; +} + /** * Look up consensus_cache_entry_t for the consensus of type <b>flavor</b>, * from the source consensus with the specified digest (which must be SHA3). @@ -701,6 +723,42 @@ consdiffmgr_cleanup(void) smartlist_clear(diffs); } + // 3. Delete all consensuses except the most recent that are compressed with + // an un-preferred method. + for (int flav = 0; flav < N_CONSENSUS_FLAVORS; ++flav) { + const char *flavname = networkstatus_get_flavor_name(flav); + /* Determine the most recent consensus of this flavor */ + consensus_cache_find_all(consensuses, cdm_cache_get(), + LABEL_DOCTYPE, DOCTYPE_CONSENSUS); + consensus_cache_filter_list(consensuses, LABEL_FLAVOR, flavname); + consensus_cache_entry_t *most_recent = + sort_and_find_most_recent(consensuses); + if (most_recent == NULL) + continue; + const char *most_recent_sha3_uncompressed = + consensus_cache_entry_get_value(most_recent, + LABEL_SHA3_DIGEST_UNCOMPRESSED); + const char *retain_methodname = compression_method_get_name( + RETAIN_CONSENSUS_COMPRESSED_WITH_METHOD); + + if (BUG(most_recent_sha3_uncompressed == NULL)) + continue; + SMARTLIST_FOREACH_BEGIN(consensuses, consensus_cache_entry_t *, ent) { + const char *lv_sha3_uncompressed = + consensus_cache_entry_get_value(ent, LABEL_SHA3_DIGEST_UNCOMPRESSED); + if (BUG(! lv_sha3_uncompressed)) + continue; + if (!strcmp(lv_sha3_uncompressed, most_recent_sha3_uncompressed)) + continue; // This _is_ the most recent. + const char *lv_methodname = + consensus_cache_entry_get_value(ent, LABEL_COMPRESSION_TYPE); + if (! lv_methodname || strcmp(lv_methodname, retain_methodname)) { + consensus_cache_entry_mark_for_removal(ent); + ++n_to_delete; + } + } SMARTLIST_FOREACH_END(ent); + } + smartlist_free(objects); smartlist_free(consensuses); smartlist_free(diffs); @@ -804,10 +862,14 @@ consdiffmgr_rescan_flavor_(consensus_flavor_t flavor) // 1. find the most recent consensus, and the ones that we might want // to diff to it. + const char *methodname = compression_method_get_name( + RETAIN_CONSENSUS_COMPRESSED_WITH_METHOD); + matches = smartlist_new(); consensus_cache_find_all(matches, cdm_cache_get(), LABEL_FLAVOR, flavname); consensus_cache_filter_list(matches, LABEL_DOCTYPE, DOCTYPE_CONSENSUS); + consensus_cache_filter_list(matches, LABEL_COMPRESSION_TYPE, methodname); consensus_cache_entry_t *most_recent = sort_and_find_most_recent(matches); if (!most_recent) { log_info(LD_DIRSERV, "No 'most recent' %s consensus found; " @@ -852,6 +914,10 @@ consdiffmgr_rescan_flavor_(consensus_flavor_t flavor) if (strmap_get(have_diff_from, va) != NULL) continue; /* we already have this one. */ smartlist_add(compute_diffs_from, ent); + /* Since we are not going to serve this as the most recent consensus + * any more, we should stop keeping it mmap'd when it's not in use. + */ + consensus_cache_entry_mark_for_aggressive_release(ent); } SMARTLIST_FOREACH_END(ent); log_info(LD_DIRSERV, @@ -897,6 +963,48 @@ consdiffmgr_rescan_flavor_(consensus_flavor_t flavor) } /** + * Scan the cache for the latest consensuses and add their handles to + * latest_consensus + */ +static void +consdiffmgr_consensus_load(void) +{ + smartlist_t *matches = smartlist_new(); + for (int flav = 0; flav < N_CONSENSUS_FLAVORS; ++flav) { + const char *flavname = networkstatus_get_flavor_name(flav); + smartlist_clear(matches); + consensus_cache_find_all(matches, cdm_cache_get(), + LABEL_FLAVOR, flavname); + consensus_cache_filter_list(matches, LABEL_DOCTYPE, DOCTYPE_CONSENSUS); + consensus_cache_entry_t *most_recent = sort_and_find_most_recent(matches); + if (! most_recent) + continue; // no consensuses. + const char *most_recent_sha3 = + consensus_cache_entry_get_value(most_recent, + LABEL_SHA3_DIGEST_UNCOMPRESSED); + if (BUG(most_recent_sha3 == NULL)) + continue; // LCOV_EXCL_LINE + consensus_cache_filter_list(matches, LABEL_SHA3_DIGEST_UNCOMPRESSED, + most_recent_sha3); + + // Everything that remains matches the most recent consensus of this + // flavor. + SMARTLIST_FOREACH_BEGIN(matches, consensus_cache_entry_t *, ent) { + const char *lv_compression = + consensus_cache_entry_get_value(ent, LABEL_COMPRESSION_TYPE); + compress_method_t method = + compression_method_get_by_name(lv_compression); + int pos = consensus_compression_method_pos(method); + if (pos < 0) + continue; + consensus_cache_entry_handle_free(latest_consensus[flav][pos]); + latest_consensus[flav][pos] = consensus_cache_entry_handle_new(ent); + } SMARTLIST_FOREACH_END(ent); + } + smartlist_free(matches); +} + +/** * Scan the cache for diffs, and add them to the hashtable. */ static void @@ -953,6 +1061,7 @@ consdiffmgr_rescan(void) if (cdm_cache_loaded == 0) { consdiffmgr_diffs_load(); + consdiffmgr_consensus_load(); cdm_cache_loaded = 1; } @@ -1068,6 +1177,14 @@ consdiffmgr_free_all(void) next = HT_NEXT_RMV(cdm_diff_ht, &cdm_diff_ht, diff); cdm_diff_free(this); } + int i; + unsigned j; + for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) { + for (j = 0; j < n_consensus_compression_methods(); ++j) { + consensus_cache_entry_handle_free(latest_consensus[i][j]); + } + } + memset(latest_consensus, 0, sizeof(latest_consensus)); consensus_cache_free(cons_diff_cache); cons_diff_cache = NULL; } @@ -1089,6 +1206,93 @@ typedef struct compressed_result_t { } compressed_result_t; /** + * Compress the bytestring <b>input</b> of length <b>len</b> using the + * <n>n_methods</b> compression methods listed in the array <b>methods</b>. + * + * For each successful compression, set the fields in the <b>results_out</b> + * array in the position corresponding to the compression method. Use + * <b>labels_in</b> as a basis for the labels of the result. + * + * Return 0 if all compression succeeded; -1 if any failed. + */ +static int +compress_multiple(compressed_result_t *results_out, int n_methods, + const compress_method_t *methods, + const uint8_t *input, size_t len, + const config_line_t *labels_in) +{ + int rv = 0; + int i; + for (i = 0; i < n_methods; ++i) { + compress_method_t method = methods[i]; + const char *methodname = compression_method_get_name(method); + char *result; + size_t sz; + if (0 == tor_compress(&result, &sz, (const char*)input, len, method)) { + results_out[i].body = (uint8_t*)result; + results_out[i].bodylen = sz; + results_out[i].labels = config_lines_dup(labels_in); + cdm_labels_prepend_sha3(&results_out[i].labels, LABEL_SHA3_DIGEST, + results_out[i].body, + results_out[i].bodylen); + config_line_prepend(&results_out[i].labels, + LABEL_COMPRESSION_TYPE, + methodname); + } else { + rv = -1; + } + } + return rv; +} + +/** + * Given an array of <b>n</b> compressed_result_t in <b>results</b>, + * as produced by compress_multiple, store them all into the + * consdiffmgr, and store handles to them in the <b>handles_out</b> + * array. + * + * Return CDM_DIFF_PRESENT if any was stored, and CDM_DIFF_ERROR if none + * was stored. + */ +static cdm_diff_status_t +store_multiple(consensus_cache_entry_handle_t **handles_out, + int n, + const compress_method_t *methods, + const compressed_result_t *results, + const char *description) +{ + cdm_diff_status_t status = CDM_DIFF_ERROR; + consdiffmgr_ensure_space_for_files(n); + + int i; + for (i = 0; i < n; ++i) { + compress_method_t method = methods[i]; + uint8_t *body_out = results[i].body; + size_t bodylen_out = results[i].bodylen; + config_line_t *labels = results[i].labels; + const char *methodname = compression_method_get_name(method); + if (body_out && bodylen_out && labels) { + /* Success! Store the results */ + log_info(LD_DIRSERV, "Adding %s, compressed with %s", + description, methodname); + + consensus_cache_entry_t *ent = + consensus_cache_add(cdm_cache_get(), + labels, + body_out, + bodylen_out); + if (BUG(ent == NULL)) + continue; + + status = CDM_DIFF_PRESENT; + handles_out[i] = consensus_cache_entry_handle_new(ent); + consensus_cache_entry_decref(ent); + } + } + return status; +} + +/** * An object passed to a worker thread that will try to produce a consensus * diff. */ @@ -1161,6 +1365,12 @@ consensus_diff_worker_threadfn(void *state_, void *work_) const char *lv_to_valid_after = consensus_cache_entry_get_value(job->diff_to, LABEL_VALID_AFTER); + const char *lv_to_fresh_until = + consensus_cache_entry_get_value(job->diff_to, LABEL_FRESH_UNTIL); + const char *lv_to_valid_until = + consensus_cache_entry_get_value(job->diff_to, LABEL_VALID_UNTIL); + const char *lv_to_signatories = + consensus_cache_entry_get_value(job->diff_to, LABEL_SIGNATORIES); const char *lv_from_valid_after = consensus_cache_entry_get_value(job->diff_from, LABEL_VALID_AFTER); const char *lv_from_digest = @@ -1230,6 +1440,12 @@ consensus_diff_worker_threadfn(void *state_, void *work_) job->out[0].bodylen = difflen; config_line_t *common_labels = NULL; + if (lv_to_valid_until) + config_line_prepend(&common_labels, LABEL_VALID_UNTIL, lv_to_valid_until); + if (lv_to_fresh_until) + config_line_prepend(&common_labels, LABEL_FRESH_UNTIL, lv_to_fresh_until); + if (lv_to_signatories) + config_line_prepend(&common_labels, LABEL_SIGNATORIES, lv_to_signatories); cdm_labels_prepend_sha3(&common_labels, LABEL_SHA3_DIGEST_UNCOMPRESSED, job->out[0].body, @@ -1252,24 +1468,10 @@ consensus_diff_worker_threadfn(void *state_, void *work_) job->out[0].body, job->out[0].bodylen); - unsigned u; - for (u = 1; u < n_diff_compression_methods(); ++u) { - compress_method_t method = compress_diffs_with[u]; - const char *methodname = compression_method_get_name(method); - char *result; - size_t sz; - if (0 == tor_compress(&result, &sz, consensus_diff, difflen, method)) { - job->out[u].body = (uint8_t*)result; - job->out[u].bodylen = sz; - job->out[u].labels = config_lines_dup(common_labels); - cdm_labels_prepend_sha3(&job->out[u].labels, LABEL_SHA3_DIGEST, - job->out[u].body, - job->out[u].bodylen); - config_line_prepend(&job->out[u].labels, - LABEL_COMPRESSION_TYPE, - methodname); - } - } + compress_multiple(job->out+1, + n_diff_compression_methods()-1, + compress_diffs_with+1, + (const uint8_t*)consensus_diff, difflen, common_labels); config_free_lines(common_labels); return WQ_RPL_REPLY; @@ -1335,36 +1537,20 @@ consensus_diff_worker_replyfn(void *work_) cache = 0; } - int status = CDM_DIFF_ERROR; consensus_cache_entry_handle_t *handles[ARRAY_LENGTH(compress_diffs_with)]; memset(handles, 0, sizeof(handles)); - consdiffmgr_ensure_space_for_files(n_diff_compression_methods()); - - unsigned u; - for (u = 0; u < n_diff_compression_methods(); ++u) { - compress_method_t method = compress_diffs_with[u]; - uint8_t *body_out = job->out[u].body; - size_t bodylen_out = job->out[u].bodylen; - config_line_t *labels = job->out[u].labels; - const char *methodname = compression_method_get_name(method); - if (body_out && bodylen_out && labels) { - /* Success! Store the results */ - log_info(LD_DIRSERV, "Adding consensus diff from %s to %s, " - "compressed with %s", - lv_from_digest, lv_to_digest, methodname); + char description[128]; + tor_snprintf(description, sizeof(description), + "consensus diff from %s to %s", + lv_from_digest, lv_to_digest); - consensus_cache_entry_t *ent = - consensus_cache_add(cdm_cache_get(), - labels, - body_out, - bodylen_out); + int status = store_multiple(handles, + n_diff_compression_methods(), + compress_diffs_with, + job->out, + description); - status = CDM_DIFF_PRESENT; - handles[u] = consensus_cache_entry_handle_new(ent); - consensus_cache_entry_decref(ent); - } - } if (status != CDM_DIFF_PRESENT) { /* Failure! Nothing to do but complain */ log_warn(LD_DIRSERV, @@ -1374,6 +1560,7 @@ consensus_diff_worker_replyfn(void *work_) status = CDM_DIFF_ERROR; } + unsigned u; for (u = 0; u < ARRAY_LENGTH(handles); ++u) { compress_method_t method = compress_diffs_with[u]; if (cache) { @@ -1425,3 +1612,229 @@ consensus_diff_queue_diff_work(consensus_cache_entry_t *diff_from, return -1; } +/** + * Holds requests and replies for consensus_compress_workers. + */ +typedef struct consensus_compress_worker_job_t { + char *consensus; + size_t consensus_len; + consensus_flavor_t flavor; + config_line_t *labels_in; + compressed_result_t out[ARRAY_LENGTH(compress_consensus_with)]; +} consensus_compress_worker_job_t; + +/** + * Free all resources held in <b>job</b> + */ +static void +consensus_compress_worker_job_free(consensus_compress_worker_job_t *job) +{ + if (!job) + return; + tor_free(job->consensus); + config_free_lines(job->labels_in); + unsigned u; + for (u = 0; u < n_consensus_compression_methods(); ++u) { + config_free_lines(job->out[u].labels); + tor_free(job->out[u].body); + } + tor_free(job); +} +/** + * Worker function. This function runs inside a worker thread and receives + * a consensus_compress_worker_job_t as its input. + */ +static workqueue_reply_t +consensus_compress_worker_threadfn(void *state_, void *work_) +{ + (void)state_; + consensus_compress_worker_job_t *job = work_; + consensus_flavor_t flavor = job->flavor; + const char *consensus = job->consensus; + size_t bodylen = job->consensus_len; + + config_line_t *labels = config_lines_dup(job->labels_in); + const char *flavname = networkstatus_get_flavor_name(flavor); + + cdm_labels_prepend_sha3(&labels, LABEL_SHA3_DIGEST_UNCOMPRESSED, + (const uint8_t *)consensus, bodylen); + { + const char *start, *end; + if (router_get_networkstatus_v3_signed_boundaries(consensus, + &start, &end) < 0) { + start = consensus; + end = consensus+bodylen; + } + cdm_labels_prepend_sha3(&labels, LABEL_SHA3_DIGEST_AS_SIGNED, + (const uint8_t *)start, + end - start); + } + config_line_prepend(&labels, LABEL_FLAVOR, flavname); + config_line_prepend(&labels, LABEL_DOCTYPE, DOCTYPE_CONSENSUS); + + compress_multiple(job->out, + n_consensus_compression_methods(), + compress_consensus_with, + (const uint8_t*)consensus, bodylen, labels); + config_free_lines(labels); + return WQ_RPL_REPLY; +} + +/** + * Worker function: This function runs in the main thread, and receives + * a consensus_diff_compress_job_t that the worker thread has already + * processed. + */ +static void +consensus_compress_worker_replyfn(void *work_) +{ + consensus_compress_worker_job_t *job = work_; + + consensus_cache_entry_handle_t *handles[ + ARRAY_LENGTH(compress_consensus_with)]; + memset(handles, 0, sizeof(handles)); + + store_multiple(handles, + n_consensus_compression_methods(), + compress_consensus_with, + job->out, + "consensus"); + cdm_cache_dirty = 1; + + unsigned u; + consensus_flavor_t f = job->flavor; + tor_assert((int)f < N_CONSENSUS_FLAVORS); + for (u = 0; u < ARRAY_LENGTH(handles); ++u) { + if (handles[u] == NULL) + continue; + consensus_cache_entry_handle_free(latest_consensus[f][u]); + latest_consensus[f][u] = handles[u]; + } + + consensus_compress_worker_job_free(job); +} + +/** + * If true, we compress in worker threads. + */ +static int background_compression = 0; + +/** + * Queue a job to compress <b>consensus</b> and store its compressed + * text in the cache. + */ +static int +consensus_queue_compression_work(const char *consensus, + const networkstatus_t *as_parsed) +{ + tor_assert(consensus); + tor_assert(as_parsed); + + consensus_compress_worker_job_t *job = tor_malloc_zero(sizeof(*job)); + job->consensus = tor_strdup(consensus); + job->consensus_len = strlen(consensus); + job->flavor = as_parsed->flavor; + + char va_str[ISO_TIME_LEN+1]; + char vu_str[ISO_TIME_LEN+1]; + char fu_str[ISO_TIME_LEN+1]; + format_iso_time_nospace(va_str, as_parsed->valid_after); + format_iso_time_nospace(fu_str, as_parsed->fresh_until); + format_iso_time_nospace(vu_str, as_parsed->valid_until); + config_line_append(&job->labels_in, LABEL_VALID_AFTER, va_str); + config_line_append(&job->labels_in, LABEL_FRESH_UNTIL, fu_str); + config_line_append(&job->labels_in, LABEL_VALID_UNTIL, vu_str); + if (as_parsed->voters) { + smartlist_t *hexvoters = smartlist_new(); + SMARTLIST_FOREACH_BEGIN(as_parsed->voters, + networkstatus_voter_info_t *, vi) { + if (smartlist_len(vi->sigs) == 0) + continue; // didn't sign. + char d[HEX_DIGEST_LEN+1]; + base16_encode(d, sizeof(d), vi->identity_digest, DIGEST_LEN); + smartlist_add_strdup(hexvoters, d); + } SMARTLIST_FOREACH_END(vi); + char *signers = smartlist_join_strings(hexvoters, ",", 0, NULL); + config_line_prepend(&job->labels_in, LABEL_SIGNATORIES, signers); + tor_free(signers); + SMARTLIST_FOREACH(hexvoters, char *, cp, tor_free(cp)); + } + + if (background_compression) { + workqueue_entry_t *work; + work = cpuworker_queue_work(consensus_compress_worker_threadfn, + consensus_compress_worker_replyfn, + job); + if (!work) { + consensus_compress_worker_job_free(job); + return -1; + } + + return 0; + } else { + consensus_compress_worker_threadfn(NULL, job); + consensus_compress_worker_replyfn(job); + return 0; + } +} + +/** + * Tell the consdiffmgr backend to compress consensuses in worker threads. + */ +void +consdiffmgr_enable_background_compression(void) +{ + // This isn't the default behavior because it would break unit tests. + background_compression = 1; +} + +/** Read the set of voters from the cached object <b>ent</b> into + * <b>out</b>, as a list of hex-encoded digests. Return 0 on success, + * -1 if no signatories were recorded. */ +int +consensus_cache_entry_get_voter_id_digests(const consensus_cache_entry_t *ent, + smartlist_t *out) +{ + tor_assert(ent); + tor_assert(out); + const char *s; + s = consensus_cache_entry_get_value(ent, LABEL_SIGNATORIES); + if (s == NULL) + return -1; + smartlist_split_string(out, s, ",", SPLIT_SKIP_SPACE|SPLIT_STRIP_SPACE, 0); + return 0; +} + +/** Read the fresh-until time of cached object <b>ent</b> into *<b>out</b> + * and return 0, or return -1 if no such time was recorded. */ +int +consensus_cache_entry_get_fresh_until(const consensus_cache_entry_t *ent, + time_t *out) +{ + tor_assert(ent); + tor_assert(out); + const char *s; + s = consensus_cache_entry_get_value(ent, LABEL_FRESH_UNTIL); + if (s == NULL || parse_iso_time_nospace(s, out) < 0) + return -1; + else + return 0; +} + +/** Read the valid until timestamp from the cached object <b>ent</b> into + * *<b>out</b> and return 0, or return -1 if no such time was recorded. */ +int +consensus_cache_entry_get_valid_until(const consensus_cache_entry_t *ent, + time_t *out) +{ + tor_assert(ent); + tor_assert(out); + + const char *s; + s = consensus_cache_entry_get_value(ent, LABEL_VALID_UNTIL); + if (s == NULL || parse_iso_time_nospace(s, out) < 0) + return -1; + else + return 0; +} + diff --git a/src/or/consdiffmgr.h b/src/or/consdiffmgr.h index 70a64f2f70..fe4f9ee239 100644 --- a/src/or/consdiffmgr.h +++ b/src/or/consdiffmgr.h @@ -22,6 +22,11 @@ struct consensus_cache_entry_t; // from conscache.h int consdiffmgr_add_consensus(const char *consensus, const networkstatus_t *as_parsed); +consdiff_status_t consdiffmgr_find_consensus( + struct consensus_cache_entry_t **entry_out, + consensus_flavor_t flavor, + compress_method_t method); + consdiff_status_t consdiffmgr_find_diff_from( struct consensus_cache_entry_t **entry_out, consensus_flavor_t flavor, @@ -29,8 +34,20 @@ consdiff_status_t consdiffmgr_find_diff_from( const uint8_t *digest, size_t digestlen, compress_method_t method); + +int consensus_cache_entry_get_voter_id_digests( + const struct consensus_cache_entry_t *ent, + smartlist_t *out); +int consensus_cache_entry_get_fresh_until( + const struct consensus_cache_entry_t *ent, + time_t *out); +int consensus_cache_entry_get_valid_until( + const struct consensus_cache_entry_t *ent, + time_t *out); + void consdiffmgr_rescan(void); int consdiffmgr_cleanup(void); +void consdiffmgr_enable_background_compression(void); void consdiffmgr_configure(const consdiff_cfg_t *cfg); struct sandbox_cfg_elem; int consdiffmgr_register_with_sandbox(struct sandbox_cfg_elem **cfg); @@ -39,6 +56,7 @@ int consdiffmgr_validate(void); #ifdef CONSDIFFMGR_PRIVATE STATIC unsigned n_diff_compression_methods(void); +STATIC unsigned n_consensus_compression_methods(void); STATIC consensus_cache_t *cdm_cache_get(void); STATIC consensus_cache_entry_t *cdm_cache_lookup_consensus( consensus_flavor_t flavor, time_t valid_after); diff --git a/src/or/control.c b/src/or/control.c index 65d29259ea..4e85c38123 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -3551,24 +3551,9 @@ handle_control_attachstream(control_connection_t *conn, uint32_t len, } /* Is this a single hop circuit? */ if (circ && (circuit_get_cpath_len(circ)<2 || hop==1)) { - const node_t *node = NULL; - char *exit_digest = NULL; - if (circ->build_state && - circ->build_state->chosen_exit && - !tor_digest_is_zero(circ->build_state->chosen_exit->identity_digest)) { - exit_digest = circ->build_state->chosen_exit->identity_digest; - node = node_get_by_id(exit_digest); - } - /* Do both the client and relay allow one-hop exit circuits? */ - if (!node || - !node_allows_single_hop_exits(node) || - !get_options()->AllowSingleHopCircuits) { - connection_write_str_to_buf( - "551 Can't attach stream to this one-hop circuit.\r\n", conn); - return 0; - } - tor_assert(exit_digest); - ap_conn->chosen_exit_name = tor_strdup(hex_str(exit_digest, DIGEST_LEN)); + connection_write_str_to_buf( + "551 Can't attach stream to this one-hop circuit.\r\n", conn); + return 0; } if (circ && hop>0) { diff --git a/src/or/directory.c b/src/or/directory.c index 20ff53759c..a5121ebf6c 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -13,6 +13,7 @@ #include "config.h" #include "connection.h" #include "connection_edge.h" +#include "conscache.h" #include "consdiff.h" #include "consdiffmgr.h" #include "control.h" @@ -117,7 +118,8 @@ static void dir_routerdesc_download_failed(smartlist_t *failed, int was_descriptor_digests); static void dir_microdesc_download_failed(smartlist_t *failed, int status_code); -static int client_likes_consensus(networkstatus_t *v, const char *want_url); +static int client_likes_consensus(const struct consensus_cache_entry_t *ent, + const char *want_url); static void connection_dir_close_consensus_fetches( dir_connection_t *except_this_one, const char *resource); @@ -1683,6 +1685,7 @@ directory_send_command(dir_connection_t *conn, char decorated_address[128]; smartlist_t *headers = smartlist_new(); char *url; + char *accept_encoding; size_t url_len; char request[8192]; size_t request_len, total_request_len = 0; @@ -1739,6 +1742,12 @@ directory_send_command(dir_connection_t *conn, proxystring[0] = 0; } + /* Add Accept-Encoding. */ + accept_encoding = accept_encoding_header(); + smartlist_add_asprintf(headers, "Accept-Encoding: %s\r\n", + accept_encoding); + tor_free(accept_encoding); + /* Add additional headers, if any */ { config_line_t *h; @@ -2066,16 +2075,15 @@ parse_http_response(const char *headers, int *code, time_t *date, if (!strcmpstart(s, "Content-Encoding: ")) { enc = s+18; break; }); - if (!enc || !strcmp(enc, "identity")) { + + if (enc == NULL) *compression = NO_METHOD; - } else if (!strcmp(enc, "deflate") || !strcmp(enc, "x-deflate")) { - *compression = ZLIB_METHOD; - } else if (!strcmp(enc, "gzip") || !strcmp(enc, "x-gzip")) { - *compression = GZIP_METHOD; - } else { - log_info(LD_HTTP, "Unrecognized content encoding: %s. Trying to deal.", - escaped(enc)); - *compression = UNKNOWN_METHOD; + else { + *compression = compression_method_get_by_name(enc); + + if (*compression == UNKNOWN_METHOD) + log_info(LD_HTTP, "Unrecognized content encoding: %s. Trying to deal.", + escaped(enc)); } } SMARTLIST_FOREACH(parsed_headers, char *, s, tor_free(s)); @@ -2317,37 +2325,31 @@ connection_dir_client_reached_eof(dir_connection_t *conn) if (compression == UNKNOWN_METHOD || guessed != compression) { /* Tell the user if we don't believe what we're told about compression.*/ const char *description1, *description2; - if (compression == ZLIB_METHOD) - description1 = "as deflated"; - else if (compression == GZIP_METHOD) - description1 = "as gzipped"; - else if (compression == NO_METHOD) - description1 = "as uncompressed"; - else - description1 = "with an unknown Content-Encoding"; - if (guessed == ZLIB_METHOD) - description2 = "deflated"; - else if (guessed == GZIP_METHOD) - description2 = "gzipped"; - else if (!plausible) + + description1 = compression_method_get_human_name(compression); + + if (BUG(description1 == NULL)) + description1 = compression_method_get_human_name(UNKNOWN_METHOD); + + if (guessed == UNKNOWN_METHOD && !plausible) description2 = "confusing binary junk"; else - description2 = "uncompressed"; + description2 = compression_method_get_human_name(guessed); - log_info(LD_HTTP, "HTTP body from server '%s:%d' was labeled %s, " + log_info(LD_HTTP, "HTTP body from server '%s:%d' was labeled as %s, " "but it seems to be %s.%s", conn->base_.address, conn->base_.port, description1, description2, (compression>0 && guessed>0)?" Trying both.":""); } - /* Try declared compression first if we can. */ - if (compression == GZIP_METHOD || compression == ZLIB_METHOD) + /* Try declared compression first if we can. + * tor_compress_supports_method() also returns true for NO_METHOD. */ + if (tor_compress_supports_method(compression)) tor_uncompress(&new_body, &new_len, body, body_len, compression, !allow_partial, LOG_PROTOCOL_WARN); /* Okay, if that didn't work, and we think that it was compressed * differently, try that. */ - if (!new_body && - (guessed == GZIP_METHOD || guessed == ZLIB_METHOD) && + if (!new_body && tor_compress_supports_method(guessed) && compression != guessed) tor_uncompress(&new_body, &new_len, body, body_len, guessed, !allow_partial, LOG_PROTOCOL_WARN); @@ -3312,6 +3314,15 @@ static compress_method_t srv_meth_pref_precompressed[] = { NO_METHOD }; +/** Array of compression methods to use (if supported) for serving + * streamed data, ordered from best to worst. */ +static compress_method_t srv_meth_pref_streaming_compression[] = { + ZSTD_METHOD, + ZLIB_METHOD, + GZIP_METHOD, + NO_METHOD +}; + /** Parse the compression methods listed in an Accept-Encoding header <b>h</b>, * and convert them to a bitfield where compression method x is supported if * and only if 1 << x is set in the bitfield. */ @@ -3337,6 +3348,38 @@ parse_accept_encoding_header(const char *h) return result; } +/** Array of compression methods to use (if supported) for requesting + * compressed data, ordered from best to worst. */ +static compress_method_t client_meth_pref[] = { + LZMA_METHOD, + ZSTD_METHOD, + ZLIB_METHOD, + GZIP_METHOD, + NO_METHOD +}; + +/** Return a newly allocated string containing a comma separated list of + * supported encodings. */ +STATIC char * +accept_encoding_header(void) +{ + smartlist_t *methods = smartlist_new(); + char *header = NULL; + compress_method_t method; + unsigned i; + + for (i = 0; i < ARRAY_LENGTH(client_meth_pref); ++i) { + method = client_meth_pref[i]; + if (tor_compress_supports_method(method)) + smartlist_add(methods, (char *)compression_method_get_name(method)); + } + + header = smartlist_join_strings(methods, ", ", 0, NULL); + smartlist_free(methods); + + return header; +} + /** Decide whether a client would accept the consensus we have. * * Clients can say they only want a consensus if it's signed by more @@ -3352,42 +3395,39 @@ parse_accept_encoding_header(const char *h) * consensus, 0 otherwise. */ int -client_likes_consensus(networkstatus_t *v, const char *want_url) +client_likes_consensus(const struct consensus_cache_entry_t *ent, + const char *want_url) { - smartlist_t *want_authorities = smartlist_new(); + smartlist_t *voters = smartlist_new(); int need_at_least; int have = 0; + if (consensus_cache_entry_get_voter_id_digests(ent, voters) != 0) { + return 1; // We don't know the voters; assume the client won't mind. */ + } + + smartlist_t *want_authorities = smartlist_new(); dir_split_resource_into_fingerprints(want_url, want_authorities, NULL, 0); need_at_least = smartlist_len(want_authorities)/2+1; - SMARTLIST_FOREACH_BEGIN(want_authorities, const char *, d) { - char want_digest[DIGEST_LEN]; - size_t want_len = strlen(d)/2; - if (want_len > DIGEST_LEN) - want_len = DIGEST_LEN; - - if (base16_decode(want_digest, DIGEST_LEN, d, want_len*2) - != (int) want_len) { - log_fn(LOG_PROTOCOL_WARN, LD_DIR, - "Failed to decode requested authority digest %s.", escaped(d)); - continue; - }; - SMARTLIST_FOREACH_BEGIN(v->voters, networkstatus_voter_info_t *, vi) { - if (smartlist_len(vi->sigs) && - tor_memeq(vi->identity_digest, want_digest, want_len)) { + SMARTLIST_FOREACH_BEGIN(want_authorities, const char *, want_digest) { + + SMARTLIST_FOREACH_BEGIN(voters, const char *, digest) { + if (!strcasecmpstart(digest, want_digest)) { have++; break; }; - } SMARTLIST_FOREACH_END(vi); + } SMARTLIST_FOREACH_END(digest); /* early exit, if we already have enough */ if (have >= need_at_least) break; - } SMARTLIST_FOREACH_END(d); + } SMARTLIST_FOREACH_END(want_digest); SMARTLIST_FOREACH(want_authorities, char *, d, tor_free(d)); smartlist_free(want_authorities); + SMARTLIST_FOREACH(voters, char *, cp, tor_free(cp)); + smartlist_free(voters); return (have >= need_at_least); } @@ -3532,8 +3572,9 @@ directory_handle_command_get,(dir_connection_t *conn, const char *headers, tor_free(header); } else { compression_methods_supported = (1u << NO_METHOD); - if (zlib_compressed_in_url) - compression_methods_supported |= (1u << ZLIB_METHOD); + } + if (zlib_compressed_in_url) { + compression_methods_supported |= (1u << ZLIB_METHOD); } /* Remove all methods that we don't both support. */ @@ -3593,20 +3634,25 @@ handle_get_frontpage(dir_connection_t *conn, const get_handler_args_t *args) return 0; } -/** Warn that the consensus <b>v</b> of type <b>flavor</b> is too old and will - * not be served to clients. Rate-limit the warning to avoid logging an entry - * on every request. +/** Warn that the cached consensus <b>consensus</b> of type + * <b>flavor</b> is too old and will not be served to clients. Rate-limit the + * warning to avoid logging an entry on every request. */ static void -warn_consensus_is_too_old(networkstatus_t *v, const char *flavor, time_t now) +warn_consensus_is_too_old(const struct consensus_cache_entry_t *consensus, + const char *flavor, time_t now) { #define TOO_OLD_WARNING_INTERVAL (60*60) static ratelim_t warned = RATELIM_INIT(TOO_OLD_WARNING_INTERVAL); char timestamp[ISO_TIME_LEN+1]; + time_t valid_until; char *dupes; + if (consensus_cache_entry_get_valid_until(consensus, &valid_until)) + return; + if ((dupes = rate_limit_log(&warned, now))) { - format_local_iso_time(timestamp, v->valid_until); + format_local_iso_time(timestamp, valid_until); log_warn(LD_DIRSERV, "Our %s%sconsensus is too old, so we will not " "serve it to clients. It was valid until %s local time and we " "continued to serve it for up to 24 hours after it expired.%s", @@ -3647,6 +3693,13 @@ parse_or_diff_from_header(smartlist_t **digests_out, const char *headers) return 0; } +/** Fallback compression method. The fallback compression method is used in + * case a client requests a non-compressed document. We only store compressed + * documents, so we use this compression method to fetch the document and let + * the spooling system do the streaming decompression. + */ +#define FALLBACK_COMPRESS_METHOD ZLIB_METHOD + /** * Try to find the best consensus diff possible in order to serve a client * request for a diff from one of the consensuses in <b>digests</b> to the @@ -3676,9 +3729,82 @@ find_best_diff(const smartlist_t *digests, int flav, } } } SMARTLIST_FOREACH_END(diff_from); + + SMARTLIST_FOREACH_BEGIN(digests, const uint8_t *, diff_from) { + if (consdiffmgr_find_diff_from(&result, flav, DIGEST_SHA3_256, diff_from, + DIGEST256_LEN, FALLBACK_COMPRESS_METHOD) == CONSDIFF_AVAILABLE) { + tor_assert_nonfatal(result); + *compression_used_out = FALLBACK_COMPRESS_METHOD; + return result; + } + } SMARTLIST_FOREACH_END(diff_from); + return NULL; } +/** Lookup the cached consensus document by the flavor found in <b>flav</b>. + * The prefered set of compression methods should be listed in the + * <b>compression_methods</b> bitfield. The compression method chosen (if any) + * is stored in <b>compression_used_out</b>. */ +static struct consensus_cache_entry_t * +find_best_consensus(int flav, + unsigned compression_methods, + compress_method_t *compression_used_out) +{ + struct consensus_cache_entry_t *result = NULL; + unsigned u; + + for (u = 0; u < ARRAY_LENGTH(srv_meth_pref_precompressed); ++u) { + compress_method_t method = srv_meth_pref_precompressed[u]; + + if (0 == (compression_methods & (1u<<method))) + continue; + + if (consdiffmgr_find_consensus(&result, flav, + method) == CONSDIFF_AVAILABLE) { + tor_assert_nonfatal(result); + *compression_used_out = method; + return result; + } + } + + if (consdiffmgr_find_consensus(&result, flav, + FALLBACK_COMPRESS_METHOD) == CONSDIFF_AVAILABLE) { + tor_assert_nonfatal(result); + *compression_used_out = FALLBACK_COMPRESS_METHOD; + return result; + } + + return NULL; +} + +/** Try to find the best supported compression method possible from a given + * <b>compression_methods</b>. Return NO_METHOD if no mutually supported + * compression method could be found. */ +static compress_method_t +find_best_compression_method(unsigned compression_methods, int stream) +{ + unsigned u; + compress_method_t *methods; + size_t length; + + if (stream) { + methods = srv_meth_pref_streaming_compression; + length = ARRAY_LENGTH(srv_meth_pref_streaming_compression); + } else { + methods = srv_meth_pref_precompressed; + length = ARRAY_LENGTH(srv_meth_pref_precompressed); + } + + for (u = 0; u < length; ++u) { + compress_method_t method = methods[u]; + if (compression_methods & (1u<<method)) + return method; + } + + return NO_METHOD; +} + /** Helper function for GET /tor/status-vote/current/consensus */ static int @@ -3686,14 +3812,14 @@ handle_get_current_consensus(dir_connection_t *conn, const get_handler_args_t *args) { const char *url = args->url; - const int compressed = args->compression_supported & (1u << ZLIB_METHOD); + const compress_method_t compress_method = + find_best_compression_method(args->compression_supported, 0); const time_t if_modified_since = args->if_modified_since; int clear_spool = 0; /* v3 network status fetch. */ long lifetime = NETWORKSTATUS_CACHE_LIFETIME; - networkstatus_t *v; time_t now = time(NULL); const char *want_fps = NULL; char *flavor = NULL; @@ -3719,18 +3845,44 @@ handle_get_current_consensus(dir_connection_t *conn, want_fps = url+strlen(CONSENSUS_URL_PREFIX); } - v = networkstatus_get_latest_consensus_by_flavor(flav); + struct consensus_cache_entry_t *cached_consensus = NULL; + smartlist_t *diff_from_digests = NULL; + compress_method_t compression_used = NO_METHOD; + if (!parse_or_diff_from_header(&diff_from_digests, args->headers)) { + tor_assert(diff_from_digests); + cached_consensus = find_best_diff(diff_from_digests, flav, + args->compression_supported, + &compression_used); + SMARTLIST_FOREACH(diff_from_digests, uint8_t *, d, tor_free(d)); + smartlist_free(diff_from_digests); + } - if (v && !networkstatus_consensus_reasonably_live(v, now)) { + if (! cached_consensus) { + cached_consensus = find_best_consensus(flav, + args->compression_supported, + &compression_used); + } + + time_t fresh_until, valid_until; + int have_fresh_until = 0, have_valid_until = 0; + if (cached_consensus) { + have_fresh_until = + !consensus_cache_entry_get_fresh_until(cached_consensus, &fresh_until); + have_valid_until = + !consensus_cache_entry_get_valid_until(cached_consensus, &valid_until); + } + + if (cached_consensus && have_valid_until && + !networkstatus_valid_until_is_reasonably_live(valid_until, now)) { write_http_status_line(conn, 404, "Consensus is too old"); - warn_consensus_is_too_old(v, flavor, now); + warn_consensus_is_too_old(cached_consensus, flavor, now); geoip_note_ns_response(GEOIP_REJECT_NOT_FOUND); tor_free(flavor); goto done; } - if (v && want_fps && - !client_likes_consensus(v, want_fps)) { + if (cached_consensus && want_fps && + !client_likes_consensus(cached_consensus, want_fps)) { write_http_status_line(conn, 404, "Consensus not signed by sufficient " "number of requested authorities"); geoip_note_ns_response(GEOIP_REJECT_NOT_ENOUGH_SIGS); @@ -3738,48 +3890,23 @@ handle_get_current_consensus(dir_connection_t *conn, goto done; } - struct consensus_cache_entry_t *cached_diff = NULL; - smartlist_t *diff_from_digests = NULL; - compress_method_t compression_used = NO_METHOD; - if (!parse_or_diff_from_header(&diff_from_digests, args->headers)) { - tor_assert(diff_from_digests); - cached_diff = find_best_diff(diff_from_digests, flav, - args->compression_supported, - &compression_used); - SMARTLIST_FOREACH(diff_from_digests, uint8_t *, d, tor_free(d)); - smartlist_free(diff_from_digests); - } - conn->spool = smartlist_new(); clear_spool = 1; { spooled_resource_t *spooled; - if (cached_diff) { - spooled = spooled_resource_new_from_cache_entry(cached_diff); - } else if (flavor) { - spooled = spooled_resource_new(DIR_SPOOL_NETWORKSTATUS, - (uint8_t*)flavor, strlen(flavor)); - compression_used = compressed ? ZLIB_METHOD : NO_METHOD; - } else { - spooled = spooled_resource_new(DIR_SPOOL_NETWORKSTATUS, - NULL, 0); - compression_used = compressed ? ZLIB_METHOD : NO_METHOD; + if (cached_consensus) { + spooled = spooled_resource_new_from_cache_entry(cached_consensus); + smartlist_add(conn->spool, spooled); } tor_free(flavor); - smartlist_add(conn->spool, spooled); } - lifetime = (v && v->fresh_until > now) ? v->fresh_until - now : 0; - if (!smartlist_len(conn->spool)) { /* we failed to create/cache cp */ - write_http_status_line(conn, 503, "Network status object unavailable"); - geoip_note_ns_response(GEOIP_REJECT_UNAVAILABLE); - goto done; - } + lifetime = (have_fresh_until && fresh_until > now) ? fresh_until - now : 0; size_t size_guess = 0; int n_expired = 0; dirserv_spool_remove_missing_and_guess_size(conn, if_modified_since, - compressed, + compress_method != NO_METHOD, &size_guess, &n_expired); @@ -3818,11 +3945,17 @@ handle_get_current_consensus(dir_connection_t *conn, } clear_spool = 0; + + // The compress_method might have been NO_METHOD, but we store the data + // compressed. Decompress them using `compression_used`. See fallback code in + // find_best_consensus() and find_best_diff(). write_http_response_header(conn, -1, - compression_used, + compress_method == NO_METHOD ? + NO_METHOD : compression_used, smartlist_len(conn->spool) == 1 ? lifetime : 0); - if (! compressed) - conn->compress_state = tor_compress_new(0, ZLIB_METHOD, + + if (compress_method == NO_METHOD) + conn->compress_state = tor_compress_new(0, compression_used, HIGH_COMPRESSION); /* Prime the connection with some data. */ @@ -3843,7 +3976,8 @@ static int handle_get_status_vote(dir_connection_t *conn, const get_handler_args_t *args) { const char *url = args->url; - const int compressed = args->compression_supported & (1u << ZLIB_METHOD); + const compress_method_t compress_method = + find_best_compression_method(args->compression_supported, 1); { int current; ssize_t body_len = 0; @@ -3900,11 +4034,12 @@ handle_get_status_vote(dir_connection_t *conn, const get_handler_args_t *args) goto vote_done; } SMARTLIST_FOREACH(dir_items, cached_dir_t *, d, - body_len += compressed ? d->dir_z_len : d->dir_len); + body_len += compress_method != NO_METHOD ? + d->dir_compressed_len : d->dir_len); estimated_len += body_len; SMARTLIST_FOREACH(items, const char *, item, { size_t ln = strlen(item); - if (compressed) { + if (compress_method != NO_METHOD) { estimated_len += ln/2; } else { body_len += ln; estimated_len += ln; @@ -3916,12 +4051,12 @@ handle_get_status_vote(dir_connection_t *conn, const get_handler_args_t *args) goto vote_done; } write_http_response_header(conn, body_len ? body_len : -1, - compressed ? ZLIB_METHOD : NO_METHOD, + compress_method, lifetime); if (smartlist_len(items)) { - if (compressed) { - conn->compress_state = tor_compress_new(1, ZLIB_METHOD, + if (compress_method != NO_METHOD) { + conn->compress_state = tor_compress_new(1, compress_method, choose_compression_level(estimated_len)); SMARTLIST_FOREACH(items, const char *, c, connection_write_to_buf_compress(c, strlen(c), conn, 0)); @@ -3932,8 +4067,10 @@ handle_get_status_vote(dir_connection_t *conn, const get_handler_args_t *args) } } else { SMARTLIST_FOREACH(dir_items, cached_dir_t *, d, - connection_write_to_buf(compressed ? d->dir_z : d->dir, - compressed ? d->dir_z_len : d->dir_len, + connection_write_to_buf(compress_method != NO_METHOD ? + d->dir_compressed : d->dir, + compress_method != NO_METHOD ? + d->dir_compressed_len : d->dir_len, TO_CONN(conn))); } vote_done: @@ -3951,7 +4088,8 @@ static int handle_get_microdesc(dir_connection_t *conn, const get_handler_args_t *args) { const char *url = args->url; - const int compressed = args->compression_supported & (1u << ZLIB_METHOD); + const compress_method_t compress_method = + find_best_compression_method(args->compression_supported, 1); int clear_spool = 1; { conn->spool = smartlist_new(); @@ -3962,7 +4100,8 @@ handle_get_microdesc(dir_connection_t *conn, const get_handler_args_t *args) DSR_DIGEST256|DSR_BASE64|DSR_SORT_UNIQ); size_t size_guess = 0; - dirserv_spool_remove_missing_and_guess_size(conn, 0, compressed, + dirserv_spool_remove_missing_and_guess_size(conn, 0, + compress_method != NO_METHOD, &size_guess, NULL); if (smartlist_len(conn->spool) == 0) { write_http_status_line(conn, 404, "Not found"); @@ -3978,11 +4117,11 @@ handle_get_microdesc(dir_connection_t *conn, const get_handler_args_t *args) clear_spool = 0; write_http_response_header(conn, -1, - compressed ? ZLIB_METHOD : NO_METHOD, + compress_method, MICRODESC_CACHE_LIFETIME); - if (compressed) - conn->compress_state = tor_compress_new(1, ZLIB_METHOD, + if (compress_method != NO_METHOD) + conn->compress_state = tor_compress_new(1, compress_method, choose_compression_level(size_guess)); const int initial_flush_result = connection_dirserv_flushed_some(conn); @@ -4003,7 +4142,8 @@ static int handle_get_descriptor(dir_connection_t *conn, const get_handler_args_t *args) { const char *url = args->url; - const int compressed = args->compression_supported & (1u << ZLIB_METHOD); + const compress_method_t compress_method = + find_best_compression_method(args->compression_supported, 1); const or_options_t *options = get_options(); int clear_spool = 1; if (!strcmpstart(url,"/tor/server/") || @@ -4042,8 +4182,8 @@ handle_get_descriptor(dir_connection_t *conn, const get_handler_args_t *args) size_t size_guess = 0; int n_expired = 0; dirserv_spool_remove_missing_and_guess_size(conn, publish_cutoff, - compressed, &size_guess, - &n_expired); + compress_method != NO_METHOD, + &size_guess, &n_expired); /* If we are the bridge authority and the descriptor is a bridge * descriptor, remember that we served this descriptor for desc stats. */ @@ -4073,11 +4213,9 @@ handle_get_descriptor(dir_connection_t *conn, const get_handler_args_t *args) dir_conn_clear_spool(conn); goto done; } - write_http_response_header(conn, -1, - compressed ? ZLIB_METHOD : NO_METHOD, - cache_lifetime); - if (compressed) - conn->compress_state = tor_compress_new(1, ZLIB_METHOD, + write_http_response_header(conn, -1, compress_method, cache_lifetime); + if (compress_method != NO_METHOD) + conn->compress_state = tor_compress_new(1, compress_method, choose_compression_level(size_guess)); clear_spool = 0; /* Prime the connection with some data. */ @@ -4098,7 +4236,8 @@ static int handle_get_keys(dir_connection_t *conn, const get_handler_args_t *args) { const char *url = args->url; - const int compressed = args->compression_supported & (1u << ZLIB_METHOD); + const compress_method_t compress_method = + find_best_compression_method(args->compression_supported, 1); const time_t if_modified_since = args->if_modified_since; { smartlist_t *certs = smartlist_new(); @@ -4161,16 +4300,19 @@ handle_get_keys(dir_connection_t *conn, const get_handler_args_t *args) SMARTLIST_FOREACH(certs, authority_cert_t *, c, len += c->cache_info.signed_descriptor_len); - if (global_write_bucket_low(TO_CONN(conn), compressed?len/2:len, 2)) { + if (global_write_bucket_low(TO_CONN(conn), + compress_method != NO_METHOD ? len/2 : len, + 2)) { write_http_status_line(conn, 503, "Directory busy, try again later"); goto keys_done; } - write_http_response_header(conn, compressed?-1:len, - compressed ? ZLIB_METHOD : NO_METHOD, + write_http_response_header(conn, + compress_method != NO_METHOD ? -1 : len, + compress_method, 60*60); - if (compressed) { - conn->compress_state = tor_compress_new(1, ZLIB_METHOD, + if (compress_method != NO_METHOD) { + conn->compress_state = tor_compress_new(1, compress_method, choose_compression_level(len)); SMARTLIST_FOREACH(certs, authority_cert_t *, c, connection_write_to_buf_compress( @@ -4482,14 +4624,7 @@ directory_handle_command_post,(dir_connection_t *conn, const char *headers, conn->base_.address, &msg); tor_assert(msg); - if (r == ROUTER_ADDED_NOTIFY_GENERATOR) { - /* Accepted with a message. */ - log_info(LD_DIRSERV, - "Problematic router descriptor or extra-info from %s " - "(\"%s\").", - conn->base_.address, msg); - write_http_status_line(conn, 400, msg); - } else if (r == ROUTER_ADDED_SUCCESSFULLY) { + if (r == ROUTER_ADDED_SUCCESSFULLY) { write_http_status_line(conn, 200, msg); } else if (WRA_WAS_OUTDATED(r)) { write_http_response_header_impl(conn, -1, NULL, NULL, diff --git a/src/or/directory.h b/src/or/directory.h index 125333da37..a015c7045d 100644 --- a/src/or/directory.h +++ b/src/or/directory.h @@ -160,6 +160,7 @@ struct get_handler_args_t; STATIC int handle_get_hs_descriptor_v3(dir_connection_t *conn, const struct get_handler_args_t *args); STATIC int directory_handle_command(dir_connection_t *conn); +STATIC char *accept_encoding_header(void); #endif diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 7de72df9eb..2b10a09ead 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -284,6 +284,13 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg, return FP_REJECT; } + /* Check for the more usual versions to reject a router first. */ + const uint32_t r = dirserv_get_status_impl(d, router->nickname, + router->addr, router->or_port, + router->platform, msg, severity); + if (r) + return r; + /* dirserv_get_status_impl already rejects versions older than 0.2.4.18-rc, * and onion_curve25519_pkey was introduced in 0.2.4.8-alpha. * But just in case a relay doesn't provide or lies about its version, or @@ -334,9 +341,7 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg, } } - return dirserv_get_status_impl(d, router->nickname, - router->addr, router->or_port, - router->platform, msg, severity); + return 0; } /** Return true if there is no point in downloading the router described by @@ -571,6 +576,8 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose, !general ? router_purpose_to_string(purpose) : "", !general ? "\n" : "")<0) { *msg = "Couldn't format annotations"; + /* XXX Not cool: we return -1 below, but (was_router_added_t)-1 is + * ROUTER_BAD_EI, which isn't what's gone wrong here. :( */ return -1; } @@ -1177,8 +1184,8 @@ new_cached_dir(char *s, time_t published) d->dir = s; d->dir_len = strlen(s); d->published = published; - if (tor_compress(&(d->dir_z), &(d->dir_z_len), d->dir, d->dir_len, - ZLIB_METHOD)) { + if (tor_compress(&(d->dir_compressed), &(d->dir_compressed_len), + d->dir, d->dir_len, ZLIB_METHOD)) { log_warn(LD_BUG, "Error compressing directory"); } return d; @@ -1189,7 +1196,7 @@ static void clear_cached_dir(cached_dir_t *d) { tor_free(d->dir); - tor_free(d->dir_z); + tor_free(d->dir_compressed); memset(d, 0, sizeof(cached_dir_t)); } @@ -3506,7 +3513,7 @@ spooled_resource_estimate_size(const spooled_resource_t *spooled, if (cached == NULL) { return 0; } - size_t result = compressed ? cached->dir_z_len : cached->dir_len; + size_t result = compressed ? cached->dir_compressed_len : cached->dir_len; return result; } } @@ -3565,8 +3572,8 @@ spooled_resource_flush_some(spooled_resource_t *spooled, int64_t total_len; const char *ptr; if (cached) { - total_len = cached->dir_z_len; - ptr = cached->dir_z; + total_len = cached->dir_compressed_len; + ptr = cached->dir_compressed; } else { total_len = spooled->cce_len; ptr = (const char *)spooled->cce_body; diff --git a/src/or/dns.c b/src/or/dns.c index cd84a64758..024a21abfe 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -160,8 +160,9 @@ evdns_log_cb(int warn, const char *msg) } if (!strcmpstart(msg, "Nameserver ") && (cp=strstr(msg, " has failed: "))) { char *ns = tor_strndup(msg+11, cp-(msg+11)); - const char *err = strchr(cp, ':')+2; - tor_assert(err); + const char *colon = strchr(cp, ':'); + tor_assert(colon); + const char *err = colon+2; /* Don't warn about a single failed nameserver; we'll warn with 'all * nameservers have failed' if we're completely out of nameservers; * otherwise, the situation is tolerable. */ diff --git a/src/or/hibernate.c b/src/or/hibernate.c index f2a4c71764..f54109fc90 100644 --- a/src/or/hibernate.c +++ b/src/or/hibernate.c @@ -331,7 +331,7 @@ edge_of_accounting_period_containing(time_t now, int get_end) case UNIT_MONTH: { /* If this is before the Nth, we want the Nth of last month. */ if (tm.tm_mday < cfg_start_day || - (tm.tm_mday < cfg_start_day && before)) { + (tm.tm_mday == cfg_start_day && before)) { --tm.tm_mon; } /* Otherwise, the month is correct. */ diff --git a/src/or/hs_descriptor.c b/src/or/hs_descriptor.c index 0480f63308..2a000f5002 100644 --- a/src/or/hs_descriptor.c +++ b/src/or/hs_descriptor.c @@ -79,7 +79,9 @@ #define str_intro_point "introduction-point" #define str_ip_auth_key "auth-key" #define str_ip_enc_key "enc-key" -#define str_ip_enc_key_cert "enc-key-certification" +#define str_ip_enc_key_cert "enc-key-cert" +#define str_ip_legacy_key "legacy-key" +#define str_ip_legacy_key_cert "legacy-key-cert" #define str_intro_point_start "\n" str_intro_point " " /* Constant string value for the construction to encrypt the encrypted data * section. */ @@ -134,9 +136,10 @@ static token_rule_t hs_desc_encrypted_v3_token_table[] = { static token_rule_t hs_desc_intro_point_v3_token_table[] = { T1_START(str_intro_point, R3_INTRODUCTION_POINT, EQ(1), NO_OBJ), T1(str_ip_auth_key, R3_INTRO_AUTH_KEY, NO_ARGS, NEED_OBJ), - T1(str_ip_enc_key, R3_INTRO_ENC_KEY, ARGS, OBJ_OK), - T1_END(str_ip_enc_key_cert, R3_INTRO_ENC_KEY_CERTIFICATION, - NO_ARGS, NEED_OBJ), + T1(str_ip_enc_key, R3_INTRO_ENC_KEY, GE(2), OBJ_OK), + T1(str_ip_enc_key_cert, R3_INTRO_ENC_KEY_CERT, ARGS, OBJ_OK), + T01(str_ip_legacy_key, R3_INTRO_LEGACY_KEY, ARGS, NEED_KEY_1024), + T01(str_ip_legacy_key_cert, R3_INTRO_LEGACY_KEY_CERT, ARGS, OBJ_OK), END_OF_TABLE }; @@ -153,8 +156,12 @@ desc_intro_point_free(hs_desc_intro_point_t *ip) smartlist_free(ip->link_specifiers); } tor_cert_free(ip->auth_key_cert); - if (ip->enc_key_type == HS_DESC_KEY_TYPE_LEGACY) { - crypto_pk_free(ip->enc_key.legacy); + tor_cert_free(ip->enc_key_cert); + if (ip->legacy.key) { + crypto_pk_free(ip->legacy.key); + } + if (ip->legacy.cert.encoded) { + tor_free(ip->legacy.cert.encoded); } tor_free(ip); } @@ -406,101 +413,68 @@ encode_link_specifiers(const smartlist_t *specs) return encoded_b64; } -/* Encode an introduction point encryption key and return a newly allocated - * string with it. On failure, return NULL. */ +/* Encode an introduction point legacy key and certificate. Return a newly + * allocated string with it. On failure, return NULL. */ static char * -encode_enc_key(const ed25519_public_key_t *sig_key, - const hs_desc_intro_point_t *ip) +encode_legacy_key(const hs_desc_intro_point_t *ip) { - char *encoded = NULL; - time_t now = time(NULL); + char *key_str, b64_cert[256], *encoded = NULL; + size_t key_str_len; - tor_assert(sig_key); tor_assert(ip); - switch (ip->enc_key_type) { - case HS_DESC_KEY_TYPE_LEGACY: - { - char *key_str, b64_cert[256]; - ssize_t cert_len; - size_t key_str_len; - uint8_t *cert_data = NULL; - - /* Create cross certification cert. */ - cert_len = tor_make_rsa_ed25519_crosscert(sig_key, ip->enc_key.legacy, - now + HS_DESC_CERT_LIFETIME, - &cert_data); - if (cert_len < 0) { - log_warn(LD_REND, "Unable to create legacy crosscert."); - goto err; - } - /* Encode cross cert. */ - if (base64_encode(b64_cert, sizeof(b64_cert), (const char *) cert_data, - cert_len, BASE64_ENCODE_MULTILINE) < 0) { - tor_free(cert_data); - log_warn(LD_REND, "Unable to encode legacy crosscert."); - goto err; - } - tor_free(cert_data); - /* Convert the encryption key to a string. */ - if (crypto_pk_write_public_key_to_string(ip->enc_key.legacy, &key_str, - &key_str_len) < 0) { - log_warn(LD_REND, "Unable to encode legacy encryption key."); - goto err; - } - tor_asprintf(&encoded, - "%s legacy\n%s" /* Newline is added by the call above. */ - "%s\n" - "-----BEGIN CROSSCERT-----\n" - "%s" - "-----END CROSSCERT-----", - str_ip_enc_key, key_str, - str_ip_enc_key_cert, b64_cert); - tor_free(key_str); - break; - } - case HS_DESC_KEY_TYPE_CURVE25519: - { - int signbit, ret; - char *encoded_cert, key_fp_b64[CURVE25519_BASE64_PADDED_LEN + 1]; - ed25519_keypair_t curve_kp; + /* Encode cross cert. */ + if (base64_encode(b64_cert, sizeof(b64_cert), + (const char *) ip->legacy.cert.encoded, + ip->legacy.cert.len, BASE64_ENCODE_MULTILINE) < 0) { + log_warn(LD_REND, "Unable to encode legacy crosscert."); + goto done; + } + /* Convert the encryption key to PEM format NUL terminated. */ + if (crypto_pk_write_public_key_to_string(ip->legacy.key, &key_str, + &key_str_len) < 0) { + log_warn(LD_REND, "Unable to encode legacy encryption key."); + goto done; + } + tor_asprintf(&encoded, + "%s \n%s" /* Newline is added by the call above. */ + "%s\n" + "-----BEGIN CROSSCERT-----\n" + "%s" + "-----END CROSSCERT-----", + str_ip_legacy_key, key_str, + str_ip_legacy_key_cert, b64_cert); + tor_free(key_str); - if (ed25519_keypair_from_curve25519_keypair(&curve_kp, &signbit, - &ip->enc_key.curve25519)) { - goto err; - } - tor_cert_t *cross_cert = tor_cert_create(&curve_kp, - CERT_TYPE_CROSS_HS_IP_KEYS, - sig_key, now, - HS_DESC_CERT_LIFETIME, - CERT_FLAG_INCLUDE_SIGNING_KEY); - memwipe(&curve_kp, 0, sizeof(curve_kp)); - if (!cross_cert) { - goto err; - } - ret = tor_cert_encode_ed22519(cross_cert, &encoded_cert); - tor_cert_free(cross_cert); - if (ret) { - goto err; - } - if (curve25519_public_to_base64(key_fp_b64, - &ip->enc_key.curve25519.pubkey) < 0) { - tor_free(encoded_cert); - goto err; - } - tor_asprintf(&encoded, - "%s ntor %s\n" - "%s\n%s", - str_ip_enc_key, key_fp_b64, - str_ip_enc_key_cert, encoded_cert); - tor_free(encoded_cert); - break; + done: + return encoded; +} + +/* Encode an introduction point encryption key and certificate. Return a newly + * allocated string with it. On failure, return NULL. */ +static char * +encode_enc_key(const hs_desc_intro_point_t *ip) +{ + char *encoded = NULL, *encoded_cert; + char key_b64[CURVE25519_BASE64_PADDED_LEN + 1]; + + tor_assert(ip); + + /* Base64 encode the encryption key for the "enc-key" field. */ + if (curve25519_public_to_base64(key_b64, &ip->enc_key) < 0) { + goto done; } - default: - tor_assert(0); + if (tor_cert_encode_ed22519(ip->enc_key_cert, &encoded_cert) < 0) { + goto done; } + tor_asprintf(&encoded, + "%s ntor %s\n" + "%s\n%s", + str_ip_enc_key, key_b64, + str_ip_enc_key_cert, encoded_cert); + tor_free(encoded_cert); - err: + done: return encoded; } @@ -535,7 +509,7 @@ encode_intro_point(const ed25519_public_key_t *sig_key, /* Encryption key encoding. */ { - char *encoded_enc_key = encode_enc_key(sig_key, ip); + char *encoded_enc_key = encode_enc_key(ip); if (encoded_enc_key == NULL) { goto err; } @@ -543,6 +517,18 @@ encode_intro_point(const ed25519_public_key_t *sig_key, tor_free(encoded_enc_key); } + /* Legacy key if any. */ + if (ip->legacy.key != NULL) { + /* Strong requirement else the IP creation was badly done. */ + tor_assert(ip->legacy.cert.encoded); + char *encoded_legacy_key = encode_legacy_key(ip); + if (encoded_legacy_key == NULL) { + goto err; + } + smartlist_add_asprintf(lines, "%s", encoded_legacy_key); + tor_free(encoded_legacy_key); + } + /* Join them all in one blob of text. */ encoded_ip = smartlist_join_strings(lines, "\n", 1, NULL); @@ -1581,6 +1567,64 @@ desc_decrypt_all(const hs_descriptor_t *desc, char **decrypted_out) return decrypted_len; } +/* Given the token tok for an intro point legacy key, the list of tokens, the + * introduction point ip being decoded and the descriptor desc from which it + * comes from, decode the legacy key and set the intro point object. Return 0 + * on success else -1 on failure. */ +static int +decode_intro_legacy_key(const directory_token_t *tok, + smartlist_t *tokens, + hs_desc_intro_point_t *ip, + const hs_descriptor_t *desc) +{ + tor_assert(tok); + tor_assert(tokens); + tor_assert(ip); + tor_assert(desc); + + if (!crypto_pk_public_exponent_ok(tok->key)) { + log_warn(LD_REND, "Introduction point legacy key is invalid"); + goto err; + } + ip->legacy.key = crypto_pk_dup_key(tok->key); + /* Extract the legacy cross certification cert which MUST be present if we + * have a legacy key. */ + tok = find_opt_by_keyword(tokens, R3_INTRO_LEGACY_KEY_CERT); + if (!tok) { + log_warn(LD_REND, "Introduction point legacy key cert is missing"); + goto err; + } + tor_assert(tok->object_body); + if (strcmp(tok->object_type, "CROSSCERT")) { + /* Info level because this might be an unknown field that we should + * ignore. */ + log_info(LD_REND, "Introduction point legacy encryption key " + "cross-certification has an unknown format."); + goto err; + } + /* Keep a copy of the certificate. */ + ip->legacy.cert.encoded = tor_memdup(tok->object_body, tok->object_size); + ip->legacy.cert.len = tok->object_size; + /* The check on the expiration date is for the entire lifetime of a + * certificate which is 24 hours. However, a descriptor has a maximum + * lifetime of 12 hours meaning we have a 12h difference between the two + * which ultimately accomodate the clock skewed client. */ + if (rsa_ed25519_crosscert_check(ip->legacy.cert.encoded, + ip->legacy.cert.len, ip->legacy.key, + &desc->plaintext_data.signing_pubkey, + approx_time() - HS_DESC_CERT_LIFETIME)) { + log_warn(LD_REND, "Unable to check cross-certification on the " + "introduction point legacy encryption key."); + ip->cross_certified = 0; + goto err; + } + + /* Success. */ + return 0; + err: + return -1; +} + /* Given the start of a section and the end of it, decode a single * introduction point from that section. Return a newly allocated introduction * point object containing the decoded data. Return NULL if the section can't @@ -1591,7 +1635,6 @@ decode_introduction_point(const hs_descriptor_t *desc, const char *start) hs_desc_intro_point_t *ip = NULL; memarea_t *area = NULL; smartlist_t *tokens = NULL; - tor_cert_t *cross_cert = NULL; const directory_token_t *tok; tor_assert(desc); @@ -1625,84 +1668,67 @@ decode_introduction_point(const hs_descriptor_t *desc, const char *start) log_warn(LD_REND, "Unexpected object type for introduction auth key"); goto err; } - /* Parse cert and do some validation. */ if (cert_parse_and_validate(&ip->auth_key_cert, tok->object_body, tok->object_size, CERT_TYPE_AUTH_HS_IP_KEY, "introduction point auth-key") < 0) { goto err; } + /* Validate authentication certificate with descriptor signing key. */ + if (tor_cert_checksig(ip->auth_key_cert, + &desc->plaintext_data.signing_pubkey, 0) < 0) { + log_warn(LD_REND, "Invalid authentication key signature"); + goto err; + } - /* Exactly one "enc-key" ... */ + /* Exactly one "enc-key" SP "ntor" SP key NL */ tok = find_by_keyword(tokens, R3_INTRO_ENC_KEY); if (!strcmp(tok->args[0], "ntor")) { - /* "enc-key" SP "ntor" SP key NL */ - if (tok->n_args != 2 || tok->object_body) { - log_warn(LD_REND, "Introduction point ntor encryption key is invalid"); - goto err; - } + /* This field is using GE(2) so for possible forward compatibility, we + * accept more fields but must be at least 2. */ + tor_assert(tok->n_args >= 2); - if (curve25519_public_from_base64(&ip->enc_key.curve25519.pubkey, - tok->args[1]) < 0) { - log_warn(LD_REND, "Introduction point ntor encryption key is invalid"); + if (curve25519_public_from_base64(&ip->enc_key, tok->args[1]) < 0) { + log_warn(LD_REND, "Introduction point ntor enc-key is invalid"); goto err; } - ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; - } else if (!strcmp(tok->args[0], "legacy")) { - /* "enc-key" SP "legacy" NL key NL */ - if (!tok->key) { - log_warn(LD_REND, "Introduction point legacy encryption key is " - "invalid"); - goto err; - } - ip->enc_key.legacy = crypto_pk_dup_key(tok->key); - ip->enc_key_type = HS_DESC_KEY_TYPE_LEGACY; } else { /* Unknown key type so we can't use that introduction point. */ log_warn(LD_REND, "Introduction point encryption key is unrecognized."); goto err; } - /* "enc-key-certification" NL certificate NL */ - tok = find_by_keyword(tokens, R3_INTRO_ENC_KEY_CERTIFICATION); + /* Exactly once "enc-key-cert" NL certificate NL */ + tok = find_by_keyword(tokens, R3_INTRO_ENC_KEY_CERT); tor_assert(tok->object_body); /* Do the cross certification. */ - switch (ip->enc_key_type) { - case HS_DESC_KEY_TYPE_CURVE25519: - { - if (strcmp(tok->object_type, "ED25519 CERT")) { + if (strcmp(tok->object_type, "ED25519 CERT")) { log_warn(LD_REND, "Introduction point ntor encryption key " "cross-certification has an unknown format."); goto err; - } - if (cert_parse_and_validate(&cross_cert, tok->object_body, - tok->object_size, CERT_TYPE_CROSS_HS_IP_KEYS, - "introduction point enc-key-certification") < 0) { - goto err; - } - break; } - case HS_DESC_KEY_TYPE_LEGACY: - if (strcmp(tok->object_type, "CROSSCERT")) { - log_warn(LD_REND, "Introduction point legacy encryption key " - "cross-certification has an unknown format."); - goto err; - } - if (rsa_ed25519_crosscert_check((const uint8_t *) tok->object_body, - tok->object_size, ip->enc_key.legacy, - &desc->plaintext_data.signing_key_cert->signed_key, - approx_time()-86400)) { - log_warn(LD_REND, "Unable to check cross-certification on the " - "introduction point legacy encryption key."); - goto err; - } - break; - default: - tor_assert(0); - break; + if (cert_parse_and_validate(&ip->enc_key_cert, tok->object_body, + tok->object_size, CERT_TYPE_CROSS_HS_IP_KEYS, + "introduction point enc-key-cert") < 0) { + goto err; + } + if (tor_cert_checksig(ip->enc_key_cert, + &desc->plaintext_data.signing_pubkey, 0) < 0) { + log_warn(LD_REND, "Invalid encryption key signature"); + goto err; } /* It is successfully cross certified. Flag the object. */ ip->cross_certified = 1; + + /* Do we have a "legacy-key" SP key NL ?*/ + tok = find_opt_by_keyword(tokens, R3_INTRO_LEGACY_KEY); + if (tok) { + if (decode_intro_legacy_key(tok, tokens, ip, desc) < 0) { + goto err; + } + } + + /* Introduction point has been parsed successfully. */ goto done; err: @@ -1710,7 +1736,6 @@ decode_introduction_point(const hs_descriptor_t *desc, const char *start) ip = NULL; done: - tor_cert_free(cross_cert); SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); smartlist_free(tokens); if (area) { diff --git a/src/or/hs_descriptor.h b/src/or/hs_descriptor.h index b7d512c06b..b8b94792de 100644 --- a/src/or/hs_descriptor.h +++ b/src/or/hs_descriptor.h @@ -58,12 +58,6 @@ typedef enum { HS_DESC_AUTH_ED25519 = 1 } hs_desc_auth_type_t; -/* Type of encryption key in the descriptor. */ -typedef enum { - HS_DESC_KEY_TYPE_LEGACY = 1, - HS_DESC_KEY_TYPE_CURVE25519 = 2, -} hs_desc_key_type_t; - /* Link specifier object that contains information on how to extend to the * relay that is the address, port and handshake type. */ typedef struct hs_desc_link_specifier_t { @@ -91,18 +85,29 @@ typedef struct hs_desc_intro_point_t { * the blinded key and in turn signs it. */ tor_cert_t *auth_key_cert; - /* Encryption key type so we know which one to use in the union below. */ - hs_desc_key_type_t enc_key_type; - - /* Keys are mutually exclusive thus the union. */ - union { - /* Encryption key used to encrypt request to hidden service. */ - curve25519_keypair_t curve25519; - - /* Backward compat: RSA 1024 encryption key for legacy purposes. - * Mutually exclusive with enc_key. */ - crypto_pk_t *legacy; - } enc_key; + /* Encryption key for the "ntor" type. */ + curve25519_public_key_t enc_key; + + /* Certificate cross certifying the descriptor signing key by the encryption + * curve25519 key. This certificate contains the signing key and is of type + * CERT_TYPE_CROSS_HS_IP_KEYS [0B]. */ + tor_cert_t *enc_key_cert; + + /* (Optional): If this introduction point is a legacy one that is version <= + * 0.2.9.x (HSIntro=3), we use this extra key for the intro point to be able + * to relay the cells to the service correctly. */ + struct { + /* RSA public key. */ + crypto_pk_t *key; + + /* Cross certified cert with the descriptor signing key (RSA->Ed). Because + * of the cross certification API, we need to keep the certificate binary + * blob and its length in order to properly encode it after. */ + struct { + uint8_t *encoded; + size_t len; + } cert; + } legacy; /* True iff the introduction point has passed the cross certification. Upon * decoding an intro point, this must be true. */ diff --git a/src/or/include.am b/src/or/include.am index 4c24dd23b3..7b031f737b 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -22,6 +22,7 @@ LIBTOR_A_SOURCES = \ src/or/bridges.c \ src/or/buffers.c \ src/or/channel.c \ + src/or/channelpadding.c \ src/or/channeltls.c \ src/or/circpathbias.c \ src/or/circuitbuild.c \ @@ -144,6 +145,7 @@ ORHEADERS = \ src/or/bridges.h \ src/or/buffers.h \ src/or/channel.h \ + src/or/channelpadding.h \ src/or/channeltls.h \ src/or/circpathbias.h \ src/or/circuitbuild.h \ diff --git a/src/or/main.c b/src/or/main.c index 0da43dc232..9f0c29cf0b 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -54,6 +54,7 @@ #include "buffers.h" #include "channel.h" #include "channeltls.h" +#include "channelpadding.h" #include "circuitbuild.h" #include "circuitlist.h" #include "circuituse.h" @@ -177,7 +178,7 @@ static int signewnym_is_pending = 0; static unsigned newnym_epoch = 0; /** Smartlist of all open connections. */ -static smartlist_t *connection_array = NULL; +STATIC smartlist_t *connection_array = NULL; /** List of connections that have been marked for close and need to be freed * and removed from connection_array. */ static smartlist_t *closeable_connection_lst = NULL; @@ -1096,8 +1097,9 @@ run_connection_housekeeping(int i, time_t now) } else if (!have_any_circuits && now - or_conn->idle_timeout >= chan->timestamp_last_had_circuits) { - log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) " - "[no circuits for %d; timeout %d; %scanonical].", + log_info(LD_OR,"Expiring non-used OR connection "U64_FORMAT" to fd %d " + "(%s:%d) [no circuits for %d; timeout %d; %scanonical].", + U64_PRINTF_ARG(chan->global_identifier), (int)conn->s, conn->address, conn->port, (int)(now - chan->timestamp_last_had_circuits), or_conn->idle_timeout, @@ -1120,6 +1122,8 @@ run_connection_housekeeping(int i, time_t now) memset(&cell,0,sizeof(cell_t)); cell.command = CELL_PADDING; connection_or_write_cell_to_buf(&cell, or_conn); + } else { + channelpadding_decide_to_pad_channel(chan); } } @@ -1187,6 +1191,8 @@ CALLBACK(write_bridge_ns); CALLBACK(check_fw_helper_app); CALLBACK(heartbeat); CALLBACK(clean_consdiffmgr); +CALLBACK(reset_padding_counts); +CALLBACK(check_canonical_channels); #undef CALLBACK @@ -1220,6 +1226,8 @@ static periodic_event_item_t periodic_events[] = { CALLBACK(check_fw_helper_app), CALLBACK(heartbeat), CALLBACK(clean_consdiffmgr), + CALLBACK(reset_padding_counts), + CALLBACK(check_canonical_channels), END_OF_PERIODIC_EVENTS }; #undef CALLBACK @@ -1756,6 +1764,28 @@ write_stats_file_callback(time_t now, const or_options_t *options) return safe_timer_diff(now, next_time_to_write_stats_files); } +#define CHANNEL_CHECK_INTERVAL (60*60) +static int +check_canonical_channels_callback(time_t now, const or_options_t *options) +{ + (void)now; + if (public_server_mode(options)) + channel_check_for_duplicates(); + + return CHANNEL_CHECK_INTERVAL; +} + +static int +reset_padding_counts_callback(time_t now, const or_options_t *options) +{ + if (options->PaddingStatistics) { + rep_hist_prep_published_padding_counts(now); + } + + rep_hist_reset_padding_counts(); + return REPHIST_CELL_PADDING_COUNTS_INTERVAL; +} + /** * Periodic callback: Write bridge statistics to disk if appropriate. */ @@ -2383,6 +2413,8 @@ do_main_loop(void) } handle_signals(1); + monotime_init(); + timers_initialize(); /* load the private keys, if we're supposed to have them, and set up the * TLS context. */ @@ -2450,6 +2482,7 @@ do_main_loop(void) /* launch cpuworkers. Need to do this *after* we've read the onion key. */ cpu_init(); } + consdiffmgr_enable_background_compression(); /* Setup shared random protocol subsystem. */ if (authdir_mode_v3(get_options())) { @@ -3053,6 +3086,13 @@ tor_init(int argc, char *argv[]) /* The options are now initialised */ const or_options_t *options = get_options(); + /* Initialize channelpadding parameters to defaults until we get + * a consensus */ + channelpadding_new_consensus_params(NULL); + + /* Initialize predicted ports list after loading options */ + predicted_ports_init(); + #ifndef _WIN32 if (geteuid()==0) log_warn(LD_GENERAL,"You are running Tor as root. You don't need to, " @@ -3250,6 +3290,9 @@ tor_cleanup(void) rep_hist_record_mtbf_data(now, 0); keypin_close_journal(); } + + timers_shutdown(); + #ifdef USE_DMALLOC dmalloc_log_stats(); #endif @@ -3623,6 +3666,8 @@ tor_main(int argc, char *argv[]) int result = 0; #ifdef _WIN32 + /* On heap corruption, just give up; don't try to play along. */ + HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0); /* Call SetProcessDEPPolicy to permanently enable DEP. The function will not resolve on earlier versions of Windows, and failure is not dangerous. */ @@ -3631,7 +3676,10 @@ tor_main(int argc, char *argv[]) typedef BOOL (WINAPI *PSETDEP)(DWORD); PSETDEP setdeppolicy = (PSETDEP)GetProcAddress(hMod, "SetProcessDEPPolicy"); - if (setdeppolicy) setdeppolicy(1); /* PROCESS_DEP_ENABLE */ + if (setdeppolicy) { + /* PROCESS_DEP_ENABLE | PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION */ + setdeppolicy(3); + } } #endif diff --git a/src/or/main.h b/src/or/main.h index 915d82b7ba..57aa372750 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -92,6 +92,9 @@ STATIC void init_connection_lists(void); STATIC void close_closeable_connections(void); STATIC void initialize_periodic_events(void); STATIC void teardown_periodic_events(void); +#ifdef TOR_UNIT_TESTS +extern smartlist_t *connection_array; +#endif #endif #endif diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 1b21dd7b45..fffd1078be 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -64,6 +64,7 @@ #include "shared_random.h" #include "transports.h" #include "torcert.h" +#include "channelpadding.h" /** Map from lowercase nickname to identity digest of named server, if any. */ static strmap_t *named_server_map = NULL; @@ -73,11 +74,11 @@ static strmap_t *unnamed_server_map = NULL; /** Most recently received and validated v3 "ns"-flavored consensus network * status. */ -static networkstatus_t *current_ns_consensus = NULL; +STATIC networkstatus_t *current_ns_consensus = NULL; /** Most recently received and validated v3 "microdec"-flavored consensus * network status. */ -static networkstatus_t *current_md_consensus = NULL; +STATIC networkstatus_t *current_md_consensus = NULL; /** A v3 consensus networkstatus that we've received, but which we don't * have enough certificates to be happy about. */ @@ -1406,16 +1407,24 @@ networkstatus_get_live_consensus,(time_t now)) * Return 1 if the consensus is reasonably live, or 0 if it is too old. */ int -networkstatus_consensus_reasonably_live(networkstatus_t *consensus, time_t now) +networkstatus_consensus_reasonably_live(const networkstatus_t *consensus, + time_t now) { -#define REASONABLY_LIVE_TIME (24*60*60) if (BUG(!consensus)) return 0; - if (now <= consensus->valid_until + REASONABLY_LIVE_TIME) - return 1; + return networkstatus_valid_until_is_reasonably_live(consensus->valid_until, + now); +} - return 0; +/** As networkstatus_consensus_reasonably_live, but takes a valid_until + * time rather than an entire consensus. */ +int +networkstatus_valid_until_is_reasonably_live(time_t valid_until, + time_t now) +{ +#define REASONABLY_LIVE_TIME (24*60*60) + return (now <= valid_until + REASONABLY_LIVE_TIME); } /* XXXX remove this in favor of get_live_consensus. But actually, @@ -1988,6 +1997,7 @@ networkstatus_set_current_consensus(const char *consensus, circuit_build_times_new_consensus_params( get_circuit_build_times_mutable(), c); + channelpadding_new_consensus_params(c); } /* Reset the failure count only if this consensus is actually valid. */ @@ -2467,19 +2477,13 @@ networkstatus_parse_flavor_name(const char *flavname) * running, or otherwise not a descriptor that we would make any * use of even if we had it. Else return 1. */ int -client_would_use_router(const routerstatus_t *rs, time_t now, - const or_options_t *options) +client_would_use_router(const routerstatus_t *rs, time_t now) { if (!rs->is_flagged_running) { /* If we had this router descriptor, we wouldn't even bother using it. * (Fetching and storing depends on by we_want_to_fetch_flavor().) */ return 0; } - if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime - > now) { - /* Most caches probably don't have this descriptor yet. */ - return 0; - } if (rs->published_on + OLD_ROUTER_DESC_MAX_AGE < now) { /* We'd drop it immediately for being too old. */ return 0; diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h index 6a90d706c5..e774c4d266 100644 --- a/src/or/networkstatus.h +++ b/src/or/networkstatus.h @@ -76,14 +76,15 @@ int should_delay_dir_fetches(const or_options_t *options,const char **msg_out); void update_networkstatus_downloads(time_t now); void update_certificate_downloads(time_t now); int consensus_is_waiting_for_certs(void); -int client_would_use_router(const routerstatus_t *rs, time_t now, - const or_options_t *options); +int client_would_use_router(const routerstatus_t *rs, time_t now); MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus,(void)); MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus_by_flavor, (consensus_flavor_t f)); MOCK_DECL(networkstatus_t *, networkstatus_get_live_consensus,(time_t now)); -int networkstatus_consensus_reasonably_live(networkstatus_t *consensus, +int networkstatus_consensus_reasonably_live(const networkstatus_t *consensus, time_t now); +int networkstatus_valid_until_is_reasonably_live(time_t valid_until, + time_t now); networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now, int flavor); MOCK_DECL(int, networkstatus_consensus_is_bootstrapping,(time_t now)); @@ -139,7 +140,9 @@ void vote_routerstatus_free(vote_routerstatus_t *rs); #ifdef TOR_UNIT_TESTS STATIC int networkstatus_set_current_consensus_from_ns(networkstatus_t *c, const char *flavor); -#endif // TOR_UNIT_TESTS +extern networkstatus_t *current_ns_consensus; +extern networkstatus_t *current_md_consensus; +#endif #endif #endif diff --git a/src/or/nodelist.c b/src/or/nodelist.c index dc4d9a63e3..e24261b28d 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -74,7 +74,6 @@ static void count_usable_descriptors(int *num_present, int *num_usable, smartlist_t *descs_out, const networkstatus_t *consensus, - const or_options_t *options, time_t now, routerset_t *in_set, usable_descriptor_t exit_only); @@ -1690,7 +1689,7 @@ static void count_usable_descriptors(int *num_present, int *num_usable, smartlist_t *descs_out, const networkstatus_t *consensus, - const or_options_t *options, time_t now, + time_t now, routerset_t *in_set, usable_descriptor_t exit_only) { @@ -1707,7 +1706,7 @@ count_usable_descriptors(int *num_present, int *num_usable, continue; if (in_set && ! routerset_contains_routerstatus(in_set, rs, -1)) continue; - if (client_would_use_router(rs, now, options)) { + if (client_would_use_router(rs, now)) { const char * const digest = rs->descriptor_digest; int present; ++*num_usable; /* the consensus says we want it. */ @@ -1761,10 +1760,10 @@ compute_frac_paths_available(const networkstatus_t *consensus, const int authdir = authdir_mode_v3(options); count_usable_descriptors(num_present_out, num_usable_out, - mid, consensus, options, now, NULL, + mid, consensus, now, NULL, USABLE_DESCRIPTOR_ALL); if (options->EntryNodes) { - count_usable_descriptors(&np, &nu, guards, consensus, options, now, + count_usable_descriptors(&np, &nu, guards, consensus, now, options->EntryNodes, USABLE_DESCRIPTOR_ALL); } else { SMARTLIST_FOREACH(mid, const node_t *, node, { @@ -1785,7 +1784,7 @@ compute_frac_paths_available(const networkstatus_t *consensus, * an unavoidable feature of forcing authorities to declare * certain nodes as exits. */ - count_usable_descriptors(&np, &nu, exits, consensus, options, now, + count_usable_descriptors(&np, &nu, exits, consensus, now, NULL, USABLE_DESCRIPTOR_EXIT_ONLY); log_debug(LD_NET, "%s: %d present, %d usable", @@ -1834,7 +1833,7 @@ compute_frac_paths_available(const networkstatus_t *consensus, smartlist_t *myexits_unflagged = smartlist_new(); /* All nodes with exit flag in ExitNodes option */ - count_usable_descriptors(&np, &nu, myexits, consensus, options, now, + count_usable_descriptors(&np, &nu, myexits, consensus, now, options->ExitNodes, USABLE_DESCRIPTOR_EXIT_ONLY); log_debug(LD_NET, "%s: %d present, %d usable", @@ -1845,7 +1844,7 @@ compute_frac_paths_available(const networkstatus_t *consensus, /* Now compute the nodes in the ExitNodes option where which we don't know * what their exit policy is, or we know it permits something. */ count_usable_descriptors(&np, &nu, myexits_unflagged, - consensus, options, now, + consensus, now, options->ExitNodes, USABLE_DESCRIPTOR_ALL); log_debug(LD_NET, "%s: %d present, %d usable", diff --git a/src/or/or.h b/src/or/or.h index 423f66cdd5..acbf8cebbb 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -896,6 +896,7 @@ typedef enum { #define CELL_RELAY_EARLY 9 #define CELL_CREATE2 10 #define CELL_CREATED2 11 +#define CELL_PADDING_NEGOTIATE 12 #define CELL_VPADDING 128 #define CELL_CERTS 129 @@ -1933,9 +1934,9 @@ typedef struct addr_policy_t { * compressed form. */ typedef struct cached_dir_t { char *dir; /**< Contents of this object, NUL-terminated. */ - char *dir_z; /**< Compressed contents of this object. */ + char *dir_compressed; /**< Compressed contents of this object. */ size_t dir_len; /**< Length of <b>dir</b> (not counting its NUL). */ - size_t dir_z_len; /**< Length of <b>dir_z</b>. */ + size_t dir_compressed_len; /**< Length of <b>dir_compressed</b>. */ time_t published; /**< When was this object published. */ common_digests_t digests; /**< Digests of this object (networkstatus only) */ /** Sha3 digest (also ns only) */ @@ -3331,6 +3332,13 @@ typedef struct origin_circuit_t { * adjust_exit_policy_from_exitpolicy_failure. */ smartlist_t *prepend_policy; + + /** How long do we wait before closing this circuit if it remains + * completely idle after it was built, in seconds? This value + * is randomized on a per-circuit basis from CircuitsAvailableTimoeut + * to 2*CircuitsAvailableTimoeut. */ + int circuit_idle_timeout; + } origin_circuit_t; struct onion_queue_t; @@ -3472,15 +3480,6 @@ static inline const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT( return DOWNCAST(origin_circuit_t, x); } -/** Bitfield type: things that we're willing to use invalid routers for. */ -typedef enum invalid_router_usage_t { - ALLOW_INVALID_ENTRY =1, - ALLOW_INVALID_EXIT =2, - ALLOW_INVALID_MIDDLE =4, - ALLOW_INVALID_RENDEZVOUS =8, - ALLOW_INVALID_INTRODUCTION=16, -} invalid_router_usage_t; - /* limits for TCP send and recv buffer size used for constrained sockets */ #define MIN_CONSTRAINED_TCP_BUFFER 2048 #define MAX_CONSTRAINED_TCP_BUFFER 262144 /* 256k */ @@ -3606,10 +3605,6 @@ typedef struct { int DisableAllSwap; /**< Boolean: Attempt to call mlockall() on our * process for all current and future memory. */ - /** List of "entry", "middle", "exit", "introduction", "rendezvous". */ - smartlist_t *AllowInvalidNodes; - /** Bitmask; derived from AllowInvalidNodes. */ - invalid_router_usage_t AllowInvalid_; config_line_t *ExitPolicy; /**< Lists of exit policy components. */ int ExitPolicyRejectPrivate; /**< Should we not exit to reserved private * addresses, and our own published addresses? @@ -3620,21 +3615,6 @@ typedef struct { * configured ports. */ config_line_t *SocksPolicy; /**< Lists of socks policy components */ config_line_t *DirPolicy; /**< Lists of dir policy components */ - /** Addresses to bind for listening for SOCKS connections. */ - config_line_t *SocksListenAddress; - /** Addresses to bind for listening for transparent pf/netfilter - * connections. */ - config_line_t *TransListenAddress; - /** Addresses to bind for listening for transparent natd connections */ - config_line_t *NATDListenAddress; - /** Addresses to bind for listening for SOCKS connections. */ - config_line_t *DNSListenAddress; - /** Addresses to bind for listening for OR connections. */ - config_line_t *ORListenAddress; - /** Addresses to bind for listening for directory connections. */ - config_line_t *DirListenAddress; - /** Addresses to bind for listening for control connections. */ - config_line_t *ControlListenAddress; /** Local address to bind outbound sockets */ config_line_t *OutboundBindAddress; /** Local address to bind outbound relay sockets */ @@ -3656,7 +3636,6 @@ typedef struct { /** Whether routers accept EXTEND cells to routers with private IPs. */ int ExtendAllowPrivateAddresses; char *User; /**< Name of user to run Tor as. */ - char *Group; /**< Name of group to run Tor as. */ config_line_t *ORPort_lines; /**< Ports to listen on for OR connections. */ /** Ports to listen on for extended OR connections. */ config_line_t *ExtORPort_lines; @@ -3759,6 +3738,15 @@ typedef struct { int AvoidDiskWrites; /**< Boolean: should we never cache things to disk? * Not used yet. */ int ClientOnly; /**< Boolean: should we never evolve into a server role? */ + + int ReducedConnectionPadding; /**< Boolean: Should we try to keep connections + open shorter and pad them less against + connection-level traffic analysis? */ + /** Autobool: if auto, then connection padding will be negotiated by client + * and server. If 0, it will be fully disabled. If 1, the client will still + * pad to the server regardless of server support. */ + int ConnectionPadding; + /** To what authority types do we publish our descriptor? Choices are * "v1", "v2", "v3", "bridge", or "". */ smartlist_t *PublishServerDescriptor; @@ -3784,15 +3772,6 @@ typedef struct { /** A routerset that should be used when picking RPs for HS circuits. */ routerset_t *Tor2webRendezvousPoints; - /** Close hidden service client circuits immediately when they reach - * the normal circuit-build timeout, even if they have already sent - * an INTRODUCE1 cell on its way to the service. */ - int CloseHSClientCircuitsImmediatelyOnTimeout; - - /** Close hidden-service-side rendezvous circuits immediately when - * they reach the normal circuit-build timeout. */ - int CloseHSServiceRendCircuitsImmediatelyOnTimeout; - /** Onion Services in HiddenServiceSingleHopMode make one-hop (direct) * circuits between the onion service server, and the introduction and * rendezvous points. (Onion service descriptors are still posted using @@ -3873,8 +3852,8 @@ typedef struct { int CircuitBuildTimeout; /**< Cull non-open circuits that were born at * least this many seconds ago. Used until * adaptive algorithm learns a new value. */ - int CircuitIdleTimeout; /**< Cull open clean circuits that were born - * at least this many seconds ago. */ + int CircuitsAvailableTimeout; /**< Try to have an open circuit for at + least this long after last activity */ int CircuitStreamTimeout; /**< If non-zero, detach streams from circuits * and try a new circuit if the stream has been * waiting for this many seconds. If zero, use @@ -3884,10 +3863,6 @@ typedef struct { * a new one? */ int MaxCircuitDirtiness; /**< Never use circs that were first used more than this interval ago. */ - int PredictedPortsRelevanceTime; /** How long after we've requested a - * connection for a given port, do we want - * to continue to pick exits that support - * that port? */ uint64_t BandwidthRate; /**< How much bandwidth, on average, are we willing * to use in a second? */ uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing @@ -3901,8 +3876,6 @@ typedef struct { uint64_t PerConnBWRate; /**< Long-term bw on a single TLS conn, if set. */ uint64_t PerConnBWBurst; /**< Allowed burst on a single TLS conn, if set. */ int NumCPUs; /**< How many CPUs should we try to use? */ -//int RunTesting; /**< If true, create testing circuits to measure how well the -// * other ORs are running. */ config_line_t *RendConfigLines; /**< List of configuration lines * for rendezvous services. */ config_line_t *HidServAuth; /**< List of configuration lines for client-side @@ -3953,7 +3926,8 @@ typedef struct { /** If set, use these bridge authorities and not the default one. */ config_line_t *AlternateBridgeAuthority; - char *MyFamily; /**< Declared family for this OR. */ + config_line_t *MyFamily_lines; /**< Declared family for this OR. */ + config_line_t *MyFamily; /**< Declared family for this OR, normalized */ config_line_t *NodeFamilies; /**< List of config lines for * node families */ smartlist_t *NodeFamilySets; /**< List of parsed NodeFamilies values. */ @@ -4072,8 +4046,6 @@ typedef struct { int NumDirectoryGuards; /**< How many dir guards do we try to establish? * If 0, use value from NumEntryGuards. */ int RephistTrackTime; /**< How many seconds do we keep rephist info? */ - int FastFirstHopPK; /**< If Tor believes it is safe, should we save a third - * of our PK time by sending CREATE_FAST cells? */ /** Should we always fetch our dir info on the mirror schedule (which * means directly from the authorities) no matter our other config? */ int FetchDirInfoEarly; @@ -4129,16 +4101,6 @@ typedef struct { * if we are a cache). For authorities, this is always true. */ int DownloadExtraInfo; - /** If true, and we are acting as a relay, allow exit circuits even when - * we are the first hop of a circuit. */ - int AllowSingleHopExits; - /** If true, don't allow relays with AllowSingleHopExits=1 to be used in - * circuits that we build. */ - int ExcludeSingleHopRelays; - /** If true, and the controller tells us to use a one-hop circuit, and the - * exit allows it, we use it. */ - int AllowSingleHopCircuits; - /** If true, we convert "www.google.com.foo.exit" addresses on the * socks/trans/natd ports into "www.google.com" addresses that * exit from the node "foo". Disabled by default since attacking @@ -4146,10 +4108,6 @@ typedef struct { * selection. */ int AllowDotExit; - /** If true, we will warn if a user gives us only an IP address - * instead of a hostname. */ - int WarnUnsafeSocks; - /** If true, we're configured to collect statistics on clients * requesting network statuses from us as directory. */ int DirReqStatistics_option; @@ -4166,6 +4124,9 @@ typedef struct { /** If true, the user wants us to collect cell statistics. */ int CellStatistics; + /** If true, the user wants us to collect padding statistics. */ + int PaddingStatistics; + /** If true, the user wants us to collect statistics as entry node. */ int EntryStatistics; @@ -4373,8 +4334,7 @@ typedef struct { int TestingDirAuthVoteGuardIsStrict; /** Relays in a testing network which should be voted HSDir - * regardless of uptime and DirPort. - * Respects VoteOnHidServDirectoriesV2. */ + * regardless of uptime and DirPort. */ routerset_t *TestingDirAuthVoteHSDir; int TestingDirAuthVoteHSDirIsStrict; @@ -4506,8 +4466,6 @@ typedef struct { int IPv6Exit; /**< Do we support exiting to IPv6 addresses? */ - char *TLSECGroup; /**< One of "P256", "P224", or nil for auto */ - /** Fraction: */ double PathsNeededToBuildCircuits; @@ -4816,7 +4774,7 @@ typedef uint32_t build_time_t; double circuit_build_times_quantile_cutoff(void); /** How often in seconds should we build a test circuit */ -#define CBT_DEFAULT_TEST_FREQUENCY 60 +#define CBT_DEFAULT_TEST_FREQUENCY 10 #define CBT_MIN_TEST_FREQUENCY 1 #define CBT_MAX_TEST_FREQUENCY INT32_MAX @@ -5359,7 +5317,6 @@ typedef enum { CRN_NEED_UPTIME = 1<<0, CRN_NEED_CAPACITY = 1<<1, CRN_NEED_GUARD = 1<<2, - CRN_ALLOW_INVALID = 1<<3, /* XXXX not used, apparently. */ CRN_WEIGHT_AS_EXIT = 1<<5, CRN_NEED_DESC = 1<<6, @@ -5374,8 +5331,6 @@ typedef enum { typedef enum was_router_added_t { /* Router was added successfully. */ ROUTER_ADDED_SUCCESSFULLY = 1, - /* Router descriptor was added with warnings to submitter. */ - ROUTER_ADDED_NOTIFY_GENERATOR = 0, /* Extrainfo document was rejected because no corresponding router * descriptor was found OR router descriptor was rejected because * it was incompatible with its extrainfo document. */ diff --git a/src/or/parsecommon.h b/src/or/parsecommon.h index f4974a9683..b9f1613457 100644 --- a/src/or/parsecommon.h +++ b/src/or/parsecommon.h @@ -162,7 +162,9 @@ typedef enum { R3_INTRODUCTION_POINT, R3_INTRO_AUTH_KEY, R3_INTRO_ENC_KEY, - R3_INTRO_ENC_KEY_CERTIFICATION, + R3_INTRO_ENC_KEY_CERT, + R3_INTRO_LEGACY_KEY, + R3_INTRO_LEGACY_KEY_CERT, R3_DESC_AUTH_TYPE, R3_DESC_AUTH_KEY, R3_DESC_AUTH_CLIENT, diff --git a/src/or/relay.c b/src/or/relay.c index 1842012ed7..7082002f84 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -75,6 +75,7 @@ #include "routerlist.h" #include "routerparse.h" #include "scheduler.h" +#include "rephist.h" static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, @@ -197,6 +198,82 @@ relay_crypt_one_payload(crypto_cipher_t *cipher, uint8_t *in, return 0; } +/** + * Update channel usage state based on the type of relay cell and + * circuit properties. + * + * This is needed to determine if a client channel is being + * used for application traffic, and if a relay channel is being + * used for multihop circuits and application traffic. The decision + * to pad in channelpadding.c depends upon this info (as well as + * consensus parameters) to decide what channels to pad. + */ +static void +circuit_update_channel_usage(circuit_t *circ, cell_t *cell) +{ + if (CIRCUIT_IS_ORIGIN(circ)) { + /* + * The client state was first set much earlier in + * circuit_send_next_onion_skin(), so we can start padding as early as + * possible. + * + * However, if padding turns out to be expensive, we may want to not do + * it until actual application traffic starts flowing (which is controlled + * via consensus param nf_pad_before_usage). + * + * So: If we're an origin circuit and we've created a full length circuit, + * then any CELL_RELAY cell means application data. Increase the usage + * state of the channel to indicate this. + * + * We want to wait for CELL_RELAY specifically here, so we know that + * the channel was definitely being used for data and not for extends. + * By default, we pad as soon as a channel has been used for *any* + * circuits, so this state is irrelevant to the padding decision in + * the default case. However, if padding turns out to be expensive, + * we would like the ability to avoid padding until we're absolutely + * sure that a channel is used for enough application data to be worth + * padding. + * + * (So it does not matter that CELL_RELAY_EARLY can actually contain + * application data. This is only a load reducing option and that edge + * case does not matter if we're desperately trying to reduce overhead + * anyway. See also consensus parameter nf_pad_before_usage). + */ + if (BUG(!circ->n_chan)) + return; + + if (circ->n_chan->channel_usage == CHANNEL_USED_FOR_FULL_CIRCS && + cell->command == CELL_RELAY) { + circ->n_chan->channel_usage = CHANNEL_USED_FOR_USER_TRAFFIC; + } + } else { + /* If we're a relay circuit, the question is more complicated. Basically: + * we only want to pad connections that carry multihop (anonymous) + * circuits. + * + * We assume we're more than one hop if either the previous hop + * is not a client, or if the previous hop is a client and there's + * a next hop. Then, circuit traffic starts at RELAY_EARLY, and + * user application traffic starts when we see RELAY cells. + */ + or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); + + if (BUG(!or_circ->p_chan)) + return; + + if (!channel_is_client(or_circ->p_chan) || + (channel_is_client(or_circ->p_chan) && circ->n_chan)) { + if (cell->command == CELL_RELAY_EARLY) { + if (or_circ->p_chan->channel_usage < CHANNEL_USED_FOR_FULL_CIRCS) { + or_circ->p_chan->channel_usage = CHANNEL_USED_FOR_FULL_CIRCS; + } + } else if (cell->command == CELL_RELAY) { + or_circ->p_chan->channel_usage = CHANNEL_USED_FOR_USER_TRAFFIC; + } + } + } +} + /** Receive a relay cell: * - Crypt it (encrypt if headed toward the origin or if we <b>are</b> the * origin; decrypt if we're headed toward the exit). @@ -231,6 +308,8 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ, return -END_CIRC_REASON_INTERNAL; } + circuit_update_channel_usage(circ, cell); + if (recognized) { edge_connection_t *conn = NULL; @@ -639,6 +718,9 @@ relay_send_command_from_edge_,(streamid_t stream_id, circuit_t *circ, log_debug(LD_OR,"delivering %d cell %s.", relay_command, cell_direction == CELL_DIRECTION_OUT ? "forward" : "backward"); + if (relay_command == RELAY_COMMAND_DROP) + rep_hist_padding_count_write(PADDING_TYPE_DROP); + /* If we are sending an END cell and this circuit is used for a tunneled * directory request, advance its state. */ if (relay_command == RELAY_COMMAND_END && circ->dirreq_id) @@ -1530,6 +1612,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ, switch (rh.command) { case RELAY_COMMAND_DROP: + rep_hist_padding_count_read(PADDING_TYPE_DROP); // log_info(domain,"Got a relay-level padding cell. Dropping."); return 0; case RELAY_COMMAND_BEGIN: diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 5de153caa4..f3b78c4663 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -245,35 +245,23 @@ rend_service_free_all(void) rend_service_list = NULL; } -/** Validate <b>service</b> and add it to <b>service_list</b>, or to - * the global rend_service_list if <b>service_list</b> is NULL. - * Return 0 on success. On failure, free <b>service</b> and return -1. - * Takes ownership of <b>service</b>. - */ +/* Validate a <b>service</b>. Use the <b>service_list</b> to make sure there + * is no duplicate entry for the given service object. Return 0 if valid else + * -1 if not.*/ static int -rend_add_service(smartlist_t *service_list, rend_service_t *service) +rend_validate_service(const smartlist_t *service_list, + const rend_service_t *service) { - int i; - rend_service_port_config_t *p; + int dupe = 0; + tor_assert(service_list); tor_assert(service); - smartlist_t *s_list = rend_get_service_list_mutable(service_list); - /* We must have a service list, even if it's a temporary one, so we can - * check for duplicate services */ - if (BUG(!s_list)) { - return -1; - } - - service->intro_nodes = smartlist_new(); - service->expiring_nodes = smartlist_new(); - if (service->max_streams_per_circuit < 0) { log_warn(LD_CONFIG, "Hidden service (%s) configured with negative max " "streams per circuit.", rend_service_escaped_dir(service)); - rend_service_free(service); - return -1; + goto invalid; } if (service->max_streams_close_circuit < 0 || @@ -281,87 +269,107 @@ rend_add_service(smartlist_t *service_list, rend_service_t *service) log_warn(LD_CONFIG, "Hidden service (%s) configured with invalid " "max streams handling.", rend_service_escaped_dir(service)); - rend_service_free(service); - return -1; + goto invalid; } if (service->auth_type != REND_NO_AUTH && - (!service->clients || - smartlist_len(service->clients) == 0)) { - log_warn(LD_CONFIG, "Hidden service (%s) with client authorization but no " - "clients.", + (!service->clients || smartlist_len(service->clients) == 0)) { + log_warn(LD_CONFIG, "Hidden service (%s) with client authorization but " + "no clients.", rend_service_escaped_dir(service)); - rend_service_free(service); - return -1; + goto invalid; } if (!service->ports || !smartlist_len(service->ports)) { log_warn(LD_CONFIG, "Hidden service (%s) with no ports configured.", rend_service_escaped_dir(service)); - rend_service_free(service); - return -1; - } else { - int dupe = 0; - /* XXX This duplicate check has two problems: - * - * a) It's O(n^2), but the same comment from the bottom of - * rend_config_services() should apply. - * - * b) We only compare directory paths as strings, so we can't - * detect two distinct paths that specify the same directory - * (which can arise from symlinks, case-insensitivity, bind - * mounts, etc.). - * - * It also can't detect that two separate Tor instances are trying - * to use the same HiddenServiceDir; for that, we would need a - * lock file. But this is enough to detect a simple mistake that - * at least one person has actually made. - */ - tor_assert(s_list); - if (!rend_service_is_ephemeral(service)) { - /* Skip dupe for ephemeral services. */ - SMARTLIST_FOREACH(s_list, rend_service_t*, ptr, - dupe = dupe || - !strcmp(ptr->directory, service->directory)); - if (dupe) { - log_warn(LD_REND, "Another hidden service is already configured for " - "directory %s.", - rend_service_escaped_dir(service)); - rend_service_free(service); - return -1; - } + goto invalid; + } + + /* XXX This duplicate check has two problems: + * + * a) It's O(n^2), but the same comment from the bottom of + * rend_config_services() should apply. + * + * b) We only compare directory paths as strings, so we can't + * detect two distinct paths that specify the same directory + * (which can arise from symlinks, case-insensitivity, bind + * mounts, etc.). + * + * It also can't detect that two separate Tor instances are trying + * to use the same HiddenServiceDir; for that, we would need a + * lock file. But this is enough to detect a simple mistake that + * at least one person has actually made. + */ + if (!rend_service_is_ephemeral(service)) { + /* Skip dupe for ephemeral services. */ + SMARTLIST_FOREACH(service_list, rend_service_t *, ptr, + dupe = dupe || + !strcmp(ptr->directory, service->directory)); + if (dupe) { + log_warn(LD_REND, "Another hidden service is already configured for " + "directory %s.", + rend_service_escaped_dir(service)); + goto invalid; } - log_debug(LD_REND,"Configuring service with directory %s", - rend_service_escaped_dir(service)); - for (i = 0; i < smartlist_len(service->ports); ++i) { - p = smartlist_get(service->ports, i); - if (!(p->is_unix_addr)) { - log_debug(LD_REND, - "Service maps port %d to %s", - p->virtual_port, - fmt_addrport(&p->real_addr, p->real_port)); - } else { + } + + /* Valid. */ + return 0; + invalid: + return -1; +} + +/** Add it to <b>service_list</b>, or to the global rend_service_list if + * <b>service_list</b> is NULL. Return 0 on success. On failure, free + * <b>service</b> and return -1. Takes ownership of <b>service</b>. */ +static int +rend_add_service(smartlist_t *service_list, rend_service_t *service) +{ + int i; + rend_service_port_config_t *p; + + tor_assert(service); + + smartlist_t *s_list = rend_get_service_list_mutable(service_list); + /* We must have a service list, even if it's a temporary one, so we can + * check for duplicate services */ + if (BUG(!s_list)) { + return -1; + } + + service->intro_nodes = smartlist_new(); + service->expiring_nodes = smartlist_new(); + + log_debug(LD_REND,"Configuring service with directory %s", + rend_service_escaped_dir(service)); + for (i = 0; i < smartlist_len(service->ports); ++i) { + p = smartlist_get(service->ports, i); + if (!(p->is_unix_addr)) { + log_debug(LD_REND, + "Service maps port %d to %s", + p->virtual_port, + fmt_addrport(&p->real_addr, p->real_port)); + } else { #ifdef HAVE_SYS_UN_H - log_debug(LD_REND, - "Service maps port %d to socket at \"%s\"", - p->virtual_port, p->unix_addr); + log_debug(LD_REND, + "Service maps port %d to socket at \"%s\"", + p->virtual_port, p->unix_addr); #else - log_warn(LD_BUG, - "Service maps port %d to an AF_UNIX socket, but we " - "have no AF_UNIX support on this platform. This is " - "probably a bug.", - p->virtual_port); - rend_service_free(service); - return -1; + log_warn(LD_BUG, + "Service maps port %d to an AF_UNIX socket, but we " + "have no AF_UNIX support on this platform. This is " + "probably a bug.", + p->virtual_port); + rend_service_free(service); + return -1; #endif /* defined(HAVE_SYS_UN_H) */ - } } - /* The service passed all the checks */ - tor_assert(s_list); - smartlist_add(s_list, service); - return 0; } - /* NOTREACHED */ + /* The service passed all the checks */ + tor_assert(s_list); + smartlist_add(s_list, service); + return 0; } /** Return a new rend_service_port_config_t with its path set to @@ -671,13 +679,19 @@ rend_config_services(const or_options_t *options, int validate_only) for (line = options->RendConfigLines; line; line = line->next) { if (!strcasecmp(line->key, "HiddenServiceDir")) { - /* register the service we just finished parsing - * this code registers every service except the last one parsed, - * which is registered below the loop */ - if (rend_service_check_dir_and_add(rend_service_staging_list, options, - service, validate_only) < 0) { - service = NULL; - goto free_and_return; + if (service) { + /* Validate and register the service we just finished parsing this + * code registers every service except the last one parsed, which is + * validated and registered below the loop. */ + if (rend_validate_service(rend_service_staging_list, service) < 0) { + goto free_and_return; + } + if (rend_service_check_dir_and_add(rend_service_staging_list, options, + service, validate_only) < 0) { + /* The above frees the service on error so nullify the pointer. */ + service = NULL; + goto free_and_return; + } } service = tor_malloc_zero(sizeof(rend_service_t)); service->directory = tor_strdup(line->value); @@ -872,14 +886,23 @@ rend_config_services(const or_options_t *options, int validate_only) } } } + /* Validate the last service that we just parsed. */ + if (service && + rend_validate_service(rend_service_staging_list, service) < 0) { + goto free_and_return; + } /* register the final service after we have finished parsing all services * this code only registers the last service, other services are registered * within the loop. It is ok for this service to be NULL, it is ignored. */ if (rend_service_check_dir_and_add(rend_service_staging_list, options, service, validate_only) < 0) { + /* Service object is freed on error so nullify pointer. */ service = NULL; goto free_and_return; } + /* The service is in the staging list so nullify pointer to avoid double + * free of this object in case of error because we lost ownership of it at + * this point. */ service = NULL; /* Free the newly added services if validating */ @@ -4182,8 +4205,6 @@ rend_consider_services_intro_points(void) const node_t *node; rend_intro_point_t *intro; router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC; - if (get_options()->AllowInvalid_ & ALLOW_INVALID_INTRODUCTION) - flags |= CRN_ALLOW_INVALID; router_crn_flags_t direct_flags = flags; direct_flags |= CRN_PREF_ADDR; direct_flags |= CRN_DIRECT_CONN; diff --git a/src/or/rephist.c b/src/or/rephist.c index 231130f13c..72a5cc5a9b 100644 --- a/src/or/rephist.c +++ b/src/or/rephist.c @@ -84,9 +84,13 @@ #include "router.h" #include "routerlist.h" #include "ht.h" +#include "channelpadding.h" + +#include "channelpadding.h" +#include "connection_or.h" static void bw_arrays_init(void); -static void predicted_ports_init(void); +static void predicted_ports_alloc(void); /** Total number of bytes currently allocated in fields used by rephist.c. */ uint64_t rephist_total_alloc=0; @@ -165,6 +169,44 @@ typedef struct or_history_t { digestmap_t *link_history_map; } or_history_t; +/** + * This structure holds accounting needed to calculate the padding overhead. + */ +typedef struct padding_counts_t { + /** Total number of cells we have received, including padding */ + uint64_t read_cell_count; + /** Total number of cells we have sent, including padding */ + uint64_t write_cell_count; + /** Total number of CELL_PADDING cells we have received */ + uint64_t read_pad_cell_count; + /** Total number of CELL_PADDING cells we have sent */ + uint64_t write_pad_cell_count; + /** Total number of read cells on padding-enabled conns */ + uint64_t enabled_read_cell_count; + /** Total number of sent cells on padding-enabled conns */ + uint64_t enabled_write_cell_count; + /** Total number of read CELL_PADDING cells on padding-enabled cons */ + uint64_t enabled_read_pad_cell_count; + /** Total number of sent CELL_PADDING cells on padding-enabled cons */ + uint64_t enabled_write_pad_cell_count; + /** Total number of RELAY_DROP cells we have received */ + uint64_t read_drop_cell_count; + /** Total number of RELAY_DROP cells we have sent */ + uint64_t write_drop_cell_count; + /** The maximum number of padding timers we've seen in 24 hours */ + uint64_t maximum_chanpad_timers; + /** When did we first copy padding_current into padding_published? */ + char first_published_at[ISO_TIME_LEN+1]; +} padding_counts_t; + +/** Holds the current values of our padding statistics. + * It is not published until it is transferred to padding_published. */ +static padding_counts_t padding_current; + +/** Remains fixed for a 24 hour period, and then is replaced + * by a redacted copy of padding_current */ +static padding_counts_t padding_published; + /** When did we last multiply all routers' weighted_run_length and * total_run_weights by STABILITY_ALPHA? */ static time_t stability_last_downrated = 0; @@ -264,7 +306,7 @@ rep_hist_init(void) { history_map = digestmap_new(); bw_arrays_init(); - predicted_ports_init(); + predicted_ports_alloc(); } /** Helper: note that we are no longer connected to the router with history @@ -1758,6 +1800,40 @@ typedef struct predicted_port_t { /** A list of port numbers that have been used recently. */ static smartlist_t *predicted_ports_list=NULL; +/** How long do we keep predicting circuits? */ +static int prediction_timeout=0; +/** When was the last time we added a prediction entry (HS or port) */ +static time_t last_prediction_add_time=0; + +/** + * How much time left until we stop predicting circuits? + */ +int +predicted_ports_prediction_time_remaining(time_t now) +{ + time_t idle_delta = now - last_prediction_add_time; + + /* Protect against overflow of return value. This can happen if the clock + * jumps backwards in time. Update the last prediction time (aka last + * active time) to prevent it. This update is preferable to using monotonic + * time because it prevents clock jumps into the past from simply causing + * very long idle timeouts while the monotonic time stands still. */ + if (last_prediction_add_time > now) { + last_prediction_add_time = now; + idle_delta = 0; + } + + /* Protect against underflow of the return value. This can happen for very + * large periods of inactivity/system sleep. */ + if (idle_delta > prediction_timeout) + return 0; + + if (BUG((prediction_timeout - idle_delta) > INT_MAX)) { + return INT_MAX; + } + + return (int)(prediction_timeout - idle_delta); +} /** We just got an application request for a connection with * port <b>port</b>. Remember it for the future, so we can keep @@ -1767,21 +1843,40 @@ static void add_predicted_port(time_t now, uint16_t port) { predicted_port_t *pp = tor_malloc(sizeof(predicted_port_t)); + + // If the list is empty, re-randomize predicted ports lifetime + if (!any_predicted_circuits(now)) { + prediction_timeout = channelpadding_get_circuits_available_timeout(); + } + + last_prediction_add_time = now; + + log_info(LD_CIRC, + "New port prediction added. Will continue predictive circ building " + "for %d more seconds.", + predicted_ports_prediction_time_remaining(now)); + pp->port = port; pp->time = now; rephist_total_alloc += sizeof(*pp); smartlist_add(predicted_ports_list, pp); } -/** Initialize whatever memory and structs are needed for predicting +/** + * Allocate whatever memory and structs are needed for predicting * which ports will be used. Also seed it with port 80, so we'll build * circuits on start-up. */ static void -predicted_ports_init(void) +predicted_ports_alloc(void) { predicted_ports_list = smartlist_new(); - add_predicted_port(time(NULL), 80); /* add one to kickstart us */ +} + +void +predicted_ports_init(void) +{ + add_predicted_port(time(NULL), 443); // Add a port to get us started } /** Free whatever memory is needed for predicting which ports will @@ -1812,6 +1907,12 @@ rep_hist_note_used_port(time_t now, uint16_t port) SMARTLIST_FOREACH_BEGIN(predicted_ports_list, predicted_port_t *, pp) { if (pp->port == port) { pp->time = now; + + last_prediction_add_time = now; + log_info(LD_CIRC, + "New port prediction added. Will continue predictive circ " + "building for %d more seconds.", + predicted_ports_prediction_time_remaining(now)); return; } } SMARTLIST_FOREACH_END(pp); @@ -1828,7 +1929,8 @@ rep_hist_get_predicted_ports(time_t now) int predicted_circs_relevance_time; smartlist_t *out = smartlist_new(); tor_assert(predicted_ports_list); - predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime; + + predicted_circs_relevance_time = prediction_timeout; /* clean out obsolete entries */ SMARTLIST_FOREACH_BEGIN(predicted_ports_list, predicted_port_t *, pp) { @@ -1888,6 +1990,18 @@ static time_t predicted_internal_capacity_time = 0; void rep_hist_note_used_internal(time_t now, int need_uptime, int need_capacity) { + // If the list is empty, re-randomize predicted ports lifetime + if (!any_predicted_circuits(now)) { + prediction_timeout = channelpadding_get_circuits_available_timeout(); + } + + last_prediction_add_time = now; + + log_info(LD_CIRC, + "New port prediction added. Will continue predictive circ building " + "for %d more seconds.", + predicted_ports_prediction_time_remaining(now)); + predicted_internal_time = now; if (need_uptime) predicted_internal_uptime_time = now; @@ -1901,7 +2015,8 @@ rep_hist_get_predicted_internal(time_t now, int *need_uptime, int *need_capacity) { int predicted_circs_relevance_time; - predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime; + + predicted_circs_relevance_time = prediction_timeout; if (!predicted_internal_time) { /* initialize it */ predicted_internal_time = now; @@ -1923,7 +2038,7 @@ int any_predicted_circuits(time_t now) { int predicted_circs_relevance_time; - predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime; + predicted_circs_relevance_time = prediction_timeout; return smartlist_len(predicted_ports_list) || predicted_internal_time + predicted_circs_relevance_time >= now; @@ -3210,8 +3325,7 @@ rep_hist_hs_stats_write(time_t now) return start_of_hs_stats_interval + WRITE_STATS_INTERVAL; } -#define MAX_LINK_PROTO_TO_LOG 4 -static uint64_t link_proto_count[MAX_LINK_PROTO_TO_LOG+1][2]; +static uint64_t link_proto_count[MAX_LINK_PROTO+1][2]; /** Note that we negotiated link protocol version <b>link_proto</b>, on * a connection that started here iff <b>started_here</b> is true. @@ -3220,7 +3334,7 @@ void rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here) { started_here = !!started_here; /* force to 0 or 1 */ - if (link_proto > MAX_LINK_PROTO_TO_LOG) { + if (link_proto > MAX_LINK_PROTO) { log_warn(LD_BUG, "Can't log link protocol %u", link_proto); return; } @@ -3228,6 +3342,165 @@ rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here) link_proto_count[link_proto][started_here]++; } +/** + * Update the maximum count of total pending channel padding timers + * in this period. + */ +void +rep_hist_padding_count_timers(uint64_t num_timers) +{ + if (num_timers > padding_current.maximum_chanpad_timers) { + padding_current.maximum_chanpad_timers = num_timers; + } +} + +/** + * Count a cell that we sent for padding overhead statistics. + * + * RELAY_COMMAND_DROP and CELL_PADDING are accounted separately. Both should be + * counted for PADDING_TYPE_TOTAL. + */ +void +rep_hist_padding_count_write(padding_type_t type) +{ + switch (type) { + case PADDING_TYPE_DROP: + padding_current.write_drop_cell_count++; + break; + case PADDING_TYPE_CELL: + padding_current.write_pad_cell_count++; + break; + case PADDING_TYPE_TOTAL: + padding_current.write_cell_count++; + break; + case PADDING_TYPE_ENABLED_TOTAL: + padding_current.enabled_write_cell_count++; + break; + case PADDING_TYPE_ENABLED_CELL: + padding_current.enabled_write_pad_cell_count++; + break; + } +} + +/** + * Count a cell that we've received for padding overhead statistics. + * + * RELAY_COMMAND_DROP and CELL_PADDING are accounted separately. Both should be + * counted for PADDING_TYPE_TOTAL. + */ +void +rep_hist_padding_count_read(padding_type_t type) +{ + switch (type) { + case PADDING_TYPE_DROP: + padding_current.read_drop_cell_count++; + break; + case PADDING_TYPE_CELL: + padding_current.read_pad_cell_count++; + break; + case PADDING_TYPE_TOTAL: + padding_current.read_cell_count++; + break; + case PADDING_TYPE_ENABLED_TOTAL: + padding_current.enabled_read_cell_count++; + break; + case PADDING_TYPE_ENABLED_CELL: + padding_current.enabled_read_pad_cell_count++; + break; + } +} + +/** + * Reset our current padding statistics. Called once every 24 hours. + */ +void +rep_hist_reset_padding_counts(void) +{ + memset(&padding_current, 0, sizeof(padding_current)); +} + +/** + * Copy our current cell counts into a structure for listing in our + * extra-info descriptor. Also perform appropriate rounding and redaction. + * + * This function is called once every 24 hours. + */ +#define MIN_CELL_COUNTS_TO_PUBLISH 1 +#define ROUND_CELL_COUNTS_TO 10000 +void +rep_hist_prep_published_padding_counts(time_t now) +{ + memcpy(&padding_published, &padding_current, sizeof(padding_published)); + + if (padding_published.read_cell_count < MIN_CELL_COUNTS_TO_PUBLISH || + padding_published.write_cell_count < MIN_CELL_COUNTS_TO_PUBLISH) { + memset(&padding_published, 0, sizeof(padding_published)); + return; + } + + format_iso_time(padding_published.first_published_at, now); +#define ROUND_AND_SET_COUNT(x) (x) = round_uint64_to_next_multiple_of((x), \ + ROUND_CELL_COUNTS_TO) + ROUND_AND_SET_COUNT(padding_published.read_pad_cell_count); + ROUND_AND_SET_COUNT(padding_published.write_pad_cell_count); + ROUND_AND_SET_COUNT(padding_published.read_drop_cell_count); + ROUND_AND_SET_COUNT(padding_published.write_drop_cell_count); + ROUND_AND_SET_COUNT(padding_published.write_cell_count); + ROUND_AND_SET_COUNT(padding_published.read_cell_count); + ROUND_AND_SET_COUNT(padding_published.enabled_read_cell_count); + ROUND_AND_SET_COUNT(padding_published.enabled_read_pad_cell_count); + ROUND_AND_SET_COUNT(padding_published.enabled_write_cell_count); + ROUND_AND_SET_COUNT(padding_published.enabled_write_pad_cell_count); +#undef ROUND_AND_SET_COUNT +} + +/** + * Returns an allocated string for extra-info documents for publishing + * padding statistics from the last 24 hour interval. + */ +char * +rep_hist_get_padding_count_lines(void) +{ + char *result = NULL; + + if (!padding_published.read_cell_count || + !padding_published.write_cell_count) { + return NULL; + } + + tor_asprintf(&result, "padding-counts %s (%d s)" + " bin-size="U64_FORMAT + " write-drop="U64_FORMAT + " write-pad="U64_FORMAT + " write-total="U64_FORMAT + " read-drop="U64_FORMAT + " read-pad="U64_FORMAT + " read-total="U64_FORMAT + " enabled-read-pad="U64_FORMAT + " enabled-read-total="U64_FORMAT + " enabled-write-pad="U64_FORMAT + " enabled-write-total="U64_FORMAT + " max-chanpad-timers="U64_FORMAT + "\n", + padding_published.first_published_at, + REPHIST_CELL_PADDING_COUNTS_INTERVAL, + U64_PRINTF_ARG(ROUND_CELL_COUNTS_TO), + U64_PRINTF_ARG(padding_published.write_drop_cell_count), + U64_PRINTF_ARG(padding_published.write_pad_cell_count), + U64_PRINTF_ARG(padding_published.write_cell_count), + U64_PRINTF_ARG(padding_published.read_drop_cell_count), + U64_PRINTF_ARG(padding_published.read_pad_cell_count), + U64_PRINTF_ARG(padding_published.read_cell_count), + U64_PRINTF_ARG(padding_published.enabled_read_pad_cell_count), + U64_PRINTF_ARG(padding_published.enabled_read_cell_count), + U64_PRINTF_ARG(padding_published.enabled_write_pad_cell_count), + U64_PRINTF_ARG(padding_published.enabled_write_cell_count), + U64_PRINTF_ARG(padding_published.maximum_chanpad_timers) + ); + + return result; +} + /** Log a heartbeat message explaining how many connections of each link * protocol version we have used. */ diff --git a/src/or/rephist.h b/src/or/rephist.h index 6dd88a3544..2b1c2e7ec7 100644 --- a/src/or/rephist.h +++ b/src/or/rephist.h @@ -48,6 +48,7 @@ double rep_hist_get_weighted_fractional_uptime(const char *id, time_t when); long rep_hist_get_weighted_time_known(const char *id, time_t when); int rep_hist_have_measured_enough_stability(void); +void predicted_ports_init(void); void rep_hist_note_used_port(time_t now, uint16_t port); smartlist_t *rep_hist_get_predicted_ports(time_t now); void rep_hist_remove_predicted_ports(const smartlist_t *rmv_ports); @@ -59,6 +60,7 @@ int rep_hist_get_predicted_internal(time_t now, int *need_uptime, int any_predicted_circuits(time_t now); int rep_hist_circbuilding_dormant(time_t now); +int predicted_ports_prediction_time_remaining(time_t now); void note_crypto_pk_op(pk_op_t operation); void dump_pk_ops(int severity); @@ -119,5 +121,30 @@ extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1]; extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1]; #endif +/** + * Represents the type of a cell for padding accounting + */ +typedef enum padding_type_t { + /** A RELAY_DROP cell */ + PADDING_TYPE_DROP, + /** A CELL_PADDING cell */ + PADDING_TYPE_CELL, + /** Total counts of padding and non-padding together */ + PADDING_TYPE_TOTAL, + /** Total cell counts for all padding-enabled channels */ + PADDING_TYPE_ENABLED_TOTAL, + /** CELL_PADDING counts for all padding-enabled channels */ + PADDING_TYPE_ENABLED_CELL +} padding_type_t; + +/** The amount of time over which the padding cell counts were counted */ +#define REPHIST_CELL_PADDING_COUNTS_INTERVAL (24*60*60) +void rep_hist_padding_count_read(padding_type_t type); +void rep_hist_padding_count_write(padding_type_t type); +char *rep_hist_get_padding_count_lines(void); +void rep_hist_reset_padding_counts(void); +void rep_hist_prep_published_padding_counts(time_t now); +void rep_hist_padding_count_timers(uint64_t num_timers); + #endif diff --git a/src/or/router.c b/src/or/router.c index 2336a5d3df..642f415a38 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -779,12 +779,6 @@ router_initialize_tls_context(void) int lifetime = options->SSLKeyLifetime; if (public_server_mode(options)) flags |= TOR_TLS_CTX_IS_PUBLIC_SERVER; - if (options->TLSECGroup) { - if (!strcasecmp(options->TLSECGroup, "P256")) - flags |= TOR_TLS_CTX_USE_ECDHE_P256; - else if (!strcasecmp(options->TLSECGroup, "P224")) - flags |= TOR_TLS_CTX_USE_ECDHE_P224; - } if (!lifetime) { /* we should guess a good ssl cert lifetime */ /* choose between 5 and 365 days, and round to the day */ @@ -1663,8 +1657,7 @@ MOCK_IMPL(int, server_mode,(const or_options_t *options)) { if (options->ClientOnly) return 0; - /* XXXX I believe we can kill off ORListenAddress here.*/ - return (options->ORPort_set || options->ORListenAddress); + return (options->ORPort_set); } /** Return true iff we are trying to be a non-bridge server. @@ -2288,14 +2281,12 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) } if (options->MyFamily && ! options->BridgeRelay) { - smartlist_t *family; if (!warned_nonexistent_family) warned_nonexistent_family = smartlist_new(); - family = smartlist_new(); ri->declared_family = smartlist_new(); - smartlist_split_string(family, options->MyFamily, ",", - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK|SPLIT_STRIP_SPACE, 0); - SMARTLIST_FOREACH_BEGIN(family, char *, name) { + config_line_t *family; + for (family = options->MyFamily; family; family = family->next) { + char *name = family->value; const node_t *member; if (!strcasecmp(name, options->Nickname)) goto skip; /* Don't list ourself, that's redundant */ @@ -2334,13 +2325,11 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) } skip: tor_free(name); - } SMARTLIST_FOREACH_END(name); + } /* remove duplicates from the list */ smartlist_sort_strings(ri->declared_family); smartlist_uniq_strings(ri->declared_family); - - smartlist_free(family); } /* Now generate the extrainfo. */ @@ -2942,7 +2931,7 @@ router_dump_router_to_string(routerinfo_t *router, "onion-key\n%s" "signing-key\n%s" "%s%s" - "%s%s%s%s", + "%s%s%s", router->nickname, address, router->or_port, @@ -2965,8 +2954,7 @@ router_dump_router_to_string(routerinfo_t *router, ntor_cc_line ? ntor_cc_line : "", family_line, we_are_hibernating() ? "hibernating 1\n" : "", - "hidden-service-dir\n", - options->AllowSingleHopExits ? "allow-single-hop-exits\n" : ""); + "hidden-service-dir\n"); if (options->ContactInfo && strlen(options->ContactInfo)) { const char *ci = options->ContactInfo; @@ -3295,6 +3283,12 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo, } } + if (options->PaddingStatistics) { + contents = rep_hist_get_padding_count_lines(); + if (contents) + smartlist_add(chunks, contents); + } + /* Add information about the pluggable transports we support. */ if (options->ServerTransportPlugin) { char *pluggable_transports = pt_get_extra_info_descriptor_string(); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 8927786fe8..a790265afb 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2320,17 +2320,16 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router) * we can pick a node for a circuit. */ void -router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid, - int need_uptime, int need_capacity, - int need_guard, int need_desc, - int pref_addr, int direct_conn) +router_add_running_nodes_to_smartlist(smartlist_t *sl, int need_uptime, + int need_capacity, int need_guard, + int need_desc, int pref_addr, + int direct_conn) { const int check_reach = !router_skip_or_reachability(get_options(), pref_addr); /* XXXX MOVE */ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) { - if (!node->is_running || - (!node->is_valid && !allow_invalid)) + if (!node->is_running || !node->is_valid) continue; if (need_desc && !(node->ri || (node->rs && node->md))) continue; @@ -2776,8 +2775,6 @@ node_sl_choose_by_bandwidth(const smartlist_t *sl, * a minimum uptime, return one of those. * If <b>CRN_NEED_CAPACITY</b> is set in flags, weight your choice by the * advertised capacity of each router. - * If <b>CRN_ALLOW_INVALID</b> is not set in flags, consider only Valid - * routers. * If <b>CRN_NEED_GUARD</b> is set in flags, consider only Guard routers. * If <b>CRN_WEIGHT_AS_EXIT</b> is set in flags, we weight bandwidths as if * picking an exit node, otherwise we weight bandwidths for picking a relay @@ -2798,7 +2795,6 @@ router_choose_random_node(smartlist_t *excludedsmartlist, const int need_uptime = (flags & CRN_NEED_UPTIME) != 0; const int need_capacity = (flags & CRN_NEED_CAPACITY) != 0; const int need_guard = (flags & CRN_NEED_GUARD) != 0; - const int allow_invalid = (flags & CRN_ALLOW_INVALID) != 0; const int weight_for_exit = (flags & CRN_WEIGHT_AS_EXIT) != 0; const int need_desc = (flags & CRN_NEED_DESC) != 0; const int pref_addr = (flags & CRN_PREF_ADDR) != 0; @@ -2814,20 +2810,17 @@ router_choose_random_node(smartlist_t *excludedsmartlist, rule = weight_for_exit ? WEIGHT_FOR_EXIT : (need_guard ? WEIGHT_FOR_GUARD : WEIGHT_FOR_MID); - /* Exclude relays that allow single hop exit circuits, if the user - * wants to (such relays might be risky) */ - if (get_options()->ExcludeSingleHopRelays) { - SMARTLIST_FOREACH(nodelist_get_list(), node_t *, node, - if (node_allows_single_hop_exits(node)) { - smartlist_add(excludednodes, node); - }); - } + /* Exclude relays that allow single hop exit circuits. This is an obsolete + * option since 0.2.9.2-alpha and done by default in 0.3.1.0-alpha. */ + SMARTLIST_FOREACH(nodelist_get_list(), node_t *, node, + if (node_allows_single_hop_exits(node)) { + smartlist_add(excludednodes, node); + }); if ((r = routerlist_find_my_routerinfo())) routerlist_add_node_and_family(excludednodes, r); - router_add_running_nodes_to_smartlist(sl, allow_invalid, - need_uptime, need_capacity, + router_add_running_nodes_to_smartlist(sl, need_uptime, need_capacity, need_guard, need_desc, pref_addr, direct_conn); log_debug(LD_CIRC, @@ -5149,7 +5142,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote, continue; /* We would throw it out immediately. */ } if (!we_want_to_fetch_flavor(options, consensus->flavor) && - !client_would_use_router(rs, now, options)) { + !client_would_use_router(rs, now)) { ++n_wouldnt_use; continue; /* We would never use it ourself. */ } diff --git a/src/or/routerlist.h b/src/or/routerlist.h index 5c1f76c8e7..e0ed4e623a 100644 --- a/src/or/routerlist.h +++ b/src/or/routerlist.h @@ -62,10 +62,10 @@ int router_skip_or_reachability(const or_options_t *options, int try_ip_pref); int router_get_my_share_of_directory_requests(double *v3_share_out); void router_reset_status_download_failures(void); int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2); -void router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid, - int need_uptime, int need_capacity, - int need_guard, int need_desc, - int pref_addr, int direct_conn); +void router_add_running_nodes_to_smartlist(smartlist_t *sl, int need_uptime, + int need_capacity, int need_guard, + int need_desc, int pref_addr, + int direct_conn); const routerinfo_t *routerlist_find_my_routerinfo(void); uint32_t router_get_advertised_bandwidth(const routerinfo_t *router); @@ -124,7 +124,7 @@ static int WRA_NEVER_DOWNLOADABLE(was_router_added_t s); */ static inline int WRA_WAS_ADDED(was_router_added_t s) { - return s == ROUTER_ADDED_SUCCESSFULLY || s == ROUTER_ADDED_NOTIFY_GENERATOR; + return s == ROUTER_ADDED_SUCCESSFULLY; } /** Return true iff the outcome code in <b>s</b> indicates that the descriptor * was not added because it was either: diff --git a/src/or/routerparse.c b/src/or/routerparse.c index fa79cf7132..0f6113ccfc 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -2585,7 +2585,7 @@ routerstatus_parse_entry_from_string(memarea_t *area, goto err; } } else if (flav == FLAV_MICRODESC) { - offset = -1; /* There is no identity digest */ + offset = -1; /* There is no descriptor digest in an md consensus r line */ } if (vote_rs) { diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index 575198388b..605f1a92c3 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -17,6 +17,7 @@ TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_channeltls.obj \ test_checkdir.obj test_microdesc.obj test_pt.obj test_util.obj \ test_config.obj test_connection.obj \ test_cell_formats.obj test_relay.obj test_replay.obj \ + test_channelpadding.obj \ test_scheduler.obj test_introduce.obj test_hs.obj tinytest.obj tinytest.obj: ..\ext\tinytest.c diff --git a/src/test/hs_test_helpers.c b/src/test/hs_test_helpers.c new file mode 100644 index 0000000000..3f0d6a9413 --- /dev/null +++ b/src/test/hs_test_helpers.c @@ -0,0 +1,257 @@ +/* Copyright (c) 2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "or.h" +#include "crypto_ed25519.h" +#include "test.h" +#include "torcert.h" + +#include "hs_test_helpers.h" + +hs_desc_intro_point_t * +hs_helper_build_intro_point(const ed25519_keypair_t *signing_kp, time_t now, + const char *addr, int legacy) +{ + int ret; + ed25519_keypair_t auth_kp; + hs_desc_intro_point_t *intro_point = NULL; + hs_desc_intro_point_t *ip = tor_malloc_zero(sizeof(*ip)); + ip->link_specifiers = smartlist_new(); + + { + hs_desc_link_specifier_t *ls = tor_malloc_zero(sizeof(*ls)); + if (legacy) { + ls->type = LS_LEGACY_ID; + memcpy(ls->u.legacy_id, "0299F268FCA9D55CD157976D39AE92B4B455B3A8", + DIGEST_LEN); + } else { + ls->u.ap.port = 9001; + int family = tor_addr_parse(&ls->u.ap.addr, addr); + switch (family) { + case AF_INET: + ls->type = LS_IPV4; + break; + case AF_INET6: + ls->type = LS_IPV6; + break; + default: + /* Stop the test, not suppose to have an error. */ + tt_int_op(family, OP_EQ, AF_INET); + } + } + smartlist_add(ip->link_specifiers, ls); + } + + ret = ed25519_keypair_generate(&auth_kp, 0); + tt_int_op(ret, ==, 0); + ip->auth_key_cert = tor_cert_create(signing_kp, CERT_TYPE_AUTH_HS_IP_KEY, + &auth_kp.pubkey, now, + HS_DESC_CERT_LIFETIME, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(ip->auth_key_cert); + + if (legacy) { + ip->legacy.key = crypto_pk_new(); + tt_assert(ip->legacy.key); + ret = crypto_pk_generate_key(ip->legacy.key); + tt_int_op(ret, ==, 0); + ssize_t cert_len = tor_make_rsa_ed25519_crosscert( + &signing_kp->pubkey, ip->legacy.key, + now + HS_DESC_CERT_LIFETIME, + &ip->legacy.cert.encoded); + tt_assert(ip->legacy.cert.encoded); + tt_u64_op(cert_len, OP_GT, 0); + ip->legacy.cert.len = cert_len; + } + + /* Encryption key. */ + { + int signbit; + curve25519_keypair_t curve25519_kp; + ed25519_keypair_t ed25519_kp; + tor_cert_t *cross_cert; + + ret = curve25519_keypair_generate(&curve25519_kp, 0); + tt_int_op(ret, ==, 0); + ed25519_keypair_from_curve25519_keypair(&ed25519_kp, &signbit, + &curve25519_kp); + cross_cert = tor_cert_create(signing_kp, CERT_TYPE_CROSS_HS_IP_KEYS, + &ed25519_kp.pubkey, time(NULL), + HS_DESC_CERT_LIFETIME, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(cross_cert); + ip->enc_key_cert = cross_cert; + } + + intro_point = ip; + done: + return intro_point; +} + +/* Return a valid hs_descriptor_t object. If no_ip is set, no introduction + * points are added. */ +static hs_descriptor_t * +hs_helper_build_hs_desc_impl(unsigned int no_ip, + const ed25519_keypair_t *signing_kp) +{ + int ret; + time_t now = time(NULL); + ed25519_keypair_t blinded_kp; + hs_descriptor_t *descp = NULL, *desc = tor_malloc_zero(sizeof(*desc)); + + desc->plaintext_data.version = HS_DESC_SUPPORTED_FORMAT_VERSION_MAX; + + /* Copy only the public key into the descriptor. */ + memcpy(&desc->plaintext_data.signing_pubkey, &signing_kp->pubkey, + sizeof(ed25519_public_key_t)); + + ret = ed25519_keypair_generate(&blinded_kp, 0); + tt_int_op(ret, ==, 0); + /* Copy only the public key into the descriptor. */ + memcpy(&desc->plaintext_data.blinded_pubkey, &blinded_kp.pubkey, + sizeof(ed25519_public_key_t)); + + desc->plaintext_data.signing_key_cert = + tor_cert_create(&blinded_kp, CERT_TYPE_SIGNING_HS_DESC, + &signing_kp->pubkey, now, 3600, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(desc->plaintext_data.signing_key_cert); + desc->plaintext_data.revision_counter = 42; + desc->plaintext_data.lifetime_sec = 3 * 60 * 60; + + /* Setup encrypted data section. */ + desc->encrypted_data.create2_ntor = 1; + desc->encrypted_data.intro_auth_types = smartlist_new(); + desc->encrypted_data.single_onion_service = 1; + smartlist_add(desc->encrypted_data.intro_auth_types, tor_strdup("ed25519")); + desc->encrypted_data.intro_points = smartlist_new(); + if (!no_ip) { + /* Add four intro points. */ + smartlist_add(desc->encrypted_data.intro_points, + hs_helper_build_intro_point(signing_kp, now, "1.2.3.4", 0)); + smartlist_add(desc->encrypted_data.intro_points, + hs_helper_build_intro_point(signing_kp, now, "[2600::1]", 0)); + smartlist_add(desc->encrypted_data.intro_points, + hs_helper_build_intro_point(signing_kp, now, "3.2.1.4", 1)); + smartlist_add(desc->encrypted_data.intro_points, + hs_helper_build_intro_point(signing_kp, now, "", 1)); + } + + descp = desc; + done: + return descp; +} + +/* Build a descriptor with introduction points. */ +hs_descriptor_t * +hs_helper_build_hs_desc_with_ip(const ed25519_keypair_t *signing_kp) +{ + return hs_helper_build_hs_desc_impl(0, signing_kp); +} + +/* Build a descriptor without any introduction points. */ +hs_descriptor_t * +hs_helper_build_hs_desc_no_ip(const ed25519_keypair_t *signing_kp) +{ + return hs_helper_build_hs_desc_impl(1, signing_kp); +} + +void +hs_helper_desc_equal(const hs_descriptor_t *desc1, + const hs_descriptor_t *desc2) +{ + char *addr1 = NULL, *addr2 = NULL; + /* Plaintext data section. */ + tt_int_op(desc1->plaintext_data.version, OP_EQ, + desc2->plaintext_data.version); + tt_uint_op(desc1->plaintext_data.lifetime_sec, OP_EQ, + desc2->plaintext_data.lifetime_sec); + tt_assert(tor_cert_eq(desc1->plaintext_data.signing_key_cert, + desc2->plaintext_data.signing_key_cert)); + tt_mem_op(desc1->plaintext_data.signing_pubkey.pubkey, OP_EQ, + desc2->plaintext_data.signing_pubkey.pubkey, + ED25519_PUBKEY_LEN); + tt_mem_op(desc1->plaintext_data.blinded_pubkey.pubkey, OP_EQ, + desc2->plaintext_data.blinded_pubkey.pubkey, + ED25519_PUBKEY_LEN); + tt_u64_op(desc1->plaintext_data.revision_counter, ==, + desc2->plaintext_data.revision_counter); + + /* NOTE: We can't compare the encrypted blob because when encoding the + * descriptor, the object is immutable thus we don't update it with the + * encrypted blob. As contrast to the decoding process where we populate a + * descriptor object. */ + + /* Encrypted data section. */ + tt_uint_op(desc1->encrypted_data.create2_ntor, ==, + desc2->encrypted_data.create2_ntor); + + /* Authentication type. */ + tt_int_op(!!desc1->encrypted_data.intro_auth_types, ==, + !!desc2->encrypted_data.intro_auth_types); + if (desc1->encrypted_data.intro_auth_types && + desc2->encrypted_data.intro_auth_types) { + tt_int_op(smartlist_len(desc1->encrypted_data.intro_auth_types), ==, + smartlist_len(desc2->encrypted_data.intro_auth_types)); + for (int i = 0; + i < smartlist_len(desc1->encrypted_data.intro_auth_types); + i++) { + tt_str_op(smartlist_get(desc1->encrypted_data.intro_auth_types, i),OP_EQ, + smartlist_get(desc2->encrypted_data.intro_auth_types, i)); + } + } + + /* Introduction points. */ + { + tt_assert(desc1->encrypted_data.intro_points); + tt_assert(desc2->encrypted_data.intro_points); + tt_int_op(smartlist_len(desc1->encrypted_data.intro_points), ==, + smartlist_len(desc2->encrypted_data.intro_points)); + for (int i=0; i < smartlist_len(desc1->encrypted_data.intro_points); i++) { + hs_desc_intro_point_t *ip1 = smartlist_get(desc1->encrypted_data + .intro_points, i), + *ip2 = smartlist_get(desc2->encrypted_data + .intro_points, i); + tt_assert(tor_cert_eq(ip1->auth_key_cert, ip2->auth_key_cert)); + if (ip1->legacy.key) { + tt_int_op(crypto_pk_cmp_keys(ip1->legacy.key, ip2->legacy.key), + OP_EQ, 0); + } else { + tt_mem_op(&ip1->enc_key, OP_EQ, &ip2->enc_key, CURVE25519_PUBKEY_LEN); + } + + tt_int_op(smartlist_len(ip1->link_specifiers), ==, + smartlist_len(ip2->link_specifiers)); + for (int j = 0; j < smartlist_len(ip1->link_specifiers); j++) { + hs_desc_link_specifier_t *ls1 = smartlist_get(ip1->link_specifiers, j), + *ls2 = smartlist_get(ip2->link_specifiers, j); + tt_int_op(ls1->type, ==, ls2->type); + switch (ls1->type) { + case LS_IPV4: + case LS_IPV6: + { + addr1 = tor_addr_to_str_dup(&ls1->u.ap.addr); + addr2 = tor_addr_to_str_dup(&ls2->u.ap.addr); + tt_str_op(addr1, OP_EQ, addr2); + tor_free(addr1); + tor_free(addr2); + tt_int_op(ls1->u.ap.port, ==, ls2->u.ap.port); + } + break; + case LS_LEGACY_ID: + tt_mem_op(ls1->u.legacy_id, OP_EQ, ls2->u.legacy_id, + sizeof(ls1->u.legacy_id)); + break; + default: + /* Unknown type, caught it and print its value. */ + tt_int_op(ls1->type, OP_EQ, -1); + } + } + } + } + + done: + tor_free(addr1); + tor_free(addr2); +} + diff --git a/src/test/hs_test_helpers.h b/src/test/hs_test_helpers.h new file mode 100644 index 0000000000..a7fedab136 --- /dev/null +++ b/src/test/hs_test_helpers.h @@ -0,0 +1,22 @@ +/* Copyright (c) 2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_HS_TEST_HELPERS_H +#define TOR_HS_TEST_HELPERS_H + +#include "ed25519_cert.h" +#include "hs_descriptor.h" + +/* Set of functions to help build and test descriptors. */ +hs_desc_intro_point_t *hs_helper_build_intro_point( + const ed25519_keypair_t *signing_kp, time_t now, + const char *addr, int legacy); +hs_descriptor_t *hs_helper_build_hs_desc_no_ip( + const ed25519_keypair_t *signing_kp); +hs_descriptor_t *hs_helper_build_hs_desc_with_ip( + const ed25519_keypair_t *signing_kp); +void hs_helper_desc_equal(const hs_descriptor_t *desc1, + const hs_descriptor_t *desc2); + +#endif /* TOR_HS_TEST_HELPERS_H */ + diff --git a/src/test/include.am b/src/test/include.am index 230a6c8bad..4d6215e593 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -69,6 +69,7 @@ src_test_AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \ src_test_test_SOURCES = \ src/test/log_test_helpers.c \ + src/test/hs_test_helpers.c \ src/test/rend_test_helpers.c \ src/test/test.c \ src/test/test_accounting.c \ @@ -78,6 +79,7 @@ src_test_test_SOURCES = \ src/test/test_cell_formats.c \ src/test/test_cell_queue.c \ src/test/test_channel.c \ + src/test/test_channelpadding.c \ src/test/test_channeltls.c \ src/test/test_checkdir.c \ src/test/test_circuitlist.c \ @@ -248,6 +250,7 @@ src_test_test_timers_LDFLAGS = $(src_test_test_LDFLAGS) noinst_HEADERS+= \ src/test/fakechans.h \ + src/test/hs_test_helpers.h \ src/test/log_test_helpers.h \ src/test/rend_test_helpers.h \ src/test/test.h \ diff --git a/src/test/test.c b/src/test/test.c index 4d2cf1536b..30944d805d 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1186,6 +1186,7 @@ struct testgroup_t testgroups[] = { { "cellfmt/", cell_format_tests }, { "cellqueue/", cell_queue_tests }, { "channel/", channel_tests }, + { "channelpadding/", channelpadding_tests }, { "channeltls/", channeltls_tests }, { "checkdir/", checkdir_tests }, { "circuitbuild/", circuitbuild_tests }, diff --git a/src/test/test.h b/src/test/test.h index 3d7d05e771..0ba91fb3f6 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -181,6 +181,7 @@ extern struct testcase_t buffer_tests[]; extern struct testcase_t cell_format_tests[]; extern struct testcase_t cell_queue_tests[]; extern struct testcase_t channel_tests[]; +extern struct testcase_t channelpadding_tests[]; extern struct testcase_t channeltls_tests[]; extern struct testcase_t checkdir_tests[]; extern struct testcase_t circuitbuild_tests[]; diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c new file mode 100644 index 0000000000..0a70184f86 --- /dev/null +++ b/src/test/test_channelpadding.c @@ -0,0 +1,900 @@ +#define TOR_CHANNEL_INTERNAL_ +#define MAIN_PRIVATE +#define NETWORKSTATUS_PRIVATE +#include "or.h" +#include "test.h" +#include "testsupport.h" +#include "connection.h" +#include "connection_or.h" +#include "channel.h" +#include "channeltls.h" +#include "channelpadding.h" +#include "compat_libevent.h" +#include "config.h" +#include <event2/event.h> +#include "compat_time.h" +#include "main.h" +#include "networkstatus.h" +#include "log_test_helpers.h" + +int channelpadding_get_netflow_inactive_timeout_ms(channel_t *chan); +int64_t channelpadding_compute_time_until_pad_for_netflow(channel_t *chan); +int channelpadding_send_disable_command(channel_t*); +int channelpadding_find_timerslot(channel_t *chan); + +void test_channelpadding_timers(void *arg); +void test_channelpadding_consensus(void *arg); +void test_channelpadding_negotiation(void *arg); +void test_channelpadding_decide_to_pad_channel(void *arg); + +void dummy_nop_timer(void); + +/* Thing to cast to fake tor_tls_t * to appease assert_connection_ok() */ +static int fake_tortls = 0; /* Bleh... */ + +static int dont_stop_libevent = 0; + +// From test_channel.c +channel_t * new_fake_channel(void); +void free_fake_channel(channel_t*); + +static int +mock_channel_has_queued_writes(channel_t *chan) +{ + (void)chan; + return 0; +} + +static int tried_to_write_cell = 0; + +static channel_t *relay1_relay2; +static channel_t *relay2_relay1; +static channel_t *relay3_client; +static channel_t *client_relay3; + +static int +mock_channel_write_cell_relay2(channel_t *chan, cell_t *cell) +{ + (void)chan; + tried_to_write_cell++; + channel_tls_handle_cell(cell, ((channel_tls_t*)relay1_relay2)->conn); + event_base_loopbreak(tor_libevent_get_base()); + return 0; +} + +static int +mock_channel_write_cell_relay1(channel_t *chan, cell_t *cell) +{ + (void)chan; + tried_to_write_cell++; + channel_tls_handle_cell(cell, ((channel_tls_t*)relay2_relay1)->conn); + event_base_loopbreak(tor_libevent_get_base()); + return 0; +} + +static int +mock_channel_write_cell_relay3(channel_t *chan, cell_t *cell) +{ + (void)chan; + tried_to_write_cell++; + channel_tls_handle_cell(cell, ((channel_tls_t*)client_relay3)->conn); + event_base_loopbreak(tor_libevent_get_base()); + return 0; +} + +static int +mock_channel_write_cell_client(channel_t *chan, cell_t *cell) +{ + (void)chan; + tried_to_write_cell++; + channel_tls_handle_cell(cell, ((channel_tls_t*)relay3_client)->conn); + event_base_loopbreak(tor_libevent_get_base()); + return 0; +} + +static int +mock_channel_write_cell(channel_t *chan, cell_t *cell) +{ + tried_to_write_cell++; + channel_tls_handle_cell(cell, ((channel_tls_t*)chan)->conn); + if (!dont_stop_libevent) + event_base_loopbreak(tor_libevent_get_base()); + return 0; +} + +static void +setup_fake_connection_for_channel(channel_tls_t *chan) +{ + or_connection_t *conn = (or_connection_t*)connection_new(CONN_TYPE_OR, + AF_INET); + + conn->base_.conn_array_index = smartlist_len(connection_array); + smartlist_add(connection_array, conn); + + connection_or_set_canonical(conn, 1); + + conn->chan = chan; + chan->conn = conn; + + conn->base_.magic = OR_CONNECTION_MAGIC; + conn->base_.state = OR_CONN_STATE_OPEN; + conn->base_.type = CONN_TYPE_OR; + conn->base_.socket_family = AF_INET; + conn->base_.address = tor_strdup("<fake>"); + + conn->base_.port = 4242; + + conn->tls = (tor_tls_t *)((void *)(&fake_tortls)); + + conn->link_proto = MIN_LINK_PROTO_FOR_CHANNEL_PADDING; +} + +static channel_tls_t * +new_fake_channeltls(uint8_t id) +{ + channel_tls_t *chan = tor_realloc(new_fake_channel(), sizeof(channel_tls_t)); + chan->base_.magic = TLS_CHAN_MAGIC; + setup_fake_connection_for_channel(chan); + chan->base_.channel_usage = CHANNEL_USED_FOR_FULL_CIRCS; + chan->base_.has_queued_writes = mock_channel_has_queued_writes; + chan->base_.write_cell = mock_channel_write_cell; + chan->base_.padding_enabled = 1; + + chan->base_.identity_digest[0] = id; + channel_register(&chan->base_); + + return chan; +} + +static void +free_fake_channeltls(channel_tls_t *chan) +{ + channel_unregister(&chan->base_); + + tor_free(((channel_tls_t*)chan)->conn->base_.address); + buf_free(((channel_tls_t*)chan)->conn->base_.inbuf); + buf_free(((channel_tls_t*)chan)->conn->base_.outbuf); + tor_free(((channel_tls_t*)chan)->conn); + + timer_free(chan->base_.padding_timer); + channel_handle_free(chan->base_.timer_handle); + channel_handles_clear(&chan->base_); + + free_fake_channel(&chan->base_); + + return; +} + +static void +setup_mock_network(void) +{ + routerstatus_t *relay; + connection_array = smartlist_new(); + + current_md_consensus = current_ns_consensus + = tor_malloc_zero(sizeof(networkstatus_t)); + current_md_consensus->net_params = smartlist_new(); + current_md_consensus->routerstatus_list = smartlist_new(); + channelpadding_new_consensus_params(current_md_consensus); + + relay1_relay2 = (channel_t*)new_fake_channeltls(2); + relay1_relay2->write_cell = mock_channel_write_cell_relay1; + channel_timestamp_active(relay1_relay2); + relay = tor_malloc_zero(sizeof(routerstatus_t)); + relay->identity_digest[0] = 1; + smartlist_add(current_md_consensus->routerstatus_list, relay); + + relay2_relay1 = (channel_t*)new_fake_channeltls(1); + relay2_relay1->write_cell = mock_channel_write_cell_relay2; + channel_timestamp_active(relay2_relay1); + relay = tor_malloc_zero(sizeof(routerstatus_t)); + relay->identity_digest[0] = 2; + smartlist_add(current_md_consensus->routerstatus_list, relay); + + relay3_client = (channel_t*)new_fake_channeltls(0); + relay3_client->write_cell = mock_channel_write_cell_relay3; + relay3_client->is_client = 1; + channel_timestamp_active(relay3_client); + relay = tor_malloc_zero(sizeof(routerstatus_t)); + relay->identity_digest[0] = 3; + smartlist_add(current_md_consensus->routerstatus_list, relay); + + client_relay3 = (channel_t*)new_fake_channeltls(3); + client_relay3->write_cell = mock_channel_write_cell_client; + channel_timestamp_active(client_relay3); +} + +static void +free_mock_network(void) +{ + free_fake_channeltls((channel_tls_t*)relay1_relay2); + free_fake_channeltls((channel_tls_t*)relay2_relay1); + free_fake_channeltls((channel_tls_t*)relay3_client); + free_fake_channeltls((channel_tls_t*)client_relay3); + + SMARTLIST_FOREACH(current_md_consensus->routerstatus_list, void *, r, + tor_free(r)); + smartlist_free(current_md_consensus->routerstatus_list); + smartlist_free(current_ns_consensus->net_params); + smartlist_free(connection_array); + tor_free(current_ns_consensus); +} + +static void +dummy_timer_cb(tor_timer_t *t, void *arg, const monotime_t *now_mono) +{ + (void)t; (void)arg; (void)now_mono; + event_base_loopbreak(tor_libevent_get_base()); + return; +} + +// This hack adds a dummy timer so that the libevent base loop +// actually returns when we don't expect any timers to fire. Otherwise, +// the global_timer_event gets scheduled an hour from now, and the +// base loop never returns. +void +dummy_nop_timer(void) +{ + tor_timer_t *dummy_timer = timer_new(dummy_timer_cb, NULL); + struct timeval timeout; + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + timer_schedule(dummy_timer, &timeout); + + event_base_loop(tor_libevent_get_base(), 0); + timer_free(dummy_timer); +} + +#define CHANNELPADDING_MAX_TIMERS 25 +#define CHANNELS_TO_TEST (CHANNELPADDING_MAX_TIMERS*4) +/** + * Tests to ensure that we handle more than the max number of pending + * timers properly. + */ +void +test_channelpadding_timers(void *arg) +{ + channelpadding_decision_t decision; + channel_t *chans[CHANNELS_TO_TEST]; + (void)arg; + + tor_libevent_postfork(); + + connection_array = smartlist_new(); + + monotime_init(); + timers_initialize(); + channelpadding_new_consensus_params(NULL); + + for (int i = 0; i < CHANNELS_TO_TEST; i++) { + chans[i] = (channel_t*)new_fake_channeltls(0); + channel_timestamp_active(chans[i]); + } + + for (int j = 0; j < 2; j++) { + tried_to_write_cell = 0; + int i = 0; + + /* This loop fills our timerslot array with timers of increasing time + * until they fire */ + for (; i < CHANNELPADDING_MAX_TIMERS; i++) { + chans[i]->next_padding_time_ms = monotime_coarse_absolute_msec() + + 10 + i*4; + decision = channelpadding_decide_to_pad_channel(chans[i]); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chans[i]->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + } + + /* This loop should add timers to the first position in the timerslot + * array, since its timeout is before all other timers. */ + for (; i < CHANNELS_TO_TEST/3; i++) { + chans[i]->next_padding_time_ms = monotime_coarse_absolute_msec() + 1; + decision = channelpadding_decide_to_pad_channel(chans[i]); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chans[i]->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + } + + /* This loop should add timers to our existing lists in a weak + * pseudorandom pattern. It ensures that the lists can grow with multiple + * timers in them. */ + for (; i < CHANNELS_TO_TEST/2; i++) { + chans[i]->next_padding_time_ms = monotime_coarse_absolute_msec() + 10 + + i*3 % CHANNELPADDING_MAX_TIMERS; + decision = channelpadding_decide_to_pad_channel(chans[i]); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chans[i]->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + } + + /* This loop should add timers to the last position in the timerslot + * array, since its timeout is after all other timers. */ + for (; i < CHANNELS_TO_TEST; i++) { + chans[i]->next_padding_time_ms = monotime_coarse_absolute_msec() + 500 + + i % CHANNELPADDING_MAX_TIMERS; + decision = channelpadding_decide_to_pad_channel(chans[i]); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chans[i]->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + } + + // Wait for the timers and then kill the event loop. + dont_stop_libevent = 1; + dummy_nop_timer(); + + tt_int_op(tried_to_write_cell, OP_EQ, CHANNELS_TO_TEST); + + // Test that we have no pending callbacks and all empty slots now + for (i = 0; i < CHANNELS_TO_TEST; i++) { + tt_assert(!chans[i]->pending_padding_callback); + } + } + + done: + for (int i = 0; i < CHANNELS_TO_TEST; i++) { + free_fake_channeltls((channel_tls_t*)chans[i]); + } + smartlist_free(connection_array); + + timers_shutdown(); + channel_free_all(); + + return; +} + +void +test_channelpadding_consensus(void *arg) +{ + channelpadding_decision_t decision; + or_options_t *options = get_options_mutable(); + int64_t val; + (void)arg; + + tor_libevent_postfork(); + + /* + * Params tested: + * nf_pad_before_usage + * nf_pad_relays + * nf_ito_low + * nf_ito_high + * + * Plan: + * 1. Padding can be completely disabled via consensus + * 2. Negotiation can't re-enable consensus-disabled padding + * 3. Negotiation can't increase padding from relays beyond + * consensus defaults + * 4. Relay-to-relay padding can be enabled/disabled in consensus + * 5. Can enable/disable padding before actually using a connection + * 6. Can we control circ and TLS conn lifetime from the consensus? + */ + channel_t *chan; + routerstatus_t *relay = tor_malloc_zero(sizeof(routerstatus_t)); + monotime_init(); + timers_initialize(); + + connection_array = smartlist_new(); + chan = (channel_t*)new_fake_channeltls(0); + channel_timestamp_active(chan); + + current_md_consensus = current_ns_consensus + = tor_malloc_zero(sizeof(networkstatus_t)); + current_md_consensus->net_params = smartlist_new(); + current_md_consensus->routerstatus_list = smartlist_new(); + channelpadding_new_consensus_params(current_md_consensus); + + get_options_mutable()->ORPort_set = 1; + + /* Test 1: Padding can be completely disabled via consensus */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED); + + // Wait for the timer + event_base_loop(tor_libevent_get_base(), 0); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_low=0"); + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_high=0"); + get_options_mutable()->ConnectionPadding = 1; + channelpadding_new_consensus_params(current_md_consensus); + + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!chan->pending_padding_callback); + val = channelpadding_get_netflow_inactive_timeout_ms(chan); + tt_i64_op(val, OP_EQ, 0); + val = channelpadding_compute_time_until_pad_for_netflow(chan); + tt_i64_op(val, OP_EQ, -2); + + /* Test 2: Negotiation can't re-enable consensus-disabled padding */ + channelpadding_send_enable_command(chan, 100, 200); + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!chan->pending_padding_callback); + val = channelpadding_get_netflow_inactive_timeout_ms(chan); + tt_i64_op(val, OP_EQ, 0); + val = channelpadding_compute_time_until_pad_for_netflow(chan); + tt_i64_op(val, OP_EQ, -2); + tt_assert(!chan->next_padding_time_ms); + + smartlist_clear(current_md_consensus->net_params); + + /* Test 3: Negotiation can't increase padding from relays beyond consensus + * values */ + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_low=100"); + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_high=200"); + channelpadding_new_consensus_params(current_md_consensus); + + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + val = channelpadding_get_netflow_inactive_timeout_ms(chan); + tt_i64_op(val, OP_GE, 100); + tt_i64_op(val, OP_LE, 200); + val = channelpadding_compute_time_until_pad_for_netflow(chan); + tt_i64_op(val, OP_LE, 200); + + // Wait for the timer + event_base_loop(tor_libevent_get_base(), 0); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + smartlist_clear(current_md_consensus->net_params); + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_low=1500"); + smartlist_add(current_md_consensus->net_params, + (void*)"nf_ito_high=4500"); + channelpadding_new_consensus_params(current_md_consensus); + + channelpadding_send_enable_command(chan, 100, 200); + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + tt_assert(!chan->pending_padding_callback); + val = channelpadding_get_netflow_inactive_timeout_ms(chan); + tt_i64_op(val, OP_GE, 1500); + tt_i64_op(val, OP_LE, 4500); + val = channelpadding_compute_time_until_pad_for_netflow(chan); + tt_i64_op(val, OP_LE, 4500); + + /* Test 4: Relay-to-relay padding can be enabled/disabled in consensus */ + /* Make this channel a relay's channel */ + memcpy(relay->identity_digest, + ((channel_tls_t *)chan)->conn->identity_digest, DIGEST_LEN); + smartlist_add(current_md_consensus->routerstatus_list, relay); + + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!chan->pending_padding_callback); + + smartlist_add(current_md_consensus->net_params, + (void*)"nf_pad_relays=1"); + channelpadding_new_consensus_params(current_md_consensus); + + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + tt_assert(!chan->pending_padding_callback); + val = channelpadding_get_netflow_inactive_timeout_ms(chan); + tt_i64_op(val, OP_GE, 1500); + tt_i64_op(val, OP_LE, 4500); + val = channelpadding_compute_time_until_pad_for_netflow(chan); + tt_i64_op(val, OP_LE, 4500); + + /* Test 5: If we disable padding before channel usage, does that work? */ + smartlist_add(current_md_consensus->net_params, + (void*)"nf_pad_before_usage=0"); + channelpadding_new_consensus_params(current_md_consensus); + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!chan->pending_padding_callback); + + /* Test 6: Can we control circ and TLS conn lifetime from the consensus? */ + val = channelpadding_get_channel_idle_timeout(NULL, 0); + tt_i64_op(val, OP_GE, 180); + tt_i64_op(val, OP_LE, 180+90); + val = channelpadding_get_channel_idle_timeout(chan, 0); + tt_i64_op(val, OP_GE, 180); + tt_i64_op(val, OP_LE, 180+90); + options->ReducedConnectionPadding = 1; + val = channelpadding_get_channel_idle_timeout(chan, 0); + tt_i64_op(val, OP_GE, 180/2); + tt_i64_op(val, OP_LE, (180+90)/2); + + options->ReducedConnectionPadding = 0; + options->ORPort_set = 1; + smartlist_add(current_md_consensus->net_params, + (void*)"nf_conntimeout_relays=600"); + channelpadding_new_consensus_params(current_md_consensus); + val = channelpadding_get_channel_idle_timeout(chan, 1); + tt_i64_op(val, OP_GE, 450); + tt_i64_op(val, OP_LE, 750); + + val = channelpadding_get_circuits_available_timeout(); + tt_i64_op(val, OP_GE, 30*60); + tt_i64_op(val, OP_LE, 30*60*2); + + options->ReducedConnectionPadding = 1; + smartlist_add(current_md_consensus->net_params, + (void*)"nf_conntimeout_clients=600"); + channelpadding_new_consensus_params(current_md_consensus); + val = channelpadding_get_circuits_available_timeout(); + tt_i64_op(val, OP_GE, 600/2); + tt_i64_op(val, OP_LE, 600*2/2); + + options->ReducedConnectionPadding = 0; + options->CircuitsAvailableTimeout = 24*60*60; + val = channelpadding_get_circuits_available_timeout(); + tt_i64_op(val, OP_GE, 24*60*60); + tt_i64_op(val, OP_LE, 24*60*60*2); + + done: + free_fake_channeltls((channel_tls_t*)chan); + smartlist_free(connection_array); + smartlist_free(current_md_consensus->routerstatus_list); + smartlist_free(current_ns_consensus->net_params); + tor_free(relay); + tor_free(current_ns_consensus); + + timers_shutdown(); + channel_free_all(); + + return; +} + +void +test_channelpadding_negotiation(void *arg) +{ + channelpadding_negotiate_t disable; + cell_t cell; + channelpadding_decision_t decision; + int val; + (void)arg; + + /* Plan: + * 1. Clients reject negotiation, relays accept it. + * * Bridges accept negotiation from their clients, + * but not from relays. + * 2. Torrc options can override client-side negotiation + * 3. Test a version issue in channelpadidng cell + * 4. Test channelpadding_reduced_padding + */ + monotime_init(); + timers_initialize(); + setup_mock_network(); + + /* Test case #1: Do the right things ignore negotiation? */ + /* relay-to-client case: */ + channelpadding_send_disable_command(relay3_client); + tt_assert(client_relay3->padding_enabled); + + /* client-to-relay case: */ + get_options_mutable()->ORPort_set = 1; + channelpadding_disable_padding_on_channel(client_relay3); + tt_int_op(channelpadding_decide_to_pad_channel(relay3_client), OP_EQ, + CHANNELPADDING_WONTPAD); + tt_assert(!relay3_client->padding_enabled); + relay3_client->padding_enabled = 1; + client_relay3->padding_enabled = 1; + + /* Bridge case from relay */ + get_options_mutable()->BridgeRelay = 1; + channelpadding_disable_padding_on_channel(relay2_relay1); + tt_assert(relay1_relay2->padding_enabled); + + /* Bridge case from client */ + channelpadding_disable_padding_on_channel(client_relay3); + tt_assert(!relay3_client->padding_enabled); + tt_int_op(channelpadding_decide_to_pad_channel(relay3_client), OP_EQ, + CHANNELPADDING_WONTPAD); + relay3_client->padding_enabled = 1; + client_relay3->padding_enabled = 1; + get_options_mutable()->BridgeRelay = 0; + get_options_mutable()->ORPort_set = 0; + + /* Test case #2: Torrc options */ + /* ConnectionPadding auto; Relay doesn't suport us */ + ((channel_tls_t*)relay3_client)->conn->link_proto = 4; + relay3_client->padding_enabled = 0; + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(relay3_client); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!relay3_client->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + ((channel_tls_t*)relay3_client)->conn->link_proto = 5; + relay3_client->padding_enabled = 1; + + /* ConnectionPadding 1; Relay doesn't suport us */ + get_options_mutable()->ConnectionPadding = 1; + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(client_relay3); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + tt_assert(!client_relay3->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + get_options_mutable()->ConnectionPadding = 0; + + /* Test case #3: Test a version issue in channelpadding cell */ + get_options_mutable()->ORPort_set = 1; + client_relay3->padding_enabled = 1; + relay3_client->padding_enabled = 1; + memset(&cell, 0, sizeof(cell_t)); + memset(&disable, 0, sizeof(channelpadding_negotiate_t)); + cell.command = CELL_PADDING_NEGOTIATE; + + channelpadding_negotiate_set_command(&disable, CHANNELPADDING_COMMAND_STOP); + disable.version = 1; + channelpadding_negotiate_encode(cell.payload, CELL_PAYLOAD_SIZE, &disable); + client_relay3->write_cell(client_relay3, &cell); + tt_assert(relay3_client->padding_enabled); + tt_int_op(channelpadding_update_padding_for_channel(client_relay3, &disable), + OP_EQ, -1); + tt_assert(client_relay3->padding_enabled); + + disable.version = 0; + channelpadding_negotiate_encode(cell.payload, CELL_PAYLOAD_SIZE, &disable); + client_relay3->write_cell(client_relay3, &cell); + tt_assert(!relay3_client->padding_enabled); + + /* Test case 4: Reducing padding actually reduces it */ + relay3_client->padding_enabled = 1; + client_relay3->padding_enabled = 1; + + decision = channelpadding_decide_to_pad_channel(relay3_client); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + + channelpadding_reduce_padding_on_channel(client_relay3); + + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(relay3_client); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + + get_options_mutable()->ORPort_set = 0; + decision = channelpadding_decide_to_pad_channel(client_relay3); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + + tt_assert(!client_relay3->pending_padding_callback); + val = channelpadding_get_netflow_inactive_timeout_ms(client_relay3); + tt_int_op(val, OP_GE, 9000); + tt_int_op(val, OP_LE, 14000); + int64_t val64 = + channelpadding_compute_time_until_pad_for_netflow(client_relay3); + tt_i64_op(val64, OP_LE, 14000); + + done: + free_mock_network(); + + timers_shutdown(); + channel_free_all(); + + return; +} + +void +test_channelpadding_decide_to_pad_channel(void *arg) +{ + channelpadding_decision_t decision; + /** + * Test case plan: + * + * 1. Channel that has "sent a packet" before the timeout. + * + We should decide to pad later + * 2. Channel that has not "sent a packet" before the timeout: + * 2a. Not within 1.1s of the timeout. + * + We should decide to pad later + * 2b. Within 1.1s of the timemout. + * + We should schedule padding + * + We should get feedback that we wrote a cell + * 2c. Within 0.1s of the timeout. + * + We should schedule padding + * + We should get feedback that we wrote a cell + * 2d. Channel that asks to pad while timeout is scheduled + * + We should schedule padding + * + We should get feedback that we wrote a cell + * 2e. 0s of the timeout + * + We should send padding immediately + * + We should get feedback that we wrote a cell + * 2f. <0s of the timeout + * + We should send padding immediately + * + We should get feedback that we wrote a cell + * 3. Channel that sends a packet while timeout is scheduled + * + We should not get feedback that we wrote a cell + * 4. Channel that closes while timeout is scheduled + * + We should not get feedback that we wrote a cell + * 5. Make sure the channel still would work if repaired + * + We should be able to schedule padding and resend + * 6. Channel is not used for full circuits + * 7. Channel that disappears while timeout is scheduled + * + We should not send padding + */ + channel_t *chan; + connection_array = smartlist_new(); + (void)arg; + + tor_libevent_postfork(); + + monotime_init(); + timers_initialize(); + setup_full_capture_of_logs(LOG_WARN); + channelpadding_new_consensus_params(NULL); + + chan = (channel_t*)new_fake_channeltls(0); + channel_timestamp_active(chan); + + /* Test case #1: Channel that has "sent a packet" before the timeout. */ + tried_to_write_cell = 0; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + tt_assert(!chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + /* Test case #2a: > 1.1s until timeout */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 1200; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADLATER); + tt_assert(!chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + /* Test case #2b: >= 1.0s until timeout */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 1000; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + // Wait for the timer from case #2b + event_base_loop(tor_libevent_get_base(), 0); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + /* Test case #2c: > 0.1s until timeout */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + /* Test case #2d: Channel that asks to pad while timeout is scheduled */ + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_ALREADY_SCHEDULED); + + // Wait for the timer + event_base_loop(tor_libevent_get_base(), 0); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + /* Test case #2e: 0s until timeout */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec(); + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SENT); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + /* Test case #2f: <0s until timeout */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() - 100; + decision = channelpadding_decide_to_pad_channel(chan); + expect_log_msg("Channel padding timeout scheduled 100ms in the past. " + "Did the monotonic clock just jump?\n"); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SENT); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + /* Test case #3: Channel that sends a packet while timeout is scheduled */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + tt_assert(chan->pending_padding_callback); + + // Pretend the channel sent a packet + channel_timestamp_active(chan); + + // We don't expect any timer callbacks here. Make a dummy one to be sure. + dummy_nop_timer(); + + tt_int_op(tried_to_write_cell, OP_EQ, 0); + tt_assert(!chan->pending_padding_callback); + + /* Test case #4: Channel that closes while a timeout is scheduled */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + tt_assert(chan->pending_padding_callback); + + // Pretend the channel is temporarily down + chan->state = CHANNEL_STATE_MAINT; + + // We don't expect any timer callbacks here. Make a dummy one to be sure. + dummy_nop_timer(); + + tt_int_op(tried_to_write_cell, OP_EQ, 0); + tt_assert(!chan->pending_padding_callback); + chan->state = CHANNEL_STATE_OPEN; + + /* Test case #5: Make sure previous test case didn't break everything */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_assert(chan->pending_padding_callback); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + // Wait for the timer + event_base_loop(tor_libevent_get_base(), 0); + tt_int_op(tried_to_write_cell, OP_EQ, 1); + tt_assert(!chan->pending_padding_callback); + + /* Test case #6. Channel is not used for full circuits */ + chan->channel_usage = CHANNEL_USED_NOT_USED_FOR_FULL_CIRCS; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_WONTPAD); + tt_assert(!chan->pending_padding_callback); + chan->channel_usage = CHANNEL_USED_FOR_FULL_CIRCS; + + /* Test case #7. Channel is closed while timeout is scheduled. + * + * NOTE: This test deliberately breaks the channel callback mechanism. + * It must be last. + */ + tried_to_write_cell = 0; + chan->next_padding_time_ms = monotime_coarse_absolute_msec() + 100; + decision = channelpadding_decide_to_pad_channel(chan); + tt_int_op(decision, OP_EQ, CHANNELPADDING_PADDING_SCHEDULED); + tt_int_op(tried_to_write_cell, OP_EQ, 0); + tt_assert(chan->pending_padding_callback); + + // Close the connection while the timer is scheduled + free_fake_channeltls((channel_tls_t*)chan); + + // We don't expect any timer callbacks here. Make a dummy one to be sure. + dummy_nop_timer(); + + tt_int_op(tried_to_write_cell, OP_EQ, 0); + + done: + smartlist_free(connection_array); + + teardown_capture_of_logs(); + timers_shutdown(); + channel_free_all(); + + return; +} + +#define TEST_CHANNELPADDING(name, flags) \ + { #name, test_##name, (flags), NULL, NULL } + +struct testcase_t channelpadding_tests[] = { + //TEST_CHANNELPADDING(channelpadding_decide_to_pad_channel, 0), + TEST_CHANNELPADDING(channelpadding_decide_to_pad_channel, TT_FORK), + TEST_CHANNELPADDING(channelpadding_negotiation, TT_FORK), + TEST_CHANNELPADDING(channelpadding_consensus, TT_FORK), + TEST_CHANNELPADDING(channelpadding_timers, TT_FORK), + END_OF_TESTCASES +}; + diff --git a/src/test/test_config.c b/src/test/test_config.c index f0874e0e0b..98bcbadf7f 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -854,9 +854,23 @@ static void test_config_fix_my_family(void *arg) { char *err = NULL; - const char *family = "$1111111111111111111111111111111111111111, " - "1111111111111111111111111111111111111112, " - "$1111111111111111111111111111111111111113"; + config_line_t *family = tor_malloc_zero(sizeof(config_line_t)); + family->key = tor_strdup("MyFamily"); + family->value = tor_strdup("$1111111111111111111111111111111111111111, " + "1111111111111111111111111111111111111112, " + "$1111111111111111111111111111111111111113"); + + config_line_t *family2 = tor_malloc_zero(sizeof(config_line_t)); + family2->key = tor_strdup("MyFamily"); + family2->value = tor_strdup("1111111111111111111111111111111111111114"); + + config_line_t *family3 = tor_malloc_zero(sizeof(config_line_t)); + family3->key = tor_strdup("MyFamily"); + family3->value = tor_strdup("$1111111111111111111111111111111111111115"); + + family->next = family2; + family2->next = family3; + family3->next = NULL; or_options_t* options = options_new(); or_options_t* defaults = options_new(); @@ -864,7 +878,7 @@ test_config_fix_my_family(void *arg) options_init(options); options_init(defaults); - options->MyFamily = tor_strdup(family); + options->MyFamily_lines = family; options_validate(NULL, options, defaults, 0, &err) ; @@ -872,18 +886,23 @@ test_config_fix_my_family(void *arg) TT_FAIL(("options_validate failed: %s", err)); } - tt_str_op(options->MyFamily,OP_EQ, - "$1111111111111111111111111111111111111111, " - "$1111111111111111111111111111111111111112, " - "$1111111111111111111111111111111111111113"); - - done: - if (err != NULL) { - tor_free(err); - } + const char *valid[] = { "$1111111111111111111111111111111111111111", + "$1111111111111111111111111111111111111112", + "$1111111111111111111111111111111111111113", + "$1111111111111111111111111111111111111114", + "$1111111111111111111111111111111111111115" }; + int ret_size = 0; + config_line_t *ret; + for (ret = options->MyFamily; ret && ret_size < 5; ret = ret->next) { + tt_str_op(ret->value, OP_EQ, valid[ret_size]); + ret_size++; + } + tt_int_op(ret_size, OP_EQ, 5); - or_options_free(options); - or_options_free(defaults); + done: + tor_free(err); + or_options_free(options); + or_options_free(defaults); } static int n_hostname_01010101 = 0; @@ -3864,144 +3883,6 @@ mock_config_line(const char *key, const char *val) } static void -test_config_parse_port_config__listenaddress(void *data) -{ - (void)data; - int ret; - config_line_t *config_listen_address = NULL, *config_listen_address2 = NULL, - *config_listen_address3 = NULL; - config_line_t *config_port1 = NULL, *config_port2 = NULL, - *config_port3 = NULL, *config_port4 = NULL, *config_port5 = NULL; - smartlist_t *slout = NULL; - port_cfg_t *port_cfg = NULL; - - // Test basic invocation with no arguments - ret = parse_port_config(NULL, NULL, NULL, NULL, 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, 0); - - // Setup some test data - config_listen_address = mock_config_line("DNSListenAddress", "127.0.0.1"); - config_listen_address2 = mock_config_line("DNSListenAddress", "x$$$:::345"); - config_listen_address3 = mock_config_line("DNSListenAddress", - "127.0.0.1:1442"); - config_port1 = mock_config_line("DNSPort", "42"); - config_port2 = mock_config_line("DNSPort", "43"); - config_port1->next = config_port2; - config_port3 = mock_config_line("DNSPort", "auto"); - config_port4 = mock_config_line("DNSPort", "55542"); - config_port5 = mock_config_line("DNSPort", "666777"); - - // Test failure when we have a ListenAddress line and several - // Port lines for the same portname - ret = parse_port_config(NULL, config_port1, config_listen_address, "DNS", 0, - NULL, 0, 0); - - tt_int_op(ret, OP_EQ, -1); - - // Test case when we have a listen address, no default port and allow - // spurious listen address lines - ret = parse_port_config(NULL, NULL, config_listen_address, "DNS", 0, NULL, - 0, CL_PORT_ALLOW_EXTRA_LISTENADDR); - tt_int_op(ret, OP_EQ, 1); - - // Test case when we have a listen address, no default port but doesn't - // allow spurious listen address lines - ret = parse_port_config(NULL, NULL, config_listen_address, "DNS", 0, NULL, - 0, 0); - tt_int_op(ret, OP_EQ, -1); - - // Test case when we have a listen address, and a port that points to auto, - // should use the AUTO port - slout = smartlist_new(); - ret = parse_port_config(slout, config_port3, config_listen_address, "DNS", - 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, 0); - tt_int_op(smartlist_len(slout), OP_EQ, 1); - port_cfg = (port_cfg_t *)smartlist_get(slout, 0); - tt_int_op(port_cfg->port, OP_EQ, CFG_AUTO_PORT); - - // Test when we have a listen address and a custom port - ret = parse_port_config(slout, config_port4, config_listen_address, "DNS", - 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, 0); - tt_int_op(smartlist_len(slout), OP_EQ, 2); - port_cfg = (port_cfg_t *)smartlist_get(slout, 1); - tt_int_op(port_cfg->port, OP_EQ, 55542); - - // Test when we have a listen address and an invalid custom port - ret = parse_port_config(slout, config_port5, config_listen_address, "DNS", - 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, -1); - - // Test we get a server port configuration when asked for it - ret = parse_port_config(slout, NULL, config_listen_address, "DNS", 0, NULL, - 123, CL_PORT_SERVER_OPTIONS); - tt_int_op(ret, OP_EQ, 0); - tt_int_op(smartlist_len(slout), OP_EQ, 4); - port_cfg = (port_cfg_t *)smartlist_get(slout, 2); - tt_int_op(port_cfg->port, OP_EQ, 123); - tt_int_op(port_cfg->server_cfg.no_listen, OP_EQ, 1); - tt_int_op(port_cfg->server_cfg.bind_ipv4_only, OP_EQ, 1); - - // Test an invalid ListenAddress configuration - ret = parse_port_config(NULL, NULL, config_listen_address2, "DNS", 0, NULL, - 222, 0); - tt_int_op(ret, OP_EQ, -1); - - // Test default to the port in the listen address if available - ret = parse_port_config(slout, config_port2, config_listen_address3, "DNS", - 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, 0); - tt_int_op(smartlist_len(slout), OP_EQ, 5); - port_cfg = (port_cfg_t *)smartlist_get(slout, 4); - tt_int_op(port_cfg->port, OP_EQ, 1442); - - // Test we work correctly without an out, but with a listen address - // and a port - ret = parse_port_config(NULL, config_port2, config_listen_address, "DNS", - 0, NULL, 0, 0); - tt_int_op(ret, OP_EQ, 0); - - // Test warning nonlocal control - ret = parse_port_config(slout, config_port2, config_listen_address, "DNS", - CONN_TYPE_CONTROL_LISTENER, NULL, 0, - CL_PORT_WARN_NONLOCAL); - tt_int_op(ret, OP_EQ, 0); - - // Test warning nonlocal ext or listener - ret = parse_port_config(slout, config_port2, config_listen_address, "DNS", - CONN_TYPE_EXT_OR_LISTENER, NULL, 0, - CL_PORT_WARN_NONLOCAL); - tt_int_op(ret, OP_EQ, 0); - - // Test warning nonlocal other - SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); - smartlist_clear(slout); - ret = parse_port_config(slout, config_port2, config_listen_address, "DNS", - 0, NULL, 0, CL_PORT_WARN_NONLOCAL); - tt_int_op(ret, OP_EQ, 0); - - // Test warning nonlocal control without an out - ret = parse_port_config(NULL, config_port2, config_listen_address, "DNS", - CONN_TYPE_CONTROL_LISTENER, NULL, 0, - CL_PORT_WARN_NONLOCAL); - tt_int_op(ret, OP_EQ, 0); - - done: - config_free_lines(config_listen_address); - config_free_lines(config_listen_address2); - config_free_lines(config_listen_address3); - config_free_lines(config_port1); - /* 2 was linked from 1. */ - config_free_lines(config_port3); - config_free_lines(config_port4); - config_free_lines(config_port5); - if (slout) - SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); - smartlist_free(slout); -} - -static void test_config_parse_port_config__ports__no_ports_given(void *data) { (void)data; @@ -4012,40 +3893,40 @@ test_config_parse_port_config__ports__no_ports_given(void *data) slout = smartlist_new(); // Test no defaultport, no defaultaddress and no out - ret = parse_port_config(NULL, NULL, NULL, "DNS", 0, NULL, 0, 0); + ret = parse_port_config(NULL, NULL, "DNS", 0, NULL, 0, 0); tt_int_op(ret, OP_EQ, 0); // Test with defaultport, no defaultaddress and no out - ret = parse_port_config(NULL, NULL, NULL, "DNS", 0, NULL, 42, 0); + ret = parse_port_config(NULL, NULL, "DNS", 0, NULL, 42, 0); tt_int_op(ret, OP_EQ, 0); // Test no defaultport, with defaultaddress and no out - ret = parse_port_config(NULL, NULL, NULL, "DNS", 0, "127.0.0.2", 0, 0); + ret = parse_port_config(NULL, NULL, "DNS", 0, "127.0.0.2", 0, 0); tt_int_op(ret, OP_EQ, 0); // Test with defaultport, with defaultaddress and no out - ret = parse_port_config(NULL, NULL, NULL, "DNS", 0, "127.0.0.2", 42, 0); + ret = parse_port_config(NULL, NULL, "DNS", 0, "127.0.0.2", 42, 0); tt_int_op(ret, OP_EQ, 0); // Test no defaultport, no defaultaddress and with out - ret = parse_port_config(slout, NULL, NULL, "DNS", 0, NULL, 0, 0); + ret = parse_port_config(slout, NULL, "DNS", 0, NULL, 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 0); // Test with defaultport, no defaultaddress and with out - ret = parse_port_config(slout, NULL, NULL, "DNS", 0, NULL, 42, 0); + ret = parse_port_config(slout, NULL, "DNS", 0, NULL, 42, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 0); // Test no defaultport, with defaultaddress and with out - ret = parse_port_config(slout, NULL, NULL, "DNS", 0, "127.0.0.2", 0, 0); + ret = parse_port_config(slout, NULL, "DNS", 0, "127.0.0.2", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 0); // Test with defaultport, with defaultaddress and out, adds a new port cfg SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, NULL, NULL, "DNS", 0, "127.0.0.2", 42, 0); + ret = parse_port_config(slout, NULL, "DNS", 0, "127.0.0.2", 42, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); port_cfg = (port_cfg_t *)smartlist_get(slout, 0); @@ -4056,7 +3937,7 @@ test_config_parse_port_config__ports__no_ports_given(void *data) // for a unix address SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, NULL, NULL, "DNS", 0, "/foo/bar/unixdomain", + ret = parse_port_config(slout, NULL, "DNS", 0, "/foo/bar/unixdomain", 42, CL_PORT_IS_UNIXSOCKET); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4085,28 +3966,28 @@ test_config_parse_port_config__ports__ports_given(void *data) // Test error when encounters an invalid Port specification config_port_invalid = mock_config_line("DNSPort", ""); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, NULL, 0, 0); tt_int_op(ret, OP_EQ, -1); // Test error when encounters an empty unix domain specification config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "unix:"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, NULL, 0, 0); tt_int_op(ret, OP_EQ, -1); // Test error when encounters a unix domain specification but the listener // doesn't support domain sockets config_port_valid = mock_config_line("DNSPort", "unix:/tmp/foo/bar"); - ret = parse_port_config(NULL, config_port_valid, NULL, "DNS", + ret = parse_port_config(NULL, config_port_valid, "DNS", CONN_TYPE_AP_DNS_LISTENER, NULL, 0, 0); tt_int_op(ret, OP_EQ, -1); // Test valid unix domain SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, 0); #ifdef _WIN32 tt_int_op(ret, OP_EQ, -1); @@ -4131,7 +4012,7 @@ test_config_parse_port_config__ports__ports_given(void *data) "unix:/tmp/foo/bar NoIPv4Traffic " "NoIPv6Traffic " "NoOnionTraffic"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "SOCKS", + ret = parse_port_config(NULL, config_port_invalid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, -1); @@ -4140,7 +4021,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "127.0.0.1:80 NoDNSRequest"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", + ret = parse_port_config(NULL, config_port_invalid, "DNS", CONN_TYPE_AP_DNS_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, -1); @@ -4153,7 +4034,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_valid = mock_config_line("DNSPort", "127.0.0.1:80 " "NoIPv6Traffic " "NoIPv4Traffic NoOnionTraffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", + ret = parse_port_config(slout, config_port_valid, "DNS", CONN_TYPE_AP_DNS_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, 0); @@ -4169,7 +4050,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_invalid = mock_config_line("SOCKSPort", "NoIPv6Traffic " "unix:/tmp/foo/bar NoIPv4Traffic"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "SOCKS", + ret = parse_port_config(NULL, config_port_invalid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, -1); @@ -4182,7 +4063,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_valid = mock_config_line("SOCKSPort", "unix:/tmp/foo/bar " "NoIPv6Traffic " "NoDNSRequest NoIPv4Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); #ifdef _WIN32 @@ -4204,7 +4085,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_valid = mock_config_line("SOCKSPort", "unix:\"/tmp/foo/ bar\" " "NoIPv6Traffic " "NoDNSRequest NoIPv4Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); #ifdef _WIN32 @@ -4226,7 +4107,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_valid = mock_config_line("SOCKSPort", "unix:\"/tmp/foo/ bar " "NoIPv6Traffic " "NoDNSRequest NoIPv4Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, -1); @@ -4238,7 +4119,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_valid = mock_config_line("SOCKSPort", "unix:\"\" " "NoIPv6Traffic " "NoDNSRequest NoIPv4Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, -1); @@ -4249,7 +4130,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_valid = mock_config_line("SOCKSPort", "unix:/tmp/foo/bar " "OnionTrafficOnly"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); #ifdef _WIN32 @@ -4270,7 +4151,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_valid = mock_config_line("SOCKSPort", "unix:/tmp/foo/bar " "NoIPv4Traffic IPv6Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); #ifdef _WIN32 @@ -4289,7 +4170,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_valid = mock_config_line("SOCKSPort", "unix:/tmp/foo/bar " "IPv4Traffic IPv6Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, NULL, 0, CL_PORT_TAKES_HOSTNAMES); #ifdef _WIN32 @@ -4305,28 +4186,28 @@ test_config_parse_port_config__ports__ports_given(void *data) // Test failure if we specify world writable for an IP Port config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "42 WorldWritable"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, -1); // Test failure if we specify group writable for an IP Port config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "42 GroupWritable"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, -1); // Test failure if we specify group writable for an IP Port config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "42 RelaxDirModeCheck"); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, -1); // Test success with only a port (this will fail without a default address) config_free_lines(config_port_valid); config_port_valid = NULL; config_port_valid = mock_config_line("DNSPort", "42"); - ret = parse_port_config(NULL, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); @@ -4335,7 +4216,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IsolateDestPort"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4348,7 +4229,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 NoIsolateDestPorts"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4361,7 +4242,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IsolateDestAddr"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4374,7 +4255,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IsolateSOCKSAuth"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4387,7 +4268,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IsolateClientProtocol"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4400,7 +4281,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IsolateClientAddr"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4411,7 +4292,7 @@ test_config_parse_port_config__ports__ports_given(void *data) // Test success with ignored unknown options config_free_lines(config_port_valid); config_port_valid = NULL; config_port_valid = mock_config_line("DNSPort", "42 ThisOptionDoesntExist"); - ret = parse_port_config(NULL, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); @@ -4420,7 +4301,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 NoIsolateSOCKSAuth"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.3", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4433,7 +4314,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_valid = mock_config_line("SOCKSPort", "42 IPv6Traffic PreferIPv6"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, "127.0.0.42", 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, 0); @@ -4446,7 +4327,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 CacheIPv4DNS"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4459,7 +4340,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 CacheIPv6DNS"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4472,7 +4353,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 NoCacheIPv4DNS"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4485,7 +4366,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 CacheDNS"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, CL_PORT_TAKES_HOSTNAMES); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4498,7 +4379,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 UseIPv4Cache"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4511,7 +4392,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 UseIPv6Cache"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4524,7 +4405,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 UseDNSCache"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4537,7 +4418,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 NoPreferIPv6Automap"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4549,7 +4430,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 PreferSOCKSNoAuth"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4564,14 +4445,14 @@ test_config_parse_port_config__ports__ports_given(void *data) config_port_invalid = mock_config_line("DNSPort", "0"); config_port_valid = mock_config_line("DNSPort", "42"); config_port_invalid->next = config_port_valid; - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.42", 0, 0); tt_int_op(ret, OP_EQ, -1); // Test success with warn non-local control SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, config_port_valid, NULL, "Control", + ret = parse_port_config(slout, config_port_valid, "Control", CONN_TYPE_CONTROL_LISTENER, "127.0.0.42", 0, CL_PORT_WARN_NONLOCAL); tt_int_op(ret, OP_EQ, 0); @@ -4579,7 +4460,7 @@ test_config_parse_port_config__ports__ports_given(void *data) // Test success with warn non-local listener SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, config_port_valid, NULL, "ExtOR", + ret = parse_port_config(slout, config_port_valid, "ExtOR", CONN_TYPE_EXT_OR_LISTENER, "127.0.0.42", 0, CL_PORT_WARN_NONLOCAL); tt_int_op(ret, OP_EQ, 0); @@ -4587,12 +4468,12 @@ test_config_parse_port_config__ports__ports_given(void *data) // Test success with warn non-local other SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.42", 0, CL_PORT_WARN_NONLOCAL); tt_int_op(ret, OP_EQ, 0); // Test success with warn non-local other without out - ret = parse_port_config(NULL, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_valid, "DNS", 0, "127.0.0.42", 0, CL_PORT_WARN_NONLOCAL); tt_int_op(ret, OP_EQ, 0); @@ -4603,7 +4484,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 IPv4Traffic " "IPv6Traffic"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.44", 0, CL_PORT_TAKES_HOSTNAMES | CL_PORT_NO_STREAM_OPTIONS); @@ -4618,7 +4499,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=invalid"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.44", 0, CL_PORT_NO_STREAM_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4630,7 +4511,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=123"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.44", 0, 0); tt_int_op(ret, OP_EQ, -1); @@ -4640,7 +4521,7 @@ test_config_parse_port_config__ports__ports_given(void *data) smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "42 SessionGroup=123 " "SessionGroup=321"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.44", 0, CL_PORT_NO_STREAM_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4649,7 +4530,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "42 SessionGroup=1111122"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.44", 0, CL_PORT_NO_STREAM_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4661,7 +4542,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "0"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.45", 0, CL_PORT_IS_UNIXSOCKET); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 0); @@ -4671,7 +4552,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "something"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.45", 0, CL_PORT_IS_UNIXSOCKET); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4684,7 +4565,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "auto"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.46", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4698,7 +4579,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "127.0.0.122:auto"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.46", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4711,7 +4592,7 @@ test_config_parse_port_config__ports__ports_given(void *data) config_free_lines(config_port_invalid); config_port_invalid = NULL; config_port_invalid = mock_config_line("DNSPort", "invalidstuff!!:auto"); MOCK(tor_addr_lookup, mock_tor_addr_lookup__fail_on_bad_addrs); - ret = parse_port_config(NULL, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(NULL, config_port_invalid, "DNS", 0, "127.0.0.46", 0, 0); UNMOCK(tor_addr_lookup); tt_int_op(ret, OP_EQ, -1); @@ -4721,7 +4602,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "127.0.0.123:656"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, "127.0.0.46", 0, 0); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4735,7 +4616,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "something wrong"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.46", 0, 0); tt_int_op(ret, OP_EQ, -1); @@ -4744,7 +4625,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "127.0.1.0:123:auto"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, "127.0.0.46", 0, 0); tt_int_op(ret, OP_EQ, -1); @@ -4754,7 +4635,7 @@ test_config_parse_port_config__ports__ports_given(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("SOCKSPort", "unix:/tmp/somewhere"); - ret = parse_port_config(slout, config_port_valid, NULL, "SOCKS", + ret = parse_port_config(slout, config_port_valid, "SOCKS", CONN_TYPE_AP_LISTENER, "127.0.0.46", 0, CL_PORT_DFLT_GROUP_WRITABLE); #ifdef _WIN32 @@ -4789,7 +4670,7 @@ test_config_parse_port_config__ports__server_options(void *data) config_free_lines(config_port_valid); config_port_valid = NULL; config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 NoAdvertise"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4802,7 +4683,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 NoListen"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4816,7 +4697,7 @@ test_config_parse_port_config__ports__server_options(void *data) smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "127.0.0.124:656 NoListen " "NoAdvertise"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4825,7 +4706,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 IPv4Only"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4838,7 +4719,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "[::1]:656 IPv6Only"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4852,7 +4733,7 @@ test_config_parse_port_config__ports__server_options(void *data) smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "127.0.0.124:656 IPv6Only " "IPv4Only"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4861,7 +4742,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_valid = mock_config_line("DNSPort", "127.0.0.124:656 unknown"); - ret = parse_port_config(slout, config_port_valid, NULL, "DNS", 0, NULL, 0, + ret = parse_port_config(slout, config_port_valid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, 0); tt_int_op(smartlist_len(slout), OP_EQ, 1); @@ -4872,7 +4753,7 @@ test_config_parse_port_config__ports__server_options(void *data) smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "127.0.0.124:656 IPv6Only"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4881,7 +4762,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("DNSPort", "[::1]:656 IPv4Only"); - ret = parse_port_config(slout, config_port_invalid, NULL, "DNS", 0, NULL, + ret = parse_port_config(slout, config_port_invalid, "DNS", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4890,7 +4771,7 @@ test_config_parse_port_config__ports__server_options(void *data) SMARTLIST_FOREACH(slout,port_cfg_t *,pf,port_cfg_free(pf)); smartlist_clear(slout); config_port_invalid = mock_config_line("ORPort", "unix:\"\""); - ret = parse_port_config(slout, config_port_invalid, NULL, "ORPort", 0, NULL, + ret = parse_port_config(slout, config_port_invalid, "ORPort", 0, NULL, 0, CL_PORT_SERVER_OPTIONS); tt_int_op(ret, OP_EQ, -1); @@ -4951,7 +4832,6 @@ struct testcase_t config_tests[] = { CONFIG_TEST(fix_my_family, 0), CONFIG_TEST(directory_fetch, 0), CONFIG_TEST(port_cfg_line_extract_addrport, 0), - CONFIG_TEST(parse_port_config__listenaddress, 0), CONFIG_TEST(parse_port_config__ports__no_ports_given, 0), CONFIG_TEST(parse_port_config__ports__server_options, 0), CONFIG_TEST(parse_port_config__ports__ports_given, 0), diff --git a/src/test/test_consdiffmgr.c b/src/test/test_consdiffmgr.c index 048964f404..746d17a038 100644 --- a/src/test/test_consdiffmgr.c +++ b/src/test/test_consdiffmgr.c @@ -759,9 +759,11 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) consensus_cache_entry_incref(hold_ent); // incref, so it is preserved. /* Now add an even-more-recent consensus; this should make all previous - * diffs deletable */ + * diffs deletable, and make delete */ tt_int_op(0, OP_EQ, consdiffmgr_add_consensus(md_body[3], md_ns[3])); - tt_int_op(2 * n_diff_compression_methods(), OP_EQ, consdiffmgr_cleanup()); + tt_int_op(2 * n_diff_compression_methods() + + (n_consensus_compression_methods() - 1) , OP_EQ, + consdiffmgr_cleanup()); tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[0])); diff --git a/src/test/test_dir_handle_get.c b/src/test/test_dir_handle_get.c index c98938b2db..7d40db4543 100644 --- a/src/test/test_dir_handle_get.c +++ b/src/test/test_dir_handle_get.c @@ -12,6 +12,7 @@ #include "or.h" #include "config.h" #include "connection.h" +#include "consdiffmgr.h" #include "directory.h" #include "test.h" #include "compress.h" @@ -465,6 +466,8 @@ init_mock_options(void) mock_options = tor_malloc(sizeof(or_options_t)); memset(mock_options, 0, sizeof(or_options_t)); mock_options->TestingTorNetwork = 1; + mock_options->DataDirectory = tor_strdup(get_fname_rnd("datadir_tmp")); + check_private_dir(mock_options->DataDirectory, CPD_CREATE, NULL); } static const or_options_t * @@ -501,14 +504,6 @@ test_dir_handle_get_micro_d(void *data) /* SETUP */ init_mock_options(); - const char *fn = get_fname("dir_handle_datadir_test1"); - mock_options->DataDirectory = tor_strdup(fn); - -#ifdef _WIN32 - tt_int_op(0, OP_EQ, mkdir(mock_options->DataDirectory)); -#else - tt_int_op(0, OP_EQ, mkdir(mock_options->DataDirectory, 0700)); -#endif /* Add microdesc to cache */ crypto_digest256(digest, microdesc, strlen(microdesc), DIGEST_SHA256); @@ -568,14 +563,6 @@ test_dir_handle_get_micro_d_server_busy(void *data) /* SETUP */ init_mock_options(); - const char *fn = get_fname("dir_handle_datadir_test2"); - mock_options->DataDirectory = tor_strdup(fn); - -#ifdef _WIN32 - tt_int_op(0, OP_EQ, mkdir(mock_options->DataDirectory)); -#else - tt_int_op(0, OP_EQ, mkdir(mock_options->DataDirectory, 0700)); -#endif /* Add microdesc to cache */ crypto_digest256(digest, microdesc, strlen(microdesc), DIGEST_SHA256); @@ -1621,8 +1608,13 @@ test_dir_handle_get_status_vote_current_consensus_ns_not_enough_sigs(void* d) /* init mock */ mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t)); mock_ns_val->flavor = FLAV_NS; + mock_ns_val->type = NS_TYPE_CONSENSUS; mock_ns_val->voters = smartlist_new(); - mock_ns_val->valid_until = time(NULL); + mock_ns_val->valid_after = time(NULL) - 1800; + mock_ns_val->valid_until = time(NULL) - 60; + + #define NETWORK_STATUS "some network status string" + consdiffmgr_add_consensus(NETWORK_STATUS, mock_ns_val); /* init mock */ init_mock_options(); @@ -1710,15 +1702,23 @@ test_dir_handle_get_status_vote_current_consensus_too_old(void *data) (void)data; mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t)); + mock_ns_val->type = NS_TYPE_CONSENSUS; mock_ns_val->flavor = FLAV_MICRODESC; - mock_ns_val->valid_until = time(NULL) - (60 * 60 * 24) - 1; + mock_ns_val->valid_after = time(NULL) - (24 * 60 * 60 + 1800); + mock_ns_val->fresh_until = time(NULL) - (24 * 60 * 60 + 900); + mock_ns_val->valid_until = time(NULL) - (24 * 60 * 60 + 20); + + #define NETWORK_STATUS "some network status string" + consdiffmgr_add_consensus(NETWORK_STATUS, mock_ns_val); init_mock_options(); + MOCK(get_options, mock_get_options); MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock); MOCK(networkstatus_get_latest_consensus_by_flavor, mock_ns_get_by_flavor); conn = new_dir_conn(); + TO_CONN(conn)->address = tor_strdup("127.0.0.1"); setup_capture_of_logs(LOG_WARN); @@ -1734,6 +1734,17 @@ test_dir_handle_get_status_vote_current_consensus_too_old(void *data) tor_free(header); teardown_capture_of_logs(); + tor_free(mock_ns_val); + + mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t)); + mock_ns_val->type = NS_TYPE_CONSENSUS; + mock_ns_val->flavor = FLAV_NS; + mock_ns_val->valid_after = time(NULL) - (24 * 60 * 60 + 1800); + mock_ns_val->fresh_until = time(NULL) - (24 * 60 * 60 + 900); + mock_ns_val->valid_until = time(NULL) - (24 * 60 * 60 + 20); + + #define NETWORK_STATUS "some network status string" + consdiffmgr_add_consensus(NETWORK_STATUS, mock_ns_val); setup_capture_of_logs(LOG_WARN); @@ -1772,16 +1783,26 @@ static void status_vote_current_consensus_ns_test(char **header, char **body, size_t *body_len) { - common_digests_t digests; - uint8_t sha3[DIGEST256_LEN]; dir_connection_t *conn = NULL; #define NETWORK_STATUS "some network status string" +#if 0 + common_digests_t digests; + uint8_t sha3[DIGEST256_LEN]; memset(&digests, 0x60, sizeof(digests)); memset(sha3, 0x06, sizeof(sha3)); dirserv_set_cached_consensus_networkstatus(NETWORK_STATUS, "ns", &digests, sha3, time(NULL)); +#endif + networkstatus_t *ns = tor_malloc_zero(sizeof(networkstatus_t)); + ns->type = NS_TYPE_CONSENSUS; + ns->flavor = FLAV_NS; + ns->valid_after = time(NULL) - 1800; + ns->fresh_until = time(NULL) - 900; + ns->valid_until = time(NULL) - 60; + consdiffmgr_add_consensus(NETWORK_STATUS, ns); + networkstatus_vote_free(ns); MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock); @@ -2592,11 +2613,11 @@ struct testcase_t dir_handle_get_tests[] = { DIR_HANDLE_CMD(status_vote_current_authority, 0), DIR_HANDLE_CMD(status_vote_next_authority_not_found, 0), DIR_HANDLE_CMD(status_vote_next_authority, 0), - DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_enough_sigs, 0), - DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_found, 0), - DIR_HANDLE_CMD(status_vote_current_consensus_too_old, 0), - DIR_HANDLE_CMD(status_vote_current_consensus_ns_busy, 0), - DIR_HANDLE_CMD(status_vote_current_consensus_ns, 0), + DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_enough_sigs, TT_FORK), + DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_found, TT_FORK), + DIR_HANDLE_CMD(status_vote_current_consensus_too_old, TT_FORK), + DIR_HANDLE_CMD(status_vote_current_consensus_ns_busy, TT_FORK), + DIR_HANDLE_CMD(status_vote_current_consensus_ns, TT_FORK), DIR_HANDLE_CMD(status_vote_current_d_not_found, 0), DIR_HANDLE_CMD(status_vote_next_d_not_found, 0), DIR_HANDLE_CMD(status_vote_d, 0), diff --git a/src/test/test_hs_cache.c b/src/test/test_hs_cache.c index bc4bfabde9..40f50b322a 100644 --- a/src/test/test_hs_cache.c +++ b/src/test/test_hs_cache.c @@ -15,96 +15,10 @@ #include "directory.h" #include "connection.h" +#include "hs_test_helpers.h" #include "test_helpers.h" #include "test.h" -/* Build an intro point using a blinded key and an address. */ -static hs_desc_intro_point_t * -helper_build_intro_point(const ed25519_keypair_t *blinded_kp, - const char *addr) -{ - int ret; - ed25519_keypair_t auth_kp; - hs_desc_intro_point_t *intro_point = NULL; - hs_desc_intro_point_t *ip = tor_malloc_zero(sizeof(*ip)); - ip->link_specifiers = smartlist_new(); - - { - hs_desc_link_specifier_t *ls = tor_malloc_zero(sizeof(*ls)); - ls->u.ap.port = 9001; - int family = tor_addr_parse(&ls->u.ap.addr, addr); - switch (family) { - case AF_INET: - ls->type = LS_IPV4; - break; - case AF_INET6: - ls->type = LS_IPV6; - break; - default: - /* Stop the test, not suppose to have an error. */ - tt_int_op(family, OP_EQ, AF_INET); - } - smartlist_add(ip->link_specifiers, ls); - } - - ret = ed25519_keypair_generate(&auth_kp, 0); - tt_int_op(ret, ==, 0); - ip->auth_key_cert = tor_cert_create(blinded_kp, CERT_TYPE_AUTH_HS_IP_KEY, - &auth_kp.pubkey, time(NULL), - HS_DESC_CERT_LIFETIME, - CERT_FLAG_INCLUDE_SIGNING_KEY); - tt_assert(ip->auth_key_cert); - - ret = curve25519_keypair_generate(&ip->enc_key.curve25519, 0); - tt_int_op(ret, ==, 0); - ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; - intro_point = ip; - done: - return intro_point; -} - -/* Return a valid hs_descriptor_t object. */ -static hs_descriptor_t * -helper_build_hs_desc(uint64_t revision_counter, uint32_t lifetime, - ed25519_public_key_t *signing_pubkey) -{ - int ret; - ed25519_keypair_t blinded_kp; - hs_descriptor_t *descp = NULL, *desc = tor_malloc_zero(sizeof(*desc)); - - desc->plaintext_data.version = HS_DESC_SUPPORTED_FORMAT_VERSION_MAX; - - /* Copy only the public key into the descriptor. */ - memcpy(&desc->plaintext_data.signing_pubkey, signing_pubkey, - sizeof(ed25519_public_key_t)); - - ret = ed25519_keypair_generate(&blinded_kp, 0); - tt_int_op(ret, ==, 0); - /* Copy only the public key into the descriptor. */ - memcpy(&desc->plaintext_data.blinded_pubkey, &blinded_kp.pubkey, - sizeof(ed25519_public_key_t)); - - desc->plaintext_data.signing_key_cert = - tor_cert_create(&blinded_kp, CERT_TYPE_SIGNING_HS_DESC, signing_pubkey, - time(NULL), 3600, CERT_FLAG_INCLUDE_SIGNING_KEY); - tt_assert(desc->plaintext_data.signing_key_cert); - desc->plaintext_data.revision_counter = revision_counter; - desc->plaintext_data.lifetime_sec = lifetime; - - /* Setup encrypted data section. */ - desc->encrypted_data.create2_ntor = 1; - desc->encrypted_data.intro_auth_types = smartlist_new(); - smartlist_add(desc->encrypted_data.intro_auth_types, tor_strdup("ed25519")); - desc->encrypted_data.intro_points = smartlist_new(); - /* Add an intro point. */ - smartlist_add(desc->encrypted_data.intro_points, - helper_build_intro_point(&blinded_kp, "1.2.3.4")); - - descp = desc; - done: - return descp; -} - /* Static variable used to encoded the HSDir query. */ static char query_b64[256]; @@ -141,7 +55,7 @@ test_directory(void *arg) /* Generate a valid descriptor with normal values. */ ret = ed25519_keypair_generate(&signing_kp1, 0); tt_int_op(ret, ==, 0); - desc1 = helper_build_hs_desc(42, 3 * 60 * 60, &signing_kp1.pubkey); + desc1 = hs_helper_build_hs_desc_with_ip(&signing_kp1); tt_assert(desc1); ret = hs_desc_encode_descriptor(desc1, &signing_kp1, &desc1_str); tt_int_op(ret, OP_EQ, 0); @@ -175,8 +89,10 @@ test_directory(void *arg) ret = ed25519_keypair_generate(&signing_kp_zero, 0); tt_int_op(ret, ==, 0); hs_descriptor_t *desc_zero_lifetime; - desc_zero_lifetime = helper_build_hs_desc(1, 0, &signing_kp_zero.pubkey); + desc_zero_lifetime = hs_helper_build_hs_desc_with_ip(&signing_kp_zero); tt_assert(desc_zero_lifetime); + desc_zero_lifetime->plaintext_data.revision_counter = 1; + desc_zero_lifetime->plaintext_data.lifetime_sec = 0; char *desc_zero_lifetime_str; ret = hs_desc_encode_descriptor(desc_zero_lifetime, &signing_kp_zero, &desc_zero_lifetime_str); @@ -262,7 +178,7 @@ test_clean_as_dir(void *arg) /* Generate a valid descriptor with values. */ ret = ed25519_keypair_generate(&signing_kp1, 0); tt_int_op(ret, ==, 0); - desc1 = helper_build_hs_desc(42, 3 * 60 * 60, &signing_kp1.pubkey); + desc1 = hs_helper_build_hs_desc_with_ip(&signing_kp1); tt_assert(desc1); ret = hs_desc_encode_descriptor(desc1, &signing_kp1, &desc1_str); tt_int_op(ret, OP_EQ, 0); @@ -375,7 +291,7 @@ test_upload_and_download_hs_desc(void *arg) ed25519_keypair_t signing_kp; retval = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(retval, ==, 0); - published_desc = helper_build_hs_desc(42, 3 * 60 * 60, &signing_kp.pubkey); + published_desc = hs_helper_build_hs_desc_with_ip(&signing_kp); tt_assert(published_desc); retval = hs_desc_encode_descriptor(published_desc, &signing_kp, &published_desc_str); @@ -438,8 +354,7 @@ test_hsdir_revision_counter_check(void *arg) { retval = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(retval, ==, 0); - published_desc = helper_build_hs_desc(1312, 3 * 60 * 60, - &signing_kp.pubkey); + published_desc = hs_helper_build_hs_desc_with_ip(&signing_kp); tt_assert(published_desc); retval = hs_desc_encode_descriptor(published_desc, &signing_kp, &published_desc_str); @@ -470,7 +385,7 @@ test_hsdir_revision_counter_check(void *arg) tt_assert(received_desc); /* Check that the revision counter is correct */ - tt_u64_op(received_desc->plaintext_data.revision_counter, ==, 1312); + tt_u64_op(received_desc->plaintext_data.revision_counter, ==, 42); hs_descriptor_free(received_desc); received_desc = NULL; diff --git a/src/test/test_hs_descriptor.c b/src/test/test_hs_descriptor.c index a1a1f14fb8..b1abe381d4 100644 --- a/src/test/test_hs_descriptor.c +++ b/src/test/test_hs_descriptor.c @@ -15,227 +15,10 @@ #include "test.h" #include "torcert.h" +#include "hs_test_helpers.h" #include "test_helpers.h" #include "log_test_helpers.h" -static hs_desc_intro_point_t * -helper_build_intro_point(const ed25519_keypair_t *blinded_kp, time_t now, - const char *addr, int legacy) -{ - int ret; - ed25519_keypair_t auth_kp; - hs_desc_intro_point_t *intro_point = NULL; - hs_desc_intro_point_t *ip = tor_malloc_zero(sizeof(*ip)); - ip->link_specifiers = smartlist_new(); - - { - hs_desc_link_specifier_t *ls = tor_malloc_zero(sizeof(*ls)); - if (legacy) { - ls->type = LS_LEGACY_ID; - memcpy(ls->u.legacy_id, "0299F268FCA9D55CD157976D39AE92B4B455B3A8", - DIGEST_LEN); - } else { - ls->u.ap.port = 9001; - int family = tor_addr_parse(&ls->u.ap.addr, addr); - switch (family) { - case AF_INET: - ls->type = LS_IPV4; - break; - case AF_INET6: - ls->type = LS_IPV6; - break; - default: - /* Stop the test, not suppose to have an error. */ - tt_int_op(family, OP_EQ, AF_INET); - } - } - smartlist_add(ip->link_specifiers, ls); - } - - ret = ed25519_keypair_generate(&auth_kp, 0); - tt_int_op(ret, ==, 0); - ip->auth_key_cert = tor_cert_create(blinded_kp, CERT_TYPE_AUTH_HS_IP_KEY, - &auth_kp.pubkey, now, - HS_DESC_CERT_LIFETIME, - CERT_FLAG_INCLUDE_SIGNING_KEY); - tt_assert(ip->auth_key_cert); - - if (legacy) { - ip->enc_key.legacy = crypto_pk_new(); - ip->enc_key_type = HS_DESC_KEY_TYPE_LEGACY; - tt_assert(ip->enc_key.legacy); - ret = crypto_pk_generate_key(ip->enc_key.legacy); - tt_int_op(ret, ==, 0); - } else { - ret = curve25519_keypair_generate(&ip->enc_key.curve25519, 0); - tt_int_op(ret, ==, 0); - ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; - } - - intro_point = ip; - done: - return intro_point; -} - -/* Return a valid hs_descriptor_t object. If no_ip is set, no introduction - * points are added. */ -static hs_descriptor_t * -helper_build_hs_desc(unsigned int no_ip, ed25519_public_key_t *signing_pubkey) -{ - int ret; - time_t now = time(NULL); - ed25519_keypair_t blinded_kp; - hs_descriptor_t *descp = NULL, *desc = tor_malloc_zero(sizeof(*desc)); - - desc->plaintext_data.version = HS_DESC_SUPPORTED_FORMAT_VERSION_MAX; - - /* Copy only the public key into the descriptor. */ - memcpy(&desc->plaintext_data.signing_pubkey, signing_pubkey, - sizeof(ed25519_public_key_t)); - - ret = ed25519_keypair_generate(&blinded_kp, 0); - tt_int_op(ret, ==, 0); - /* Copy only the public key into the descriptor. */ - memcpy(&desc->plaintext_data.blinded_pubkey, &blinded_kp.pubkey, - sizeof(ed25519_public_key_t)); - - desc->plaintext_data.signing_key_cert = - tor_cert_create(&blinded_kp, CERT_TYPE_SIGNING_HS_DESC, signing_pubkey, - now, 3600, CERT_FLAG_INCLUDE_SIGNING_KEY); - tt_assert(desc->plaintext_data.signing_key_cert); - desc->plaintext_data.revision_counter = 42; - desc->plaintext_data.lifetime_sec = 3 * 60 * 60; - - /* Setup encrypted data section. */ - desc->encrypted_data.create2_ntor = 1; - desc->encrypted_data.intro_auth_types = smartlist_new(); - desc->encrypted_data.single_onion_service = 1; - smartlist_add(desc->encrypted_data.intro_auth_types, tor_strdup("ed25519")); - desc->encrypted_data.intro_points = smartlist_new(); - if (!no_ip) { - /* Add four intro points. */ - smartlist_add(desc->encrypted_data.intro_points, - helper_build_intro_point(&blinded_kp, now, "1.2.3.4", 0)); - smartlist_add(desc->encrypted_data.intro_points, - helper_build_intro_point(&blinded_kp, now, "[2600::1]", 0)); - smartlist_add(desc->encrypted_data.intro_points, - helper_build_intro_point(&blinded_kp, now, "3.2.1.4", 1)); - smartlist_add(desc->encrypted_data.intro_points, - helper_build_intro_point(&blinded_kp, now, "", 1)); - } - - descp = desc; - done: - return descp; -} - -static void -helper_compare_hs_desc(const hs_descriptor_t *desc1, - const hs_descriptor_t *desc2) -{ - char *addr1 = NULL, *addr2 = NULL; - /* Plaintext data section. */ - tt_int_op(desc1->plaintext_data.version, OP_EQ, - desc2->plaintext_data.version); - tt_uint_op(desc1->plaintext_data.lifetime_sec, OP_EQ, - desc2->plaintext_data.lifetime_sec); - tt_assert(tor_cert_eq(desc1->plaintext_data.signing_key_cert, - desc2->plaintext_data.signing_key_cert)); - tt_mem_op(desc1->plaintext_data.signing_pubkey.pubkey, OP_EQ, - desc2->plaintext_data.signing_pubkey.pubkey, - ED25519_PUBKEY_LEN); - tt_mem_op(desc1->plaintext_data.blinded_pubkey.pubkey, OP_EQ, - desc2->plaintext_data.blinded_pubkey.pubkey, - ED25519_PUBKEY_LEN); - tt_u64_op(desc1->plaintext_data.revision_counter, ==, - desc2->plaintext_data.revision_counter); - - /* NOTE: We can't compare the encrypted blob because when encoding the - * descriptor, the object is immutable thus we don't update it with the - * encrypted blob. As contrast to the decoding process where we populate a - * descriptor object. */ - - /* Encrypted data section. */ - tt_uint_op(desc1->encrypted_data.create2_ntor, ==, - desc2->encrypted_data.create2_ntor); - - /* Authentication type. */ - tt_int_op(!!desc1->encrypted_data.intro_auth_types, ==, - !!desc2->encrypted_data.intro_auth_types); - if (desc1->encrypted_data.intro_auth_types && - desc2->encrypted_data.intro_auth_types) { - tt_int_op(smartlist_len(desc1->encrypted_data.intro_auth_types), ==, - smartlist_len(desc2->encrypted_data.intro_auth_types)); - for (int i = 0; - i < smartlist_len(desc1->encrypted_data.intro_auth_types); - i++) { - tt_str_op(smartlist_get(desc1->encrypted_data.intro_auth_types, i),OP_EQ, - smartlist_get(desc2->encrypted_data.intro_auth_types, i)); - } - } - - /* Introduction points. */ - { - tt_assert(desc1->encrypted_data.intro_points); - tt_assert(desc2->encrypted_data.intro_points); - tt_int_op(smartlist_len(desc1->encrypted_data.intro_points), ==, - smartlist_len(desc2->encrypted_data.intro_points)); - for (int i=0; i < smartlist_len(desc1->encrypted_data.intro_points); i++) { - hs_desc_intro_point_t *ip1 = smartlist_get(desc1->encrypted_data - .intro_points, i), - *ip2 = smartlist_get(desc2->encrypted_data - .intro_points, i); - tt_assert(tor_cert_eq(ip1->auth_key_cert, ip2->auth_key_cert)); - tt_int_op(ip1->enc_key_type, OP_EQ, ip2->enc_key_type); - tt_assert(ip1->enc_key_type == HS_DESC_KEY_TYPE_LEGACY || - ip1->enc_key_type == HS_DESC_KEY_TYPE_CURVE25519); - switch (ip1->enc_key_type) { - case HS_DESC_KEY_TYPE_LEGACY: - tt_int_op(crypto_pk_cmp_keys(ip1->enc_key.legacy, ip2->enc_key.legacy), - OP_EQ, 0); - break; - case HS_DESC_KEY_TYPE_CURVE25519: - tt_mem_op(ip1->enc_key.curve25519.pubkey.public_key, OP_EQ, - ip2->enc_key.curve25519.pubkey.public_key, - CURVE25519_PUBKEY_LEN); - break; - } - - tt_int_op(smartlist_len(ip1->link_specifiers), ==, - smartlist_len(ip2->link_specifiers)); - for (int j = 0; j < smartlist_len(ip1->link_specifiers); j++) { - hs_desc_link_specifier_t *ls1 = smartlist_get(ip1->link_specifiers, j), - *ls2 = smartlist_get(ip2->link_specifiers, j); - tt_int_op(ls1->type, ==, ls2->type); - switch (ls1->type) { - case LS_IPV4: - case LS_IPV6: - { - addr1 = tor_addr_to_str_dup(&ls1->u.ap.addr); - addr2 = tor_addr_to_str_dup(&ls2->u.ap.addr); - tt_str_op(addr1, OP_EQ, addr2); - tor_free(addr1); - tor_free(addr2); - tt_int_op(ls1->u.ap.port, ==, ls2->u.ap.port); - } - break; - case LS_LEGACY_ID: - tt_mem_op(ls1->u.legacy_id, OP_EQ, ls2->u.legacy_id, - sizeof(ls1->u.legacy_id)); - break; - default: - /* Unknown type, caught it and print its value. */ - tt_int_op(ls1->type, OP_EQ, -1); - } - } - } - } - - done: - tor_free(addr1); - tor_free(addr2); -} - /* Test certificate encoding put in a descriptor. */ static void test_cert_encoding(void *arg) @@ -494,7 +277,7 @@ test_encode_descriptor(void *arg) ret = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(ret, ==, 0); - desc = helper_build_hs_desc(0, &signing_kp.pubkey); + desc = hs_helper_build_hs_desc_with_ip(&signing_kp); ret = hs_desc_encode_descriptor(desc, &signing_kp, &encoded); tt_int_op(ret, ==, 0); tt_assert(encoded); @@ -518,7 +301,7 @@ test_decode_descriptor(void *arg) ret = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(ret, ==, 0); - desc = helper_build_hs_desc(0, &signing_kp.pubkey); + desc = hs_helper_build_hs_desc_with_ip(&signing_kp); /* Give some bad stuff to the decoding function. */ ret = hs_desc_decode_descriptor("hladfjlkjadf", NULL, &decoded); @@ -532,14 +315,14 @@ test_decode_descriptor(void *arg) tt_int_op(ret, ==, 0); tt_assert(decoded); - helper_compare_hs_desc(desc, decoded); + hs_helper_desc_equal(desc, decoded); /* Decode a descriptor with _no_ introduction points. */ { ed25519_keypair_t signing_kp_no_ip; ret = ed25519_keypair_generate(&signing_kp_no_ip, 0); tt_int_op(ret, ==, 0); - desc_no_ip = helper_build_hs_desc(1, &signing_kp_no_ip.pubkey); + desc_no_ip = hs_helper_build_hs_desc_no_ip(&signing_kp_no_ip); tt_assert(desc_no_ip); tor_free(encoded); ret = hs_desc_encode_descriptor(desc_no_ip, &signing_kp_no_ip, &encoded); @@ -603,7 +386,7 @@ test_encrypted_data_len(void *arg) } static void -test_decode_intro_point(void *arg) +test_decode_invalid_intro_point(void *arg) { int ret; char *encoded_ip = NULL; @@ -614,9 +397,6 @@ test_decode_intro_point(void *arg) (void) arg; - /* The following certificate expires in 2036. After that, one of the test - * will fail because of the expiry time. */ - /* Seperate pieces of a valid encoded introduction point. */ const char *intro_point = "introduction-point AQIUMDI5OUYyNjhGQ0E5RDU1Q0QxNTc="; @@ -629,60 +409,13 @@ test_decode_intro_point(void *arg) "-----END ED25519 CERT-----"; const char *enc_key = "enc-key ntor bpZKLsuhxP6woDQ3yVyjm5gUKSk7RjfAijT2qrzbQk0="; - const char *enc_key_legacy = - "enc-key legacy\n" - "-----BEGIN RSA PUBLIC KEY-----\n" - "MIGJAoGBAO4bATcW8kW4h6RQQAKEgg+aXCpF4JwbcO6vGZtzXTDB+HdPVQzwqkbh\n" - "XzFM6VGArhYw4m31wcP1Z7IwULir7UMnAFd7Zi62aYfU6l+Y1yAoZ1wzu1XBaAMK\n" - "ejpwQinW9nzJn7c2f69fVke3pkhxpNdUZ+vplSA/l9iY+y+v+415AgMBAAE=\n" - "-----END RSA PUBLIC KEY-----"; const char *enc_key_cert = - "enc-key-certification\n" + "enc-key-cert\n" "-----BEGIN ED25519 CERT-----\n" "AQsACOhZAUpNvCZ1aJaaR49lS6MCdsVkhVGVrRqoj0Y2T4SzroAtAQAgBABFOcGg\n" "lbTt1DF5nKTE/gU3Fr8ZtlCIOhu1A+F5LM7fqCUupfesg0KTHwyIZOYQbJuM5/he\n" "/jDNyLy9woPJdjkxywaY2RPUxGjLYtMQV0E8PUxWyICV+7y52fTCYaKpYQw=\n" "-----END ED25519 CERT-----"; - const char *enc_key_cert_legacy = - "enc-key-certification\n" - "-----BEGIN CROSSCERT-----\n" - "Sk28JnVolppHj2VLowJ2xWSFUZWtGqiPRjZPhLOugC0ACOhZgFPA5egeRDUXMM1U\n" - "Fn3c7Je0gJS6mVma5FzwlgwggeriF13UZcaT71vEAN/ZJXbxOfQVGMZ0rXuFpjUq\n" - "C8CvqmZIwEUaPE1nDFtmnTcucvNS1YQl9nsjH3ejbxc+4yqps/cXh46FmXsm5yz7\n" - "NZjBM9U1fbJhlNtOvrkf70K8bLk6\n" - "-----END CROSSCERT-----"; - - (void) enc_key_legacy; - (void) enc_key_cert_legacy; - - /* Start by testing the "decode all intro points" function. */ - { - char *line; - ret = ed25519_keypair_generate(&signing_kp, 0); - tt_int_op(ret, ==, 0); - desc = helper_build_hs_desc(0, &signing_kp.pubkey); - tt_assert(desc); - /* Only try to decode an incomplete introduction point section. */ - tor_asprintf(&line, "\n%s", intro_point); - ret = decode_intro_points(desc, &desc->encrypted_data, line); - tor_free(line); - tt_int_op(ret, ==, -1); - - /* Decode one complete intro point. */ - smartlist_t *lines = smartlist_new(); - smartlist_add(lines, (char *) intro_point); - smartlist_add(lines, (char *) auth_key); - smartlist_add(lines, (char *) enc_key); - smartlist_add(lines, (char *) enc_key_cert); - encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); - tt_assert(encoded_ip); - tor_asprintf(&line, "\n%s", encoded_ip); - tor_free(encoded_ip); - ret = decode_intro_points(desc, &desc->encrypted_data, line); - tor_free(line); - smartlist_free(lines); - tt_int_op(ret, ==, 0); - } /* Try to decode a junk string. */ { @@ -690,7 +423,7 @@ test_decode_intro_point(void *arg) desc = NULL; ret = ed25519_keypair_generate(&signing_kp, 0); tt_int_op(ret, ==, 0); - desc = helper_build_hs_desc(0, &signing_kp.pubkey); + desc = hs_helper_build_hs_desc_with_ip(&signing_kp); const char *junk = "this is not a descriptor"; ip = decode_introduction_point(desc, junk); tt_assert(!ip); @@ -796,7 +529,7 @@ test_decode_intro_point(void *arg) /* Invalid enc-key invalid legacy. */ { smartlist_t *lines = smartlist_new(); - const char *bad_line = "enc-key legacy blah==="; + const char *bad_line = "legacy-key blah==="; /* Build intro point text. */ smartlist_add(lines, (char *) intro_point); smartlist_add(lines, (char *) auth_key); @@ -810,22 +543,6 @@ test_decode_intro_point(void *arg) smartlist_free(lines); } - /* Valid object. */ - { - smartlist_t *lines = smartlist_new(); - /* Build intro point text. */ - smartlist_add(lines, (char *) intro_point); - smartlist_add(lines, (char *) auth_key); - smartlist_add(lines, (char *) enc_key); - smartlist_add(lines, (char *) enc_key_cert); - encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); - tt_assert(encoded_ip); - ip = decode_introduction_point(desc, encoded_ip); - tt_assert(ip); - tor_free(encoded_ip); - smartlist_free(lines); - } - done: hs_descriptor_free(desc); desc_intro_point_free(ip); @@ -1117,7 +834,7 @@ struct testcase_t hs_descriptor[] = { NULL, NULL }, { "encrypted_data_len", test_encrypted_data_len, TT_FORK, NULL, NULL }, - { "decode_intro_point", test_decode_intro_point, TT_FORK, + { "decode_invalid_intro_point", test_decode_invalid_intro_point, TT_FORK, NULL, NULL }, { "decode_plaintext", test_decode_plaintext, TT_FORK, NULL, NULL }, diff --git a/src/test/test_hs_intropoint.c b/src/test/test_hs_intropoint.c index ef5cb46567..c6197875b5 100644 --- a/src/test/test_hs_intropoint.c +++ b/src/test/test_hs_intropoint.c @@ -503,6 +503,24 @@ helper_establish_intro_v2(or_circuit_t *intro_circ) return key1; } +/* Helper function: test circuitmap free_all function outside of + * test_intro_point_registration to prevent Coverity from seeing a + * double free if the assertion hypothetically fails. + */ +static void +test_circuitmap_free_all(void) +{ + hs_circuitmap_ht *the_hs_circuitmap = NULL; + + the_hs_circuitmap = get_hs_circuitmap(); + tt_assert(the_hs_circuitmap); + hs_circuitmap_free_all(); + the_hs_circuitmap = get_hs_circuitmap(); + tt_assert(!the_hs_circuitmap); + done: + ; +} + /** Successfuly register a v2 intro point and a v3 intro point. Ensure that HS * circuitmap is maintained properly. */ static void @@ -583,14 +601,7 @@ test_intro_point_registration(void *arg) circuit_free(TO_CIRCUIT(intro_circ)); circuit_free(TO_CIRCUIT(legacy_intro_circ)); trn_cell_establish_intro_free(establish_intro_cell); - - { /* Test circuitmap free_all function. */ - the_hs_circuitmap = get_hs_circuitmap(); - tt_assert(the_hs_circuitmap); - hs_circuitmap_free_all(); - the_hs_circuitmap = get_hs_circuitmap(); - tt_assert(!the_hs_circuitmap); - } + test_circuitmap_free_all(); UNMOCK(hs_intro_send_intro_established_cell); } diff --git a/src/test/test_options.c b/src/test/test_options.c index d10a93305a..ad735b72a6 100644 --- a/src/test/test_options.c +++ b/src/test/test_options.c @@ -186,7 +186,6 @@ test_options_validate_impl(const char *configuration, expect_log, msg)) goto done; } - tt_int_op((r == 0), OP_EQ, (msg == NULL)); if (r) goto done; @@ -263,6 +262,13 @@ test_options_validate(void *arg) OK("HeartbeatPeriod 1 hour", PH_VALIDATE); OK("LogTimeGranularity 100 milliseconds", PH_VALIDATE); + WANT_LOG("ControlSocket \"string with trailing garbage\" bogus", LOG_WARN, + "Error while parsing configuration: " + "Excess data after quoted string", PH_GETLINES); + WANT_LOG("ControlSocket \"bogus escape \\@\"", LOG_WARN, + "Error while parsing configuration: " + "Invalid escape sequence in quoted string", PH_GETLINES); + close_temp_logs(); clear_log_messages(); return; @@ -417,6 +423,12 @@ get_options_test_data(const char *conf) result->opt = options_new(); result->old_opt = options_new(); result->def_opt = options_new(); + + // XXX: Really, all of these options should be set to defaults + // with options_init(), but about a dozen tests break when I do that. + // Being kinda lame and just fixing the immedate breakage for now.. + result->opt->ConnectionPadding = -1; // default must be "auto" + rv = config_get_lines(conf, &cl, 1); tt_assert(rv == 0); rv = config_assign(&options_format, result->opt, cl, 0, &msg); @@ -465,7 +477,7 @@ test_options_validate__uname_for_server(void *ignored) (void)ignored; char *msg; options_test_data_t *tdata = get_options_test_data( - "ORListenAddress 127.0.0.1:5555"); + "ORPort 127.0.0.1:5555"); setup_capture_of_logs(LOG_WARN); MOCK(get_uname, fixed_get_uname); @@ -599,7 +611,7 @@ test_options_validate__contactinfo(void *ignored) int ret; char *msg; options_test_data_t *tdata = get_options_test_data( - "ORListenAddress 127.0.0.1:5555\nORPort 955"); + "ORPort 127.0.0.1:5555"); setup_capture_of_logs(LOG_DEBUG); tdata->opt->ContactInfo = NULL; @@ -612,7 +624,7 @@ test_options_validate__contactinfo(void *ignored) tor_free(msg); free_options_test_data(tdata); - tdata = get_options_test_data("ORListenAddress 127.0.0.1:5555\nORPort 955\n" + tdata = get_options_test_data("ORPort 127.0.0.1:5555\n" "ContactInfo hella@example.org"); mock_clean_saved_logs(); ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); @@ -1020,8 +1032,7 @@ test_options_validate__relay_with_hidden_services(void *ignored) char *msg; setup_capture_of_logs(LOG_DEBUG); options_test_data_t *tdata = get_options_test_data( - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "HiddenServiceDir " "/Library/Tor/var/lib/tor/hidden_service/\n" "HiddenServicePort 80 127.0.0.1:8080\n" @@ -1091,7 +1102,7 @@ test_options_validate__transproxy(void *ignored) #else tt_int_op(tdata->opt->TransProxyType_parsed, OP_EQ, TPT_PF_DIVERT); tt_str_op(msg, OP_EQ, "Cannot use TransProxyType without " - "any valid TransPort or TransListenAddress."); + "any valid TransPort."); #endif tor_free(msg); @@ -1106,7 +1117,7 @@ test_options_validate__transproxy(void *ignored) #else tt_int_op(tdata->opt->TransProxyType_parsed, OP_EQ, TPT_TPROXY); tt_str_op(msg, OP_EQ, "Cannot use TransProxyType without any valid " - "TransPort or TransListenAddress."); + "TransPort."); #endif tor_free(msg); @@ -1122,7 +1133,7 @@ test_options_validate__transproxy(void *ignored) #else tt_int_op(tdata->opt->TransProxyType_parsed, OP_EQ, TPT_IPFW); tt_str_op(msg, OP_EQ, "Cannot use TransProxyType without any valid " - "TransPort or TransListenAddress."); + "TransPort."); #endif tor_free(msg); @@ -1180,8 +1191,7 @@ test_options_validate__transproxy(void *ignored) ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); tt_int_op(ret, OP_EQ, -1); - tt_str_op(msg, OP_EQ, "TransPort and TransListenAddress are disabled in " - "this build."); + tt_str_op(msg, OP_EQ, "TransPort is disabled in this build."); tor_free(msg); #endif @@ -1376,54 +1386,6 @@ test_options_validate__node_families(void *ignored) } static void -test_options_validate__tlsec(void *ignored) -{ - (void)ignored; - int ret; - char *msg; - setup_capture_of_logs(LOG_DEBUG); - options_test_data_t *tdata = get_options_test_data( - "TLSECGroup ed25519\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - expect_log_msg("Unrecognized TLSECGroup: Falling back to the default.\n"); - tt_assert(!tdata->opt->TLSECGroup); - tor_free(msg); - - free_options_test_data(tdata); - tdata = get_options_test_data("TLSECGroup P224\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - mock_clean_saved_logs(); - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - expect_no_log_msg( - "Unrecognized TLSECGroup: Falling back to the default.\n"); - tt_assert(tdata->opt->TLSECGroup); - tor_free(msg); - - free_options_test_data(tdata); - tdata = get_options_test_data("TLSECGroup P256\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - mock_clean_saved_logs(); - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - expect_no_log_msg( - "Unrecognized TLSECGroup: Falling back to the default.\n"); - tt_assert(tdata->opt->TLSECGroup); - tor_free(msg); - - done: - teardown_capture_of_logs(); - free_options_test_data(tdata); - tor_free(msg); -} - -static void test_options_validate__token_bucket(void *ignored) { (void)ignored; @@ -1805,8 +1767,7 @@ test_options_validate__reachable_addresses(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data("ReachableAddresses *:82\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "MaxClientCircuitsPending 1\n" "ConnLimit 1\n" "SchedulerHighWaterMark__ 42\n" @@ -1819,8 +1780,7 @@ test_options_validate__reachable_addresses(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data("ReachableORAddresses *:82\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "MaxClientCircuitsPending 1\n" "ConnLimit 1\n" "SchedulerHighWaterMark__ 42\n" @@ -1833,8 +1793,7 @@ test_options_validate__reachable_addresses(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data("ReachableDirAddresses *:82\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "MaxClientCircuitsPending 1\n" "ConnLimit 1\n" "SchedulerHighWaterMark__ 42\n" @@ -1847,8 +1806,7 @@ test_options_validate__reachable_addresses(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data("ClientUseIPv4 0\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "MaxClientCircuitsPending 1\n" "ConnLimit 1\n" "SchedulerHighWaterMark__ 42\n" @@ -1948,8 +1906,7 @@ test_options_validate__use_bridges(void *ignored) options_test_data_t *tdata = get_options_test_data( "UseBridges 1\n" "ClientUseIPv4 1\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "MaxClientCircuitsPending 1\n" "ConnLimit 1\n" "SchedulerHighWaterMark__ 42\n" @@ -2071,56 +2028,6 @@ test_options_validate__entry_nodes(void *ignored) } static void -test_options_validate__invalid_nodes(void *ignored) -{ - (void)ignored; - int ret; - char *msg; - options_test_data_t *tdata = get_options_test_data( - "AllowInvalidNodes something_stupid\n" - "MaxClientCircuitsPending 1\n" - "ConnLimit 1\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - tt_str_op(msg, OP_EQ, - "Unrecognized value 'something_stupid' in AllowInvalidNodes"); - tor_free(msg); - - free_options_test_data(tdata); - tdata = get_options_test_data("AllowInvalidNodes entry, middle, exit\n" - "MaxClientCircuitsPending 1\n" - "ConnLimit 1\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - tt_int_op(tdata->opt->AllowInvalid_, OP_EQ, ALLOW_INVALID_ENTRY | - ALLOW_INVALID_EXIT | ALLOW_INVALID_MIDDLE); - tor_free(msg); - - free_options_test_data(tdata); - tdata = get_options_test_data("AllowInvalidNodes introduction, rendezvous\n" - "MaxClientCircuitsPending 1\n" - "ConnLimit 1\n" - "SchedulerHighWaterMark__ 42\n" - "SchedulerLowWaterMark__ 10\n"); - - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, -1); - tt_int_op(tdata->opt->AllowInvalid_, OP_EQ, ALLOW_INVALID_INTRODUCTION | - ALLOW_INVALID_RENDEZVOUS); - tor_free(msg); - - done: - free_options_test_data(tdata); - tor_free(msg); -} - -static void test_options_validate__safe_logging(void *ignored) { (void)ignored; @@ -2390,30 +2297,6 @@ test_options_validate__hidserv(void *ignored) } static void -test_options_validate__predicted_ports(void *ignored) -{ - (void)ignored; - int ret; - char *msg; - setup_capture_of_logs(LOG_WARN); - - options_test_data_t *tdata = get_options_test_data( - "PredictedPortsRelevanceTime 100000000\n" - TEST_OPTIONS_DEFAULT_VALUES); - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, 0); - expect_log_msg("PredictedPortsRelevanceTime is too " - "large; clipping to 3600s.\n"); - tt_int_op(tdata->opt->PredictedPortsRelevanceTime, OP_EQ, 3600); - - done: - teardown_capture_of_logs(); - policies_free_all(); - free_options_test_data(tdata); - tor_free(msg); -} - -static void test_options_validate__path_bias(void *ignored) { (void)ignored; @@ -2559,8 +2442,7 @@ test_options_validate__bandwidth(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 1\n" ); ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); @@ -2571,8 +2453,7 @@ test_options_validate__bandwidth(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76800\n" "MaxAdvertisedBandwidth 30000\n" ); @@ -2584,8 +2465,7 @@ test_options_validate__bandwidth(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76800\n" "RelayBandwidthRate 1\n" "MaxAdvertisedBandwidth 38400\n" @@ -2598,8 +2478,7 @@ test_options_validate__bandwidth(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76800\n" "BandwidthBurst 76800\n" "RelayBandwidthRate 76800\n" @@ -3037,8 +2916,7 @@ test_options_validate__accounting(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data( TEST_OPTIONS_DEFAULT_VALUES - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76800\n" "BandwidthBurst 76800\n" "MaxAdvertisedBandwidth 38400\n" @@ -3672,8 +3550,7 @@ test_options_validate__families(void *ignored) tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES "MyFamily home\n" "BridgeRelay 1\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 51300\n" "BandwidthBurst 51300\n" "MaxAdvertisedBandwidth 25700\n" @@ -3902,8 +3779,7 @@ test_options_validate__transport(void *ignored) free_options_test_data(tdata); tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES "ServerTransportPlugin foo exec bar\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76900\n" "BandwidthBurst 76900\n" "MaxAdvertisedBandwidth 38500\n" @@ -3945,8 +3821,7 @@ test_options_validate__transport(void *ignored) tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES "ServerTransportListenAddr foo 127.0.0.42:55\n" "ServerTransportPlugin foo exec bar\n" - "ORListenAddress 127.0.0.1:5555\n" - "ORPort 955\n" + "ORPort 127.0.0.1:5555\n" "BandwidthRate 76900\n" "BandwidthBurst 76900\n" "MaxAdvertisedBandwidth 38500\n" @@ -4303,48 +4178,6 @@ test_options_validate__virtual_addr(void *ignored) } static void -test_options_validate__exits(void *ignored) -{ - (void)ignored; - int ret; - char *msg; - options_test_data_t *tdata = NULL; - setup_capture_of_logs(LOG_WARN); - - free_options_test_data(tdata); - tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "AllowSingleHopExits 1" - ); - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, 0); - expect_log_msg("You have set AllowSingleHopExits; " - "now your relay will allow others to make one-hop exits. However," - " since by default most clients avoid relays that set this option," - " most clients will ignore you.\n"); - tor_free(msg); - - free_options_test_data(tdata); - tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES - "AllowSingleHopExits 1\n" - VALID_DIR_AUTH - ); - mock_clean_saved_logs(); - ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); - tt_int_op(ret, OP_EQ, 0); - expect_no_log_msg("You have set AllowSingleHopExits; " - "now your relay will allow others to make one-hop exits. However," - " since by default most clients avoid relays that set this option," - " most clients will ignore you.\n"); - tor_free(msg); - - done: - policies_free_all(); - teardown_capture_of_logs(); - free_options_test_data(tdata); - tor_free(msg); -} - -static void test_options_validate__testing_options(void *ignored) { (void)ignored; @@ -4582,7 +4415,6 @@ struct testcase_t options_tests[] = { LOCAL_VALIDATE_TEST(exclude_nodes), LOCAL_VALIDATE_TEST(scheduler), LOCAL_VALIDATE_TEST(node_families), - LOCAL_VALIDATE_TEST(tlsec), LOCAL_VALIDATE_TEST(token_bucket), LOCAL_VALIDATE_TEST(recommended_packages), LOCAL_VALIDATE_TEST(fetch_dir), @@ -4593,12 +4425,10 @@ struct testcase_t options_tests[] = { LOCAL_VALIDATE_TEST(reachable_addresses), LOCAL_VALIDATE_TEST(use_bridges), LOCAL_VALIDATE_TEST(entry_nodes), - LOCAL_VALIDATE_TEST(invalid_nodes), LOCAL_VALIDATE_TEST(safe_logging), LOCAL_VALIDATE_TEST(publish_server_descriptor), LOCAL_VALIDATE_TEST(testing), LOCAL_VALIDATE_TEST(hidserv), - LOCAL_VALIDATE_TEST(predicted_ports), LOCAL_VALIDATE_TEST(path_bias), LOCAL_VALIDATE_TEST(bandwidth), LOCAL_VALIDATE_TEST(circuits), @@ -4616,7 +4446,6 @@ struct testcase_t options_tests[] = { LOCAL_VALIDATE_TEST(constrained_sockets), LOCAL_VALIDATE_TEST(v3_auth), LOCAL_VALIDATE_TEST(virtual_addr), - LOCAL_VALIDATE_TEST(exits), LOCAL_VALIDATE_TEST(testing_options), LOCAL_VALIDATE_TEST(accel), END_OF_TESTCASES /* */ diff --git a/src/test/testing_common.c b/src/test/testing_common.c index d3dc761c77..d7e36edbc0 100644 --- a/src/test/testing_common.c +++ b/src/test/testing_common.c @@ -21,6 +21,7 @@ const char tor_git_revision[] = ""; #include "rephist.h" #include "backtrace.h" #include "test.h" +#include "channelpadding.h" #include <stdio.h> #ifdef HAVE_FCNTL_H @@ -304,10 +305,15 @@ main(int c, const char **v) tor_free(errmsg); return 1; } + tor_set_failed_assertion_callback(an_assertion_failed); init_pregenerated_keys(); + channelpadding_new_consensus_params(NULL); + + predicted_ports_init(); + atexit(remove_directory); int have_failed = (tinytest_main(c, v, testgroups) != 0); diff --git a/src/trunnel/channelpadding_negotiation.c b/src/trunnel/channelpadding_negotiation.c new file mode 100644 index 0000000000..172d6f8a03 --- /dev/null +++ b/src/trunnel/channelpadding_negotiation.c @@ -0,0 +1,281 @@ +/* channelpadding_negotiation.c -- generated by Trunnel v1.4.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#include <stdlib.h> +#include "trunnel-impl.h" + +#include "channelpadding_negotiation.h" + +#define TRUNNEL_SET_ERROR_CODE(obj) \ + do { \ + (obj)->trunnel_error_code_ = 1; \ + } while (0) + +#if defined(__COVERITY__) || defined(__clang_analyzer__) +/* If we're runnning a static analysis tool, we don't want it to complain + * that some of our remaining-bytes checks are dead-code. */ +int channelpaddingnegotiation_deadcode_dummy__ = 0; +#define OR_DEADCODE_DUMMY || channelpaddingnegotiation_deadcode_dummy__ +#else +#define OR_DEADCODE_DUMMY +#endif + +#define CHECK_REMAINING(nbytes, label) \ + do { \ + if (remaining < (nbytes) OR_DEADCODE_DUMMY) { \ + goto label; \ + } \ + } while (0) + +channelpadding_negotiate_t * +channelpadding_negotiate_new(void) +{ + channelpadding_negotiate_t *val = trunnel_calloc(1, sizeof(channelpadding_negotiate_t)); + if (NULL == val) + return NULL; + val->command = CHANNELPADDING_COMMAND_START; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +channelpadding_negotiate_clear(channelpadding_negotiate_t *obj) +{ + (void) obj; +} + +void +channelpadding_negotiate_free(channelpadding_negotiate_t *obj) +{ + if (obj == NULL) + return; + channelpadding_negotiate_clear(obj); + trunnel_memwipe(obj, sizeof(channelpadding_negotiate_t)); + trunnel_free_(obj); +} + +uint8_t +channelpadding_negotiate_get_version(channelpadding_negotiate_t *inp) +{ + return inp->version; +} +int +channelpadding_negotiate_set_version(channelpadding_negotiate_t *inp, uint8_t val) +{ + if (! ((val == 0))) { + TRUNNEL_SET_ERROR_CODE(inp); + return -1; + } + inp->version = val; + return 0; +} +uint8_t +channelpadding_negotiate_get_command(channelpadding_negotiate_t *inp) +{ + return inp->command; +} +int +channelpadding_negotiate_set_command(channelpadding_negotiate_t *inp, uint8_t val) +{ + if (! ((val == CHANNELPADDING_COMMAND_START || val == CHANNELPADDING_COMMAND_STOP))) { + TRUNNEL_SET_ERROR_CODE(inp); + return -1; + } + inp->command = val; + return 0; +} +uint16_t +channelpadding_negotiate_get_ito_low_ms(channelpadding_negotiate_t *inp) +{ + return inp->ito_low_ms; +} +int +channelpadding_negotiate_set_ito_low_ms(channelpadding_negotiate_t *inp, uint16_t val) +{ + inp->ito_low_ms = val; + return 0; +} +uint16_t +channelpadding_negotiate_get_ito_high_ms(channelpadding_negotiate_t *inp) +{ + return inp->ito_high_ms; +} +int +channelpadding_negotiate_set_ito_high_ms(channelpadding_negotiate_t *inp, uint16_t val) +{ + inp->ito_high_ms = val; + return 0; +} +const char * +channelpadding_negotiate_check(const channelpadding_negotiate_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + if (! (obj->version == 0)) + return "Integer out of bounds"; + if (! (obj->command == CHANNELPADDING_COMMAND_START || obj->command == CHANNELPADDING_COMMAND_STOP)) + return "Integer out of bounds"; + return NULL; +} + +ssize_t +channelpadding_negotiate_encoded_len(const channelpadding_negotiate_t *obj) +{ + ssize_t result = 0; + + if (NULL != channelpadding_negotiate_check(obj)) + return -1; + + + /* Length of u8 version IN [0] */ + result += 1; + + /* Length of u8 command IN [CHANNELPADDING_COMMAND_START, CHANNELPADDING_COMMAND_STOP] */ + result += 1; + + /* Length of u16 ito_low_ms */ + result += 2; + + /* Length of u16 ito_high_ms */ + result += 2; + return result; +} +int +channelpadding_negotiate_clear_errors(channelpadding_negotiate_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +channelpadding_negotiate_encode(uint8_t *output, const size_t avail, const channelpadding_negotiate_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = channelpadding_negotiate_encoded_len(obj); +#endif + + if (NULL != (msg = channelpadding_negotiate_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 version IN [0] */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->version)); + written += 1; ptr += 1; + + /* Encode u8 command IN [CHANNELPADDING_COMMAND_START, CHANNELPADDING_COMMAND_STOP] */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->command)); + written += 1; ptr += 1; + + /* Encode u16 ito_low_ms */ + trunnel_assert(written <= avail); + if (avail - written < 2) + goto truncated; + trunnel_set_uint16(ptr, trunnel_htons(obj->ito_low_ms)); + written += 2; ptr += 2; + + /* Encode u16 ito_high_ms */ + trunnel_assert(written <= avail); + if (avail - written < 2) + goto truncated; + trunnel_set_uint16(ptr, trunnel_htons(obj->ito_high_ms)); + written += 2; ptr += 2; + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As channelpadding_negotiate_parse(), but do not allocate the + * output object. + */ +static ssize_t +channelpadding_negotiate_parse_into(channelpadding_negotiate_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 version IN [0] */ + CHECK_REMAINING(1, truncated); + obj->version = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + if (! (obj->version == 0)) + goto fail; + + /* Parse u8 command IN [CHANNELPADDING_COMMAND_START, CHANNELPADDING_COMMAND_STOP] */ + CHECK_REMAINING(1, truncated); + obj->command = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + if (! (obj->command == CHANNELPADDING_COMMAND_START || obj->command == CHANNELPADDING_COMMAND_STOP)) + goto fail; + + /* Parse u16 ito_low_ms */ + CHECK_REMAINING(2, truncated); + obj->ito_low_ms = trunnel_ntohs(trunnel_get_uint16(ptr)); + remaining -= 2; ptr += 2; + + /* Parse u16 ito_high_ms */ + CHECK_REMAINING(2, truncated); + obj->ito_high_ms = trunnel_ntohs(trunnel_get_uint16(ptr)); + remaining -= 2; ptr += 2; + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; + fail: + result = -1; + return result; +} + +ssize_t +channelpadding_negotiate_parse(channelpadding_negotiate_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = channelpadding_negotiate_new(); + if (NULL == *output) + return -1; + result = channelpadding_negotiate_parse_into(*output, input, len_in); + if (result < 0) { + channelpadding_negotiate_free(*output); + *output = NULL; + } + return result; +} diff --git a/src/trunnel/channelpadding_negotiation.h b/src/trunnel/channelpadding_negotiation.h new file mode 100644 index 0000000000..e58bda3be1 --- /dev/null +++ b/src/trunnel/channelpadding_negotiation.h @@ -0,0 +1,98 @@ +/* channelpadding_negotiation.h -- generated by by Trunnel v1.4.3. + * https://gitweb.torproject.org/trunnel.git + * You probably shouldn't edit this file. + */ +#ifndef TRUNNEL_CHANNELPADDING_NEGOTIATION_H +#define TRUNNEL_CHANNELPADDING_NEGOTIATION_H + +#include <stdint.h> +#include "trunnel.h" + +#define CHANNELPADDING_COMMAND_STOP 1 +#define CHANNELPADDING_COMMAND_START 2 +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_CHANNELPADDING_NEGOTIATE) +struct channelpadding_negotiate_st { + uint8_t version; + uint8_t command; + uint16_t ito_low_ms; + uint16_t ito_high_ms; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct channelpadding_negotiate_st channelpadding_negotiate_t; +/** Return a newly allocated channelpadding_negotiate with all + * elements set to zero. + */ +channelpadding_negotiate_t *channelpadding_negotiate_new(void); +/** Release all storage held by the channelpadding_negotiate in + * 'victim'. (Do nothing if 'victim' is NULL.) + */ +void channelpadding_negotiate_free(channelpadding_negotiate_t *victim); +/** Try to parse a channelpadding_negotiate from the buffer in + * 'input', using up to 'len_in' bytes from the input buffer. On + * success, return the number of bytes consumed and set *output to the + * newly allocated channelpadding_negotiate_t. On failure, return -2 + * if the input appears truncated, and -1 if the input is otherwise + * invalid. + */ +ssize_t channelpadding_negotiate_parse(channelpadding_negotiate_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * channelpadding_negotiate in 'obj'. On failure, return a negative + * value. Note that this value may be an overestimate, and can even be + * an underestimate for certain unencodeable objects. + */ +ssize_t channelpadding_negotiate_encoded_len(const channelpadding_negotiate_t *obj); +/** Try to encode the channelpadding_negotiate from 'input' into the + * buffer at 'output', using up to 'avail' bytes of the output buffer. + * On success, return the number of bytes used. On failure, return -2 + * if the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t channelpadding_negotiate_encode(uint8_t *output, size_t avail, const channelpadding_negotiate_t *input); +/** Check whether the internal state of the channelpadding_negotiate + * in 'obj' is consistent. Return NULL if it is, and a short message + * if it is not. + */ +const char *channelpadding_negotiate_check(const channelpadding_negotiate_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int channelpadding_negotiate_clear_errors(channelpadding_negotiate_t *obj); +/** Return the value of the version field of the + * channelpadding_negotiate_t in 'inp' + */ +uint8_t channelpadding_negotiate_get_version(channelpadding_negotiate_t *inp); +/** Set the value of the version field of the + * channelpadding_negotiate_t in 'inp' to 'val'. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int channelpadding_negotiate_set_version(channelpadding_negotiate_t *inp, uint8_t val); +/** Return the value of the command field of the + * channelpadding_negotiate_t in 'inp' + */ +uint8_t channelpadding_negotiate_get_command(channelpadding_negotiate_t *inp); +/** Set the value of the command field of the + * channelpadding_negotiate_t in 'inp' to 'val'. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int channelpadding_negotiate_set_command(channelpadding_negotiate_t *inp, uint8_t val); +/** Return the value of the ito_low_ms field of the + * channelpadding_negotiate_t in 'inp' + */ +uint16_t channelpadding_negotiate_get_ito_low_ms(channelpadding_negotiate_t *inp); +/** Set the value of the ito_low_ms field of the + * channelpadding_negotiate_t in 'inp' to 'val'. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int channelpadding_negotiate_set_ito_low_ms(channelpadding_negotiate_t *inp, uint16_t val); +/** Return the value of the ito_high_ms field of the + * channelpadding_negotiate_t in 'inp' + */ +uint16_t channelpadding_negotiate_get_ito_high_ms(channelpadding_negotiate_t *inp); +/** Set the value of the ito_high_ms field of the + * channelpadding_negotiate_t in 'inp' to 'val'. Return 0 on success; + * return -1 and set the error code on 'inp' on failure. + */ +int channelpadding_negotiate_set_ito_high_ms(channelpadding_negotiate_t *inp, uint16_t val); + + +#endif diff --git a/src/trunnel/channelpadding_negotiation.trunnel b/src/trunnel/channelpadding_negotiation.trunnel new file mode 100644 index 0000000000..7f2d4795b0 --- /dev/null +++ b/src/trunnel/channelpadding_negotiation.trunnel @@ -0,0 +1,17 @@ +const CHANNELPADDING_COMMAND_STOP = 1; +const CHANNELPADDING_COMMAND_START = 2; + +/* This command tells the relay to alter its min and max netflow + timeout range values, and send padding at that rate (resuming + if stopped). */ +struct channelpadding_negotiate { + u8 version IN [0]; + u8 command IN [CHANNELPADDING_COMMAND_START, CHANNELPADDING_COMMAND_STOP]; + + /* Min must not be lower than the current consensus parameter + nf_ito_low. */ + u16 ito_low_ms; + + /* Max must not be lower than ito_low_ms */ + u16 ito_high_ms; +}; diff --git a/src/trunnel/include.am b/src/trunnel/include.am index 9b26d58615..de6cf4781f 100644 --- a/src/trunnel/include.am +++ b/src/trunnel/include.am @@ -11,7 +11,8 @@ AM_CPPFLAGS += -I$(srcdir)/src/ext/trunnel -I$(srcdir)/src/trunnel TRUNNELINPUTS = \ src/trunnel/ed25519_cert.trunnel \ src/trunnel/link_handshake.trunnel \ - src/trunnel/pwbox.trunnel + src/trunnel/pwbox.trunnel \ + src/trunnel/channelpadding_negotiation.trunnel TRUNNELSOURCES = \ src/ext/trunnel/trunnel.c \ @@ -20,7 +21,8 @@ TRUNNELSOURCES = \ src/trunnel/pwbox.c \ src/trunnel/hs/cell_common.c \ src/trunnel/hs/cell_establish_intro.c \ - src/trunnel/hs/cell_introduce1.c + src/trunnel/hs/cell_introduce1.c \ + src/trunnel/channelpadding_negotiation.c TRUNNELHEADERS = \ src/ext/trunnel/trunnel.h \ @@ -31,7 +33,8 @@ TRUNNELHEADERS = \ src/trunnel/pwbox.h \ src/trunnel/hs/cell_common.h \ src/trunnel/hs/cell_establish_intro.h \ - src/trunnel/hs/cell_introduce1.h + src/trunnel/hs/cell_introduce1.h \ + src/trunnel/channelpadding_negotiation.h src_trunnel_libor_trunnel_a_SOURCES = $(TRUNNELSOURCES) src_trunnel_libor_trunnel_a_CPPFLAGS = -DTRUNNEL_LOCAL_H $(AM_CPPFLAGS) |