aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog190
-rw-r--r--Makefile.am4
-rw-r--r--changes/bug180514
-rw-r--r--changes/bug181163
-rw-r--r--changes/bug181627
-rw-r--r--changes/bug181845
-rw-r--r--changes/bug182085
-rw-r--r--changes/bug182213
-rw-r--r--changes/bug182426
-rw-r--r--changes/bug1825812
-rw-r--r--changes/bug182594
-rw-r--r--changes/bug182616
-rw-r--r--changes/feature178409
-rw-r--r--changes/geoip-february20164
-rw-r--r--changes/ticket177444
-rw-r--r--configure.ac197
-rw-r--r--contrib/win32build/tor-mingw.nsi.in2
-rw-r--r--doc/HACKING/WritingTests.md42
-rw-r--r--doc/tor.1.txt37
-rwxr-xr-xscripts/maint/analyze_callgraph.py50
-rwxr-xr-xscripts/maint/display_callgraph.py2
-rw-r--r--src/common/address.c57
-rw-r--r--src/common/address.h21
-rw-r--r--src/common/aes.c158
-rw-r--r--src/common/aes.h2
-rw-r--r--src/common/container.c36
-rw-r--r--src/common/crypto.c90
-rw-r--r--src/common/crypto.h2
-rw-r--r--src/common/torint.h28
-rw-r--r--src/common/util.h7
-rw-r--r--src/config/geoip2144
-rw-r--r--src/config/geoip6864
-rw-r--r--src/or/circuitbuild.c48
-rw-r--r--src/or/circuitlist.c28
-rw-r--r--src/or/circuituse.c7
-rw-r--r--src/or/config.c30
-rw-r--r--src/or/connection.c78
-rw-r--r--src/or/connection.h6
-rw-r--r--src/or/control.c18
-rw-r--r--src/or/directory.c285
-rw-r--r--src/or/directory.h4
-rw-r--r--src/or/dirserv.c2
-rw-r--r--src/or/entrynodes.c49
-rw-r--r--src/or/main.c64
-rw-r--r--src/or/nodelist.c307
-rw-r--r--src/or/nodelist.h12
-rw-r--r--src/or/or.h29
-rw-r--r--src/or/policies.c696
-rw-r--r--src/or/policies.h54
-rw-r--r--src/or/relay.c9
-rw-r--r--src/or/rendclient.c12
-rw-r--r--src/or/router.c68
-rw-r--r--src/or/routerlist.c332
-rw-r--r--src/or/routerlist.h5
-rw-r--r--src/test/log_test_helpers.h1
-rw-r--r--src/test/test.c4
-rw-r--r--src/test/test_circuitmux.c4
-rw-r--r--src/test/test_dir.c2
-rw-r--r--src/test/test_dns.c2
-rw-r--r--src/test/test_entrynodes.c226
-rw-r--r--src/test/test_options.c124
-rw-r--r--src/test/test_policy.c535
-rw-r--r--src/test/test_rendcache.c4
-rw-r--r--src/test/test_routerlist.c73
-rw-r--r--src/test/test_tortls.c2
-rw-r--r--src/test/testing_common.c5
-rw-r--r--src/win32/orconfig.h5
67 files changed, 5640 insertions, 1495 deletions
diff --git a/ChangeLog b/ChangeLog
index 7d55071e19..6ab821f9b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,77 +1,69 @@
-Changes in version 0.2.8.1-alpha - 2016-02-0?
+Changes in version 0.2.8.1-alpha - 2016-02-04
Tor 0.2.8.1-alpha is the first alpha release in its series. It
includes numerous small features and bugfixes against previous Tor
versions, and numerous small infrastructure improvements. The most
- notable features are a set of improvements to the directory
- subsystem.
-
- o Major key updates:
- - Update the V3 identity key for the dannenberg directory authority:
- it was changed on 18 November 2015. Closes task 17906. Patch by
- "teor".
-
- o Removed features:
- - Remove client-side support for connecting to Tor servers running
- versions of Tor before 0.2.3.6-alpha. These servers didn't support
- the v3 TLS handshake protocol, and are no longer allowed on the
- Tor network. Implements the client side of ticket 11150. Based on
- patches by Tom van der Woerdt.
+ notable features are a set of improvements to the directory subsystem.
o Major features (security, Linux):
- - When Tor starts as root on Linux and is told to switch user ID,
- it can now retain the capability to bind to low ports. By
- default, Tor will do this only when it's switching user ID and
- some low ports have been configured. You can change this behavior
- with the new option KeepBindCapabilities. Closes ticket 8195.
+ - When Tor starts as root on Linux and is told to switch user ID, it
+ can now retain the capability to bind to low ports. By default,
+ Tor will do this only when it's switching user ID and some low
+ ports have been configured. You can change this behavior with the
+ new option KeepBindCapabilities. Closes ticket 8195.
o Major features (directory system):
- - When bootstrapping we not launch multiple consensus downloads
- at a time, use the first one that starts downloading, and close the
- rest. This reduces failures when authorities or fallback directories are slow or down.
- Together with the code for feature 15775, this feature should reduces failures due
- to fallback churn. Implements ticket 4483.
- Patch by "teor". Implements IPv4 portions
- of proposal 210 by "mikeperry" and "teor".
- - Include a trial list of default fallback directories, based
- on an opt-in survey of suitable relays. Doing this should make
- clients bootstrap more quickly and reliably, and reduce the
- load on the directory authorities. Closes ticket 15775. Patch by
- "teor". Candidates identified using an OnionOO script by "weasel", "teor", "gsathya",
- and "karsten".
+ - When bootstrapping multiple consensus downloads at a time, use the
+ first one that starts downloading, and close the rest. This
+ reduces failures when authorities or fallback directories are slow
+ or down. Together with the code for feature 15775, this feature
+ should reduces failures due to fallback churn. Implements ticket
+ 4483. Patch by "teor". Implements IPv4 portions of proposal 210 by
+ "mikeperry" and "teor".
+ - Include a trial list of default fallback directories, based on an
+ opt-in survey of suitable relays. Doing this should make clients
+ bootstrap more quickly and reliably, and reduce the load on the
+ directory authorities. Closes ticket 15775. Patch by "teor".
+ Candidates identified using an OnionOO script by "weasel", "teor",
+ "gsathya", and "karsten".
- Previously only relays that explicitly opened a directory port
(DirPort) accepted directory requests from clients. Now all
- relays, with and without a DirPort,
- accept and serve tunneled directory requests that they
- receive through their ORPort. You can disable this behavior using
- the new DirCache option.
- Closes ticket 12538.
+ relays, with and without a DirPort, accept and serve tunneled
+ directory requests that they receive through their ORPort. You can
+ disable this behavior using the new DirCache option. Closes
+ ticket 12538.
+
+ o Major key updates:
+ - Update the V3 identity key for the dannenberg directory authority:
+ it was changed on 18 November 2015. Closes task 17906. Patch
+ by "teor".
o Minor features (security, clock):
- - Warn when the system clock appears to move back in time (when the state
- file was last written in the future). Tor doesn't know that
+ - Warn when the system clock appears to move back in time (when the
+ state file was last written in the future). Tor doesn't know that
consensuses have expired if the clock is in the past. Patch by
"teor". Implements ticket 17188.
o Minor features (security, exit policies):
- - ExitPolicyRejectPrivate now rejects more private addresses by default.
- Specifically, it now rejects the relay's outbound bind addresses (if
- configured), and the relay's configured port addresses (such as
- ORPort and DirPort). Fixes bug 17027; bugfix on 0.2.0.11-alpha.
- Patch by "teor".
+ - ExitPolicyRejectPrivate now rejects more private addresses by
+ default. Specifically, it now rejects the relay's outbound bind
+ addresses (if configured), and the relay's configured port
+ addresses (such as ORPort and DirPort). Fixes bug 17027; bugfix on
+ 0.2.0.11-alpha. Patch by "teor".
o Minor features (security, memory erasure):
- - Set the unused entires in a smartlist to NULL. This helped catch
+ - Set the unused entries in a smartlist to NULL. This helped catch
a (harmless) bug, and shouldn't affect performance too much.
Implements ticket 17026.
- Use SecureMemoryWipe() function to securely clean memory on
- Windows. Previously we'd use OpenSSL's OPENSSL_cleanse() function. Implements feature 17986.
+ Windows. Previously we'd use OpenSSL's OPENSSL_cleanse() function.
+ Implements feature 17986.
- Use explicit_bzero or memset_s when present. Previously, we'd use
OpenSSL's OPENSSL_cleanse() function. Closes ticket 7419; patches
from <logan@hackers.mu> and <selven@hackers.mu>.
- - Make memwipe() do nothing when passed a NULL pointer or buffer of zero size.
- Check size argument to memwipe() for underflow. Fixes bug 18089;
- bugfix on 0.2.3.25 and 0.2.4.6-alpha. Reported by "gk", patch
- by "teor".
+ - Make memwipe() do nothing when passed a NULL pointer or buffer of
+ zero size. Check size argument to memwipe() for underflow. Fixes
+ bug 18089; bugfix on 0.2.3.25 and 0.2.4.6-alpha. Reported by "gk",
+ patch by "teor".
o Minor features (security, RNG):
- Adjust Tor's use of OpenSSL's RNG APIs so that they absolutely,
@@ -79,17 +71,17 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
internal details of OpenSSL's behavior. Closes ticket 17686.
- Never use the system entropy output directly for anything besides
seeding the PRNG. When we want to generate important keys, instead
- of using system entropy directly, we now hash it with the PRNG stream.
- This may help resist certain attacks based on broken OS entropy
- implementations. Closes part of ticket 17694.
- - Use modern system calls (like getentropy() or getrandom()) to generate strong entropy on platforms
- that have them. Closes ticket 13696.
+ of using system entropy directly, we now hash it with the PRNG
+ stream. This may help resist certain attacks based on broken OS
+ entropy implementations. Closes part of ticket 17694.
+ - Use modern system calls (like getentropy() or getrandom()) to
+ generate strong entropy on platforms that have them. Closes
+ ticket 13696.
o Minor features (accounting):
- - Added two modes to the AccountingRule option: One for limiting only
- the number of bytes sent ("AccountingRule out"), and one for
- limiting only the number of bytes
- received ("AccountingRule in").
+ - Added two modes to the AccountingRule option: One for limiting
+ only the number of bytes sent ("AccountingRule out"), and one for
+ limiting only the number of bytes received ("AccountingRule in").
Closes ticket 15989; patch from "unixninja92".
o Minor features (build):
@@ -106,10 +98,10 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
- New 'GETINFO hs/service/desc/id/' command to retrieve a hidden
service descriptor from a service's local hidden service
descriptor cache. Closes ticket 14846.
- - Add 'GETINFO exit-policy/reject-private/[default,relay]', so
- controllers can examine the
- the reject rules added by ExitPolicyRejectPrivate. This makes
- it easier for stem to display exit policies.
+ - Add 'GETINFO exit-policy/reject-private/[default,relay]', so
+ controllers can examine the the reject rules added by
+ ExitPolicyRejectPrivate. This makes it easier for stem to display
+ exit policies.
o Minor features (crypto):
- Add SHA512 support to crypto.c. Closes ticket 17663; patch from
@@ -124,23 +116,24 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
Fixes bug 17544; bugfix on 0.2.5.3-alpha.
o Minor features (directory downloads):
- - Wait for busy authorities and fallback directories to become non-busy when
- bootstrapping. (A similar change was made in 6c443e987d for
- directory caches chosen from the consensus.) Closes ticket 17864;
- patch by "teor".
+ - Wait for busy authorities and fallback directories to become non-
+ busy when bootstrapping. (A similar change was made in 6c443e987d
+ for directory caches chosen from the consensus.) Closes ticket
+ 17864; patch by "teor".
- Add UseDefaultFallbackDirs, which enables any hard-coded fallback
- directory mirrors. The default is 1; set it to 0 to disable fallbacks.
- Implements ticket 17576. Patch by "teor".
+ directory mirrors. The default is 1; set it to 0 to disable
+ fallbacks. Implements ticket 17576. Patch by "teor".
o Minor features (geoip):
- Update geoip and geoip6 to the January 5 2016 Maxmind GeoLite2
Country database.
o Minor features (IPv6):
- - Add a flag ipv6=address:orport to the DirAuthority and FallbackDir
- torrc options. Add hard-coded ipv6 addresses for directory
- authorities with ipv6 lines in their descriptors. Closes ticket
- 17327; patch from Nick Mathewson / "teor".
+ - Add an argument 'ipv6=address:orport' to the DirAuthority and
+ FallbackDir torrc options, to specify an IPv6 address for an
+ authority or fallback directory. Add hard-coded ipv6 addresses for
+ directory authorities that have them. Closes ticket 17327; patch
+ from Nick Mathewson and "teor".
- Add address policy assume_action support for IPv6 addresses.
- Limit IPv6 mask bits to 128.
- Warn when comparing against an AF_UNSPEC address in a policy, it's
@@ -191,9 +184,9 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
need for CAP_READ_SEARCH when using systemd's
CapabilityBoundingSet, or dac_read_search when using SELinux.
Implements part of ticket 17562. Patch from Jamie Nguyen.
- - Introduce DataDirectoryGroupReadable boolean. If set to 1, the
- DataDirectory will be made readable by the default GID. Implements
- part of ticket 17562. Patch from Jamie Nguyen.
+ - Introduce a new DataDirectoryGroupReadable option. If it is set to
+ 1, the DataDirectory will be made readable by the default GID.
+ Implements part of ticket 17562. Patch from Jamie Nguyen.
o Minor bugfixes (accounting):
- The max bandwidth when using 'AccountRule sum' is now correctly
@@ -212,17 +205,17 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
o Minor bugfixes (compilation):
- Mark all object files that include micro-revision.i as depending
- on it, so as to make our build more reliable with parallel builds.
- Fixes bug 17826; bugfix on 0.2.5.1-alpha.
- - Don't try to use the pthrad_condattr_setclock() function unless it
- actually exists. Fixes compilation on NetBSD-6.x. Fixes bug 17819;
- bugfix on 0.2.6.3-alpha.
+ on it, so as to make parallel builds more reliable. Fixes bug
+ 17826; bugfix on 0.2.5.1-alpha.
+ - Don't try to use the pthread_condattr_setclock() function unless
+ it actually exists. Fixes compilation on NetBSD-6.x. Fixes bug
+ 17819; bugfix on 0.2.6.3-alpha.
- Fix backtrace compilation on FreeBSD. Fixes bug 17827; bugfix
on tor-0.2.5.2-alpha.
- Fix compilation of sandbox.c with musl-libc. Fixes bug 17347;
bugfix on 0.2.5.1-alpha. Patch from 'jamestk'.
- - Fix search for libevent libraries on OpenBSD (and similar systems
- which install libevent 1 and libevent 2 in parallel). Fixes bug
+ - Fix search for libevent libraries on OpenBSD (and other systems
+ that install libevent 1 and libevent 2 in parallel). Fixes bug
16651; bugfix on 0.1.0.7-rc. Patch from "rubiate".
- Isolate environment variables meant for tests from the rest of the
build system. Fixes bug 17818; bugfix on tor-0.2.7.3-rc.
@@ -308,26 +301,26 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
- Move logging of redundant policy entries in
policies_parse_exit_policy_internal into its own function. Closes
ticket 17608; patch from "juce".
- - Extract the more complicated parts of circuit_mark_for_close into
- a new function run periodically before connections are freed. This
- change removes more than half of the functions currently in the
- "blob". Closes ticket 17218.
+ - Extract the more complicated parts of circuit_mark_for_close()
+ into a new function that we run periodically before circuits are
+ freed. This change removes more than half of the functions
+ currently in the "blob". Closes ticket 17218.
- Clean up a little duplicated code in
- crypto_expand_key_material_TAP. Closes ticket 17587; patch
+ crypto_expand_key_material_TAP(). Closes ticket 17587; patch
from "pfrankw".
- - Decouple the list of streams needing to be attached to circuits
+ - Decouple the list of streams waiting to be attached to circuits
from the overall connection list. This change makes it possible to
- attach streams quickly while both simplifying Tor's callgraph and
+ attach streams quickly while simplifying Tor's callgraph and
avoiding O(N) scans of the entire connection list. Closes
ticket 17590.
- When a direct directory request fails immediately on launch,
instead of relaunching that request from inside the code that
launches it, instead mark the connection for teardown. This change
- simplifies Tor's callback and prevents the directory- request
+ simplifies Tor's callback and prevents the directory-request
launching code from invoking itself recursively. Closes
ticket 17589
- - Remove code for OpenSSL dynamic locks; OpenSSL doesn't use them.
- Closes ticket 17926.
+ - Remove code for configuring OpenSSL dynamic locks; OpenSSL doesn't
+ use them. Closes ticket 17926.
o Documentation:
- Add a description of the correct use of the '--keygen' command-
@@ -339,8 +332,15 @@ Changes in version 0.2.8.1-alpha - 2016-02-0?
whenever we mention a document that belongs in torspce. Fixes
issue 17392.
+ o Removed features:
+ - Remove client-side support for connecting to Tor relays running
+ versions of Tor before 0.2.3.6-alpha. These relays didn't support
+ the v3 TLS handshake protocol, and are no longer allowed on the
+ Tor network. Implements the client side of ticket 11150. Based on
+ patches by Tom van der Woerdt.
+
o Testing:
- - Add unit tests that check for common RNG failure modes, such as
+ - Add unit tests to check for common RNG failure modes, such as
returning all zeroes, identical values, or incrementing values
(OpenSSL's rand_predictable feature). Patch by "teor".
- Log more information when the backtrace tests fail. Closes ticket
diff --git a/Makefile.am b/Makefile.am
index fc9f7b27ba..1333f368ad 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -42,7 +42,11 @@ EXTRA_DIST+= \
if COVERAGE_ENABLED
TEST_CFLAGS=-fno-inline -fprofile-arcs -ftest-coverage
+if DISABLE_ASSERTS_IN_UNIT_TESTS
+TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE -DDISABLE_ASSERTS_IN_UNIT_TESTS
+else
TEST_CPPFLAGS=-DTOR_UNIT_TESTS -DTOR_COVERAGE
+endif
TEST_NETWORK_FLAGS=--coverage --hs-multi-client 1
else
TEST_CFLAGS=
diff --git a/changes/bug18051 b/changes/bug18051
new file mode 100644
index 0000000000..1b11867d19
--- /dev/null
+++ b/changes/bug18051
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - When generating a URL for a directory server on an IPv6 address,
+ wrap the IPv6 address in square brackets. Fixes bug 18051;
+ bugfix on ?. Patch from Malek.
diff --git a/changes/bug18116 b/changes/bug18116
new file mode 100644
index 0000000000..23ff8f7775
--- /dev/null
+++ b/changes/bug18116
@@ -0,0 +1,3 @@
+ o Major bugfixes:
+ - Correctly handle detaching circuits from cmuxes when doing
+ circuit_free_all() on shutdown again; fixes bug #18116.
diff --git a/changes/bug18162 b/changes/bug18162
new file mode 100644
index 0000000000..0844d6f62f
--- /dev/null
+++ b/changes/bug18162
@@ -0,0 +1,7 @@
+ o Major bugfixes (security, pointers):
+
+ - Avoid a difficult-to-trigger heap corruption attack when extending
+ a smartlist to contain over 16GB of pointers. Fixes bug #18162;
+ bugfix on Tor 0.1.1.11-alpha, which fixed a related bug
+ incompletely. Reported by Guido Vranken.
+
diff --git a/changes/bug18184 b/changes/bug18184
new file mode 100644
index 0000000000..af493df75f
--- /dev/null
+++ b/changes/bug18184
@@ -0,0 +1,5 @@
+ o Removed platform support:
+ - Tor no longer attempts to support platforms where the "time_t" type
+ is unsigned. (To the best of our knowledge, only OpenVMS does this,
+ and Tor has never actually built on OpenVMS.) Closes ticket 18184.
+
diff --git a/changes/bug18208 b/changes/bug18208
new file mode 100644
index 0000000000..d6d194bb4d
--- /dev/null
+++ b/changes/bug18208
@@ -0,0 +1,5 @@
+ o Minor bug fixes (exit policies, security):
+ - Refresh an exit relay's exit policy when interface addresses change.
+ Previously, tor only refreshed the exit policy when the configured
+ external address changed.
+ Closes ticket 18208 on tor 0.2.7.3. Patch by "teor".
diff --git a/changes/bug18221 b/changes/bug18221
new file mode 100644
index 0000000000..afc240422a
--- /dev/null
+++ b/changes/bug18221
@@ -0,0 +1,3 @@
+ o Minor features (crypto):
+ - Validate the Diffie-Hellman hard coded parameters and ensure that
+ p is a safe prime, and g is suitable. Closes ticket 18221.
diff --git a/changes/bug18242 b/changes/bug18242
new file mode 100644
index 0000000000..e91f6d5eb3
--- /dev/null
+++ b/changes/bug18242
@@ -0,0 +1,6 @@
+ o Minor bugfixes (testing):
+ - We no longer disable assertions in the unit tests when coverage
+ is enabled. Instead, we require you to say --disable-asserts-in-tests
+ to the configure script if you need assertions disabled in the
+ unit tests (for example, if you want to perform branch coverage).
+ Fixes bug 18242; bugfix on 0.2.7.1-alpha.
diff --git a/changes/bug18258 b/changes/bug18258
new file mode 100644
index 0000000000..00e122466f
--- /dev/null
+++ b/changes/bug18258
@@ -0,0 +1,12 @@
+ o Code simplification and refactoring:
+ - Remove specialized code for non-inplace AES_CTR. 99% of our AES
+ is inplace, so there's no need to have a separate implementation
+ for the non-inplace code. Closes ticket 18258. Patch from
+ Malek.
+
+ o New requirements:
+ - Tor no longer supports versions of OpenSSL with a broken
+ implementation of counter mode. (This bug was present in OpenSSL
+ 1.0.0, and was fixed in OpenSSL 1.0.0a.) Tor still detects, but
+ no longer runs with, these versions.
+
diff --git a/changes/bug18259 b/changes/bug18259
new file mode 100644
index 0000000000..1084b8f524
--- /dev/null
+++ b/changes/bug18259
@@ -0,0 +1,4 @@
+ o Code simplification and refactoring:
+ - Simplify return types for some crypto functions that can't
+ actually fail. Patch from Hassan Alsibyani. Closes ticket
+ 18259.
diff --git a/changes/bug18261 b/changes/bug18261
new file mode 100644
index 0000000000..df4c74f337
--- /dev/null
+++ b/changes/bug18261
@@ -0,0 +1,6 @@
+ o Minor features (crypto):
+ - Fix a segfault during startup: If unix socket was configured as
+ listener (such as a ControlSocket or a SocksPort unix socket), and
+ tor was started as root but not configured to switch to another
+ user, tor would segfault while trying to string compare a NULL
+ value. Fixes bug 18261; bugfix on 0.2.8.1-alpha. Patch by weasel.
diff --git a/changes/feature17840 b/changes/feature17840
new file mode 100644
index 0000000000..b8b3b7f5b5
--- /dev/null
+++ b/changes/feature17840
@@ -0,0 +1,9 @@
+ o Minor feature (IPv6):
+ - Add ClientUseIPv4, which is set to 1 by default. If set to 0, tor
+ avoids using IPv4 for client OR and directory connections.
+ - Add ClientPreferIPv6DirPort, which is set to 0 by default. If set
+ to 1, tor prefers IPv6 directory addresses.
+ - Try harder to fulfil IP version restrictions ClientUseIPv4 0 and
+ ClientUseIPv6 0; and the preferences ClientPreferIPv6ORPort and
+ ClientPreferIPv6DirPort.
+ Closes ticket 17840; patch by "teor".
diff --git a/changes/geoip-february2016 b/changes/geoip-february2016
new file mode 100644
index 0000000000..49a8041fad
--- /dev/null
+++ b/changes/geoip-february2016
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Update geoip and geoip6 to the February 2 2016 Maxmind GeoLite2
+ Country database.
+
diff --git a/changes/ticket17744 b/changes/ticket17744
new file mode 100644
index 0000000000..57a4a595c8
--- /dev/null
+++ b/changes/ticket17744
@@ -0,0 +1,4 @@
+ o Code simplification and refactoring:
+ - Quote all the string interpolations in configure.ac -- even
+ those which we are pretty sure can't contain spaces. Closes
+ ticket 17744. Patch from "zerosion". \ No newline at end of file
diff --git a/configure.ac b/configure.ac
index 1a78f41a30..aa757be852 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
dnl Copyright (c) 2007-2015, The Tor Project, Inc.
dnl See LICENSE for licensing information
-AC_INIT([tor],[0.2.8.1-alpha])
+AC_INIT([tor],[0.2.8.1-alpha-dev])
AC_CONFIG_SRCDIR([src/or/main.c])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE
@@ -14,8 +14,8 @@ AC_CANONICAL_HOST
PKG_PROG_PKG_CONFIG
-if test -f /etc/redhat-release ; then
- if test -f /usr/kerberos/include ; then
+if test -f "/etc/redhat-release"; then
+ if test -f "/usr/kerberos/include"; then
CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
fi
fi
@@ -41,11 +41,20 @@ AC_ARG_ENABLE(unittests,
AS_HELP_STRING(--disable-unittests, [don't build unit tests for Tor. Risky!]))
AC_ARG_ENABLE(coverage,
AS_HELP_STRING(--enable-coverage, [enable coverage support in the unit-test build]))
+AC_ARG_ENABLE(asserts-in-tests,
+ AS_HELP_STRING(--disable-asserts-in-tests, [disable tor_assert() calls in the unit tests, for branch coverage]))
AC_ARG_ENABLE(system-torrc,
AS_HELP_STRING(--disable-system-torrc, [don't look for a system-wide torrc file]))
+if test "x$enable_coverage" != "xyes" -a "x$enable_asserts_in_tests" = "xno" ; then
+ AC_MSG_ERROR([Can't disable assertions outside of coverage build])
+fi
+
+AM_CONDITIONAL(UNITTESTS_ENABLED, test "x$enable_unittests" != "xno")
+AM_CONDITIONAL(COVERAGE_ENABLED, test "x$enable_coverage" = "xyes")
AM_CONDITIONAL(UNITTESTS_ENABLED, test x$enable_unittests != xno)
AM_CONDITIONAL(COVERAGE_ENABLED, test x$enable_coverage = xyes)
+AM_CONDITIONAL(DISABLE_ASSERTS_IN_UNIT_TESTS, test "x$enable_asserts_in_tests" = "xno")
if test "$enable_static_tor" = "yes"; then
enable_static_libevent="yes";
@@ -59,8 +68,8 @@ if test "$enable_system_torrc" = "no"; then
[Defined if we're not going to look for a torrc in SYSCONF])
fi
-AM_CONDITIONAL(USE_OPENBSD_MALLOC, test x$enable_openbsd_malloc = xyes)
-if test x$enable_instrument_downloads = xyes; then
+AM_CONDITIONAL(USE_OPENBSD_MALLOC, test "x$enable_openbsd_malloc" = "xyes")
+if test "x$enable_instrument_downloads" = "xyes"; then
AC_DEFINE(INSTRUMENT_DOWNLOADS, 1,
[Defined if we want to keep track of how much of each kind of resource we download.])
fi
@@ -68,16 +77,16 @@ fi
AC_ARG_ENABLE(transparent,
AS_HELP_STRING(--disable-transparent, [disable transparent proxy support]),
[case "${enableval}" in
- yes) transparent=true ;;
- no) transparent=false ;;
+ "yes") transparent=true ;;
+ "no") transparent=false ;;
*) AC_MSG_ERROR(bad value for --enable-transparent) ;;
esac], [transparent=true])
AC_ARG_ENABLE(asciidoc,
AS_HELP_STRING(--disable-asciidoc, [don't use asciidoc (disables building of manpages)]),
[case "${enableval}" in
- yes) asciidoc=true ;;
- no) asciidoc=false ;;
+ "yes") asciidoc=true ;;
+ "no") asciidoc=false ;;
*) AC_MSG_ERROR(bad value for --disable-asciidoc) ;;
esac], [asciidoc=true])
@@ -85,22 +94,22 @@ AC_ARG_ENABLE(asciidoc,
AC_ARG_ENABLE(systemd,
AS_HELP_STRING(--enable-systemd, [enable systemd notification support]),
[case "${enableval}" in
- yes) systemd=true ;;
- no) systemd=false ;;
+ "yes") systemd=true ;;
+ "no") systemd=false ;;
* ) AC_MSG_ERROR(bad value for --enable-systemd) ;;
esac], [systemd=auto])
# systemd support
-if test x$enable_systemd = xno ; then
+if test "x$enable_systemd" = "xno"; then
have_systemd=no;
else
PKG_CHECK_MODULES(SYSTEMD,
[libsystemd-daemon],
have_systemd=yes,
have_systemd=no)
- if test x$have_systemd=xno; then
+ if test "x$have_systemd" = "xno"; then
AC_MSG_NOTICE([Okay, checking for systemd a different way...])
PKG_CHECK_MODULES(SYSTEMD,
[libsystemd],
@@ -109,7 +118,7 @@ else
fi
fi
-if test x$have_systemd = xyes; then
+if test "x$have_systemd" = "xyes"; then
AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
TOR_SYSTEMD_CFLAGS="${SYSTEMD_CFLAGS}"
TOR_SYSTEMD_LIBS="${SYSTEMD_LIBS}"
@@ -119,11 +128,11 @@ fi
AC_SUBST(TOR_SYSTEMD_CFLAGS)
AC_SUBST(TOR_SYSTEMD_LIBS)
-if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
+if test "x$enable_systemd" = "xyes" -a "x$have_systemd" != "xyes" ; then
AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found])
fi
-case $host in
+case "$host" in
*-*-solaris* )
AC_DEFINE(_REENTRANT, 1, [Define on some platforms to activate x_r() functions in time.h])
;;
@@ -156,7 +165,7 @@ fi
# Tor2web mode flag
AC_ARG_ENABLE(tor2web-mode,
AS_HELP_STRING(--enable-tor2web-mode, [support tor2web non-anonymous mode]),
-[if test x$enableval = xyes; then
+[if test "x$enableval" = "xyes"; then
CFLAGS="$CFLAGS -D ENABLE_TOR2WEB_MODE=1"
fi])
@@ -184,10 +193,10 @@ dnl because that will find any cc on the system, not only the cross-compiler,
dnl and then verify that a binary built with this compiler runs on the
dnl build system. It will then come to the false conclusion that we're not
dnl cross-compiling.
-if test x$enable_tool_name_check != xno; then
- if test x$ac_tool_warned = xyes; then
+if test "x$enable_tool_name_check" != "xno"; then
+ if test "x$ac_tool_warned" = "xyes"; then
AC_MSG_ERROR([We are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
- elif test "x$ac_ct_AR" != x -a x$cross_compiling = xmaybe; then
+ elif test "x$ac_ct_AR" != "x" -a "x$cross_compiling" = "xmaybe"; then
AC_MSG_ERROR([We think we are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
fi
fi
@@ -206,11 +215,11 @@ dnl check for asciidoc and a2x
AC_PATH_PROG([ASCIIDOC], [asciidoc], none)
AC_PATH_PROGS([A2X], [a2x a2x.py], none)
-AM_CONDITIONAL(USE_ASCIIDOC, test x$asciidoc = xtrue)
+AM_CONDITIONAL(USE_ASCIIDOC, test "x$asciidoc" = "xtrue")
-AM_CONDITIONAL(USE_FW_HELPER, test x$natpmp = xtrue || test x$upnp = xtrue)
-AM_CONDITIONAL(NAT_PMP, test x$natpmp = xtrue)
-AM_CONDITIONAL(MINIUPNPC, test x$upnp = xtrue)
+AM_CONDITIONAL(USE_FW_HELPER, test "x$natpmp" = "xtrue" || test "x$upnp" = "xtrue")
+AM_CONDITIONAL(NAT_PMP, test "x$natpmp" = "xtrue")
+AM_CONDITIONAL(MINIUPNPC, test "x$upnp" = "xtrue")
AM_PROG_CC_C_O
AC_PROG_CC_C99
@@ -236,7 +245,7 @@ AC_C_FLEXIBLE_ARRAY_MEMBER
]),
[tor_cv_c_flexarray=yes],
[tor_cv_c_flexarray=no])])
- if test $tor_cv_flexarray = yes ; then
+ if test "$tor_cv_flexarray" = "yes"; then
AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
else
AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
@@ -303,7 +312,7 @@ bwin32=false; AC_MSG_RESULT([no]),
bwin32=cross; AC_MSG_RESULT([cross])
)
-if test "$bwin32" = cross; then
+if test "$bwin32" = "cross"; then
AC_MSG_CHECKING([for win32 (cross)])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#ifdef _WIN32
@@ -337,7 +346,7 @@ AH_BOTTOM([
])
-AM_CONDITIONAL(BUILD_NT_SERVICES, test x$bwin32 = xtrue)
+AM_CONDITIONAL(BUILD_NT_SERVICES, test "x$bwin32" = "xtrue")
dnl Enable C99 when compiling with MIPSpro
AC_MSG_CHECKING([for MIPSpro compiler])
@@ -350,7 +359,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [
bmipspro=false; AC_MSG_RESULT(no),
bmipspro=true; AC_MSG_RESULT(yes))
-if test "$bmipspro" = true; then
+if test "$bmipspro" = "true"; then
CFLAGS="$CFLAGS -c99"
fi
@@ -425,13 +434,13 @@ AC_CHECK_FUNCS(
_vscprintf
)
-if test "$bwin32" != true; then
+if test "$bwin32" != "true"; then
AC_CHECK_HEADERS(pthread.h)
AC_CHECK_FUNCS(pthread_create)
AC_CHECK_FUNCS(pthread_condattr_setclock)
fi
-if test "$bwin32" = true; then
+if test "$bwin32" = "true"; then
AC_CHECK_DECLS([SecureZeroMemory, _getwch], , , [
#include <windows.h>
#include <conio.h>
@@ -439,12 +448,13 @@ if test "$bwin32" = true; then
])
fi
-AM_CONDITIONAL(BUILD_READPASSPHRASE_C, test x$ac_cv_func_readpassphrase = xno && test $bwin32 = false)
+AM_CONDITIONAL(BUILD_READPASSPHRASE_C,
+ test "x$ac_cv_func_readpassphrase" = "xno" && test "$bwin32" = "false")
dnl ------------------------------------------------------
dnl Where do you live, libevent? And how do we call you?
-if test "$bwin32" = true; then
+if test "$bwin32" = "true"; then
TOR_LIB_WS32=-lws2_32
TOR_LIB_IPHLPAPI=-liphlpapi
# Some of the cargo-cults recommend -lwsock32 as well, but I don't
@@ -467,7 +477,7 @@ dnl On Gnu/Linux or any place we require it, we'll add librt to the Libevent
dnl linking for static builds.
STATIC_LIBEVENT_FLAGS=""
if test "$enable_static_libevent" = "yes"; then
- if test "$have_rt" = yes; then
+ if test "$have_rt" = "yes"; then
STATIC_LIBEVENT_FLAGS=" -lrt "
fi
fi
@@ -510,7 +520,8 @@ AC_CHECK_HEADERS(event2/event.h event2/dns.h event2/bufferevent_ssl.h)
LIBS="$STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $save_LIBS"
-AM_CONDITIONAL(USE_EXTERNAL_EVDNS, test x$ac_cv_header_event2_dns_h = xyes)
+AM_CONDITIONAL(USE_EXTERNAL_EVDNS,
+ test "x$ac_cv_header_event2_dns_h" = "xyes")
if test "$enable_static_libevent" = "yes"; then
if test "$tor_cv_library_libevent_dir" = "(system)"; then
@@ -540,8 +551,8 @@ CPPFLAGS="$save_CPPFLAGS"
dnl This isn't the best test for Libevent 2.0.3-alpha. Once it's released,
dnl we can do much better.
-if test "$enable_bufferevents" = "yes" ; then
- if test "$ac_cv_header_event2_bufferevent_ssl_h" != "yes" ; then
+if test "$enable_bufferevents" = "yes"; then
+ if test "$ac_cv_header_event2_bufferevent_ssl_h" != "yes"; then
AC_MSG_ERROR([You've asked for bufferevent support, but you're using a version of Libevent without SSL support. This won't work. We need Libevent 2.0.8-rc or later, and you don't seem to even have Libevent 2.0.3-alpha.])
else
@@ -559,7 +570,7 @@ int x = 1;
#endif
])], [event_version_number_works=yes; AC_MSG_RESULT([yes]) ],
[event_version_number_works=no; AC_MSG_RESULT([no])])
- if test "$event_version_number_works" != 'yes'; then
+ if test "$event_version_number_works" != "yes"; then
AC_MSG_WARN([Version detection on Libevent seems broken. Your Libevent installation is probably screwed up or very old.])
else
AC_MSG_CHECKING([whether Libevent is new enough for bufferevents])
@@ -619,7 +630,7 @@ ALT_openssl_WITHVAL=""
AC_ARG_WITH(ssl-dir,
AS_HELP_STRING(--with-ssl-dir=PATH, [obsolete alias for --with-openssl-dir]),
[
- if test "x$withval" != xno && test "x$withval" != "x" ; then
+ if test "x$withval" != "xno" && test "x$withval" != "x"; then
ALT_openssl_WITHVAL="$withval"
fi
])
@@ -746,9 +757,9 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
#error
#endif])], have_clang=yes, have_clang=no)
-if test x$enable_gcc_hardening != xno; then
+if test "x$enable_gcc_hardening" != "xno"; then
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
- if test x$have_clang = xyes; then
+ if test "x$have_clang" = "xyes"; then
TOR_CHECK_CFLAGS(-Qunused-arguments)
fi
TOR_CHECK_CFLAGS(-fstack-protector-all, also_link)
@@ -771,13 +782,13 @@ m4_ifdef([AS_VAR_IF],[
fi
fi
-if test x$enable_expensive_hardening = xyes ; then
+if test "x$enable_expensive_hardening" = "xyes"; then
TOR_CHECK_CFLAGS([-fsanitize=address])
TOR_CHECK_CFLAGS([-fsanitize=undefined])
TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
fi
-if test x$enable_linker_hardening != xno; then
+if test "x$enable_linker_hardening" != "xno"; then
TOR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check")
fi
@@ -791,7 +802,7 @@ saved_CFLAGS="$CFLAGS"
TOR_CHECK_CFLAGS(-fomit-frame-pointer)
F_OMIT_FRAME_POINTER=''
if test "$saved_CFLAGS" != "$CFLAGS"; then
- if test x$enable_expensive_hardening != xyes ; then
+ if test "x$enable_expensive_hardening" != "xyes"; then
F_OMIT_FRAME_POINTER='-fomit-frame-pointer'
fi
fi
@@ -900,10 +911,10 @@ AC_CACHE_CHECK([for nacl compiled with a fast curve25519 implementation],
dnl Okay, now we need to figure out which one to actually use. Fall back
dnl to curve25519-donna.c
- if test x$tor_cv_can_use_curve25519_donna_c64 != xno; then
+ if test "x$tor_cv_can_use_curve25519_donna_c64" != "xno"; then
build_curve25519_donna_c64=yes
use_curve25519_donna=yes
- elif test x$tor_cv_can_use_curve25519_nacl = xyes; then
+ elif test "x$tor_cv_can_use_curve25519_nacl" = "xyes"; then
use_curve25519_nacl=yes
CURVE25519_LIBS=-lnacl
else
@@ -911,16 +922,18 @@ AC_CACHE_CHECK([for nacl compiled with a fast curve25519 implementation],
use_curve25519_donna=yes
fi
-if test x$use_curve25519_donna = xyes; then
+if test "x$use_curve25519_donna" = "xyes"; then
AC_DEFINE(USE_CURVE25519_DONNA, 1,
[Defined if we should use an internal curve25519_donna{,_c64} implementation])
fi
-if test x$use_curve25519_nacl = xyes; then
+if test "x$use_curve25519_nacl" = "xyes"; then
AC_DEFINE(USE_CURVE25519_NACL, 1,
[Defined if we should use a curve25519 from nacl])
fi
-AM_CONDITIONAL(BUILD_CURVE25519_DONNA, test x$build_curve25519_donna = xyes)
-AM_CONDITIONAL(BUILD_CURVE25519_DONNA_C64, test x$build_curve25519_donna_c64 = xyes)
+AM_CONDITIONAL(BUILD_CURVE25519_DONNA,
+ test "x$build_curve25519_donna" = "xyes")
+AM_CONDITIONAL(BUILD_CURVE25519_DONNA_C64,
+ test "x$build_curve25519_donna_c64" = "xyes")
AC_SUBST(CURVE25519_LIBS)
dnl Make sure to enable support for large off_t if available.
@@ -1060,20 +1073,20 @@ AC_CHECK_HEADERS(linux/netfilter_ipv6/ip6_tables.h,
#include <linux/if.h>
#endif])
-if test x$transparent = xtrue ; then
+if test "x$transparent" = "xtrue"; then
transparent_ok=0
- if test x$net_if_found = x1 && test x$net_pfvar_found = x1 ; then
+ if test "x$net_if_found" = "x1" && test "x$net_pfvar_found" = "x1"; then
transparent_ok=1
fi
- if test x$linux_netfilter_ipv4 = x1 ; then
+ if test "x$linux_netfilter_ipv4" = "x1"; then
transparent_ok=1
fi
- if test x$linux_netfilter_ipv6_ip6_tables = x1 ; then
+ if test "x$linux_netfilter_ipv6_ip6_tables" = "x1"; then
transparent_ok=1
fi
- if test x$transparent_ok = x1 ; then
+ if test "x$transparent_ok" = "x1"; then
AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
- case $host in
+ case "$host" in
*-*-openbsd* | *-*-bitrig*)
AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
esac
@@ -1176,7 +1189,7 @@ AC_CHECK_TYPES([rlim_t], , ,
])
AX_CHECK_SIGN([time_t],
- [ AC_DEFINE(TIME_T_IS_SIGNED, 1, [Define if time_t is signed]) ],
+ [ : ],
[ : ], [
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -1189,8 +1202,8 @@ AX_CHECK_SIGN([time_t],
#endif
])
-if test "$ax_cv_decl_time_t_signed" = no; then
- AC_MSG_WARN([You have an unsigned time_t; some things will probably break. Please tell the Tor developers about your interesting platform.])
+if test "$ax_cv_decl_time_t_signed" = "no"; then
+ AC_MSG_ERROR([You have an unsigned time_t; Tor does not support that. Please tell the Tor developers about your interesting platform.])
fi
AX_CHECK_SIGN([size_t],
@@ -1201,7 +1214,7 @@ AX_CHECK_SIGN([size_t],
#endif
])
-if test "$ax_cv_decl_size_t_signed" = yes; then
+if test "$ax_cv_decl_size_t_signed" = "yes"; then
AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
fi
@@ -1236,12 +1249,12 @@ return memcmp(&p1,&p2,sizeof(char*))?1:0; }]])],
[tor_cv_null_is_zero=no],
[tor_cv_null_is_zero=cross])])
-if test "$tor_cv_null_is_zero" = cross ; then
+if test "$tor_cv_null_is_zero" = "cross"; then
# Cross-compiling; let's hope that the target isn't raving mad.
AC_MSG_NOTICE([Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes.])
fi
-if test "$tor_cv_null_is_zero" != no; then
+if test "$tor_cv_null_is_zero" != "no"; then
AC_DEFINE([NULL_REP_IS_ZERO_BYTES], 1,
[Define to 1 iff memset(0) sets pointers to NULL])
fi
@@ -1260,12 +1273,12 @@ return memcmp(&d1,&d2,sizeof(d1))?1:0; }]])],
[tor_cv_dbl0_is_zero=no],
[tor_cv_dbl0_is_zero=cross])])
-if test "$tor_cv_dbl0_is_zero" = cross ; then
+if test "$tor_cv_dbl0_is_zero" = "cross"; then
# Cross-compiling; let's hope that the target isn't raving mad.
AC_MSG_NOTICE([Cross-compiling: we'll assume that 0.0 can be represented as a sequence of 0-valued bytes.])
fi
-if test "$tor_cv_dbl0_is_zero" != no; then
+if test "$tor_cv_dbl0_is_zero" != "no"; then
AC_DEFINE([DOUBLE_0_REP_IS_ZERO_BYTES], 1,
[Define to 1 iff memset(0) sets doubles to 0.0])
fi
@@ -1284,12 +1297,12 @@ int main () { return malloc(0)?0:1; }]])],
[tor_cv_malloc_zero_works=no],
[tor_cv_malloc_zero_works=cross])])
-if test "$tor_cv_malloc_zero_works" = cross; then
+if test "$tor_cv_malloc_zero_works" = "cross"; then
# Cross-compiling; let's hope that the target isn't raving mad.
AC_MSG_NOTICE([Cross-compiling: we'll assume that we need to check malloc() arguments for 0.])
fi
-if test "$tor_cv_malloc_zero_works" = yes; then
+if test "$tor_cv_malloc_zero_works" = "yes"; then
AC_DEFINE([MALLOC_ZERO_WORKS], 1,
[Define to 1 iff malloc(0) returns a pointer])
fi
@@ -1303,14 +1316,15 @@ return problem ? 1 : 0; }]])],
[tor_cv_twos_complement=no],
[tor_cv_twos_complement=cross])])
-if test "$tor_cv_twos_complement" = cross ; then
+if test "$tor_cv_twos_complement" = "cross"; then
# Cross-compiling; let's hope that the target isn't raving mad.
AC_MSG_NOTICE([Cross-compiling: we'll assume that negative integers are represented with two's complement.])
fi
-if test "$tor_cv_twos_complement" != no ; then
+if test "$tor_cv_twos_complement" != "no"; then
AC_DEFINE([USING_TWOS_COMPLEMENT], 1,
- [Define to 1 iff we represent negative integers with two's complement])
+ [Define to 1 iff we represent negative integers with
+ two's complement])
fi
# What does shifting a negative value do?
@@ -1321,12 +1335,12 @@ AC_CACHE_CHECK([whether right-shift on negative values does sign-extension], tor
[tor_cv_sign_extend=no],
[tor_cv_sign_extend=cross])])
-if test "$tor_cv_sign_extend" = cross ; then
+if test "$tor_cv_sign_extend" = "cross"; then
# Cross-compiling; let's hope that the target isn't raving mad.
AC_MSG_NOTICE([Cross-compiling: we'll assume that right-shifting negative integers causes sign-extension])
fi
-if test "$tor_cv_sign_extend" != no ; then
+if test "$tor_cv_sign_extend" != "no"; then
AC_DEFINE([RSHIFT_DOES_SIGN_EXTEND], 1,
[Define to 1 iff right-shifting a negative value performs sign-extension])
fi
@@ -1355,18 +1369,18 @@ AC_ARG_WITH(tcmalloc,
AS_HELP_STRING(--with-tcmalloc, [use tcmalloc memory allocation library]),
[ tcmalloc=yes ], [ tcmalloc=no ])
-if test x$tcmalloc = xyes ; then
+if test "x$tcmalloc" = "xyes"; then
LDFLAGS="-ltcmalloc $LDFLAGS"
fi
using_custom_malloc=no
-if test x$enable_openbsd_malloc = xyes ; then
+if test "x$enable_openbsd_malloc" = "xyes"; then
using_custom_malloc=yes
fi
-if test x$tcmalloc = xyes ; then
+if test "x$tcmalloc" = "xyes"; then
using_custom_malloc=yes
fi
-if test $using_custom_malloc = no ; then
+if test "$using_custom_malloc" = "no"; then
AC_CHECK_FUNCS(mallinfo)
fi
@@ -1483,20 +1497,20 @@ int main(int c, char **v) { char **t = environ; }])],
tor_cv_have_environ_declared=yes,
tor_cv_have_environ_declared=no))
-if test "$tor_cv_have_func_macro" = 'yes'; then
+if test "$tor_cv_have_func_macro" = "yes"; then
AC_DEFINE(HAVE_MACRO__func__, 1, [Defined if the compiler supports __func__])
fi
-if test "$tor_cv_have_FUNC_macro" = 'yes'; then
+if test "$tor_cv_have_FUNC_macro" = "yes"; then
AC_DEFINE(HAVE_MACRO__FUNC__, 1, [Defined if the compiler supports __FUNC__])
fi
-if test "$tor_cv_have_FUNCTION_macro" = 'yes'; then
+if test "$tor_cv_have_FUNCTION_macro" = "yes"; then
AC_DEFINE(HAVE_MACRO__FUNCTION__, 1,
[Defined if the compiler supports __FUNCTION__])
fi
-if test "$tor_cv_have_environ_declared" = 'yes'; then
+if test "$tor_cv_have_environ_declared" = "yes"; then
AC_DEFINE(HAVE_EXTERN_ENVIRON_DECLARED, 1,
[Defined if we have extern char **environ already declared])
fi
@@ -1532,7 +1546,7 @@ AC_SUBST(BINDIR)
LOCALSTATEDIR=`eval echo $localstatedir`
AC_SUBST(LOCALSTATEDIR)
-if test "$bwin32" = true; then
+if test "$bwin32" = "true"; then
# Test if the linker supports the --nxcompat and --dynamicbase options
# for Windows
save_LDFLAGS="$LDFLAGS"
@@ -1548,7 +1562,7 @@ fi
# Set CFLAGS _after_ all the above checks, since our warnings are stricter
# than autoconf's macros like.
-if test "$GCC" = yes; then
+if test "$GCC" = "yes"; then
# Disable GCC's strict aliasing checks. They are an hours-to-debug
# accident waiting to happen.
CFLAGS="$CFLAGS -Wall -fno-strict-aliasing"
@@ -1571,7 +1585,8 @@ esac
# Add some more warnings which we use in development but not in the
# released versions. (Some relevant gcc versions can't handle these.)
-if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xyes; then
+if test "x$enable_gcc_warnings" = "xyes" ||
+ test "x$enable_gcc_warnings_advisory" = "xyes"; then
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
#if !defined(__GNUC__) || (__GNUC__ < 4)
@@ -1600,7 +1615,7 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
have_shorten64_flag=no)
CFLAGS="$save_CFLAGS"
- case $host in
+ case "$host" in
*-*-openbsd* | *-*-bitrig*)
# Some OpenBSD versions (like 4.8) have -Wsystem-headers by default.
# That's fine, except that the headers don't pass -Wredundant-decls.
@@ -1615,18 +1630,18 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
CFLAGS="$CFLAGS -Wwrite-strings -Wmissing-declarations -Wredundant-decls"
CFLAGS="$CFLAGS -Wnested-externs -Wbad-function-cast -Wswitch-enum"
- if test x$enable_gcc_warnings = xyes; then
+ if test "x$enable_gcc_warnings" = "xyes"; then
CFLAGS="$CFLAGS -Werror"
fi
# Disabled, so we can use mallinfo(): -Waggregate-return
- if test x$have_gcc4 = xyes ; then
+ if test "x$have_gcc4" = "xyes"; then
# These warnings break gcc 3.3.5 and work on gcc 4.0.2
CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wold-style-definition"
fi
- if test x$have_gcc42 = xyes ; then
+ if test "x$have_gcc42" = "xyes"; then
# These warnings break gcc 4.0.2 and work on gcc 4.2
# XXXX020 See if any of these work with earlier versions.
CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wstrict-overflow=1"
@@ -1634,24 +1649,24 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
# We used to use -Wstrict-overflow=5, but that breaks us heavily under 4.3.
fi
- if test x$have_gcc42 = xyes && test x$have_clang = xno; then
+ if test "x$have_gcc42" = "xyes" && test "x$have_clang" = "xno"; then
# These warnings break gcc 4.0.2 and clang, but work on gcc 4.2
CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init"
fi
- if test x$have_gcc43 = xyes ; then
+ if test "x$have_gcc43" = "xyes"; then
# These warnings break gcc 4.2 and work on gcc 4.3
# XXXX020 See if any of these work with earlier versions.
CFLAGS="$CFLAGS -Wextra -Warray-bounds"
fi
- if test x$have_gcc46 = xyes ; then
+ if test "x$have_gcc46" = "xyes"; then
# This warning was added in gcc 4.3, but it appears to generate
# spurious warnings in gcc 4.4. I don't know if it works in 4.5.
CFLAGS="$CFLAGS -Wlogical-op"
fi
- if test x$have_shorten64_flag = xyes ; then
+ if test "x$have_shorten64_flag" = "xyes"; then
CFLAGS="$CFLAGS -Wshorten-64-to-32"
fi
@@ -1661,7 +1676,7 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
# CFLAGS="$CFLAGS -Winline"
fi
-if test "$enable_coverage" = yes && test "$have_clang" = "no"; then
+if test "$enable_coverage" = "yes" && test "$have_clang" = "no"; then
case "$host_os" in
darwin*)
AC_MSG_WARN([Tried to enable coverage on OSX without using the clang compiler. This might not work! If coverage fails, use CC=clang when configuring with --enable-profiling.])
@@ -1684,7 +1699,7 @@ AC_CONFIG_FILES([
scripts/maint/updateVersions.pl
])
-if test x$asciidoc = xtrue && test "$ASCIIDOC" = "none" ; then
+if test "x$asciidoc" = "xtrue" && test "$ASCIIDOC" = "none"; then
regular_mans="doc/tor doc/tor-gencert doc/tor-resolve doc/torify"
for file in $regular_mans ; do
if ! [[ -f "$srcdir/$file.1.in" ]] || ! [[ -f "$srcdir/$file.html.in" ]] ; then
diff --git a/contrib/win32build/tor-mingw.nsi.in b/contrib/win32build/tor-mingw.nsi.in
index d5866aadec..9a4de0ab08 100644
--- a/contrib/win32build/tor-mingw.nsi.in
+++ b/contrib/win32build/tor-mingw.nsi.in
@@ -8,7 +8,7 @@
!include "LogicLib.nsh"
!include "FileFunc.nsh"
!insertmacro GetParameters
-!define VERSION "0.2.8.1-alpha"
+!define VERSION "0.2.8.1-alpha-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"
diff --git a/doc/HACKING/WritingTests.md b/doc/HACKING/WritingTests.md
index 42fba2d71a..4e98d3d645 100644
--- a/doc/HACKING/WritingTests.md
+++ b/doc/HACKING/WritingTests.md
@@ -206,6 +206,48 @@ For example, `crypto_curve25519.h` contains:
The `crypto_curve25519.c` file and the `test_crypto.c` file both define
`CRYPTO_CURVE25519_PRIVATE`, so they can see this declaration.
+### STOP! Does this test really test?
+
+When writing tests, it's not enough to just generate coverage on all the
+lines of the code that you're testing: It's important to make sure that
+the test _really tests_ the code.
+
+For example, here is a _bad_ test for the unlink() function (which is
+supposed to remove a file).
+
+ static void
+ test_unlink_badly(void *arg)
+ {
+ (void) arg;
+ int r;
+
+ const char *fname = get_fname("tmpfile");
+
+ /* If the file isn't there, unlink returns -1 and sets ENOENT */
+ r = unlink(fname);
+ tt_int_op(n, OP_EQ, -1);
+ tt_int_op(errno, OP_EQ, ENOENT);
+
+ /* If the file DOES exist, unlink returns 0. */
+ write_str_to_file(fname, "hello world", 0);
+ r = unlink(fnme);
+ tt_int_op(r, OP_EQ, 0);
+
+ done:
+ tor_free(contents);
+ }
+
+
+This test might get very high coverage on unlink(). So why is it a
+bad test? Because it doesn't check that unlink() *actually removes the
+named file*!
+
+Remember, the purpose of a test is to succeed if the code does what
+it's supposed to do, and fail otherwise. Try to design your tests so
+that they check for the code's intended and documented functionality
+as much as possible.
+
+
### Mock functions for testing in isolation
Often we want to test that a function works right, but the function to
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index d08366aa55..250ed67a04 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -390,6 +390,7 @@ GENERAL OPTIONS
authorities.
By default, the directory authorities are also FallbackDirs. Specifying a
FallbackDir replaces Tor's default hard-coded FallbackDirs (if any).
+ (See the **DirAuthority** entry for an explanation of each flag.)
[[UseDefaultFallbackDirs]] **UseDefaultFallbackDirs** **0**|**1**::
Use Tor's default hard-coded FallbackDirs (if any). (When a
@@ -414,6 +415,10 @@ GENERAL OPTIONS
authority is listening for IPv6 connections on the indicated IPv6 address
and OR Port. +
+
+ Tor will contact the authority at __address__:__port__ (the DirPort) to
+ download directory documents. If an IPv6 address is supplied, Tor will
+ also download directory documents at the IPv6 address on the DirPort. +
+ +
If no **DirAuthority** line is given, Tor will use the default directory
authorities. NOTE: this option is intended for setting up a private Tor
network with its own directory authorities. If you use it, you will be
@@ -1506,17 +1511,33 @@ The following options are useful only for clients (that is, if
If no defaults are available there, these options default to 20, .80,
.60, and 100, respectively.
+[[ClientUseIPv4]] **ClientUseIPv4** **0**|**1**::
+ If this option is set to 0, Tor will avoid connecting to directory servers
+ and entry nodes over IPv4. Note that clients with an IPv4
+ address in a **Bridge**, proxy, or pluggable transport line will try
+ connecting over IPv4 even if **ClientUseIPv4** is set to 0. (Default: 1)
+
[[ClientUseIPv6]] **ClientUseIPv6** **0**|**1**::
- If this option is set to 1, Tor might connect to entry nodes over
- IPv6. Note that clients configured with an IPv6 address in a
- **Bridge** line will try connecting over IPv6 even if
- **ClientUseIPv6** is set to 0. (Default: 0)
+ If this option is set to 1, Tor might connect to directory servers or
+ entry nodes over IPv6. Note that clients configured with an IPv6 address
+ in a **Bridge**, proxy, or pluggable transport line will try connecting
+ over IPv6 even if **ClientUseIPv6** is set to 0. (Default: 0)
+
+[[ClientPreferIPv6DirPort]] **ClientPreferIPv6DirPort** **0**|**1**|**auto**::
+ If this option is set to 1, Tor prefers a directory port with an IPv6
+ address over one with IPv4, for direct connections, if a given directory
+ server has both. (Tor also prefers an IPv6 DirPort if IPv4Client is set to
+ 0.) If this option is set to auto, clients prefer IPv4. Other things may
+ influence the choice. This option breaks a tie to the favor of IPv6.
+ (Default: auto)
-[[ClientPreferIPv6ORPort]] **ClientPreferIPv6ORPort** **0**|**1**::
+[[ClientPreferIPv6ORPort]] **ClientPreferIPv6ORPort** **0**|**1**|**auto**::
If this option is set to 1, Tor prefers an OR port with an IPv6
- address over one with IPv4 if a given entry node has both. Other
- things may influence the choice. This option breaks a tie to the
- favor of IPv6. (Default: 0)
+ address over one with IPv4 if a given entry node has both. (Tor also
+ prefers an IPv6 ORPort if IPv4Client is set to 0.) If this option is set
+ to auto, Tor bridge clients prefer the configured bridge address, and
+ other clients prefer IPv4. Other things may influence the choice. This
+ option breaks a tie to the favor of IPv6. (Default: auto)
[[PathsNeededToBuildCircuits]] **PathsNeededToBuildCircuits** __NUM__::
Tor clients don't build circuits for user traffic until they know
diff --git a/scripts/maint/analyze_callgraph.py b/scripts/maint/analyze_callgraph.py
index b28460489a..8ce5827f07 100755
--- a/scripts/maint/analyze_callgraph.py
+++ b/scripts/maint/analyze_callgraph.py
@@ -9,19 +9,28 @@ import os
class Parser:
def __init__(self):
self.calls = {}
+ self.definedIn = {}
def enter_func(self, name):
- if self.infunc and not self.extern:
+ if self.infunc and not self.extern and self.calledfns:
+ if self.infunc in self.definedIn:
+ #print "{}: {} or {}?".format(
+ # self.infunc, self.definedIn[self.infunc], self.module)
+ self.definedIn[self.infunc] = 'nil'
+ else:
+ self.definedIn[self.infunc] = self.module
self.calls.setdefault(self.infunc, set()).update( self.calledfns )
self.calledfns = set()
self.infunc = name
self.extern = False
- def parse_callgraph_file(self, inp):
+ def parse_callgraph_file(self, inp, module):
self.infunc = None
self.extern = False
self.calledfns = set()
+ self.module = module
+
for line in inp:
m = re.match(r"Call graph node for function: '([^']+)'", line)
if m:
@@ -189,13 +198,27 @@ def connection_bottlenecks(callgraph):
if __name__ == '__main__':
p = Parser()
for fname in sys.argv[1:]:
+ modname = re.sub(r'.*/', '', fname).replace('.callgraph', '.c')
with open(fname, 'r') as f:
- p.parse_callgraph_file(f)
+ p.parse_callgraph_file(f, modname)
- sys.stdout.flush
+ sys.stdout.flush()
print "Building callgraph"
callgraph = p.extract_callgraph()
+ inModule = p.definedIn
+
+ print "Deriving module callgraph"
+ modCallgraph = {}
+ for fn in callgraph:
+ fnMod = inModule[fn]
+ for called in callgraph[fn]:
+ try:
+ calledMod = inModule[called]
+ except KeyError:
+ continue
+ modCallgraph.setdefault(fnMod, set()).add(calledMod)
+ del modCallgraph['nil']
print "Finding strongly connected components"
sccs = strongly_connected_components(callgraph)
@@ -206,11 +229,28 @@ if __name__ == '__main__':
print "Finding bottlenecks..."
bottlenecks = connection_bottlenecks(callgraph)
+ print "Finding module SCCs"
+ modSCCS = strongly_connected_components(modCallgraph)
+
+ print "Finding module TC"
+ modTC = transitive_closure(modCallgraph)
+
+ print "Finding module bottlenecks"
+ modB = connection_bottlenecks(modCallgraph)
+
data = {
'callgraph' : callgraph,
'sccs' : sccs,
'closure' : closure,
- 'bottlenecks' : bottlenecks }
+ 'bottlenecks' : bottlenecks,
+ 'modules' : p.definedIn,
+ 'modItems' : {
+ 'callgraph' : modCallgraph,
+ 'sccs' : modSCCS,
+ 'closure' : modTC,
+ 'bottlenecks' : modB,
+ }
+ }
with open('callgraph.pkl', 'w') as f:
cPickle.dump(data, f)
diff --git a/scripts/maint/display_callgraph.py b/scripts/maint/display_callgraph.py
index 211bfda28d..c9001c6d96 100755
--- a/scripts/maint/display_callgraph.py
+++ b/scripts/maint/display_callgraph.py
@@ -4,6 +4,8 @@ import cPickle
data = cPickle.load(open("callgraph.pkl"))
+# data = data['modItems']
+
callgraph = data['callgraph']
closure = data['closure']
sccs = data['sccs']
diff --git a/src/common/address.c b/src/common/address.c
index 86c32efdd9..b41d75e509 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -148,7 +148,9 @@ tor_addr_make_af_unix(tor_addr_t *a)
}
/** Set the tor_addr_t in <b>a</b> to contain the socket address contained in
- * <b>sa</b>. Return 0 on success and -1 on failure. */
+ * <b>sa</b>. IF <b>port_out</b> is non-NULL and <b>sa</b> contains a port,
+ * set *<b>port_out</b> to that port. Return 0 on success and -1 on
+ * failure. */
int
tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa,
uint16_t *port_out)
@@ -908,6 +910,59 @@ tor_addr_is_loopback(const tor_addr_t *addr)
}
}
+/* Is addr valid?
+ * Checks that addr is non-NULL and not tor_addr_is_null().
+ * If for_listening is true, IPv4 addr 0.0.0.0 is allowed.
+ * It means "bind to all addresses on the local machine". */
+int
+tor_addr_is_valid(const tor_addr_t *addr, int for_listening)
+{
+ /* NULL addresses are invalid regardless of for_listening */
+ if (addr == NULL) {
+ return 0;
+ }
+
+ /* Only allow IPv4 0.0.0.0 for_listening. */
+ if (for_listening && addr->family == AF_INET
+ && tor_addr_to_ipv4h(addr) == 0) {
+ return 1;
+ }
+
+ /* Otherwise, the address is valid if it's not tor_addr_is_null() */
+ return !tor_addr_is_null(addr);
+}
+
+/* Is the network-order IPv4 address v4n_addr valid?
+ * Checks that addr is not zero.
+ * Except if for_listening is true, where IPv4 addr 0.0.0.0 is allowed. */
+int
+tor_addr_is_valid_ipv4n(uint32_t v4n_addr, int for_listening)
+{
+ /* Any IPv4 address is valid with for_listening. */
+ if (for_listening) {
+ return 1;
+ }
+
+ /* Otherwise, zero addresses are invalid. */
+ return v4n_addr != 0;
+}
+
+/* Is port valid?
+ * Checks that port is not 0.
+ * Except if for_listening is true, where port 0 is allowed.
+ * It means "OS chooses a port". */
+int
+tor_port_is_valid(uint16_t port, int for_listening)
+{
+ /* Any port value is valid with for_listening. */
+ if (for_listening) {
+ return 1;
+ }
+
+ /* Otherwise, zero ports are invalid. */
+ return port != 0;
+}
+
/** Set <b>dest</b> to equal the IPv4 address in <b>v4addr</b> (given in
* network order). */
void
diff --git a/src/common/address.h b/src/common/address.h
index 76090136d8..558eb52b35 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -267,6 +267,27 @@ void tor_addr_from_in6(tor_addr_t *dest, const struct in6_addr *in6);
int tor_addr_is_null(const tor_addr_t *addr);
int tor_addr_is_loopback(const tor_addr_t *addr);
+int tor_addr_is_valid(const tor_addr_t *addr, int for_listening);
+int tor_addr_is_valid_ipv4n(uint32_t v4n_addr, int for_listening);
+#define tor_addr_is_valid_ipv4h(v4h_addr, for_listening) \
+ tor_addr_is_valid_ipv4n(htonl(v4h_addr), (for_listening))
+int tor_port_is_valid(uint16_t port, int for_listening);
+/* Are addr and port both valid? */
+#define tor_addr_port_is_valid(addr, port, for_listening) \
+ (tor_addr_is_valid((addr), (for_listening)) && \
+ tor_port_is_valid((port), (for_listening)))
+/* Are ap->addr and ap->port both valid? */
+#define tor_addr_port_is_valid_ap(ap, for_listening) \
+ tor_addr_port_is_valid(&(ap)->addr, (ap)->port, (for_listening))
+/* Are the network-order v4addr and port both valid? */
+#define tor_addr_port_is_valid_ipv4n(v4n_addr, port, for_listening) \
+ (tor_addr_is_valid_ipv4n((v4n_addr), (for_listening)) && \
+ tor_port_is_valid((port), (for_listening)))
+/* Are the host-order v4addr and port both valid? */
+#define tor_addr_port_is_valid_ipv4h(v4h_addr, port, for_listening) \
+ (tor_addr_is_valid_ipv4h((v4h_addr), (for_listening)) && \
+ tor_port_is_valid((port), (for_listening)))
+
int tor_addr_port_split(int severity, const char *addrport,
char **address_out, uint16_t *port_out);
diff --git a/src/common/aes.c b/src/common/aes.c
index 89c99c150a..fd2043372e 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -101,18 +101,6 @@ aes_cipher_free(aes_cnt_cipher_t *cipher_)
EVP_CIPHER_CTX_free(cipher);
}
void
-aes_crypt(aes_cnt_cipher_t *cipher_, const char *input, size_t len,
- char *output)
-{
- int outl;
- EVP_CIPHER_CTX *cipher = (EVP_CIPHER_CTX *) cipher_;
-
- tor_assert(len < INT_MAX);
-
- EVP_EncryptUpdate(cipher, (unsigned char*)output,
- &outl, (const unsigned char *)input, (int)len);
-}
-void
aes_crypt_inplace(aes_cnt_cipher_t *cipher_, char *data, size_t len)
{
int outl;
@@ -181,10 +169,6 @@ struct aes_cnt_cipher {
* we're testing it or because we have hardware acceleration configured */
static int should_use_EVP = 0;
-/** True iff we have tested the counter-mode implementation and found that it
- * doesn't have the counter-mode bug from OpenSSL 1.0.0. */
-static int should_use_openssl_CTR = 0;
-
/** Check whether we should use the EVP interface for AES. If <b>force_val</b>
* is nonnegative, we use use EVP iff it is true. Otherwise, we use EVP
* if there is an engine enabled for aes-ecb. */
@@ -249,13 +233,9 @@ evaluate_ctr_for_aes(void)
if (fast_memneq(output, encrypt_zero, 16)) {
/* Counter mode is buggy */
- log_notice(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; "
- "not using it.");
- } else {
- /* Counter mode is okay */
- log_info(LD_CRYPTO, "This OpenSSL has a good implementation of counter "
- "mode; using it.");
- should_use_openssl_CTR = 1;
+ log_err(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; "
+ "quitting tor.");
+ exit(1);
}
return 0;
}
@@ -266,29 +246,6 @@ evaluate_ctr_for_aes(void)
#define COUNTER(c, n) ((c)->counter ## n)
#endif
-/**
- * Helper function: set <b>cipher</b>'s internal buffer to the encrypted
- * value of the current counter.
- */
-static inline void
-aes_fill_buf_(aes_cnt_cipher_t *cipher)
-{
- /* We don't currently use OpenSSL's counter mode implementation because:
- * 1) some versions have known bugs
- * 2) its attitude towards IVs is not our own
- * 3) changing the counter position was not trivial, last time I looked.
- * None of these issues are insurmountable in principle.
- */
-
- if (cipher->using_evp) {
- int outl=16, inl=16;
- EVP_EncryptUpdate(&cipher->key.evp, cipher->buf, &outl,
- cipher->ctr_buf.buf, inl);
- } else {
- AES_encrypt(cipher->ctr_buf.buf, cipher->buf, &cipher->key.aes);
- }
-}
-
static void aes_set_key(aes_cnt_cipher_t *cipher, const char *key,
int key_bits);
static void aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv);
@@ -341,10 +298,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
cipher->pos = 0;
- if (should_use_openssl_CTR)
- memset(cipher->buf, 0, sizeof(cipher->buf));
- else
- aes_fill_buf_(cipher);
+ memset(cipher->buf, 0, sizeof(cipher->buf));
}
/** Release storage held by <b>cipher</b>
@@ -380,63 +334,6 @@ evp_block128_fn(const uint8_t in[16],
EVP_EncryptUpdate(ctx, out, &outl, in, inl);
}
-/** Encrypt <b>len</b> bytes from <b>input</b>, storing the result in
- * <b>output</b>. Uses the key in <b>cipher</b>, and advances the counter
- * by <b>len</b> bytes as it encrypts.
- */
-void
-aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
- char *output)
-{
- if (should_use_openssl_CTR) {
- if (cipher->using_evp) {
- /* In openssl 1.0.0, there's an if'd out EVP_aes_128_ctr in evp.h. If
- * it weren't disabled, it might be better just to use that.
- */
- CRYPTO_ctr128_encrypt((const unsigned char *)input,
- (unsigned char *)output,
- len,
- &cipher->key.evp,
- cipher->ctr_buf.buf,
- cipher->buf,
- &cipher->pos,
- evp_block128_fn);
- } else {
- AES_ctr128_encrypt((const unsigned char *)input,
- (unsigned char *)output,
- len,
- &cipher->key.aes,
- cipher->ctr_buf.buf,
- cipher->buf,
- &cipher->pos);
- }
- return;
- } else {
- int c = cipher->pos;
- if (PREDICT_UNLIKELY(!len)) return;
-
- while (1) {
- do {
- if (len-- == 0) { cipher->pos = c; return; }
- *(output++) = *(input++) ^ cipher->buf[c];
- } while (++c != 16);
- cipher->pos = c = 0;
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 0))) {
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 1))) {
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 2))) {
- ++COUNTER(cipher, 3);
- UPDATE_CTR_BUF(cipher, 3);
- }
- UPDATE_CTR_BUF(cipher, 2);
- }
- UPDATE_CTR_BUF(cipher, 1);
- }
- UPDATE_CTR_BUF(cipher, 0);
- aes_fill_buf_(cipher);
- }
- }
-}
-
/** Encrypt <b>len</b> bytes from <b>input</b>, storing the results in place.
* Uses the key in <b>cipher</b>, and advances the counter by <b>len</b> bytes
* as it encrypts.
@@ -444,32 +341,26 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
void
aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
{
- if (should_use_openssl_CTR) {
- aes_crypt(cipher, data, len, data);
- return;
+ if (cipher->using_evp) {
+ /* In openssl 1.0.0, there's an if'd out EVP_aes_128_ctr in evp.h. If
+ * it weren't disabled, it might be better just to use that.
+ */
+ CRYPTO_ctr128_encrypt((const unsigned char *)data,
+ (unsigned char *)data,
+ len,
+ &cipher->key.evp,
+ cipher->ctr_buf.buf,
+ cipher->buf,
+ &cipher->pos,
+ evp_block128_fn);
} else {
- int c = cipher->pos;
- if (PREDICT_UNLIKELY(!len)) return;
-
- while (1) {
- do {
- if (len-- == 0) { cipher->pos = c; return; }
- *(data++) ^= cipher->buf[c];
- } while (++c != 16);
- cipher->pos = c = 0;
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 0))) {
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 1))) {
- if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 2))) {
- ++COUNTER(cipher, 3);
- UPDATE_CTR_BUF(cipher, 3);
- }
- UPDATE_CTR_BUF(cipher, 2);
- }
- UPDATE_CTR_BUF(cipher, 1);
- }
- UPDATE_CTR_BUF(cipher, 0);
- aes_fill_buf_(cipher);
- }
+ AES_ctr128_encrypt((const unsigned char *)data,
+ (unsigned char *)data,
+ len,
+ &cipher->key.aes,
+ cipher->ctr_buf.buf,
+ cipher->buf,
+ &cipher->pos);
}
}
@@ -486,9 +377,6 @@ aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv)
#endif
cipher->pos = 0;
memcpy(cipher->ctr_buf.buf, iv, 16);
-
- if (!should_use_openssl_CTR)
- aes_fill_buf_(cipher);
}
#endif
diff --git a/src/common/aes.h b/src/common/aes.h
index 5500db7d0c..bd0456511b 100644
--- a/src/common/aes.h
+++ b/src/common/aes.h
@@ -17,8 +17,6 @@ typedef struct aes_cnt_cipher aes_cnt_cipher_t;
aes_cnt_cipher_t* aes_new_cipher(const char *key, const char *iv);
void aes_cipher_free(aes_cnt_cipher_t *cipher);
-void aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
- char *output);
void aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len);
int evaluate_evp_for_aes(int force_value);
diff --git a/src/common/container.c b/src/common/container.c
index 9f40dfa2e0..2e42c9ee07 100644
--- a/src/common/container.c
+++ b/src/common/container.c
@@ -59,25 +59,26 @@ smartlist_clear(smartlist_t *sl)
sl->num_used = 0;
}
+#if SIZE_MAX < INT_MAX
+#error "We don't support systems where size_t is smaller than int."
+#endif
+
/** Make sure that <b>sl</b> can hold at least <b>size</b> entries. */
static inline void
-smartlist_ensure_capacity(smartlist_t *sl, int size)
+smartlist_ensure_capacity(smartlist_t *sl, size_t size)
{
-#if SIZEOF_SIZE_T > SIZEOF_INT
+ /* Set MAX_CAPACITY to MIN(INT_MAX, SIZE_MAX / sizeof(void*)) */
+#if (SIZE_MAX/SIZEOF_VOID_P) > INT_MAX
#define MAX_CAPACITY (INT_MAX)
#else
#define MAX_CAPACITY (int)((SIZE_MAX / (sizeof(void*))))
-#define ASSERT_CAPACITY
#endif
- if (size > sl->capacity) {
- int higher = sl->capacity;
+
+ tor_assert(size <= MAX_CAPACITY);
+
+ if (size > (size_t) sl->capacity) {
+ size_t higher = (size_t) sl->capacity;
if (PREDICT_UNLIKELY(size > MAX_CAPACITY/2)) {
-#ifdef ASSERT_CAPACITY
- /* We don't include this assertion when MAX_CAPACITY == INT_MAX,
- * since int size; (size <= INT_MAX) makes analysis tools think we're
- * doing something stupid. */
- tor_assert(size <= MAX_CAPACITY);
-#endif
higher = MAX_CAPACITY;
} else {
while (size > higher)
@@ -87,7 +88,7 @@ smartlist_ensure_capacity(smartlist_t *sl, int size)
((size_t)higher));
memset(sl->list + sl->capacity, 0,
sizeof(void *) * (higher - sl->capacity));
- sl->capacity = higher;
+ sl->capacity = (int) higher;
}
#undef ASSERT_CAPACITY
#undef MAX_CAPACITY
@@ -97,7 +98,7 @@ smartlist_ensure_capacity(smartlist_t *sl, int size)
void
smartlist_add(smartlist_t *sl, void *element)
{
- smartlist_ensure_capacity(sl, sl->num_used+1);
+ smartlist_ensure_capacity(sl, ((size_t) sl->num_used)+1);
sl->list[sl->num_used++] = element;
}
@@ -105,11 +106,12 @@ smartlist_add(smartlist_t *sl, void *element)
void
smartlist_add_all(smartlist_t *s1, const smartlist_t *s2)
{
- int new_size = s1->num_used + s2->num_used;
- tor_assert(new_size >= s1->num_used); /* check for overflow. */
+ size_t new_size = (size_t)s1->num_used + (size_t)s2->num_used;
+ tor_assert(new_size >= (size_t) s1->num_used); /* check for overflow. */
smartlist_ensure_capacity(s1, new_size);
memcpy(s1->list + s1->num_used, s2->list, s2->num_used*sizeof(void*));
- s1->num_used = new_size;
+ tor_assert(new_size <= INT_MAX); /* redundant. */
+ s1->num_used = (int) new_size;
}
/** Remove all elements E from sl such that E==element. Preserve
@@ -385,7 +387,7 @@ smartlist_insert(smartlist_t *sl, int idx, void *val)
if (idx == sl->num_used) {
smartlist_add(sl, val);
} else {
- smartlist_ensure_capacity(sl, sl->num_used+1);
+ smartlist_ensure_capacity(sl, ((size_t) sl->num_used)+1);
/* Move other elements away */
if (idx < sl->num_used)
memmove(sl->list + idx + 1, sl->list + idx,
diff --git a/src/common/crypto.c b/src/common/crypto.c
index bc659b1935..06446ba050 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1509,7 +1509,8 @@ crypto_cipher_encrypt(crypto_cipher_t *env, char *to,
tor_assert(to);
tor_assert(fromlen < SIZE_T_CEILING);
- aes_crypt(env->cipher, from, fromlen, to);
+ memcpy(to, from, fromlen);
+ aes_crypt_inplace(env->cipher, to, fromlen);
return 0;
}
@@ -1526,19 +1527,19 @@ crypto_cipher_decrypt(crypto_cipher_t *env, char *to,
tor_assert(to);
tor_assert(fromlen < SIZE_T_CEILING);
- aes_crypt(env->cipher, from, fromlen, to);
+ memcpy(to, from, fromlen);
+ aes_crypt_inplace(env->cipher, to, fromlen);
return 0;
}
/** Encrypt <b>len</b> bytes on <b>from</b> using the cipher in <b>env</b>;
- * on success, return 0. Does not check for failure.
+ * on success. Does not check for failure.
*/
-int
+void
crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *buf, size_t len)
{
tor_assert(len < SIZE_T_CEILING);
aes_crypt_inplace(env->cipher, buf, len);
- return 0;
}
/** Encrypt <b>fromlen</b> bytes (at least 1) from <b>from</b> with the key in
@@ -2088,6 +2089,71 @@ static BIGNUM *dh_param_p_tls = NULL;
/** Shared G parameter for our DH key exchanges. */
static BIGNUM *dh_param_g = NULL;
+/** Validate a given set of Diffie-Hellman parameters. This is moderately
+ * computationally expensive (milliseconds), so should only be called when
+ * the DH parameters change. Returns 0 on success, * -1 on failure.
+ */
+static int
+crypto_validate_dh_params(const BIGNUM *p, const BIGNUM *g)
+{
+ DH *dh = NULL;
+ int ret = -1;
+
+ /* Copy into a temporary DH object. */
+ if (!(dh = DH_new()))
+ goto out;
+ if (!(dh->p = BN_dup(p)))
+ goto out;
+ if (!(dh->g = BN_dup(g)))
+ goto out;
+
+ /* Perform the validation. */
+ int codes = 0;
+ if (!DH_check(dh, &codes))
+ goto out;
+ if (BN_is_word(dh->g, DH_GENERATOR_2)) {
+ /* Per https://wiki.openssl.org/index.php/Diffie-Hellman_parameters
+ *
+ * OpenSSL checks the prime is congruent to 11 when g = 2; while the
+ * IETF's primes are congruent to 23 when g = 2.
+ */
+ BN_ULONG residue = BN_mod_word(dh->p, 24);
+ if (residue == 11 || residue == 23)
+ codes &= ~DH_NOT_SUITABLE_GENERATOR;
+ }
+ if (codes != 0) /* Specifics on why the params suck is irrelevant. */
+ goto out;
+
+ /* Things are probably not evil. */
+ ret = 0;
+
+ out:
+ if (dh)
+ DH_free(dh);
+ return ret;
+}
+
+/** Set the global Diffie-Hellman generator, used for both TLS and internal
+ * DH stuff.
+ */
+static void
+crypto_set_dh_generator(void)
+{
+ BIGNUM *generator;
+ int r;
+
+ if (dh_param_g)
+ return;
+
+ generator = BN_new();
+ tor_assert(generator);
+
+ r = BN_set_word(generator, DH_GENERATOR);
+ tor_assert(r);
+
+ dh_param_g = generator;
+}
+
/** Set the global TLS Diffie-Hellman modulus. Use the Apache mod_ssl DH
* modulus. */
void
@@ -2120,6 +2186,8 @@ crypto_set_tls_dh_prime(void)
tor_assert(tls_prime);
dh_param_p_tls = tls_prime;
+ crypto_set_dh_generator();
+ tor_assert(0 == crypto_validate_dh_params(dh_param_p_tls, dh_param_g));
}
/** Initialize dh_param_p and dh_param_g if they are not already
@@ -2127,18 +2195,13 @@ crypto_set_tls_dh_prime(void)
static void
init_dh_param(void)
{
- BIGNUM *circuit_dh_prime, *generator;
+ BIGNUM *circuit_dh_prime;
int r;
if (dh_param_p && dh_param_g)
return;
circuit_dh_prime = BN_new();
- generator = BN_new();
- tor_assert(circuit_dh_prime && generator);
-
- /* Set our generator for all DH parameters */
- r = BN_set_word(generator, DH_GENERATOR);
- tor_assert(r);
+ tor_assert(circuit_dh_prime);
/* This is from rfc2409, section 6.2. It's a safe prime, and
supposedly it equals:
@@ -2154,7 +2217,8 @@ init_dh_param(void)
/* Set the new values as the global DH parameters. */
dh_param_p = circuit_dh_prime;
- dh_param_g = generator;
+ crypto_set_dh_generator();
+ tor_assert(0 == crypto_validate_dh_params(dh_param_p, dh_param_g));
if (!dh_param_p_tls) {
crypto_set_tls_dh_prime();
diff --git a/src/common/crypto.h b/src/common/crypto.h
index fa2ed610c7..74b88bcd4a 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -205,7 +205,7 @@ int crypto_cipher_encrypt(crypto_cipher_t *env, char *to,
const char *from, size_t fromlen);
int crypto_cipher_decrypt(crypto_cipher_t *env, char *to,
const char *from, size_t fromlen);
-int crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *d, size_t len);
+void crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *d, size_t len);
int crypto_cipher_encrypt_with_iv(const char *key,
char *to, size_t tolen,
diff --git a/src/common/torint.h b/src/common/torint.h
index 418fe0fabf..480ba1a596 100644
--- a/src/common/torint.h
+++ b/src/common/torint.h
@@ -312,8 +312,6 @@ typedef uint32_t uintptr_t;
#ifndef TIME_MAX
-#ifdef TIME_T_IS_SIGNED
-
#if (SIZEOF_TIME_T == SIZEOF_INT)
#define TIME_MAX ((time_t)INT_MAX)
#elif (SIZEOF_TIME_T == SIZEOF_LONG)
@@ -321,25 +319,13 @@ typedef uint32_t uintptr_t;
#elif (SIZEOF_TIME_T == 8)
#define TIME_MAX ((time_t)INT64_MAX)
#else
-#error "Can't define (signed) TIME_MAX"
+#error "Can't define TIME_MAX"
#endif
-#else
-/* Unsigned case */
-#if (SIZEOF_TIME_T == 4)
-#define TIME_MAX ((time_t)UINT32_MAX)
-#elif (SIZEOF_TIME_T == 8)
-#define TIME_MAX ((time_t)UINT64_MAX)
-#else
-#error "Can't define (unsigned) TIME_MAX"
-#endif
-#endif /* time_t_is_signed */
#endif /* ifndef(TIME_MAX) */
#ifndef TIME_MIN
-#ifdef TIME_T_IS_SIGNED
-
#if (SIZEOF_TIME_T == SIZEOF_INT)
#define TIME_MIN ((time_t)INT_MIN)
#elif (SIZEOF_TIME_T == SIZEOF_LONG)
@@ -347,19 +333,9 @@ typedef uint32_t uintptr_t;
#elif (SIZEOF_TIME_T == 8)
#define TIME_MIN ((time_t)INT64_MIN)
#else
-#error "Can't define (signed) TIME_MIN"
+#error "Can't define TIME_MIN"
#endif
-#else
-/* Unsigned case */
-#if (SIZEOF_TIME_T == 4)
-#define TIME_MIN ((time_t)UINT32_MIN)
-#elif (SIZEOF_TIME_T == 8)
-#define TIME_MIN ((time_t)UINT64_MIN)
-#else
-#error "Can't define (unsigned) TIME_MIN"
-#endif
-#endif /* time_t_is_signed */
#endif /* ifndef(TIME_MIN) */
#ifndef SIZE_MAX
diff --git a/src/common/util.h b/src/common/util.h
index 165bc0dcb3..d05ffa7d10 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -45,9 +45,10 @@
#error "Sorry; we don't support building with NDEBUG."
#endif
-/* Don't use assertions during coverage. It leads to tons of unreached
- * branches which in reality are only assertions we didn't hit. */
-#ifdef TOR_COVERAGE
+/* Sometimes we don't want to use assertions during branch coverage tests; it
+ * leads to tons of unreached branches which in reality are only assertions we
+ * didn't hit. */
+#if defined(TOR_UNIT_TESTS) && defined(DISABLE_ASSERTS_IN_UNIT_TESTS)
#define tor_assert(a) STMT_BEGIN \
(void)(a); \
STMT_END
diff --git a/src/config/geoip b/src/config/geoip
index 16f1ada2c9..41070eddc5 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on January 5 2016 Maxmind GeoLite2 Country
+# Last updated based on February 2 2016 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
@@ -221,7 +221,9 @@
84471808,84473855,IQ
84475904,84498681,DE
84498682,84498682,NL
-84498683,84545535,DE
+84498683,84517997,DE
+84517998,84517998,NL
+84517999,84545535,DE
84545536,84549631,GB
84549632,84551679,GE
84551680,84557823,DE
@@ -265,6 +267,7 @@
85387264,85389311,SE
85389312,85391359,DE
85391360,85393407,NL
+85394432,85394439,IT
85395456,85395711,TR
85395968,85396223,BE
85396480,85397503,ES
@@ -723,15 +726,18 @@
87969792,87972863,IM
87972864,87973375,GI
87973376,87973887,IM
-87973888,87982079,DE
+87973888,87981567,DE
+87981568,87982079,TR
87982080,87988479,RU
87988480,87988735,US
87988736,87988863,LV
-87988864,87989247,RU
+87988864,87988991,LT
+87988992,87989247,RU
87989248,87989503,US
87989504,87989759,FR
87989760,87990015,US
-87990016,88014847,RU
+87990016,87990271,DE
+87990272,88014847,RU
88014848,88016895,LY
88016896,88018943,IR
88018944,88020991,GB
@@ -845,6 +851,7 @@
90718208,90718719,DE
90718720,90719231,FR
90719232,90719487,AT
+90719488,90719999,SE
90720000,90720255,GB
90720256,90722303,IQ
90722304,90724351,FI
@@ -864,7 +871,9 @@
90757120,90759167,AT
90759168,90761215,NL
90761216,90763263,KZ
-90763264,90764287,IL
+90763264,90763519,IL
+90763520,90763775,US
+90763776,90764287,IL
90764288,90764799,US
90764800,90765311,IL
90765312,90767359,PL
@@ -1835,7 +1844,9 @@
100532224,100548863,RO
100548864,100548875,TR
100548876,100548876,RO
-100548877,100549119,TR
+100548877,100549038,TR
+100549039,100549039,RO
+100549040,100549119,TR
100549120,100559255,RO
100559256,100559263,EG
100559264,100559551,RO
@@ -2026,6 +2037,12 @@
234952704,234953727,CN
234953728,234954751,SG
234954752,234971135,NZ
+234971136,234972159,CN
+234972160,234973183,BD
+234973184,234974207,PK
+234974208,234975231,CN
+234975232,234976255,SG
+234976256,234979327,IN
234979328,235012095,MY
235012096,235077631,AU
235077632,235143167,JP
@@ -2045,6 +2062,14 @@
241602560,241604607,MY
241604608,241605631,ID
241605632,241606655,CN
+241606656,241607679,IN
+241607680,241608703,JP
+241608704,241609727,PH
+241609728,241610751,PK
+241610752,241611775,JP
+241611776,241612799,CN
+241612800,241613823,HK
+241613824,241614847,IN
241614848,241623039,JP
241623040,241627135,IN
241627136,241631231,HK
@@ -2067,13 +2092,19 @@
243990528,244318207,IN
244318208,245366783,CN
245366784,247463935,VN
+247463936,247464959,IN
+247464960,247465983,CN
+247465984,247467007,HK
+247467008,247469055,IN
+247469056,247470079,HK
+247470080,247472127,IN
247472128,247476223,JP
247479296,247480319,CN
247480320,247482367,MY
247482368,247483391,PG
247483392,247484415,CN
247484416,247488511,KR
-247488512,247496703,JP
+247488512,247496703,HK
247496704,247504895,PK
247504896,247508991,AU
247508992,247513087,US
@@ -2149,7 +2180,8 @@
288227328,289652735,US
289652736,289653759,NL
289653760,289654271,DE
-289654272,289655807,US
+289654272,289654783,US
+289654784,289655807,CZ
289655808,289656831,DE
289656832,289657855,BE
289657856,289658879,AE
@@ -2165,7 +2197,8 @@
289794048,289795071,US
289795072,289796095,GB
289796096,289798143,TR
-289798144,289948927,US
+289798144,289800191,SA
+289800192,289948927,US
289948928,289949055,AT
289949056,289949183,US
289949184,289949695,RU
@@ -2231,7 +2264,16 @@
290377728,290379775,GB
290379776,290423807,US
290423808,290424831,SE
-290424832,344195839,US
+290424832,300646399,US
+300646400,300650495,JP
+300650496,300654591,SG
+300654592,300658687,US
+300658688,300662783,AU
+300662784,300666879,GB
+300666880,300670975,NL
+300670976,300675071,IE
+300675072,300679167,IL
+300679168,344195839,US
344195840,344196095,CA
344196096,344260607,US
344260608,344260863,GB
@@ -2870,7 +2912,9 @@
400912128,400912383,SG
400912384,401114367,US
401114368,401114623,DE
-401114624,401125119,US
+401114624,401115903,US
+401115904,401116159,GB
+401116160,401125119,US
401125120,401125375,DE
401125376,401129727,US
401129728,401129983,FR
@@ -2889,7 +2933,7 @@
401144576,401144831,MA
401144832,401145087,OM
401145088,401145343,CO
-401145344,401145599,SC
+401145344,401145599,GB
401145600,401145855,YE
401145856,401211391,CA
401211392,401232375,US
@@ -2916,7 +2960,9 @@
402098176,402098431,BN
402098432,402098687,BH
402098688,402098943,AW
-402098944,402105087,US
+402098944,402099711,US
+402099712,402099967,GB
+402099968,402105087,US
402105088,402105343,GB
402105344,402107391,US
402107392,402107647,IT
@@ -3148,6 +3194,9 @@
452997120,453001215,IN
453001216,453009407,AU
453009408,453017599,BD
+453017600,453019647,CN
+453019648,453023743,IN
+453023744,453024767,TW
453050368,453115903,KR
453115904,453246975,VN
453246976,453509119,IN
@@ -3157,7 +3206,11 @@
455215360,455215615,RU
455215616,455245823,NP
455245824,455258111,JP
-455258112,455262207,SG
+455258112,455258623,SG
+455258624,455258688,KH
+455258689,455260672,SG
+455260673,455260736,KH
+455260737,455262207,SG
455262208,455270399,JP
455270400,455272447,AU
455272448,455274495,CN
@@ -3321,8 +3374,8 @@
460983296,460984319,HK
460984320,460988415,PG
460988416,460994559,JP
-460994560,460995327,MY
-460995328,460995583,SG
+460994560,460995071,MY
+460995072,460995583,SG
460995584,460996607,IN
460996608,461008895,JP
461008896,461012991,AU
@@ -3337,7 +3390,9 @@
461058048,461062143,HK
461062144,461078527,IN
461078528,461094911,FJ
-461094912,461096959,HK
+461094912,461095423,HK
+461095424,461095935,SG
+461095936,461096959,HK
461096960,461099007,TW
461099008,461100031,JP
461100032,461101055,MN
@@ -3430,7 +3485,25 @@
520339456,520343551,UA
520343552,520355839,GB
520355840,520421375,ES
-520421376,520486911,BE
+520421376,520422222,BE
+520422223,520422223,RO
+520422224,520423935,BE
+520423936,520424191,RO
+520424192,520425983,BE
+520425984,520426239,RO
+520426240,520427007,BE
+520427008,520427263,RO
+520427264,520428799,BE
+520428800,520429055,RO
+520429056,520429567,BE
+520429568,520429823,RO
+520429824,520431103,BE
+520431104,520431359,RO
+520431360,520432895,BE
+520432896,520433151,RO
+520433152,520433663,BE
+520433664,520433919,RO
+520433920,520486911,BE
520486912,520488959,NL
520488960,520489983,IT
520489984,520490495,RU
@@ -3536,7 +3609,7 @@
520978432,520980479,RU
520980480,520982527,IT
520982528,520984575,RU
-520984576,520986623,NG
+520984576,520986623,GB
520986624,520988671,PS
520988672,520990719,DE
520990720,520992767,RU
@@ -3612,8 +3685,7 @@
521563136,521564159,NL
521564160,521565183,GR
521565184,521565439,GB
-521565440,521565695,US
-521565696,521566207,GR
+521565440,521566207,GR
521566208,521568255,LU
521568256,521601023,PT
521601024,521666559,RU
@@ -3649,7 +3721,9 @@
521717760,521718783,IQ
521718784,521719807,IR
521719808,521721855,UA
-521721856,521725951,GB
+521721856,521724159,GB
+521724160,521724415,AU
+521724416,521725951,GB
521725952,521727999,IR
521728000,521732095,FR
521732096,521736191,GB
@@ -3746,7 +3820,9 @@
522840064,522842111,PL
522842112,522846207,RU
522846208,522854399,PL
-522854400,522858495,RU
+522854400,522858438,RU
+522858439,522858439,MD
+522858440,522858495,RU
522858496,522866687,UA
522866688,522870783,LV
522870784,522874879,RU
@@ -4272,7 +4348,9 @@
533858752,533858815,AT
533858816,533858895,TR
533858896,533858903,AT
-533858904,533859647,TR
+533858904,533859071,TR
+533859072,533859087,AT
+533859088,533859647,TR
533859648,533859663,AT
533859664,533860351,TR
533862400,533864447,GB
@@ -4574,7 +4652,9 @@
621330432,621346815,PL
621346816,621355007,RU
621355008,621357055,UA
-621357056,621361151,RU
+621357056,621358079,RU
+621358080,621358591,US
+621358592,621361151,RU
621361152,621363199,GB
621363200,621381631,RU
621381632,621383679,FR
@@ -4688,7 +4768,9 @@
622518272,622518527,GB
622518528,622519281,NL
622519282,622519282,GB
-622519283,622520319,NL
+622519283,622519351,NL
+622519352,622519359,FR
+622519360,622520319,NL
622520320,622522367,RU
622522368,622524415,FR
622524416,622526463,ES
@@ -5412,7 +5494,7 @@
630999680,631001087,RO
631001088,631005183,MD
631005184,631006207,IT
-631006208,631007231,MD
+631006208,631007231,IR
631007232,631007487,KR
631007488,631007743,RO
631007744,631007871,GB
@@ -5436,7 +5518,8 @@
631036160,631036415,RO
631036416,631036543,GB
631036544,631039999,RO
-631040000,631043071,MD
+631040000,631042047,IR
+631042048,631043071,MD
631043072,631043839,RO
631043840,631045119,MD
631045120,631046143,RO
@@ -5659,7 +5742,9 @@
635856896,635858943,TR
635858944,635860991,RU
635860992,635863039,BE
-635863040,635893503,RU
+635863040,635864831,RU
+635864832,635865087,NL
+635865088,635893503,RU
635893504,635893759,AZ
635893760,635894527,RU
635894528,635894783,KZ
@@ -5996,7 +6081,9 @@
645225472,645225727,CA
645225728,645229311,US
645229312,645229823,CA
-645229824,645483263,US
+645229824,645481405,US
+645481406,645481406,CA
+645481407,645483263,US
645483264,645483519,CA
645483520,645484543,US
645484544,645485055,CA
@@ -7148,10 +7235,13 @@
736432128,736433151,CN
736433152,736434175,ID
736434176,736435199,IN
+736435200,736436223,HK
736436224,736437247,JP
+736437248,736438271,HK
736438272,736439295,CN
736439296,736440319,TH
736440320,736441343,CN
+736441344,736442367,HK
736442368,736443391,CN
736443392,736445439,AU
736446464,736447487,IN
@@ -7187,7 +7277,11 @@
736494592,736495103,ID
736495104,736495359,NR
736495360,736495615,ID
-736495616,736498687,HK
+736495616,736495871,HK
+736495872,736496127,KR
+736496128,736496383,JP
+736496384,736496639,PH
+736496640,736498687,HK
736498688,736499711,CN
736499712,736500479,SG
736500480,736500735,TH
@@ -7300,7 +7394,8 @@
737142784,737143039,HK
737143040,737143807,MY
737143808,737146879,IN
-737146880,737147903,NZ
+737146880,737147519,US
+737147520,737147903,NZ
737147904,737148927,MY
737148928,737149951,CN
737149952,737151999,IN
@@ -7362,7 +7457,7 @@
737257472,737262591,CN
737262592,737263615,AU
737263616,737264639,IN
-737264640,737265663,CN
+737264640,737265663,HK
737265664,737266687,AU
737266688,737267711,HK
737267712,737276927,CN
@@ -7406,7 +7501,9 @@
737351680,737352703,CN
737352704,737354751,HK
737354752,737355775,IN
-737355776,737359871,HK
+737355776,737356287,HK
+737356288,737356799,GB
+737356800,737359871,HK
737359872,737361919,NZ
737361920,737364991,HK
737364992,737368063,IN
@@ -7726,7 +7823,6 @@
737918976,737919999,CN
737920000,737921023,HK
737921024,737922047,AU
-737922048,737923071,KR
737923072,737924095,MY
737924096,737927167,IN
737927168,737929215,HK
@@ -7888,11 +7984,15 @@
755105792,755179519,CA
755179520,755236863,US
756023296,757071871,US
-757071872,757088255,NL
+757071872,757073919,NL
+757073920,757073920,JP
+757073921,757088255,NL
757088256,757090303,US
757090304,757104639,NL
757104640,757106687,US
-757106688,757121535,NL
+757106688,757118796,NL
+757118797,757118797,GB
+757118798,757121535,NL
757121536,757121791,US
757121792,757122047,NL
757122048,757122303,US
@@ -8318,7 +8418,8 @@
762397696,762398719,HK
762398720,762399743,CN
762399744,762400767,IN
-762400768,762401791,HK
+762400768,762401023,HK
+762401024,762401791,US
762401792,762402815,TH
762402816,762403839,IN
762403840,762404863,AU
@@ -8326,12 +8427,11 @@
762407936,762408959,CN
762408960,762409983,HK
762409984,762411007,JP
-762411008,762411263,IN
-762411264,762411519,HK
-762411520,762412031,IN
+762411008,762411519,HK
+762411520,762411775,IN
+762411776,762412031,HK
762412032,762413055,PK
762413056,762414079,HK
-762414080,762415103,JP
762415104,762416127,IN
762416128,762417151,HK
762417152,762419199,CN
@@ -8373,10 +8473,11 @@
762470400,762471423,CN
762471424,762472447,MY
762472448,762473471,CN
-762473472,762475519,JP
+762474496,762475519,JP
762475520,762475775,AU
762475776,762476031,SG
-762476032,762476543,ID
+762476032,762476287,ID
+762476288,762476543,SG
762476544,762478591,PK
762478592,762479615,KR
762479616,762480639,PK
@@ -8647,7 +8748,7 @@
762900480,762901503,CN
762901504,762902527,ID
762902528,762909695,IN
-762909696,762910719,CN
+762909696,762910719,HK
762910720,762911743,VN
762911744,762912767,IN
762912768,762913791,HK
@@ -8913,7 +9014,11 @@
772286720,772286975,LB
772286976,772296703,RU
772296704,772300799,UA
-772300800,772341759,RU
+772300800,772339967,RU
+772339968,772340223,NL
+772340224,772341247,RU
+772341248,772341503,US
+772341504,772341759,RU
772341760,772407295,NO
772407296,772472831,BG
772472832,772538367,MT
@@ -9110,7 +9215,7 @@
773211136,773211391,FR
773211392,773211647,US
773211648,773211903,NL
-773211904,773212159,US
+773211904,773212159,SG
773212160,773212671,NL
773212672,773213183,GB
773213184,773214207,US
@@ -9288,7 +9393,9 @@
773935353,773935353,US
773935354,773935728,FR
773935729,773935729,GB
-773935730,773937663,FR
+773935730,773936145,FR
+773936146,773936146,US
+773936147,773937663,FR
773937664,773937664,DE
773937665,773937673,FR
773937674,773937674,IE
@@ -9559,8 +9666,8 @@
778304306,778304306,SI
778304307,778305535,AL
778305536,778371071,IR
-778371072,778399743,GB
-778399744,778436607,DE
+778371072,778395647,GB
+778395648,778436607,DE
778436608,778461183,RO
778461184,778461439,TR
778461440,778462207,EE
@@ -9595,7 +9702,9 @@
778567680,778633215,TR
778633216,778640127,FR
778640128,778640383,GB
-778640384,778666259,FR
+778640384,778657399,FR
+778657400,778657403,PT
+778657404,778666259,FR
778666260,778666263,ES
778666264,778666479,FR
778666480,778666495,DE
@@ -10284,6 +10393,7 @@
787192064,787192319,FR
787192384,787192447,DE
787192576,787192831,SE
+787192832,787193087,AE
787193088,787193343,FI
787193344,787193599,DE
787193856,787195903,RU
@@ -10539,7 +10649,9 @@
794558464,796917759,CN
796917760,797873663,CA
797873664,797873919,US
-797873920,805306367,CA
+797873920,802160639,CA
+802160640,803209215,US
+803209216,805306367,CA
805306368,822083583,US
822083584,822084607,ID
822084608,822085631,BD
@@ -10610,7 +10722,8 @@
831519744,831520767,IN
831520768,832045055,PH
832045056,832307199,CN
-832307200,832311295,JP
+832307200,832308223,PK
+832308224,832311295,JP
832311296,832312319,AU
832312320,832313343,ID
832313344,832315391,AU
@@ -10673,7 +10786,9 @@
839112192,839112447,CA
839112448,839340031,US
839340032,839341055,ES
-839341056,839342079,US
+839341056,839341311,US
+839341312,839341567,DE
+839341568,839342079,US
839342080,839343103,DE
839343104,839344127,NL
839344128,839348223,US
@@ -10756,7 +10871,9 @@
872288872,872288875,DE
872288876,872290111,FR
872290112,872290143,ES
-872290144,872300031,FR
+872290144,872291151,FR
+872291152,872291167,FI
+872291168,872300031,FR
872300032,872300063,ES
872300064,872300649,FR
872300650,872300650,PT
@@ -10791,7 +10908,9 @@
872364864,872364927,NL
872364928,872374608,FR
872374609,872374618,ES
-872374619,872377297,FR
+872374619,872375295,FR
+872375296,872375423,NL
+872375424,872377297,FR
872377298,872377299,ES
872377300,872380607,FR
872380608,872380671,ES
@@ -10799,7 +10918,9 @@
872384096,872384127,ES
872384128,872388415,FR
872388416,872388447,ES
-872388448,872415231,FR
+872388448,872403606,FR
+872403607,872403607,PT
+872403608,872415231,FR
872415232,873463807,US
873463808,873646466,IE
873646467,873646467,US
@@ -10835,13 +10956,16 @@
878460928,878461951,BR
878461952,878462975,DE
878462976,878463999,BR
-878464000,878576895,US
+878464000,878512127,US
+878512128,878513151,SG
+878513152,878576895,US
878576896,878577151,IE
-878577152,878577663,KR
-878577664,878577919,BR
-878577920,878578175,JP
-878578176,878578687,US
-878578688,878578943,SG
+878577152,878577407,KR
+878577408,878577663,BR
+878577664,878577919,JP
+878577920,878578431,US
+878578432,878578687,SG
+878578688,878578943,US
878578944,878579199,AU
878579200,878648831,US
878648832,878649343,JP
@@ -11372,6 +11496,12 @@
999817216,999821311,BD
999821312,999827455,CN
999827456,999828479,IN
+999828480,999828735,HK
+999828736,999828991,PH
+999828992,999829503,MY
+999829504,999830527,HK
+999830528,999832575,IN
+999832576,999833599,BD
999833600,999837695,CN
999837696,999838719,IN
999839744,999845887,BD
@@ -12195,6 +12325,10 @@
1047658496,1047724031,EG
1047728128,1047732223,SE
1047740544,1047740671,DE
+1047758911,1047758911,CZ
+1047759119,1047759119,AT
+1047759125,1047759125,AT
+1047759834,1047759834,CZ
1047781856,1047781871,DE
1047782690,1047782690,GB
1047787520,1047787775,ES
@@ -12299,7 +12433,11 @@
1049378816,1049395199,EG
1049395200,1049411583,NL
1049411584,1049419775,GB
-1049419776,1049427967,RU
+1049419776,1049423615,RU
+1049423616,1049423856,UA
+1049423857,1049423857,RU
+1049423858,1049423871,UA
+1049423872,1049427967,RU
1049427968,1049436159,CZ
1049436160,1049444351,DE
1049444352,1049460735,RU
@@ -13771,7 +13909,9 @@
1086042112,1086046207,CA
1086046208,1086050815,US
1086050816,1086051327,CA
-1086051328,1086421503,US
+1086051328,1086267391,US
+1086267392,1086271487,CA
+1086271488,1086421503,US
1086421504,1086422015,MP
1086422016,1086922751,US
1086922752,1086930943,CA
@@ -13835,7 +13975,9 @@
1087726016,1087726047,FR
1087726048,1087735743,US
1087735744,1087735807,CA
-1087735808,1087758335,US
+1087735808,1087743569,US
+1087743570,1087743570,GB
+1087743571,1087758335,US
1087758336,1087766527,PR
1087766528,1087783423,US
1087783424,1087783679,ZA
@@ -14888,7 +15030,9 @@
1123589888,1123590143,US
1123590144,1123598335,VI
1123598336,1123598591,CA
-1123598592,1123635639,US
+1123598592,1123635626,US
+1123635627,1123635627,PL
+1123635628,1123635639,US
1123635640,1123635640,RU
1123635641,1123635660,US
1123635661,1123635661,RU
@@ -15368,9 +15512,7 @@
1160425472,1160429567,CA
1160429568,1160486911,US
1160486912,1160487423,AU
-1160487424,1160505343,US
-1160505344,1160505855,AU
-1160505856,1160547839,US
+1160487424,1160547839,US
1160547840,1160548351,MX
1160548352,1160563199,US
1160563200,1160563711,MP
@@ -15553,17 +15695,13 @@
1162883840,1162884863,BB
1162884864,1162885887,VC
1162885888,1162887167,BB
-1162887168,1163398655,US
-1163398656,1163398911,BD
-1163398912,1163400959,US
+1162887168,1163399167,US
+1163399168,1163399423,WS
+1163399424,1163400959,US
1163400960,1163401215,BD
1163401216,1163401471,US
1163401472,1163401727,ID
-1163401728,1163401983,US
-1163401984,1163402239,BD
-1163402240,1163402495,US
-1163402496,1163402751,BD
-1163402752,1163407359,US
+1163401728,1163407359,US
1163407360,1163411455,CA
1163411456,1163468799,US
1163468800,1163469055,PR
@@ -16215,7 +16353,11 @@
1246937088,1246945279,CA
1246945280,1247073023,US
1247073024,1247073279,CA
-1247073280,1247490047,US
+1247073280,1247101439,US
+1247101440,1247101695,CA
+1247101696,1247129599,US
+1247129600,1247133695,NL
+1247133696,1247490047,US
1247494144,1248864255,US
1248864256,1248866303,CA
1248866304,1248879615,US
@@ -16235,9 +16377,7 @@
1248936960,1248939007,CA
1248939008,1248946175,US
1248946176,1248947199,VG
-1248947200,1248956415,US
-1248956416,1248957439,CA
-1248957440,1248958463,US
+1248947200,1248958463,US
1248958464,1248959487,CA
1248959488,1248964607,US
1248964608,1248966655,CA
@@ -16718,7 +16858,11 @@
1296249024,1296249087,GB
1296249088,1296249279,FR
1296249280,1296249343,DE
-1296249344,1296249567,FR
+1296249344,1296249407,FR
+1296249408,1296249423,GB
+1296249424,1296249463,FR
+1296249464,1296249471,GB
+1296249472,1296249567,FR
1296249568,1296249599,NO
1296249600,1296249615,GB
1296249616,1296250367,FR
@@ -17124,7 +17268,9 @@
1299019776,1299020031,NL
1299020032,1299021055,BE
1299021056,1299021823,NL
-1299021824,1299026111,CH
+1299021824,1299025148,CH
+1299025149,1299025149,DE
+1299025150,1299026111,CH
1299026112,1299026127,ES
1299026128,1299038207,CH
1299038208,1299054591,FI
@@ -17318,12 +17464,28 @@
1307807744,1307811839,SE
1307811840,1307815935,NL
1307816192,1307816447,GB
-1307817216,1307817471,DE
+1307816960,1307817215,NL
+1307817216,1307817219,DE
+1307817220,1307817223,CZ
+1307817224,1307817231,DE
+1307817232,1307817251,CZ
+1307817252,1307817255,HU
+1307817256,1307817259,CZ
+1307817260,1307817471,DE
+1307817728,1307817983,DE
1307817984,1307818048,GB
1307818049,1307818049,BE
1307818050,1307818239,GB
1307819008,1307819263,GB
-1307819264,1307819519,NL
+1307819264,1307819287,NL
+1307819288,1307819331,DE
+1307819332,1307819343,NL
+1307819344,1307819355,DE
+1307819356,1307819395,NL
+1307819396,1307819399,DE
+1307819400,1307819407,NL
+1307819408,1307819431,DE
+1307819432,1307819519,NL
1307819520,1307819775,GB
1307820032,1307824127,PT
1307824128,1307828223,HU
@@ -17891,11 +18053,7 @@
1331931136,1331933183,SE
1331933184,1331935231,TR
1331935232,1331937279,NL
-1331937280,1331938063,NG
-1331938064,1331938079,GB
-1331938080,1331938431,NG
-1331938432,1331938559,GB
-1331938560,1331939327,NG
+1331937280,1331939327,GB
1331939328,1331941375,BE
1331941376,1331943423,ES
1331943424,1331945471,RU
@@ -17959,7 +18117,9 @@
1334108160,1334116351,BE
1334116352,1334124543,AX
1334124544,1334125823,DE
-1334125824,1334126591,ES
+1334125824,1334125915,ES
+1334125916,1334125916,DE
+1334125917,1334126591,ES
1334126592,1334127359,DE
1334127360,1334127615,AT
1334127616,1334130687,DE
@@ -18054,10 +18214,9 @@
1334710272,1334714367,RU
1334714368,1334718463,DE
1334718464,1334722559,KZ
-1334722560,1334723583,NL
-1334723584,1334723839,BE
+1334722560,1334723839,NL
1334723840,1334724095,DK
-1334724096,1334724351,NO
+1334724096,1334724351,NL
1334724352,1334724607,SE
1334724608,1334724863,US
1334724864,1334725631,NL
@@ -18446,7 +18605,9 @@
1347149568,1347149823,IN
1347149824,1347151423,HU
1347151424,1347158015,AT
-1347158016,1347162111,CH
+1347158016,1347159935,CH
+1347159936,1347160063,AT
+1347160064,1347162111,CH
1347162112,1347166207,IT
1347166208,1347174399,GR
1347174400,1347182591,IT
@@ -18924,6 +19085,7 @@
1348190208,1348194303,RU
1348194304,1348198399,GR
1348198400,1348202495,NO
+1348205258,1348205258,DE
1348206592,1348218879,RU
1348218880,1348222975,DE
1348222976,1348231167,LU
@@ -19125,6 +19287,7 @@
1357324296,1357324319,PL
1357324320,1357325311,GB
1357326336,1357326337,ES
+1357326338,1357326339,SL
1357326848,1357327103,GB
1357327360,1357327615,FR
1357328384,1357328671,GB
@@ -19170,7 +19333,8 @@
1357373536,1357373539,ES
1357373540,1357373543,PT
1357373544,1357373555,GB
-1357373560,1357375199,GB
+1357373560,1357375207,GB
+1357375232,1357375295,GB
1357377536,1357377679,FR
1357377696,1357378623,FR
1357381632,1357414399,NO
@@ -19286,8 +19450,8 @@
1358036992,1358041087,IR
1358041088,1358045183,FI
1358045184,1358049279,SK
-1358049280,1358062591,RU
-1358062592,1358065663,UA
+1358049280,1358064639,RU
+1358064640,1358065663,UA
1358065664,1358069759,BA
1358069760,1358086143,DE
1358086144,1358090239,CH
@@ -19649,7 +19813,9 @@
1360282496,1360282623,DE
1360282624,1360284671,NL
1360284672,1360284927,DK
-1360284928,1360285695,NL
+1360284928,1360285183,NL
+1360285184,1360285247,ES
+1360285248,1360285695,NL
1360285696,1360289791,DE
1360289792,1360293887,RU
1360293888,1360302079,DE
@@ -20536,7 +20702,9 @@
1385267200,1385275391,SE
1385275392,1385283583,IT
1385283584,1385286143,DE
-1385286144,1385290631,GB
+1385286144,1385290288,GB
+1385290289,1385290289,RE
+1385290290,1385290631,GB
1385290632,1385290632,IS
1385290633,1385291343,GB
1385291344,1385291344,IS
@@ -20600,7 +20768,21 @@
1386438400,1386438655,FR
1386438656,1386448895,GB
1386448896,1386449151,IL
-1386449152,1386449407,NL
+1386449152,1386449343,NL
+1386449344,1386449347,GB
+1386449348,1386449359,NL
+1386449360,1386449363,GB
+1386449364,1386449367,BE
+1386449368,1386449371,AU
+1386449372,1386449375,AT
+1386449376,1386449379,NL
+1386449380,1386449383,CH
+1386449384,1386449387,FR
+1386449388,1386449391,NL
+1386449392,1386449395,ES
+1386449396,1386449399,PT
+1386449400,1386449403,RU
+1386449404,1386449407,DE
1386449408,1386450943,IL
1386450944,1386479615,GB
1386479616,1386545151,NO
@@ -20685,7 +20867,9 @@
1388681216,1388683263,DE
1388683264,1388683903,CH
1388683904,1388683919,DE
-1388683920,1388685599,CH
+1388683920,1388684080,CH
+1388684081,1388684081,AT
+1388684082,1388685599,CH
1388685600,1388685631,GB
1388685632,1388688127,CH
1388688128,1388688159,NL
@@ -20765,9 +20949,13 @@
1389199872,1389200159,US
1389200160,1389218815,AE
1389218816,1389219839,AF
-1389219840,1389228415,AE
+1389219840,1389223935,AE
+1389223936,1389224191,DE
+1389224192,1389228415,AE
1389228416,1389228479,LB
-1389228480,1389232127,AE
+1389228480,1389231359,AE
+1389231360,1389231615,DE
+1389231616,1389232127,AE
1389232128,1389264895,DE
1389264896,1389265151,TZ
1389265152,1389266943,GB
@@ -20791,7 +20979,8 @@
1389445120,1389461503,RU
1389461504,1389477887,SE
1389477888,1389494271,BY
-1389494272,1389510655,DE
+1389494272,1389494527,RO
+1389494528,1389510655,DE
1389510656,1389527039,NL
1389527040,1389543423,RO
1389543424,1389576191,DE
@@ -20822,7 +21011,9 @@
1389789184,1389805567,PL
1389805568,1389806591,DE
1389806592,1389806847,SA
-1389806848,1389817855,DE
+1389806848,1389817603,DE
+1389817604,1389817604,NO
+1389817605,1389817855,DE
1389817856,1389819903,GB
1389819904,1389821951,DE
1389821952,1389838335,NL
@@ -21050,6 +21241,13 @@
1401939968,1401942015,UA
1401942016,1401942047,CZ
1401942528,1401943039,GB
+1401943048,1401943055,IT
+1401943056,1401943063,ES
+1401943064,1401943067,NL
+1401943072,1401943079,HU
+1401943080,1401943087,FR
+1401943096,1401943103,DE
+1401943104,1401943111,HU
1401943552,1401943807,US
1401944064,1401946111,BG
1401946112,1401962495,FR
@@ -21164,9 +21362,9 @@
1404043264,1404051455,EE
1404051456,1404059647,HR
1404059648,1404076031,NO
-1404076032,1404077055,SE
-1404077056,1404081151,LV
-1404081152,1404082175,SE
+1404076032,1404076543,SE
+1404076544,1404081663,LV
+1404081664,1404082175,SE
1404082176,1404083199,DE
1404083200,1404084223,SE
1404084224,1404092415,NO
@@ -21202,11 +21400,14 @@
1404215296,1404219391,LV
1404219392,1404220415,SE
1404220416,1404221439,EE
-1404221440,1404227583,SE
-1404227584,1404231679,LV
+1404221440,1404222463,SE
+1404222464,1404222975,LV
+1404222976,1404227071,SE
+1404227072,1404231679,LV
1404231680,1404232191,SE
1404232192,1404232703,NO
-1404232704,1404234751,SE
+1404232704,1404233215,LV
+1404233216,1404234751,SE
1404234752,1404239871,HR
1404239872,1404305407,SE
1404305408,1404313599,EE
@@ -21246,8 +21447,8 @@
1404780544,1404788735,SE
1404788736,1404796927,NL
1404796928,1404801023,EE
-1404801024,1404803583,SE
-1404803584,1404804095,LV
+1404801024,1404803071,SE
+1404803072,1404804095,LV
1404804096,1404805119,SE
1404805120,1404813311,AT
1404813312,1404815871,EE
@@ -21477,7 +21678,9 @@
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407686119,GB
+1407680512,1407681023,GB
+1407681024,1407681087,ES
+1407681088,1407686119,GB
1407686120,1407686123,CH
1407686124,1407686127,DE
1407686128,1407686131,FR
@@ -21680,7 +21883,9 @@
1411842048,1411850239,NL
1411850240,1411858431,FR
1411858432,1411870719,DE
-1411871744,1411871999,GB
+1411871744,1411871771,GB
+1411871772,1411871775,FR
+1411871776,1411871999,GB
1411872057,1411872057,GB
1411872160,1411872161,GB
1411872196,1411872199,GB
@@ -21799,9 +22004,7 @@
1416953856,1417019391,RO
1417019392,1417150463,DE
1417150464,1417674751,ES
-1417674752,1420133375,DE
-1420133376,1420133631,LU
-1420133632,1421869055,DE
+1417674752,1421869055,DE
1421869056,1422393343,BE
1422393344,1422413567,DE
1422413568,1422413695,AT
@@ -22494,8 +22697,25 @@
1439372032,1439372287,TR
1439372288,1439372543,IT
1439372544,1439372799,JP
-1439372800,1439373055,MT
-1439373056,1439373311,NL
+1439372800,1439372815,MT
+1439372816,1439372831,AD
+1439372832,1439372847,CY
+1439372848,1439372863,AM
+1439372864,1439372879,BY
+1439372880,1439372895,PK
+1439372896,1439372911,CZ
+1439372912,1439372927,GR
+1439372928,1439372943,IS
+1439372944,1439372959,IM
+1439372960,1439372975,JE
+1439372976,1439372991,XK
+1439372992,1439373007,MK
+1439373008,1439373008,MC
+1439373009,1439373023,MT
+1439373024,1439373039,ME
+1439373040,1439373040,SC
+1439373041,1439373055,MT
+1439373056,1439373311,IT
1439373312,1439373567,AE
1439373568,1439374335,NL
1439374336,1439375359,IT
@@ -22512,7 +22732,9 @@
1439437824,1439438335,FR
1439438336,1439438847,RO
1439438848,1439439359,FR
-1439439360,1439440383,RO
+1439439360,1439439615,RO
+1439439616,1439439871,PL
+1439439872,1439440383,RO
1439440384,1439440895,IR
1439440896,1439441919,RO
1439441920,1439442943,ES
@@ -22832,7 +23054,8 @@
1449793280,1449793535,NL
1449793536,1449794047,IR
1449794048,1449794303,PH
-1449794304,1449810943,RO
+1449794304,1449810687,RO
+1449810688,1449810943,PL
1449810944,1449811199,MD
1449811200,1449811455,BG
1449811456,1449811967,GB
@@ -23248,7 +23471,9 @@
1475724928,1475725183,RU
1475725184,1475725311,GB
1475725312,1475725439,RU
-1475725440,1475728639,GB
+1475725440,1475726591,GB
+1475726592,1475726847,RU
+1475726848,1475728639,GB
1475728640,1475728767,PL
1475728768,1475729407,GB
1475729408,1475729535,UA
@@ -23820,7 +24045,7 @@
1495333632,1495333887,RO
1495333888,1495335935,MD
1495335936,1495336447,RO
-1495336448,1495336959,NL
+1495336448,1495336959,GB
1495336960,1495339007,RO
1495339008,1495339263,DE
1495339264,1495339519,MD
@@ -24051,13 +24276,17 @@
1495688704,1495689215,IR
1495689216,1495700308,RO
1495700309,1495700309,GB
-1495700310,1495723519,RO
+1495700310,1495701247,RO
+1495701248,1495701503,FR
+1495701504,1495723519,RO
1495723520,1495724031,FR
1495724032,1495724543,RO
1495724544,1495725055,IR
1495725056,1495732223,RO
1495732224,1495734271,ES
-1495734272,1495745791,RO
+1495734272,1495736319,RO
+1495736320,1495744511,ES
+1495744512,1495745791,RO
1495745792,1495746047,GB
1495746048,1495747583,RO
1495747584,1495748607,MD
@@ -24237,7 +24466,9 @@
1496057856,1496058111,DE
1496058112,1496066815,RO
1496066816,1496067071,QA
-1496067072,1496073983,RO
+1496067072,1496072383,RO
+1496072384,1496072447,ES
+1496072448,1496073983,RO
1496073984,1496074239,ES
1496074240,1496078335,RO
1496078336,1496079359,MD
@@ -24294,7 +24525,6 @@
1496197120,1496197631,MD
1496197632,1496198143,RO
1496198144,1496198655,IR
-1496198656,1496198911,RO
1496198912,1496199167,GB
1496199168,1496202239,RO
1496202240,1496202751,IR
@@ -25005,7 +25235,11 @@
1508753408,1508769791,KG
1508769792,1508786175,PL
1508786176,1508802559,DE
-1508802560,1508818943,GB
+1508802560,1508807231,GB
+1508807232,1508807247,CZ
+1508807248,1508811191,GB
+1508811192,1508811195,NL
+1508811196,1508818943,GB
1508818944,1508830719,RO
1508830720,1508831487,SK
1508831488,1508835327,RO
@@ -25364,11 +25598,15 @@
1514799104,1514930175,ES
1514930176,1515002367,FR
1515002368,1515002623,ES
-1515002624,1515030783,FR
+1515002624,1515009300,FR
+1515009301,1515009301,ES
+1515009302,1515030783,FR
1515030784,1515031039,ES
1515031040,1515035168,FR
1515035169,1515035169,ES
-1515035170,1515051263,FR
+1515035170,1515038971,FR
+1515038972,1515038972,ES
+1515038973,1515051263,FR
1515051264,1515051519,ES
1515051520,1515052989,FR
1515052990,1515052990,ES
@@ -25436,7 +25674,8 @@
1518635008,1518637055,NL
1518637056,1518641151,SE
1518641152,1518649343,NL
-1518649344,1518723071,SE
+1518649344,1518665727,SE
+1518665728,1518723071,LV
1518723072,1518727167,EE
1518727168,1518731263,SE
1518731264,1518747647,DE
@@ -25448,7 +25687,7 @@
1518944256,1518960639,NL
1518960640,1518961663,LT
1518961664,1518962175,EE
-1518962176,1518962687,SE
+1518962176,1518962687,LV
1518962688,1518964735,NO
1518964736,1518966783,HR
1518966784,1518967807,SE
@@ -25456,7 +25695,11 @@
1518977024,1518985215,NL
1518985216,1518989311,SE
1518989312,1518993152,NL
-1518993153,1519190015,SE
+1518993153,1519058943,SE
+1519058944,1519083519,LV
+1519083520,1519091711,SE
+1519091712,1519124479,LV
+1519124480,1519190015,SE
1519190016,1519198207,NL
1519198208,1519200255,SE
1519200256,1519206399,EE
@@ -26114,7 +26357,8 @@
1539449856,1539450367,DK
1539450368,1539450879,SE
1539450880,1539451391,UA
-1539451392,1539452415,RO
+1539451392,1539451903,GB
+1539451904,1539452415,RO
1539452416,1539452927,GB
1539452928,1539453439,CH
1539453440,1539453951,UA
@@ -26591,7 +26835,6 @@
1539756800,1539757055,BE
1539757056,1539757567,RU
1539757568,1539757823,SI
-1539757824,1539758079,UA
1539758080,1539758335,HR
1539758336,1539758591,PL
1539758848,1539759103,BA
@@ -27049,7 +27292,7 @@
1540097024,1540099071,DE
1540099072,1540099583,UA
1540099584,1540099711,US
-1540099712,1540099839,UA
+1540099712,1540099839,DE
1540099840,1540103167,RU
1540103168,1540105215,DE
1540105216,1540106239,UA
@@ -27976,7 +28219,6 @@
1540650240,1540650495,CH
1540650496,1540650751,RU
1540650752,1540651007,FR
-1540651008,1540651263,RO
1540651264,1540651519,CH
1540651520,1540651775,MK
1540652032,1540652543,UA
@@ -31939,7 +32181,19 @@
1551577088,1551580159,NL
1551604480,1551604735,SE
1551630336,1551892479,RU
-1551892480,1555696895,FR
+1551892480,1554514250,FR
+1554514251,1554514251,RE
+1554514252,1554971045,FR
+1554971046,1554971046,ES
+1554971047,1555073117,FR
+1555073118,1555073118,ES
+1555073119,1555073583,FR
+1555073584,1555073584,ES
+1555073585,1555108390,FR
+1555108391,1555108391,ES
+1555108392,1555111820,FR
+1555111821,1555111821,ES
+1555111822,1555696895,FR
1555696896,1555697151,ES
1555697152,1555739841,FR
1555739842,1555739842,ES
@@ -31971,7 +32225,9 @@
1558081176,1558081183,BE
1558081184,1558083775,FR
1558083776,1558083791,DE
-1558083792,1558084655,FR
+1558083792,1558083959,FR
+1558083960,1558083963,CZ
+1558083964,1558084655,FR
1558084656,1558084659,BE
1558084660,1558085055,FR
1558085056,1558085071,GB
@@ -31989,7 +32245,9 @@
1558102508,1558102508,DE
1558102509,1558103159,FR
1558103160,1558103167,GB
-1558103168,1558112095,FR
+1558103168,1558107391,FR
+1558107392,1558107455,NL
+1558107456,1558112095,FR
1558112096,1558112127,ES
1558112128,1558112191,FR
1558112192,1558112192,ES
@@ -31997,13 +32255,17 @@
1558112208,1558112208,ES
1558112209,1558112209,FR
1558112210,1558112211,ES
-1558112212,1558118399,FR
+1558112212,1558115327,FR
+1558115328,1558115455,NL
+1558115456,1558118399,FR
1558118400,1558119423,DE
1558119424,1558122495,RU
1558122496,1558123007,SG
1558123008,1558123519,RU
1558123520,1558125567,LU
-1558125568,1558141439,AT
+1558125568,1558126591,AT
+1558126592,1558128639,RU
+1558128640,1558141439,AT
1558141440,1558141695,CY
1558141696,1558147071,AT
1558147072,1558147327,LU
@@ -32698,7 +32960,8 @@
1571545856,1571546111,RU
1571546112,1571546879,CZ
1571546880,1571547135,RU
-1571547136,1571549183,CZ
+1571547136,1571548159,CZ
+1571548160,1571549183,RU
1571549184,1571550207,UA
1571550208,1571550463,RU
1571550464,1571553279,UA
@@ -32778,10 +33041,8 @@
1572020224,1572028415,SE
1572028416,1572028927,GB
1572028928,1572029183,UA
-1572029184,1572030156,GB
-1572030157,1572030157,RU
-1572030158,1572030463,GB
-1572030464,1572034815,RU
+1572029184,1572029951,GB
+1572029952,1572034815,RU
1572034816,1572034943,BY
1572034944,1572035071,US
1572035072,1572035199,CZ
@@ -32833,10 +33094,8 @@
1572384768,1572388863,DE
1572388864,1572392959,DK
1572392960,1572393471,NL
-1572393472,1572393727,US
-1572393728,1572393983,GB
-1572393984,1572394239,DE
-1572394240,1572394495,US
+1572393472,1572393983,GB
+1572393984,1572394495,DE
1572394496,1572394751,FR
1572394752,1572395263,US
1572395264,1572395519,NL
@@ -33187,7 +33446,8 @@
1580015616,1580048383,UA
1580048384,1580064767,RU
1580064768,1580072959,GB
-1580072960,1580083199,PT
+1580072960,1580081151,PT
+1580081152,1580083199,TR
1580083200,1580087565,US
1580087566,1580087566,SE
1580087567,1580089102,US
@@ -33628,7 +33888,7 @@
1588652160,1588654079,RO
1588654080,1588658175,DE
1588658176,1588659199,RO
-1588659200,1588659711,NL
+1588659200,1588659711,GB
1588659712,1588661247,RO
1588661248,1588661503,NL
1588661504,1588663807,RO
@@ -33969,7 +34229,7 @@
1596851200,1596851455,RU
1596851456,1596851711,CZ
1596851712,1596851967,UA
-1596851968,1596852223,CZ
+1596851968,1596852223,LV
1596852224,1596854271,UA
1596854272,1596858367,BY
1596858368,1596858879,CZ
@@ -35235,7 +35495,6 @@
1728427008,1728428031,MY
1728428032,1728430079,IN
1728430080,1728431103,CN
-1728431104,1728431615,AF
1728431616,1728431871,HK
1728431872,1728432127,SG
1728432128,1728433151,IN
@@ -35251,7 +35510,10 @@
1728441344,1728442367,MY
1728442368,1728443391,SG
1728443392,1728444415,IN
-1728444416,1728445439,JP
+1728444416,1728444671,HK
+1728444672,1728444927,JP
+1728444928,1728445183,HK
+1728445184,1728445439,JP
1728445440,1728446463,CN
1728446464,1728446975,ID
1728446976,1728447231,IN
@@ -35271,7 +35533,8 @@
1728458752,1728459775,HK
1728459776,1728460799,ID
1728460800,1728462847,JP
-1728462848,1728463871,US
+1728462848,1728463359,NZ
+1728463360,1728463871,US
1728463872,1728464895,JP
1728464896,1728465919,KR
1728465920,1728466943,CN
@@ -35291,7 +35554,8 @@
1728476160,1728476415,AU
1728476416,1728476927,ID
1728476928,1728477183,IN
-1728478208,1728480255,HK
+1728478208,1728479231,JP
+1728479232,1728480255,HK
1728480256,1728481279,IN
1728481280,1728483327,HK
1728483328,1728484351,NZ
@@ -35445,7 +35709,9 @@
1728618496,1728619519,MY
1728619520,1728620543,IN
1728620544,1728622591,AU
-1728622592,1728624639,SG
+1728622592,1728624439,SG
+1728624440,1728624447,JP
+1728624448,1728624639,SG
1728624640,1728625663,JP
1728625664,1728626175,IN
1728626176,1728626431,JP
@@ -35562,7 +35828,6 @@
1728736256,1728736511,HK
1728736512,1728736767,IN
1728736768,1728737023,ID
-1728737024,1728737279,CN
1728737280,1728738303,JP
1728738304,1728739327,IN
1728739328,1728740351,ID
@@ -35662,7 +35927,6 @@
1728821760,1728822271,ID
1728822272,1728823295,SG
1728823296,1728824319,MN
-1728824320,1728825343,JP
1728825344,1728826367,SG
1728826368,1728827391,AU
1728827392,1728828415,JP
@@ -36155,7 +36419,9 @@
1729274880,1729276927,IN
1729276928,1729277951,BN
1729277952,1729278975,VN
-1729280000,1729281023,HK
+1729278976,1729279231,BD
+1729279232,1729279487,ID
+1729279488,1729281023,HK
1729281024,1729281535,AU
1729281536,1729282047,ID
1729282048,1729283071,CN
@@ -36352,13 +36618,11 @@
1729476608,1729477631,IN
1729477632,1729478655,AU
1729478912,1729479423,NZ
-1729479424,1729479679,IN
1729479680,1729480703,TW
1729480704,1729481727,KR
1729481728,1729482751,ID
1729482752,1729483775,CN
1729483776,1729485823,ID
-1729485824,1729486847,HK
1729486848,1729488383,ID
1729488384,1729488895,SB
1729488896,1729490943,IN
@@ -36456,6 +36720,7 @@
1729601536,1729603583,CN
1729603584,1729604607,HK
1729604608,1729604863,AU
+1729604864,1729605119,IN
1729605120,1729605375,AU
1729605376,1729605631,ID
1729605632,1729606655,CN
@@ -36578,7 +36843,7 @@
1729717248,1729718271,JP
1729718272,1729719295,HK
1729719296,1729720319,ID
-1729720320,1729721087,AU
+1729720320,1729721343,AU
1729721344,1729722367,NZ
1729722368,1729723391,BD
1729723392,1729726463,IN
@@ -36633,7 +36898,9 @@
1729776640,1729777663,CN
1729777664,1729779711,PK
1729779712,1729780735,AU
-1729780736,1729781503,HK
+1729780736,1729780991,HK
+1729780992,1729781247,ID
+1729781248,1729781503,HK
1729781504,1729781759,TL
1729781760,1729782783,IN
1729782784,1729783551,ID
@@ -36821,7 +37088,6 @@
1729952512,1729952767,NZ
1729952768,1729953791,IN
1729954816,1729955839,ID
-1729955840,1729956863,BD
1729956864,1729957887,HK
1729957888,1729958911,CN
1729958912,1729959935,PH
@@ -36887,7 +37153,6 @@
1730017792,1730019327,PH
1730019328,1730020351,ID
1730020352,1730021375,HK
-1730021376,1730022399,JP
1730022400,1730023423,IN
1730023424,1730024447,HK
1730024448,1730025471,CN
@@ -36899,7 +37164,6 @@
1730031616,1730032639,HK
1730032640,1730033663,JP
1730033664,1730034687,ID
-1730034688,1730035711,JP
1730035712,1730036735,IN
1730036736,1730037759,HK
1730037760,1730038783,JP
@@ -36907,7 +37171,7 @@
1730039808,1730040831,IN
1730040832,1730043903,ID
1730043904,1730044927,CN
-1730044928,1730046975,HK
+1730044928,1730045951,HK
1730046976,1730047999,KR
1730048000,1730049023,TL
1730049024,1730050047,IN
@@ -36931,10 +37195,11 @@
1730066432,1730067455,AU
1730067456,1730068479,BD
1730068480,1730069503,IN
+1730069504,1730070527,PK
1730070528,1730071551,CN
1730071552,1730072575,KR
-1730072576,1730073599,SG
-1730073600,1730073855,HK
+1730072576,1730073343,SG
+1730073344,1730073855,HK
1730074112,1730074367,AU
1730074368,1730074623,SG
1730075648,1730076671,ID
@@ -36971,7 +37236,6 @@
1730112512,1730112767,BD
1730112768,1730113535,ID
1730113536,1730114559,AU
-1730114560,1730115583,JP
1730115584,1730117631,VN
1730117632,1730118655,KH
1730118656,1730119679,ID
@@ -36987,8 +37251,12 @@
1730128896,1730129919,SG
1730129920,1730130943,BD
1730130944,1730131967,KR
-1730131968,1730132799,HK
-1730132800,1730132831,RO
+1730131968,1730132015,HK
+1730132016,1730132223,US
+1730132224,1730132351,HK
+1730132352,1730132399,GB
+1730132400,1730132735,HK
+1730132736,1730132831,RO
1730132832,1730132991,HK
1730132992,1730134015,IN
1730134016,1730135039,JP
@@ -37133,7 +37401,8 @@
1730503680,1730505727,CN
1730505728,1730508799,JP
1730508800,1730509823,AU
-1730509824,1730510847,CN
+1730509824,1730510591,CN
+1730510592,1730510847,HK
1730510848,1730511871,AU
1730511872,1730512895,JP
1730512896,1730521087,CN
@@ -37313,15 +37582,16 @@
1730756352,1730756607,CN
1730756608,1730757631,HK
1730757632,1730758655,SG
-1730758656,1730759679,JP
1730760704,1730761727,HK
1730761728,1730762751,TH
1730762752,1730766847,IN
+1730766848,1730767871,CN
1730767872,1730768127,AU
1730768128,1730768639,ID
1730768640,1730768895,BD
1730769920,1730770943,CN
1730770944,1730771967,ID
+1730771968,1730772991,CN
1730772992,1730774015,SG
1730774016,1730775039,HK
1730775040,1730776063,JP
@@ -37337,7 +37607,8 @@
1730784256,1730785279,HK
1730785280,1730785535,NL
1730785536,1730786303,AU
-1730786304,1730787327,HK
+1730786304,1730787583,HK
+1730787584,1730788351,CN
1730788352,1730790399,ID
1730790400,1730791423,IN
1730791424,1730794495,ID
@@ -37352,7 +37623,6 @@
1730803712,1730804735,HK
1730804736,1730805759,JP
1730805760,1730806783,AF
-1730806784,1730807807,JP
1730807808,1730808831,CN
1730808832,1730809855,HK
1730809856,1730810623,IN
@@ -37377,7 +37647,6 @@
1730834944,1730835455,IN
1730835456,1730837503,ID
1730837504,1730838527,IN
-1730838528,1730839551,TH
1730839552,1730840575,AU
1730840576,1730841599,SG
1730841600,1730842623,AU
@@ -37400,12 +37669,10 @@
1730859008,1730860031,BN
1730860032,1730861055,HK
1730861056,1730862079,MM
-1730862080,1730863103,JP
1730863104,1730864127,AU
1730864128,1730865151,TW
1730865152,1730866175,CN
1730866176,1730867199,AU
-1730868224,1730869247,KR
1730869248,1730870271,IN
1730870272,1730871807,ID
1730871808,1730873343,IN
@@ -37435,7 +37702,8 @@
1730895872,1730898943,CN
1730898944,1730899967,MO
1730899968,1730900991,IN
-1730900992,1730901503,AU
+1730900992,1730901247,HK
+1730901248,1730901503,SG
1730901504,1730901759,DE
1730901760,1730902015,AU
1730902016,1730903039,KR
@@ -37494,7 +37762,9 @@
1730951168,1730952191,CN
1730952192,1730954239,HK
1730954240,1730955263,SG
-1730955264,1730957311,BD
+1730955264,1730956031,BD
+1730956032,1730956287,US
+1730956288,1730957311,BD
1730957312,1730958335,CN
1730958336,1730959359,JP
1730959360,1730960383,CN
@@ -37898,7 +38168,8 @@
1731509248,1731510271,HK
1731510272,1731510527,MY
1731510528,1731510783,AU
-1731510784,1731511295,IN
+1731510784,1731511039,IN
+1731511040,1731511295,US
1731511296,1731512319,CN
1731512320,1731513343,KR
1731513344,1731514367,NZ
@@ -38404,8 +38675,8 @@
1732127744,1732128767,HK
1732128768,1732129023,SG
1732129024,1732129279,NZ
-1732129280,1732129535,AU
-1732129536,1732129791,HK
+1732129280,1732129790,AU
+1732129791,1732129791,HK
1732129792,1732130815,CN
1732130816,1732134911,IN
1732134912,1732140031,CN
@@ -38641,7 +38912,8 @@
1740873728,1740874751,CN
1740874752,1740876287,ID
1740876288,1740876799,AU
-1740876800,1740880895,IN
+1740876800,1740880639,IN
+1740880640,1740880895,HK
1740880896,1740881919,SG
1740881920,1740882943,CN
1740882944,1740884991,IN
@@ -38691,7 +38963,6 @@
1740938496,1740938751,IN
1740938752,1740939263,TH
1740939264,1740940287,PK
-1740940288,1740941311,JP
1740941312,1740942335,CN
1740942336,1740943359,TW
1740944384,1740945407,US
@@ -38842,7 +39113,6 @@
1741125632,1741128703,IN
1741128704,1741129727,JP
1741129728,1741130751,IN
-1741130752,1741131775,JP
1741131776,1741132799,IN
1741132800,1741133823,HK
1741133824,1741134847,BD
@@ -38863,7 +39133,8 @@
1741157376,1741158399,HK
1741158400,1741160447,CN
1741160448,1741161471,TW
-1741161472,1741162495,SG
+1741161472,1741162239,SG
+1741162240,1741162495,ID
1741162496,1741164543,AU
1741164544,1741165567,ID
1741165568,1741167615,VN
@@ -38886,7 +39157,6 @@
1741195264,1741210623,CN
1741210624,1741211647,PK
1741211648,1741212671,SG
-1741212672,1741213695,IR
1741213696,1741214719,SG
1741214720,1741215743,IN
1741215744,1741216767,SG
@@ -39037,6 +39307,126 @@
1741521920,1741522943,BD
1741522944,1741523967,CN
1741523968,1741528063,IN
+1741528064,1741529087,PH
+1741529088,1741529599,TH
+1741529600,1741529855,CN
+1741529856,1741530111,IN
+1741530112,1741531135,HK
+1741531136,1741532159,JP
+1741532160,1741533183,IN
+1741533184,1741534207,PK
+1741534208,1741535231,BD
+1741535232,1741535487,JP
+1741535488,1741535743,IN
+1741535744,1741536255,SG
+1741536256,1741540351,CN
+1741540352,1741541375,AU
+1741541376,1741542399,MY
+1741542400,1741546495,IN
+1741546496,1741547519,AU
+1741547520,1741548543,BD
+1741548544,1741549567,CN
+1741549568,1741550591,HK
+1741550592,1741551103,IN
+1741551104,1741551615,AU
+1741551616,1741554687,CN
+1741554688,1741557759,IN
+1741557760,1741558783,AU
+1741558784,1741559807,HK
+1741559808,1741560831,SG
+1741560832,1741561087,AU
+1741561088,1741561855,SG
+1741561856,1741562879,NZ
+1741562880,1741563903,HK
+1741563904,1741564927,SG
+1741564928,1741565951,CN
+1741565952,1741572607,IN
+1741572608,1741573119,KR
+1741573120,1741574143,JP
+1741574144,1741575167,PH
+1741575168,1741576191,PK
+1741576192,1741577215,JP
+1741577216,1741578239,HK
+1741578240,1741578751,IN
+1741578752,1741579007,SG
+1741579008,1741581311,IN
+1741581312,1741582335,CN
+1741582336,1741584383,IN
+1741584384,1741586431,HK
+1741586432,1741591551,IN
+1741591552,1741592575,CN
+1741592576,1741593087,MN
+1741593088,1741593599,AU
+1741593600,1741594111,HK
+1741594112,1741594367,MY
+1741594368,1741596671,IN
+1741596672,1741597695,ID
+1741597696,1741597951,IN
+1741597952,1741598207,MM
+1741598208,1741600767,IN
+1741600768,1741601279,BD
+1741601280,1741601535,ID
+1741601536,1741601791,AU
+1741601792,1741602815,HK
+1741602816,1741603839,MN
+1741603840,1741604863,JP
+1741604864,1741605887,PH
+1741605888,1741606911,TH
+1741606912,1741607935,IN
+1741607936,1741609983,VN
+1741609984,1741612031,IN
+1741612032,1741613055,BD
+1741613056,1741614079,HK
+1741614080,1741615103,AU
+1741615104,1741617151,ID
+1741617152,1741618175,IN
+1741618176,1741619199,ID
+1741619200,1741623295,IN
+1741623296,1741623551,NZ
+1741623552,1741623807,IN
+1741623808,1741624063,AU
+1741624064,1741624319,MY
+1741624320,1741625343,JP
+1741625344,1741626367,HK
+1741626368,1741627391,AU
+1741627392,1741629439,VN
+1741629440,1741631487,IN
+1741631488,1741632511,CN
+1741632512,1741636607,IN
+1741636608,1741637631,HK
+1741637632,1741638655,PH
+1741638656,1741639679,NZ
+1741639680,1741640703,NP
+1741640704,1741641727,PK
+1741641728,1741642751,BD
+1741642752,1741643007,AU
+1741643008,1741643263,KR
+1741643264,1741643775,AU
+1741643776,1741644799,ID
+1741644800,1741645311,KR
+1741645312,1741645567,AU
+1741645568,1741645823,IN
+1741645824,1741646847,CN
+1741646848,1741647871,SG
+1741647872,1741648895,KH
+1741648896,1741649919,HK
+1741649920,1741658111,IN
+1741658112,1741658623,BD
+1741658624,1741659135,AU
+1741659136,1741659647,SG
+1741659648,1741659903,PH
+1741659904,1741660159,HK
+1741660160,1741661183,IN
+1741661184,1741662207,CN
+1741662208,1741666303,IN
+1741666304,1741674495,CN
+1741674496,1741675519,JP
+1741675520,1741676543,CN
+1741676544,1741677567,IN
+1741677568,1741679615,CN
+1741679616,1741680639,ID
+1741680640,1741683711,IN
+1741683712,1741684735,TW
1742734336,1742735359,IN
1742735360,1742736383,JP
1742736384,1742737407,PK
@@ -39053,7 +39443,6 @@
1742746112,1742746623,IN
1742746624,1742747135,AU
1742747136,1742747391,IN
-1742747392,1742747647,AU
1742747648,1742748671,HK
1742748672,1742749695,CN
1742749696,1742750719,ID
@@ -39136,7 +39525,9 @@
1742835712,1742836735,JP
1742836736,1742837759,ID
1742837760,1742838783,JP
-1742838784,1742841855,AU
+1742838784,1742840831,AU
+1742840832,1742841087,US
+1742841088,1742841855,AU
1742841856,1742842367,TH
1742842368,1742843391,ID
1742843392,1742843647,IN
@@ -39159,7 +39550,6 @@
1742859264,1742860287,VN
1742860288,1742860799,AU
1742860800,1742861055,ID
-1742861056,1742861311,AU
1742861312,1742862335,NP
1742862336,1742862847,IN
1742862848,1742863359,HK
@@ -40035,7 +40425,9 @@
1743897600,1743899647,AU
1743899648,1743900671,ID
1743900672,1743901695,JP
-1743901696,1743903743,AU
+1743901696,1743902463,AU
+1743902464,1743902719,US
+1743902720,1743903743,AU
1743903744,1743904767,CN
1743904768,1743905791,IN
1743905792,1743906815,HK
@@ -40153,6 +40545,7 @@
1744024320,1744024575,AF
1744024576,1744025599,HK
1744025600,1744026623,IN
+1744026624,1744027647,SG
1744027648,1744028671,MY
1744028672,1744029695,JP
1744029696,1744030719,KR
@@ -40176,6 +40569,7 @@
1744049152,1744050175,BD
1744050176,1744051199,HK
1744051200,1744052223,PH
+1744052224,1744053247,IN
1744053248,1744054271,ID
1744054272,1744055295,KR
1744055296,1744056319,HK
@@ -40269,7 +40663,6 @@
1744150528,1744151551,TO
1744151552,1744152319,LA
1744152320,1744152575,TH
-1744152576,1744153599,JP
1744153600,1744154623,NZ
1744154880,1744155135,ID
1744155136,1744155647,BD
@@ -40328,7 +40721,9 @@
1744208384,1744208895,AU
1744208896,1744209919,CN
1744209920,1744210943,AU
-1744210944,1744211967,SG
+1744210944,1744211199,JP
+1744211200,1744211455,HK
+1744211456,1744211967,SG
1744211968,1744212991,KH
1744212992,1744213503,SG
1744213504,1744214015,JP
@@ -40370,7 +40765,8 @@
1744239616,1744240639,JP
1744240640,1744241663,AU
1744241664,1744242687,IN
-1744242688,1744247807,ID
+1744242688,1744245503,ID
+1744245760,1744247807,ID
1744247808,1744248831,IN
1744248832,1744249855,ID
1744249856,1744250367,HK
@@ -40516,7 +40912,8 @@
1744386560,1744387071,ID
1744387072,1744388095,NZ
1744388096,1744388607,ID
-1744388608,1744390143,AU
+1744388608,1744389631,AU
+1744389632,1744390143,RO
1744390144,1744391167,HK
1744391168,1744393215,IN
1744393216,1744394239,MY
@@ -40672,7 +41069,7 @@
1744567296,1744568319,JP
1744568320,1744569343,VN
1744569344,1744570367,IN
-1744570880,1744571391,AU
+1744570368,1744571391,AU
1744571392,1744571903,ID
1744571904,1744572415,AU
1744572416,1744573439,HK
@@ -40681,9 +41078,9 @@
1744575488,1744576511,CN
1744577536,1744578559,CN
1744578560,1744580607,IN
-1744580608,1744580863,PH
1744580864,1744581119,SG
1744581120,1744581631,ID
+1744581632,1744582655,IN
1744582656,1744583679,AU
1744583680,1744584703,IN
1744584704,1744585727,CN
@@ -40707,7 +41104,9 @@
1744597152,1744597183,IN
1744597184,1744597215,JP
1744597216,1744598015,SG
+1744598016,1744599039,IN
1744599040,1744601087,JP
+1744601088,1744602111,TW
1744602112,1744603135,HK
1744603136,1744604159,JP
1744604160,1744607231,IN
@@ -40722,6 +41121,7 @@
1744616448,1744616959,ID
1744616960,1744617471,AU
1744617472,1744618495,IN
+1744618496,1744619519,TW
1744619520,1744620543,SG
1744620544,1744622591,CN
1744622592,1744624639,IN
@@ -40774,6 +41174,7 @@
1744665856,1744666111,IN
1744666112,1744666367,AU
1744666368,1744666623,PH
+1744666624,1744667647,IN
1744667648,1744668671,TH
1744668672,1744669695,NZ
1744669696,1744670719,HK
@@ -40846,6 +41247,7 @@
1744744448,1744745471,CN
1744745472,1744747519,NP
1744747520,1744748543,CN
+1744748544,1744749055,IN
1744749056,1744749567,NZ
1744749568,1744749823,CN
1744750592,1744752639,IN
@@ -40886,7 +41288,6 @@
1744786432,1744787455,VN
1744787456,1744789503,CN
1744789504,1744792575,IN
-1744792576,1744793599,PK
1744793600,1744794623,IN
1744794624,1744795647,KH
1744795648,1744797183,ID
@@ -41140,7 +41541,9 @@
1753517568,1753517823,NO
1753517824,1753522431,US
1753522432,1753522687,FR
-1753522688,1753529087,US
+1753522688,1753527039,US
+1753527040,1753527295,LT
+1753527296,1753529087,US
1753529088,1753529343,NZ
1753529344,1753547007,US
1753547008,1753547263,DE
@@ -41858,9 +42261,7 @@
1761519616,1761521663,PR
1761521664,1761522687,US
1761522688,1761523711,CA
-1761523712,1761524735,US
-1761524736,1761525759,CA
-1761525760,1761526783,US
+1761523712,1761526783,US
1761526784,1761527807,CA
1761527808,1761544191,US
1761544192,1761546239,CA
@@ -42002,6 +42403,12 @@
1778384896,1778385151,CN
1778385152,1778385407,AU
1778385408,1778393087,CN
+1778393088,1778396159,IN
+1778396160,1778397183,CN
+1778397184,1778398207,ID
+1778398208,1778399231,BD
+1778399232,1778400255,IN
+1778400256,1778401279,BD
1778401280,1778417663,CN
1778417664,1778450431,TH
1778450432,1778515967,TW
@@ -42902,7 +43309,9 @@
1836646400,1836679167,RS
1836679168,1836680703,BG
1836680704,1836681215,MK
-1836681216,1836711935,BG
+1836681216,1836687359,BG
+1836687360,1836689151,MK
+1836689152,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
1836744704,1836746495,FR
@@ -43304,7 +43713,9 @@
1843789824,1843806207,SK
1843806208,1843822591,IR
1843822592,1843838975,RU
-1843838976,1843846911,DE
+1843838976,1843840767,DE
+1843840768,1843841023,SE
+1843841024,1843846911,DE
1843846912,1843847167,IR
1843847168,1843853055,DE
1843853056,1843853311,IR
@@ -43567,13 +43978,7 @@
1848393728,1848401919,JP
1848401920,1848406015,PH
1848406016,1848410111,NP
-1848410112,1848411135,JP
-1848411136,1848411391,PH
-1848411392,1848412415,JP
-1848412416,1848412671,PH
-1848412672,1848413439,JP
-1848413440,1848413951,PH
-1848413952,1848414207,JP
+1848410112,1848414207,PH
1848414208,1848418303,CN
1848418304,1848420351,AU
1848420352,1848422399,ID
@@ -43688,12 +44093,11 @@
1860733952,1860734975,AU
1860734976,1860735999,NZ
1860736000,1860737023,AU
-1860737024,1860743167,JP
-1860743168,1860743333,AU
-1860743334,1860743334,HK
-1860743335,1860743462,AU
-1860743463,1860743464,JP
-1860743465,1860744191,AU
+1860737024,1860739071,JP
+1860739072,1860743167,PH
+1860743168,1860743423,HK
+1860743424,1860743679,JP
+1860743680,1860744191,AU
1860744192,1860745215,IN
1860745216,1860746239,AU
1860746240,1860747263,PK
@@ -43820,6 +44224,9 @@
1876785408,1876785439,HK
1876785440,1876787199,SG
1876787200,1876885503,CN
+1876885504,1876886527,IN
+1876886528,1876890623,CN
+1876890624,1876893695,IN
1876893696,1876901887,TH
1876901888,1876918271,SG
1876918272,1876934655,LK
@@ -43867,8 +44274,7 @@
1884291072,1885863935,CN
1885863936,1885995007,TW
1885995008,1886191615,KR
-1886191616,1886195455,JP
-1886195456,1886195711,PH
+1886191616,1886195711,PH
1886195712,1886197759,ID
1886197760,1886199807,JP
1886199808,1886207999,KR
@@ -43966,7 +44372,9 @@
1897170944,1897172991,ID
1897172992,1897175039,PH
1897175040,1897176063,JP
-1897177088,1897201663,JP
+1897176064,1897177087,SG
+1897177088,1897185279,PH
+1897185280,1897201663,JP
1897201664,1897209855,KR
1897209856,1897213951,AU
1897213952,1897218047,JP
@@ -44068,7 +44476,10 @@
1908756480,1908760575,KR
1908760576,1908761599,NZ
1908761600,1908762623,CN
-1908762624,1908763647,IN
+1908762624,1908762879,IN
+1908762880,1908763135,US
+1908763136,1908763391,AU
+1908763392,1908763647,US
1908763648,1908764671,ID
1908764672,1908768767,AU
1908768768,1908801535,JP
@@ -44110,6 +44521,10 @@
1914437632,1914503167,CN
1914503168,1914552319,KR
1914552320,1914560511,SG
+1914560512,1914564607,IN
+1914564608,1914566655,TW
+1914566656,1914567679,IN
+1914567680,1914568703,MY
1914568704,1914576895,KR
1914576896,1914580991,TW
1914580992,1914585087,KR
@@ -44171,8 +44586,8 @@
1920002048,1920003071,CN
1920003072,1920008191,HK
1920008192,1920057343,CN
-1920057344,1920058111,HK
-1920058112,1920069631,CN
+1920057344,1920058367,HK
+1920058368,1920069631,CN
1920069632,1920071167,HK
1920071168,1920072703,CN
1920072704,1920073727,HK
@@ -44219,7 +44634,9 @@
1921867776,1921871871,AU
1921871872,1921872895,US
1921872896,1921873663,NZ
-1921873664,1921875967,US
+1921873664,1921874175,US
+1921874176,1921874687,NZ
+1921874688,1921875967,US
1921875968,1921892351,CN
1921892352,1921896447,AU
1921896448,1921898495,SG
@@ -44267,6 +44684,10 @@
1931739136,1932001279,JP
1932001280,1932132351,KR
1932132352,1932140543,AU
+1932140544,1932145663,IN
+1932145664,1932146687,BD
+1932146688,1932147711,CN
+1932147712,1932148735,HK
1932148736,1932152831,PK
1932152832,1932156927,TW
1932156928,1932161023,JP
@@ -44373,7 +44794,10 @@
1940357120,1940389887,JP
1940389888,1940914175,CN
1940914176,1941045247,JP
-1941045248,1941049343,HK
+1941045248,1941045759,HK
+1941045760,1941046783,JP
+1941046784,1941048319,HK
+1941048320,1941049343,SG
1941049344,1941051391,AU
1941051392,1941052415,KH
1941052416,1941053439,AU
@@ -44407,13 +44831,16 @@
1946161152,1946163199,AU
1946163200,1946165247,CN
1946165248,1946173439,PK
-1946173440,1946173695,PG
+1946173440,1946173567,PG
+1946173568,1946173599,HK
+1946173600,1946173695,PG
1946173696,1946173951,TW
1946173952,1946174463,SG
1946174464,1946174719,TW
1946174720,1946175487,SG
1946175488,1946175615,HK
-1946175616,1946175999,SG
+1946175616,1946175743,CN
+1946175744,1946175999,SG
1946176000,1946176255,JP
1946176256,1946176511,SG
1946176512,1946176767,AU
@@ -44464,8 +44891,10 @@
1950089216,1950351359,CN
1950351360,1950482431,JP
1950482432,1950515199,CN
-1950515200,1950517247,IN
-1950517248,1950518271,US
+1950515200,1950515711,IN
+1950515712,1950516223,US
+1950516224,1950516735,IN
+1950516736,1950518271,US
1950518272,1950519295,IN
1950519296,1950520319,US
1950520320,1950521343,PH
@@ -44556,7 +44985,7 @@
1958845952,1958846463,HK
1958846464,1958847487,IN
1958847488,1958848511,CN
-1958848512,1958850559,BD
+1958848512,1958848767,BD
1958850560,1958852607,CN
1958852608,1958853631,AU
1958853632,1958854655,ID
@@ -44570,7 +44999,11 @@
1959104512,1959106559,AU
1959108608,1959110655,CN
1959110656,1959112703,JP
-1959112704,1959114751,HK
+1959112704,1959113215,HK
+1959113216,1959113471,IN
+1959113472,1959113727,HK
+1959113728,1959113983,CN
+1959113984,1959114751,HK
1959114752,1959115007,IN
1959115008,1959116287,HK
1959116288,1959116543,AU
@@ -44617,7 +45050,8 @@
1960210432,1960210943,TH
1960210944,1960211455,SG
1960211456,1960211903,AU
-1960211904,1960212479,SG
+1960211904,1960211967,SG
+1960211968,1960212479,AU
1960212480,1960212582,IN
1960212583,1960212583,SG
1960212584,1960212735,IN
@@ -44666,9 +45100,8 @@
1964138496,1964146687,HK
1964146688,1964171263,JP
1964171264,1964173311,BD
-1964173312,1964173776,AU
-1964173777,1964173777,JP
-1964173778,1964173823,AU
+1964173312,1964173567,AU
+1964173568,1964173823,JP
1964173824,1964174079,HK
1964174080,1964174335,AU
1964174336,1964174591,SG
@@ -44745,7 +45178,9 @@
1969707008,1969709055,MH
1969709056,1969713151,TW
1969713152,1969715199,AU
-1969715200,1969717247,IN
+1969715200,1969716223,SG
+1969716224,1969716735,HK
+1969716736,1969717247,IN
1969717248,1969721343,CN
1969721344,1969725439,HK
1969725440,1969727487,JP
@@ -44757,7 +45192,8 @@
1969793024,1969795071,CN
1969795072,1969797119,NZ
1969797120,1969798143,SG
-1969798144,1969799167,HK
+1969798144,1969798399,CN
+1969798400,1969799167,HK
1969799168,1969807359,ID
1969807360,1969809407,AF
1969809408,1969811455,IN
@@ -44771,8 +45207,8 @@
1970800640,1970802943,AU
1970802944,1970803199,SG
1970803200,1970803711,AU
-1970803712,1970803967,HK
-1970803968,1970804479,AU
+1970803712,1970804223,HK
+1970804224,1970804479,AU
1970804480,1970804735,SG
1970804736,1970806783,KH
1970806784,1970808831,NZ
@@ -44849,6 +45285,11 @@
1986461696,1986496511,JP
1986496512,1986498559,BT
1986498560,1986502655,HK
+1986502656,1986503679,IN
+1986503680,1986507775,CN
+1986507776,1986508799,SG
+1986508800,1986509823,AU
+1986509824,1986510847,JP
1986510848,1986519039,KR
1986519040,1986523135,PK
1986523136,1986523904,HK
@@ -44862,7 +45303,6 @@
1986762752,1986764799,JP
1986764800,1986768895,KR
1986768896,1986769919,SG
-1986769920,1986770943,IR
1986770944,1986772991,AU
1986772992,1986789375,MY
1986789376,1987051519,JP
@@ -44985,7 +45425,9 @@
1998272432,1998272447,JP
1998272448,1998272547,SG
1998272548,1998272551,JP
-1998272552,1998274559,SG
+1998272552,1998274047,SG
+1998274048,1998274303,US
+1998274304,1998274559,SG
1998274560,1998454783,CN
1998454784,1998456831,AU
1998456832,1998458879,JP
@@ -45343,7 +45785,15 @@
2030436352,2030567423,SG
2030567424,2032926719,CN
2032926720,2033057791,AU
-2033057792,2033319935,CN
+2033057792,2033074175,CN
+2033074176,2033075199,PK
+2033075200,2033077247,BD
+2033077248,2033078271,CN
+2033078272,2033079295,HK
+2033079296,2033088511,IN
+2033088512,2033089535,AU
+2033089536,2033090559,IN
+2033090560,2033319935,CN
2033319936,2033321983,IN
2033321984,2033324031,CN
2033324032,2033328127,KR
@@ -45483,7 +45933,17 @@
2050091008,2050097151,JP
2050097152,2050101247,SG
2050101248,2050113535,JP
-2050113536,2050129663,SG
+2050113536,2050122239,SG
+2050122240,2050122495,JP
+2050122496,2050122751,SG
+2050122752,2050122879,JP
+2050122880,2050126079,SG
+2050126080,2050126207,JP
+2050126208,2050126591,SG
+2050126592,2050126719,JP
+2050126720,2050126783,SG
+2050126784,2050126975,JP
+2050126976,2050129663,SG
2050129664,2050129727,JP
2050129728,2050129919,SG
2050129920,2050162687,IN
@@ -45611,7 +46071,7 @@
2060062720,2060066815,JP
2060066816,2060075007,KR
2060075008,2060083199,AU
-2060083200,2060091391,JP
+2060083200,2060091391,PH
2060091392,2060189695,KR
2060189696,2060451839,CN
2060451840,2061500415,JP
@@ -45658,7 +46118,11 @@
2063392768,2063400959,IN
2063400960,2063466495,JP
2063466496,2063482879,TW
-2063482880,2063499263,MN
+2063482880,2063483135,MN
+2063483136,2063483391,JP
+2063483392,2063486975,MN
+2063486976,2063487231,JP
+2063487232,2063499263,MN
2063499264,2063532031,KR
2063532032,2063548415,LK
2063548416,2063550463,CN
@@ -45906,14 +46370,19 @@
2087464960,2087467007,KH
2087467008,2087471103,JP
2087471104,2087472127,SG
-2087472128,2087476223,HK
+2087472128,2087472639,HK
+2087472640,2087473151,SG
+2087473152,2087474687,HK
+2087474688,2087475199,JP
+2087475200,2087476223,HK
2087476224,2087477247,TW
2087477248,2087478271,AU
2087478272,2087485439,HK
2087485440,2087501823,TW
2087501824,2087518207,JP
2087518208,2087519231,TH
-2087519232,2087520255,SG
+2087519232,2087519999,SG
+2087520000,2087520255,PH
2087520256,2087522303,FM
2087524352,2087526399,TH
2087526400,2087534591,PK
@@ -46215,9 +46684,12 @@
2153385920,2153385983,US
2153385984,2153387007,GB
2153387008,2153387263,CH
-2153387264,2153387775,US
+2153387264,2153387519,IS
+2153387520,2153387775,IE
2153387776,2153388031,CH
-2153388032,2153396991,US
+2153388032,2153388287,ES
+2153388288,2153388543,PL
+2153388544,2153396991,US
2153396992,2153397247,IL
2153397248,2153397503,IN
2153397504,2153397759,SA
@@ -47626,13 +48098,18 @@
2302349312,2302351359,HK
2302351360,2302357503,VN
2302357504,2302358527,BD
-2302358528,2302363647,IN
-2302363648,2302364671,JP
-2302364672,2302365695,IN
+2302358528,2302365695,IN
2302365696,2302366719,HK
2302366720,2302367743,IN
2302367744,2302368767,CN
-2302368768,2302369791,IN
+2302368768,2302370815,IN
+2302370816,2302371839,HK
+2302371840,2302372863,VN
+2302372864,2302373887,MY
+2302373888,2302374911,TH
+2302374912,2302375935,VN
+2302375936,2302376959,AF
+2302376960,2302377983,ID
2302410752,2302541823,SE
2302541824,2302607359,CH
2302607360,2302625761,SC
@@ -47774,8 +48251,9 @@
2316042240,2316173311,US
2316173312,2316238847,SE
2316238848,2316500991,US
-2316500992,2316533759,AU
-2316533760,2316566527,HK
+2316500992,2316505855,HK
+2316505856,2316506111,AU
+2316506112,2316566527,HK
2316566528,2316613887,US
2316613888,2316614143,GB
2316614144,2316632063,US
@@ -47898,7 +48376,9 @@
2321447936,2321452031,BR
2321452032,2321453055,MX
2321453056,2321454079,HN
-2321454080,2321471487,BR
+2321454080,2321467136,BR
+2321467137,2321467137,US
+2321467138,2321471487,BR
2321471488,2321472511,HN
2321472512,2321477631,BR
2321477632,2321478655,TT
@@ -48320,7 +48800,7 @@
2335637504,2335768575,US
2335768576,2335834111,CA
2335834112,2335899647,SE
-2335899648,2335965183,AU
+2335899648,2335965183,SG
2335965184,2336161791,US
2336161792,2336227327,NL
2336292864,2336358399,US
@@ -48406,9 +48886,13 @@
2342700248,2342700248,GB
2342700249,2342701408,US
2342701409,2342701409,GB
-2342701410,2342705120,US
+2342701410,2342704912,US
+2342704913,2342704913,GB
+2342704914,2342705120,US
2342705121,2342705121,GB
-2342705122,2342715391,US
+2342705122,2342706194,US
+2342706195,2342706195,GB
+2342706196,2342715391,US
2342715392,2342780927,AU
2342780928,2342846463,NO
2342846464,2342911999,BE
@@ -48842,7 +49326,11 @@
2382677992,2382678015,CA
2382678016,2382678527,US
2382678528,2382679039,CA
-2382679040,2382680063,US
+2382679040,2382679150,US
+2382679151,2382679151,IO
+2382679152,2382679342,US
+2382679343,2382679343,IO
+2382679344,2382680063,US
2382680064,2382684159,CA
2382684160,2382692351,US
2382692352,2383085567,CA
@@ -49570,7 +50058,6 @@
2455175168,2455240703,GB
2455240704,2455244799,US
2455244800,2455245567,AU
-2455245568,2455245823,SG
2455245824,2455246847,AU
2455246848,2455247871,IN
2455247872,2455248127,AU
@@ -49582,7 +50069,9 @@
2455263232,2455265279,PH
2455265280,2455273471,US
2455273472,2455275519,AU
-2455275520,2455279615,US
+2455275520,2455278079,US
+2455278080,2455278591,NZ
+2455278592,2455279615,US
2455279616,2455280127,MO
2455280128,2455280383,MY
2455280384,2455281663,MO
@@ -50102,7 +50591,9 @@
2500202880,2500203007,ES
2500203008,2500209919,US
2500209920,2500210175,GB
-2500210176,2500212415,US
+2500210176,2500211728,US
+2500211729,2500211730,SI
+2500211731,2500212415,US
2500212416,2500212423,CH
2500212424,2500212991,US
2500212992,2500213247,ES
@@ -50216,17 +50707,23 @@
2500644864,2500645119,FR
2500645120,2500646911,US
2500646912,2500647935,ES
-2500647936,2500666463,US
+2500647936,2500663295,US
+2500663296,2500664319,ES
+2500664320,2500666463,US
2500666464,2500666471,LU
2500666472,2500681759,US
2500681760,2500681767,PL
-2500681768,2500685823,US
+2500681768,2500682495,US
+2500682496,2500682751,PL
+2500682752,2500685823,US
2500685824,2500686079,FR
2500686080,2500687871,US
2500687872,2500689919,FR
2500689920,2500694527,US
2500694528,2500694783,IT
-2500694784,2500719103,US
+2500694784,2500695039,US
+2500695040,2500696063,IT
+2500696064,2500719103,US
2500719104,2500721151,IE
2500721152,2500723711,US
2500723712,2500723799,GB
@@ -50301,7 +50798,9 @@
2504943616,2504944639,IL
2504944640,2504945151,US
2504945152,2504945407,IL
-2504945408,2504945663,US
+2504945408,2504945432,US
+2504945433,2504945433,IL
+2504945434,2504945663,US
2504945664,2504946175,IL
2504946176,2504946431,US
2504946432,2504946687,IL
@@ -51294,9 +51793,15 @@
2584764416,2584764671,ZA
2584764672,2584775423,US
2584775424,2584775679,KE
-2584775680,2585001983,US
+2584775680,2584780287,US
+2584780288,2584780543,ES
+2584780544,2585001983,US
2585001984,2585067519,CA
-2585067520,2585788415,US
+2585067520,2585330440,US
+2585330441,2585330442,SI
+2585330443,2585330468,US
+2585330469,2585330470,SI
+2585330471,2585788415,US
2585788416,2585853951,GB
2585853952,2585985023,JP
2585985024,2586378751,US
@@ -51487,6 +51992,7 @@
2588082176,2588147711,RE
2588147712,2588164095,CI
2588164096,2588180479,RW
+2588188672,2588196863,ZA
2588196864,2588213247,NG
2588213248,2588278783,ZA
2588278784,2588295167,KE
@@ -51596,6 +52102,7 @@
2591479552,2591479807,AO
2591479808,2591481855,PT
2591481856,2591483903,TZ
+2591483904,2591485951,KE
2591485952,2591486975,SO
2591486976,2591487999,ZA
2591488000,2591489023,GA
@@ -51683,6 +52190,7 @@
2605318144,2606301183,US
2606301184,2606366719,AO
2606366720,2606563327,US
+2606563328,2606596095,NG
2606628864,2607349759,US
2607349760,2607415295,CH
2607415296,2609053695,US
@@ -51899,7 +52407,25 @@
2623602688,2623668223,CL
2623668224,2624192511,US
2624192512,2624258047,CH
-2624258048,2624279039,US
+2624258048,2624269313,US
+2624269314,2624269314,AU
+2624269315,2624269317,US
+2624269318,2624269318,AU
+2624269319,2624269321,US
+2624269322,2624269322,AU
+2624269323,2624269345,US
+2624269346,2624269346,AU
+2624269347,2624269349,US
+2624269350,2624269350,AU
+2624269351,2624269353,US
+2624269354,2624269354,AU
+2624269355,2624269377,US
+2624269378,2624269378,AU
+2624269379,2624269381,US
+2624269382,2624269382,AU
+2624269383,2624269385,US
+2624269386,2624269386,AU
+2624269387,2624279039,US
2624279040,2624279071,IN
2624279072,2624279095,US
2624279096,2624279111,IN
@@ -51980,7 +52506,23 @@
2624298292,2624298295,PH
2624298296,2624298299,TH
2624298300,2624298495,SG
-2624298496,2624716799,US
+2624298496,2624302081,US
+2624302082,2624302082,AU
+2624302083,2624302085,US
+2624302086,2624302086,AU
+2624302087,2624302089,US
+2624302090,2624302090,AU
+2624302091,2624302113,US
+2624302114,2624302114,AU
+2624302115,2624302117,US
+2624302118,2624302118,AU
+2624302119,2624302121,US
+2624302122,2624302122,AU
+2624302123,2624302149,US
+2624302150,2624302150,AU
+2624302151,2624302153,US
+2624302154,2624302154,AU
+2624302155,2624716799,US
2624716800,2624782335,NL
2624782336,2624847871,CH
2624847872,2624913407,NO
@@ -52180,7 +52722,9 @@
2655324800,2655325695,US
2655325696,2655325823,CA
2655325824,2655326207,US
-2655326208,2655326463,CA
+2655326208,2655326287,CA
+2655326288,2655326303,US
+2655326304,2655326463,CA
2655326464,2655373256,US
2655373257,2655373257,CA
2655373258,2655715327,US
@@ -52462,7 +53006,11 @@
2675580064,2675580095,AE
2675580096,2675589119,US
2675589120,2675605503,DE
-2675605504,2675606271,US
+2675605504,2675605961,US
+2675605962,2675605962,DE
+2675605963,2675605963,US
+2675605964,2675605964,DE
+2675605965,2675606271,US
2675606272,2675606527,IT
2675606528,2675606975,US
2675606976,2675607039,IT
@@ -52781,7 +53329,9 @@
2696478720,2696871935,JP
2696937472,2697789439,JP
2697789440,2697854975,US
-2697854976,2697889791,AU
+2697854976,2697887743,AU
+2697887744,2697887999,ES
+2697888000,2697889791,AU
2697889792,2697891839,US
2697891840,2697892095,GB
2697892096,2697892863,AU
@@ -53006,7 +53556,9 @@
2714373128,2714373128,SG
2714373129,2714386431,US
2714386432,2714402815,JP
-2714402816,2714407160,US
+2714402816,2714403996,US
+2714403997,2714403997,JP
+2714403998,2714407160,US
2714407161,2714407161,JP
2714407162,2714697727,US
2714697728,2714763263,CN
@@ -53124,7 +53676,9 @@
2728316928,2728317951,BG
2728317952,2728319999,US
2728320000,2728321023,NO
-2728321024,2731543551,US
+2728321024,2728323071,US
+2728323072,2728324095,BE
+2728324096,2731543551,US
2731543552,2731544575,CA
2731544576,2731549695,US
2731549696,2731550719,CA
@@ -53242,7 +53796,7 @@
2732273664,2732275711,CA
2732275712,2732278783,US
2732278784,2732279807,CA
-2732279808,2732302335,US
+2732279808,2732301311,US
2732302336,2732303359,CA
2732303360,2732306431,US
2732306432,2732307455,CA
@@ -53283,9 +53837,7 @@
2732455936,2732457983,CA
2732457984,2732472319,US
2732472320,2732474367,CA
-2732474368,2732475391,US
-2732475392,2732476415,CA
-2732476416,2732478463,US
+2732474368,2732478463,US
2732478464,2732479487,CA
2732479488,2732480511,AG
2732480512,2732485631,US
@@ -53630,7 +54182,9 @@
2745548800,2745565183,DE
2745565184,2745696255,GB
2745696256,2745761791,CH
-2745761792,2746023935,GB
+2745761792,2745962865,GB
+2745962866,2745962866,FR
+2745962867,2746023935,GB
2746023936,2746089471,FR
2746089472,2746155007,NO
2746155008,2746220543,NL
@@ -53752,7 +54306,11 @@
2759917568,2759983103,FR
2759983104,2760048639,IT
2760048640,2760114175,FR
-2760114176,2760179711,IT
+2760114176,2760119967,IT
+2760119968,2760119983,GB
+2760119984,2760120839,IT
+2760120840,2760120843,PT
+2760120844,2760179711,IT
2760179712,2760245247,DE
2760245248,2760310783,GB
2760310784,2760376319,SE
@@ -53844,7 +54402,8 @@
2773090304,2773221375,US
2773221376,2773286911,JP
2773286912,2773745663,US
-2773745664,2773794815,NZ
+2773745664,2773778431,NZ
+2773778432,2773794815,HK
2773794816,2773798911,IN
2773798912,2773803007,NZ
2773803008,2773803263,GB
@@ -53958,7 +54517,9 @@
2782724096,2782789631,US
2782789632,2782855167,CH
2782855168,2782995455,US
-2782995456,2782995967,CA
+2782995456,2782995526,CA
+2782995527,2782995527,US
+2782995528,2782995967,CA
2782995968,2783002623,US
2783002624,2783002879,DK
2783002880,2783003135,US
@@ -54112,7 +54673,9 @@
2809269026,2809269026,US
2809269027,2809274367,CA
2809274368,2809274623,US
-2809274624,2809277375,CA
+2809274624,2809276083,CA
+2809276084,2809276087,US
+2809276088,2809277375,CA
2809277376,2809277407,FR
2809277408,2809281575,CA
2809281576,2809281583,US
@@ -54233,11 +54796,9 @@
2818124800,2818125823,AR
2818125824,2818126847,BR
2818126848,2818127871,AR
-2818127872,2818138111,BR
-2818139136,2818143231,BR
+2818127872,2818143231,BR
2818143232,2818144255,MX
-2818144256,2818145279,BR
-2818146304,2818162687,BR
+2818144256,2818162687,BR
2818162688,2818164735,AR
2818164736,2818165759,BZ
2818165760,2818168831,BR
@@ -54260,9 +54821,11 @@
2818209792,2818210815,CO
2818210816,2818212863,BR
2818212864,2818213887,CL
-2818213888,2818221055,BR
+2818213888,2818222079,BR
2818222080,2818223103,AR
-2818223104,2818228223,BR
+2818223104,2818225151,BR
+2818225152,2818226175,EC
+2818226176,2818228223,BR
2818228224,2818229247,CR
2818229248,2818231295,BR
2818231296,2818232319,PE
@@ -54280,7 +54843,17 @@
2818586624,2818587647,AR
2818587648,2818593791,BR
2818593792,2818594815,SX
-2818594816,2818600959,BR
+2818594816,2818619391,BR
+2818619392,2818620415,AR
+2818620416,2818623487,BR
+2818623488,2818625535,AR
+2818625536,2818626559,BR
+2818626560,2818627583,HN
+2818627584,2818628607,BR
+2818628608,2818629631,MX
+2818629632,2818634751,BR
+2818634752,2818635775,CO
+2818636800,2818637823,BR
2818637824,2818670591,AU
2818670592,2822592397,US
2822592398,2822592398,IE
@@ -54306,6 +54879,35 @@
2824357888,2824358143,CA
2824358144,2824404991,US
2824404992,2824470527,ZA
+2824471552,2824472575,BR
+2824472576,2824473599,AR
+2824473600,2824474623,CO
+2824474624,2824487935,BR
+2824487936,2824488959,MX
+2824488960,2824489983,AR
+2824489984,2824492031,BR
+2824492032,2824493055,AR
+2824493056,2824494079,BR
+2824494080,2824495103,VE
+2824495104,2824496127,HN
+2824496128,2824497151,BR
+2824498176,2824499199,HN
+2824499200,2824503295,BR
+2824503296,2824504319,AR
+2824504320,2824510463,BR
+2824510464,2824511487,CL
+2824511488,2824512511,AR
+2824512512,2824515583,BR
+2824515584,2824516607,PY
+2824516608,2824520703,BR
+2824520704,2824521727,HN
+2824521728,2824526847,BR
+2824526848,2824527871,CL
+2824527872,2824528895,BR
+2824529920,2824530943,CL
+2824531968,2824532991,BR
+2824534016,2824535039,BR
+2824535040,2824536063,AR
2824536064,2824798207,US
2824798208,2824863743,TW
2824863744,2824929279,AR
@@ -54317,6 +54919,16 @@
2826108928,2826174463,KR
2826174464,2826436607,US
2826436608,2826502143,TH
+2826502144,2826510335,BR
+2826510336,2826512383,AR
+2826512384,2826513407,BR
+2826513408,2826515455,PE
+2826515456,2826516479,BR
+2826517504,2826518527,MX
+2826518528,2826522623,BR
+2826523648,2826524671,SR
+2826524672,2826525695,BR
+2826531840,2826532863,AR
2826567680,2826633215,US
2826633216,2826698751,GU
2826698752,2826829823,US
@@ -54347,7 +54959,9 @@
2828599808,2828664831,AU
2828664832,2828730367,KR
2828730368,2828795903,ZA
-2828795904,2829033471,US
+2828795904,2829029375,US
+2829029376,2829029631,CN
+2829029632,2829033471,US
2829033472,2829033727,IN
2829033728,2829041663,US
2829041664,2829041919,AU
@@ -54483,7 +55097,7 @@
2845704192,2845769727,CU
2845769728,2845786111,GA
2845786112,2845802495,NG
-2845818880,2845822975,ZA
+2845802496,2845835263,ZA
2845835264,2848212991,US
2848212992,2848215039,GB
2848215040,2848244735,US
@@ -54535,7 +55149,8 @@
2851053568,2851054591,KE
2851054592,2851055615,ZA
2851055616,2851057663,KE
-2851057664,2851059711,ZA
+2851057664,2851060735,ZA
+2851060736,2851062783,NG
2851078144,2851995647,US
2852061184,2852062207,ZA
2852062208,2852063231,CM
@@ -54645,7 +55260,7 @@
2863267840,2863595519,US
2863595520,2863661055,CA
2863661056,2863857663,US
-2863857664,2863923199,SG
+2863857664,2863923199,CN
2863923200,2864844799,US
2864844800,2864845055,NL
2864845056,2864848895,US
@@ -54994,7 +55609,9 @@
2892369920,2892374015,CA
2892374016,2892420607,US
2892420608,2892420863,CA
-2892420864,2892423167,US
+2892420864,2892421631,US
+2892421632,2892421887,CA
+2892421888,2892423167,US
2892423168,2892424191,VI
2892424192,2892425215,CA
2892425216,2892443647,US
@@ -55024,7 +55641,17 @@
2892994560,2892994815,JO
2892994816,2892995327,GB
2892995328,2892995839,AU
-2892995840,2893676543,US
+2892995840,2892996095,CA
+2892996096,2892996607,US
+2892996608,2892996863,CA
+2892996864,2892997119,AU
+2892997120,2892997375,CA
+2892997376,2892997887,AU
+2892997888,2892998655,GB
+2892998656,2892998911,HK
+2892998912,2892999167,MX
+2892999168,2892999423,MT
+2892999424,2893676543,US
2893676544,2893807615,CA
2893807616,2894921727,US
2894921728,2895118335,GB
@@ -55560,6 +56187,12 @@
2943314944,2943315967,CN
2943315968,2943318015,ID
2943318016,2943320063,JP
+2943320064,2943324159,IN
+2943324160,2943332351,CN
+2943332352,2943333375,AU
+2943333376,2943334399,IN
+2943334400,2943335423,CN
+2943335424,2943336447,IN
2943336448,2943352831,TW
2943352832,2944401407,KR
2944401408,2944925695,JP
@@ -55605,7 +56238,9 @@
2947598336,2947602431,AU
2947602432,2947603455,NZ
2947603456,2947604479,TH
-2947604480,2947612671,HK
+2947604480,2947609855,HK
+2947609856,2947610111,AF
+2947610112,2947612671,HK
2947612672,2947678207,JP
2947678208,2947743743,CN
2947743744,2947809279,JP
@@ -56463,8 +57098,10 @@
2961064960,2961065215,HK
2961065216,2961065471,AU
2961065472,2961065727,BR
-2961065728,2961065983,HK
-2961065984,2961069567,NL
+2961065728,2961066239,HK
+2961066240,2961067519,NL
+2961067520,2961067775,GB
+2961067776,2961069567,NL
2961069568,2961069823,IN
2961069824,2961072127,NL
2961072128,2961088511,UA
@@ -56522,7 +57159,7 @@
2967400448,2967404543,RU
2967404544,2967422975,RO
2967422976,2967425023,KZ
-2967425024,2967427071,DE
+2967425024,2967427071,IR
2967427072,2967428095,NL
2967428096,2967432191,RO
2967432192,2967432447,GB
@@ -57422,7 +58059,7 @@
3000317952,3000319999,PL
3000320000,3000322047,FR
3000322048,3000322303,PL
-3000322304,3000322559,RU
+3000322304,3000322559,GB
3000322560,3000322815,DE
3000322816,3000323071,RU
3000323072,3000323583,DE
@@ -57502,7 +58139,9 @@
3000606720,3000608767,UA
3000608768,3000610815,KG
3000610816,3000612863,RU
-3000612864,3000616959,PL
+3000612864,3000613241,PL
+3000613242,3000613242,PT
+3000613243,3000616959,PL
3000616960,3000621055,UA
3000621056,3000623103,PL
3000623104,3000625151,RU
@@ -58361,7 +59000,8 @@
3025403904,3025600511,CN
3025600512,3025601663,IN
3025601664,3025601791,HK
-3025601792,3025602047,IN
+3025601792,3025601919,IN
+3025601920,3025602047,CN
3025602048,3025602303,HK
3025602304,3025603071,IN
3025603072,3025603091,HK
@@ -58436,8 +59076,8 @@
3025631748,3025631767,HK
3025631768,3025631999,IN
3025632000,3025632255,HK
-3025632256,3025632415,SG
-3025632416,3025632511,IN
+3025632256,3025632423,SG
+3025632424,3025632511,IN
3025632512,3025632767,SG
3025632768,3025633535,IN
3025633536,3025633791,HK
@@ -59327,11 +59967,13 @@
3057041408,3057049599,MY
3057049600,3057050623,AU
3057050624,3057051647,SG
-3057051648,3057052415,AU
+3057051648,3057052159,AU
+3057052160,3057052415,US
3057052416,3057052671,ES
3057052672,3057052927,IL
3057052928,3057053183,GB
-3057053184,3057053695,AU
+3057053184,3057053439,US
+3057053440,3057053695,SG
3057053696,3057054719,JP
3057054720,3057055743,CN
3057055744,3057057791,JP
@@ -59359,6 +60001,13 @@
3063971840,3063988223,AU
3063988224,3064004607,JP
3064004608,3064012799,LK
+3064012800,3064013823,AU
+3064013824,3064015871,HK
+3064015872,3064016895,AU
+3064016896,3064017919,SG
+3064017920,3064018943,IN
+3064018944,3064019967,NZ
+3064019968,3064020991,HK
3064020992,3064023039,JP
3064023040,3064024063,SG
3064024064,3064025087,JP
@@ -59371,7 +60020,10 @@
3064725504,3064791039,KR
3064791040,3064807423,TW
3064807424,3064808447,IN
-3064808448,3064809471,TW
+3064808448,3064808703,VG
+3064808704,3064808959,JP
+3064808960,3064809215,VN
+3064809216,3064809471,VG
3064809472,3064810495,MY
3064810496,3064811519,HK
3064811520,3064823807,KR
@@ -59476,7 +60128,8 @@
3081846784,3081847807,TW
3081847808,3081848831,KR
3081848832,3081850879,SG
-3081850880,3081851903,HK
+3081850880,3081851391,HK
+3081851392,3081851903,SG
3081851904,3081852927,JP
3081852928,3081854975,HK
3081854976,3081859071,MN
@@ -59767,6 +60420,8 @@
3103865600,3103865855,BG
3103865856,3103866367,DE
3103866368,3103866879,UA
+3103866880,3103867135,RU
+3103867136,3103867391,NO
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
@@ -60355,6 +61010,7 @@
3104533504,3104534527,PL
3104534528,3104535551,SE
3104535552,3104536575,ES
+3104536576,3104537599,SA
3104537600,3104538623,US
3104538624,3104539647,PL
3104539648,3104540671,RU
@@ -61178,7 +61834,9 @@
3105400832,3105401855,DK
3105401856,3105402879,NL
3105402880,3105404927,RU
-3105404928,3105405951,FR
+3105404928,3105404928,FR
+3105404929,3105404929,RE
+3105404930,3105405951,FR
3105405952,3105406975,NO
3105406976,3105407999,FR
3105408000,3105410047,PL
@@ -62262,7 +62920,7 @@
3106466560,3106466815,RO
3106466816,3106467839,EE
3106467840,3106468863,IR
-3106469888,3106470911,DE
+3106468864,3106470911,DE
3106470912,3106471935,NL
3106471936,3106472959,IR
3106472960,3106473983,FR
@@ -62559,7 +63217,7 @@
3106758656,3106759679,GB
3106759680,3106760703,RU
3106760704,3106761727,IE
-3106762752,3106763775,DE
+3106761728,3106763775,DE
3106763776,3106764799,NL
3106764800,3106765823,SE
3106765824,3106766847,CZ
@@ -62890,7 +63548,8 @@
3107099648,3107099903,UA
3107099904,3107100159,CZ
3107100160,3107100415,RU
-3107100416,3107101695,CZ
+3107100416,3107100671,SK
+3107100672,3107101695,CZ
3107101696,3107102719,RU
3107102720,3107103743,GB
3107103744,3107104767,PL
@@ -62995,6 +63654,7 @@
3107205120,3107206143,BG
3107206144,3107207167,NL
3107207168,3107207423,AT
+3107207424,3107208191,RU
3107208192,3107209215,NL
3107209216,3107210239,IT
3107210240,3107213311,RU
@@ -63432,7 +64092,9 @@
3107640320,3107641343,DK
3107641344,3107643391,RU
3107643392,3107643647,GB
-3107643648,3107644415,IT
+3107643648,3107643903,IT
+3107643904,3107643904,GB
+3107643905,3107644415,IT
3107644416,3107645439,FR
3107645440,3107646463,IE
3107646464,3107647487,NL
@@ -63744,6 +64406,7 @@
3107972096,3107973119,IT
3107973120,3107974143,SA
3107974144,3107975167,IR
+3107975168,3107976191,DE
3107976192,3107977215,NL
3107977216,3107978239,AT
3107978240,3107979263,NL
@@ -64082,7 +64745,9 @@
3108333568,3108334591,SK
3108334592,3108335615,IR
3108335616,3108336639,NL
-3108336640,3108337663,GB
+3108336640,3108337151,GB
+3108337152,3108337407,ES
+3108337408,3108337663,GB
3108337664,3108338687,IR
3108338688,3108339711,RU
3108339712,3108340735,NL
@@ -65157,7 +65822,9 @@
3109465088,3109466111,DE
3109466112,3109467135,FR
3109467136,3109468159,IR
-3109468160,3109468351,GB
+3109468160,3109468322,GB
+3109468323,3109468323,ES
+3109468324,3109468351,GB
3109468352,3109468415,ES
3109468416,3109468671,GB
3109468672,3109468799,ES
@@ -65592,7 +66259,22 @@
3109921792,3109922815,IR
3109922816,3109924863,GB
3109924864,3109925887,IT
-3109925888,3109926911,GB
+3109925888,3109925967,GB
+3109925968,3109925975,DE
+3109925976,3109926015,GB
+3109926016,3109926031,DE
+3109926032,3109926143,GB
+3109926144,3109926159,FR
+3109926160,3109926175,GB
+3109926176,3109926183,ES
+3109926184,3109926207,GB
+3109926208,3109926215,ES
+3109926216,3109926279,GB
+3109926280,3109926287,DE
+3109926288,3109926335,ES
+3109926336,3109926399,GB
+3109926400,3109926655,ES
+3109926656,3109926911,IT
3109926912,3109927935,UA
3109927936,3109928959,DE
3109928960,3109929983,DK
@@ -65684,7 +66366,11 @@
3109989376,3109990399,RU
3109990400,3109991423,GB
3109991424,3109992447,NL
-3109992448,3109995519,GB
+3109992448,3109993471,GB
+3109993472,3109993727,NL
+3109993728,3109993983,FR
+3109993984,3109994239,HU
+3109994240,3109995519,GB
3109995520,3109996543,NL
3109996544,3109997567,IE
3109997568,3109998591,GB
@@ -65987,14 +66673,19 @@
3110304768,3110305791,KZ
3110305792,3110306815,NL
3110306816,3110307327,NZ
-3110307328,3110307452,BY
+3110307328,3110307452,GB
3110307453,3110307453,NL
-3110307454,3110307839,BY
+3110307454,3110307583,GB
+3110307584,3110307683,BY
+3110307684,3110307684,BR
+3110307685,3110307839,BY
3110307840,3110308863,IE
3110308864,3110309887,RS
3110309888,3110310911,DE
3110310912,3110311935,FR
-3110311936,3110315007,RU
+3110311936,3110312959,RU
+3110312960,3110313983,UA
+3110313984,3110315007,RU
3110315008,3110316031,GB
3110316032,3110317055,RU
3110317056,3110318079,PL
@@ -67311,7 +68002,8 @@
3111755776,3111756799,NO
3111756800,3111757823,NL
3111757824,3111758335,NZ
-3111758336,3111758847,HR
+3111758336,3111758591,NL
+3111758592,3111758847,HR
3111758848,3111759871,DK
3111759872,3111760895,IS
3111760896,3111761919,NL
@@ -67988,6 +68680,205 @@
3112520704,3112521727,PT
3112521728,3112522751,FR
3112522752,3112523775,SA
+3112523776,3112524799,PL
+3112524800,3112525823,IT
+3112525824,3112526847,ES
+3112526848,3112527871,CZ
+3112527872,3112528895,DE
+3112528896,3112529919,NL
+3112529920,3112530943,DE
+3112530944,3112531967,FR
+3112531968,3112532991,ES
+3112532992,3112534015,KW
+3112534016,3112535039,FR
+3112535040,3112536063,HR
+3112536064,3112537087,CZ
+3112537088,3112538111,NO
+3112538112,3112539135,CZ
+3112539136,3112540159,NL
+3112540160,3112541183,IR
+3112541184,3112542207,GB
+3112542208,3112543231,PL
+3112543232,3112544255,IR
+3112544256,3112545279,GB
+3112545280,3112546303,DE
+3112546304,3112547327,GB
+3112547328,3112548351,SA
+3112548352,3112549375,SI
+3112549376,3112550399,CZ
+3112550400,3112551423,GB
+3112551424,3112552447,CZ
+3112552448,3112553471,ES
+3112553472,3112554495,SE
+3112554496,3112555519,CH
+3112555520,3112556543,IR
+3112556544,3112557567,IT
+3112557568,3112558591,GB
+3112558592,3112559615,IQ
+3112559616,3112560639,RU
+3112560640,3112561663,FR
+3112561664,3112562687,DE
+3112562688,3112563711,CZ
+3112563712,3112564735,AE
+3112564736,3112565759,GB
+3112565760,3112566783,US
+3112566784,3112567807,CZ
+3112567808,3112568831,DE
+3112568832,3112569855,IT
+3112569856,3112571903,SE
+3112571904,3112572927,DE
+3112572928,3112573951,BE
+3112573952,3112574975,DK
+3112574976,3112577023,RU
+3112577024,3112578047,ES
+3112578048,3112579071,DE
+3112579072,3112580095,GB
+3112580096,3112581119,IT
+3112581120,3112582143,NL
+3112582144,3112583167,CZ
+3112583168,3112584191,NL
+3112584192,3112585215,IT
+3112585216,3112586239,RU
+3112586240,3112587263,LU
+3112587264,3112588287,HU
+3112588288,3112589311,DE
+3112589312,3112590335,FI
+3112590336,3112591359,SE
+3112591360,3112592383,IR
+3112592384,3112593407,FI
+3112593408,3112594431,GB
+3112594432,3112595455,DE
+3112595456,3112596479,GR
+3112596480,3112597503,CY
+3112597504,3112598527,RU
+3112598528,3112599551,NO
+3112599552,3112600575,DE
+3112600576,3112601599,SY
+3112601600,3112602623,ES
+3112602624,3112603647,IT
+3112603648,3112604671,IE
+3112604672,3112605695,RU
+3112605696,3112606719,IT
+3112606720,3112607743,FR
+3112607744,3112608767,CZ
+3112608768,3112609791,CH
+3112609792,3112610815,TJ
+3112610816,3112611839,GE
+3112611840,3112612863,LB
+3112612864,3112613887,GB
+3112613888,3112614911,TR
+3112614912,3112615935,SK
+3112615936,3112616959,BG
+3112616960,3112617983,GB
+3112617984,3112620031,RU
+3112620032,3112621055,NL
+3112621056,3112622079,SK
+3112622080,3112623103,NL
+3112623104,3112624127,DE
+3112624128,3112625151,GB
+3112625152,3112626175,BG
+3112626176,3112627199,RU
+3112627200,3112628223,KZ
+3112628224,3112629247,DE
+3112629248,3112630271,NO
+3112630272,3112631295,NL
+3112631296,3112632319,DK
+3112632320,3112633343,PL
+3112633344,3112634367,CZ
+3112634368,3112635391,DE
+3112635392,3112636415,BE
+3112636416,3112637439,AT
+3112637440,3112638463,CZ
+3112638464,3112639487,DE
+3112639488,3112640511,IR
+3112640512,3112641535,DE
+3112641536,3112642559,GB
+3112642560,3112644607,TR
+3112644608,3112645631,SY
+3112645632,3112646655,DE
+3112646656,3112647679,GB
+3112647680,3112648703,DK
+3112648704,3112649727,RO
+3112649728,3112650751,IQ
+3112650752,3112652799,IR
+3112652800,3112653823,RU
+3112653824,3112654847,IR
+3112654848,3112655871,PL
+3112655872,3112656895,IT
+3112656896,3112657919,CY
+3112657920,3112658943,IT
+3112658944,3112659967,GB
+3112659968,3112660991,TR
+3112660992,3112662015,IT
+3112662016,3112663039,ES
+3112663040,3112664063,PL
+3112664064,3112665087,FR
+3112665088,3112666111,GB
+3112666112,3112667135,CZ
+3112667136,3112668159,CH
+3112668160,3112669183,BE
+3112669184,3112670207,CZ
+3112670208,3112671231,RU
+3112671232,3112672255,US
+3112672256,3112673279,DE
+3112673280,3112674303,FR
+3112674304,3112676351,GB
+3112676352,3112677375,RU
+3112677376,3112678399,FR
+3112678400,3112679423,RU
+3112679424,3112680447,BG
+3112680448,3112681471,IQ
+3112681472,3112682495,PL
+3112682496,3112683519,CZ
+3112683520,3112684543,JO
+3112684544,3112685567,ES
+3112685568,3112686591,GB
+3112687616,3112688639,FR
+3112688640,3112689663,TR
+3112689664,3112690687,PL
+3112690688,3112691711,IR
+3112691712,3112692735,RU
+3112692736,3112693759,FR
+3112693760,3112694783,NL
+3112694784,3112695807,GB
+3112695808,3112696831,LU
+3112696832,3112697855,US
+3112697856,3112699903,NL
+3112699904,3112700927,RO
+3112700928,3112701951,KZ
+3112701952,3112702975,MD
+3112702976,3112703231,SE
+3112703232,3112703487,FI
+3112703488,3112703743,DK
+3112703744,3112703999,NO
+3112704000,3112705023,DE
+3112705024,3112706047,ES
+3112706048,3112707071,RU
+3112707072,3112708095,FI
+3112708096,3112709119,FR
+3112709120,3112710143,IL
+3112710144,3112711167,NO
+3112711168,3112712191,PT
+3112712192,3112713215,TR
+3112713216,3112714239,AT
+3112714240,3112715263,NL
+3112715264,3112717311,GB
+3112717312,3112718335,RU
+3112718336,3112719359,AT
+3112719360,3112720383,TR
+3112720384,3112721407,ES
+3112721408,3112722431,PL
+3112722432,3112723455,BG
+3112723456,3112724479,IR
+3112724480,3112725503,GB
+3112725504,3112726527,CZ
+3112726528,3112727551,DE
+3112727552,3112728575,DK
+3112728576,3112729599,CH
+3112729600,3112730623,IT
+3112730624,3112731647,NO
+3112731648,3112732671,PL
+3112732672,3112733695,IT
3113710318,3113710318,CA
3120562176,3120594943,CO
3120594944,3120599039,AR
@@ -68860,7 +69751,9 @@
3164976160,3164976295,FR
3164976296,3164976303,IT
3164976304,3164995583,FR
-3164995584,3165040639,NL
+3164995584,3165032447,NL
+3165032448,3165036543,GB
+3165036544,3165040639,NL
3165040640,3165044735,SG
3165044736,3165048831,NL
3165048832,3165061119,SG
@@ -68979,7 +69872,7 @@
3167899648,3167902719,RO
3167902720,3167902975,BE
3167902976,3167903231,NL
-3167903232,3167903743,RO
+3167903232,3167903743,DE
3167903744,3167932415,IR
3167932416,3167933439,CH
3167933440,3167933695,RO
@@ -69117,7 +70010,8 @@
3168192000,3168192255,GB
3168192256,3168192511,RO
3168192512,3168194559,MD
-3168194560,3168198655,RO
+3168194560,3168196607,RO
+3168196608,3168198655,IR
3168198656,3168199167,ES
3168199168,3168199679,RO
3168199680,3168200703,MD
@@ -69216,7 +70110,9 @@
3169928192,3169928447,SE
3169928448,3169935359,RO
3169935360,3169937407,ES
-3169937408,3169951743,RO
+3169937408,3169946623,RO
+3169946624,3169947135,IT
+3169947136,3169951743,RO
3169951744,3169955839,SE
3169955840,3169960191,RO
3169960192,3169960447,NL
@@ -70384,7 +71280,8 @@
3210765056,3210765071,SE
3210765072,3210765311,BR
3210765312,3210765567,CL
-3210765568,3210766079,US
+3210765568,3210765823,US
+3210765824,3210766079,ES
3210766080,3210766335,CL
3210766336,3210766591,US
3210766592,3210766847,CL
@@ -70924,7 +71821,21 @@
3222075136,3222075391,NL
3222075392,3222274559,US
3222274560,3222274815,AU
-3222274816,3222305535,US
+3222274816,3222275071,US
+3222275072,3222275583,JP
+3222275584,3222277631,US
+3222277632,3222278143,IT
+3222278144,3222279679,US
+3222279680,3222280191,PL
+3222280192,3222281215,US
+3222281216,3222281727,GB
+3222281728,3222284543,US
+3222284544,3222285055,BR
+3222285056,3222287359,US
+3222287360,3222287871,NL
+3222287872,3222288383,US
+3222288384,3222288895,JP
+3222288896,3222305535,US
3222305536,3222309119,SE
3222309120,3222309375,DE
3222309376,3222313727,SE
@@ -70956,9 +71867,10 @@
3222941696,3222952703,US
3222952704,3222952959,AU
3222952960,3222953215,US
-3222953216,3222953727,AU
+3222953216,3222953471,JP
+3222953472,3222953727,AU
3222953728,3222953983,US
-3222953984,3222954239,AU
+3222953984,3222954239,JP
3222954240,3222956287,US
3222956288,3222957567,FI
3222957824,3222962431,FI
@@ -71261,7 +72173,7 @@
3223964160,3223964415,US
3223964416,3223964671,AU
3223964672,3223965183,US
-3223965184,3223965439,AU
+3223965184,3223965439,ID
3223965440,3223966207,US
3223966208,3223966463,NL
3223966464,3223967743,US
@@ -71309,7 +72221,7 @@
3224030464,3224030719,US
3224030720,3224030975,CA
3224030976,3224038655,US
-3224038656,3224038911,AU
+3224038656,3224038911,JP
3224038912,3224084991,US
3224084992,3224087551,SE
3224087552,3224088063,US
@@ -71521,7 +72433,8 @@
3224884480,3224885247,US
3224885248,3224885503,CA
3224885504,3224886015,US
-3224886016,3224886527,AU
+3224886016,3224886271,AU
+3224886272,3224886527,JP
3224886528,3224887295,US
3224887296,3224887551,CA
3224887552,3224889343,US
@@ -71781,7 +72694,9 @@
3225785600,3225788159,CA
3225788160,3225807359,US
3225807360,3225807615,DE
-3225807616,3225812991,US
+3225807616,3225811711,US
+3225811712,3225811967,GB
+3225811968,3225812991,US
3225812992,3225843711,FR
3225843712,3225847039,US
3225847040,3225847551,NL
@@ -71885,9 +72800,10 @@
3226012672,3226012927,AU
3226012928,3226014463,US
3226014464,3226014975,NL
-3226014976,3226015487,AU
+3226014976,3226015231,NZ
+3226015232,3226015487,AU
3226015488,3226015743,US
-3226015744,3226016255,AU
+3226015744,3226016255,ID
3226016256,3226018303,US
3226018304,3226018559,DE
3226018560,3226021119,CH
@@ -72176,7 +73092,7 @@
3226792960,3226793215,ZA
3226793216,3226793983,DE
3226793984,3226795263,US
-3226795264,3226795519,AU
+3226795264,3226795519,NZ
3226795520,3226800127,US
3226800128,3226800639,DE
3226800640,3226811391,US
@@ -72233,7 +73149,7 @@
3227013120,3227013375,AU
3227013376,3227013887,US
3227013888,3227014399,NL
-3227014400,3227014655,AU
+3227014400,3227014655,NZ
3227014656,3227014911,NL
3227014912,3227017471,US
3227017472,3227017983,NL
@@ -72359,7 +73275,7 @@
3227405568,3227414271,US
3227414272,3227416063,GB
3227416064,3227417087,US
-3227417088,3227417343,AU
+3227417088,3227417343,BN
3227417344,3227418111,US
3227418112,3227418367,CA
3227418368,3227425791,US
@@ -72593,7 +73509,7 @@
3227846912,3227847423,US
3227847424,3227847679,NL
3227847680,3227848703,US
-3227848704,3227848959,AU
+3227848704,3227848959,NZ
3227848960,3227851775,US
3227851776,3227852031,NL
3227852032,3227853311,US
@@ -72605,7 +73521,7 @@
3227864064,3227865343,US
3227865344,3227867647,NL
3227867648,3227867903,BR
-3227867904,3227868159,AU
+3227867904,3227868159,TH
3227868160,3227872767,US
3227872768,3227873023,GB
3227873024,3227874047,NL
@@ -72617,7 +73533,9 @@
3227879680,3227879935,NL
3227879936,3227880959,US
3227880960,3227881215,MU
-3227881216,3227885823,US
+3227881216,3227883319,US
+3227883320,3227883320,CA
+3227883321,3227885823,US
3227885824,3227887871,ES
3227887872,3227888127,PR
3227888128,3227888383,NL
@@ -72687,7 +73605,8 @@
3227982848,3227985919,GB
3227985920,3227986175,DE
3227986176,3227986431,US
-3227986432,3227986943,AU
+3227986432,3227986687,AU
+3227986688,3227986943,JP
3227986944,3227987455,US
3227987456,3227987711,AU
3227987712,3227997439,US
@@ -72742,14 +73661,15 @@
3228084480,3228085247,US
3228085248,3228085503,AU
3228085504,3228100607,US
-3228100608,3228101119,AU
+3228100608,3228101119,JP
3228101120,3228102143,US
3228102144,3228102399,NL
3228102400,3228103423,US
3228103424,3228103679,CA
3228103680,3228103935,US
3228103936,3228104191,FR
-3228104192,3228104703,AU
+3228104192,3228104447,JP
+3228104448,3228104703,AU
3228104704,3228104959,NL
3228104960,3228105471,US
3228105472,3228105727,NL
@@ -72853,7 +73773,7 @@
3228348160,3228353279,US
3228353280,3228358399,SE
3228358400,3228362239,US
-3228362240,3228362495,AU
+3228362240,3228362495,TH
3228362496,3228363263,US
3228363264,3228363519,CH
3228363520,3228364287,US
@@ -72886,7 +73806,8 @@
3228405760,3228406015,FR
3228406016,3228406271,US
3228406272,3228406527,IN
-3228406528,3228407039,FR
+3228406528,3228406783,BR
+3228406784,3228407039,FR
3228407296,3228420095,DE
3228420608,3228420863,DE
3228421120,3228424447,DE
@@ -72923,7 +73844,7 @@
3228522496,3228522751,NL
3228522752,3228525823,US
3228525824,3228526079,NL
-3228526080,3228526335,AU
+3228526080,3228526335,NZ
3228526336,3228526847,NL
3228526848,3228527103,AU
3228527104,3228531711,US
@@ -73092,7 +74013,7 @@
3229382144,3229390847,US
3229390848,3229391103,AU
3229391104,3229391359,US
-3229391360,3229391615,AU
+3229391360,3229391615,CN
3229391616,3229391871,NL
3229391872,3229395455,US
3229395456,3229408255,RU
@@ -73135,7 +74056,8 @@
3229830912,3229831167,NL
3229831168,3229833471,US
3229833472,3229833727,NL
-3229833728,3229834495,AU
+3229833728,3229834239,IN
+3229834240,3229834495,AU
3229834496,3229834751,US
3229834752,3229835007,CA
3229835008,3229835263,US
@@ -73162,11 +74084,11 @@
3229878784,3229879039,IT
3229879040,3229879295,NO
3229879296,3229880063,US
-3229880064,3229880319,AU
+3229880064,3229880319,KR
3229880320,3229881087,US
3229881088,3229881343,CA
3229881344,3229884159,US
-3229884160,3229884415,AU
+3229884160,3229884415,JP
3229884416,3229884927,US
3229884928,3229885183,NL
3229885184,3229885439,BR
@@ -73222,7 +74144,8 @@
3229956864,3229958143,US
3229958144,3229958399,NL
3229958400,3229958655,US
-3229958656,3229959167,AU
+3229958656,3229958911,AU
+3229958912,3229959167,SG
3229959168,3229962079,US
3229962080,3229962111,CA
3229962112,3229968127,US
@@ -73267,7 +74190,9 @@
3230096384,3230096639,JP
3230096640,3230096895,US
3230096896,3230097151,JP
-3230097408,3230100735,JP
+3230097408,3230097663,JP
+3230098688,3230098943,JP
+3230099200,3230100735,JP
3230100736,3230100991,US
3230100992,3230101503,PR
3230101504,3230104319,US
@@ -73296,7 +74221,7 @@
3230126848,3230128895,US
3230128896,3230129151,NL
3230129152,3230129663,US
-3230129664,3230129919,AU
+3230129664,3230129919,JP
3230129920,3230130431,US
3230130432,3230130687,NL
3230130688,3230131711,US
@@ -73330,7 +74255,7 @@
3230152192,3230152447,FR
3230152448,3230153215,BF
3230153216,3230153471,FR
-3230153472,3230153727,AU
+3230153472,3230153727,PF
3230153728,3230153983,US
3230153984,3230154239,NL
3230154240,3230156543,US
@@ -73473,7 +74398,7 @@
3230825472,3230826239,ES
3230826240,3230827519,US
3230827520,3230827775,NL
-3230827776,3230828031,AU
+3230827776,3230828031,NZ
3230828032,3230828543,HU
3230828544,3230829055,GB
3230829568,3230830079,RU
@@ -73504,7 +74429,7 @@
3230845184,3230845951,US
3230845952,3230846207,CZ
3230846208,3230849535,US
-3230849536,3230850047,AU
+3230849536,3230850047,NZ
3230850048,3230851839,US
3230851840,3230852351,NL
3230852352,3230852607,BR
@@ -73646,7 +74571,7 @@
3231028736,3231042047,US
3231042048,3231042303,GU
3231042304,3231043839,US
-3231043840,3231044095,AU
+3231043840,3231044095,JP
3231044096,3231047935,US
3231047936,3231048191,GB
3231048192,3231048447,US
@@ -73875,7 +74800,7 @@
3231308288,3231308799,US
3231308800,3231309055,CA
3231310848,3231316735,US
-3231316736,3231316991,AU
+3231316736,3231316991,NZ
3231316992,3231318783,US
3231319040,3231321343,US
3231321344,3231321599,CA
@@ -73899,7 +74824,8 @@
3231478016,3231482879,US
3231482880,3231483135,BE
3231483136,3231484927,US
-3231484928,3231487999,JP
+3231484928,3231485439,JP
+3231485696,3231487999,JP
3231488512,3231488767,JP
3231489280,3231489535,US
3231489536,3231489791,JP
@@ -73907,7 +74833,7 @@
3231490048,3231490559,US
3231490560,3231490815,NL
3231490816,3231491327,US
-3231491328,3231491583,AU
+3231491328,3231491583,NZ
3231491584,3231491839,US
3231491840,3231492095,GB
3231492096,3231493631,US
@@ -74124,7 +75050,7 @@
3231793664,3231800319,US
3231800320,3231801343,CN
3231801344,3231809535,CA
-3231809536,3231810047,AU
+3231809536,3231810047,NZ
3231810048,3231842303,US
3231842304,3231843327,RU
3231843328,3231844351,NO
@@ -74368,7 +75294,7 @@
3233548800,3233549055,NL
3233549056,3233549311,BR
3233549312,3233557247,US
-3233557248,3233557503,AU
+3233557248,3233557503,NZ
3233557504,3233561855,EC
3233561856,3233562367,US
3233562368,3233562879,GB
@@ -74376,7 +75302,7 @@
3233563136,3233563903,US
3233563904,3233564159,NL
3233564160,3233564415,US
-3233564416,3233564671,AU
+3233564416,3233564671,NZ
3233564672,3233564927,US
3233564928,3233566719,JP
3233567744,3233567999,US
@@ -74422,7 +75348,8 @@
3233590016,3233590271,TW
3233590272,3233590527,TH
3233590528,3233590783,PR
-3233590784,3233591295,AU
+3233590784,3233591039,PH
+3233591040,3233591295,ID
3233591296,3233593599,US
3233593600,3233593855,NZ
3233593856,3233594111,AU
@@ -74434,7 +75361,7 @@
3233596928,3233605887,US
3233605888,3233607167,PL
3233607168,3233607935,US
-3233607936,3233608191,AU
+3233607936,3233608191,NZ
3233608192,3233609727,HU
3233609984,3233612031,US
3233612032,3233612287,NL
@@ -74445,7 +75372,7 @@
3233615616,3233617407,US
3233617408,3233617663,CA
3233617664,3233617919,NL
-3233617920,3233618175,AU
+3233617920,3233618175,JP
3233618176,3233620479,US
3233620480,3233620735,AU
3233620736,3233620991,US
@@ -74494,7 +75421,7 @@
3233664256,3233665023,US
3233665024,3233666047,AU
3233666048,3233668863,US
-3233668864,3233669119,AU
+3233668864,3233669119,PH
3233669120,3233670399,US
3233670400,3233670655,AU
3233671680,3233676031,US
@@ -74624,7 +75551,7 @@
3234008832,3234013695,US
3234013696,3234013951,AU
3234013952,3234014975,US
-3234014976,3234015487,AU
+3234014976,3234015487,KR
3234015488,3234015743,US
3234015744,3234015999,IE
3234016000,3234016255,GB
@@ -74662,7 +75589,7 @@
3234055680,3234056959,US
3234056960,3234057215,CA
3234057216,3234061055,US
-3234061056,3234061311,AU
+3234061056,3234061311,NZ
3234061312,3234064639,US
3234064640,3234064895,AU
3234064896,3234065407,US
@@ -74752,7 +75679,7 @@
3234557440,3234564607,US
3234564608,3234566911,KR
3234566912,3234568703,US
-3234568704,3234568959,AU
+3234568704,3234568959,NZ
3234568960,3234569215,US
3234569216,3234569727,AU
3234569728,3234569983,CL
@@ -74781,7 +75708,7 @@
3234589696,3234590463,US
3234590464,3234590719,CA
3234590720,3234592511,US
-3234592512,3234592767,AU
+3234592512,3234592767,TH
3234592768,3234726143,US
3234726144,3234726399,CA
3234726400,3234726911,US
@@ -74844,7 +75771,7 @@
3234826752,3234827007,CA
3234827008,3234827519,US
3234827520,3234828031,NL
-3234828032,3234828287,AU
+3234828032,3234828287,NZ
3234828288,3234828799,US
3234828800,3234829055,CL
3234829056,3234830079,US
@@ -74865,7 +75792,7 @@
3234842368,3234842623,US
3234842624,3234844415,BR
3234844416,3234853375,US
-3234853376,3234853631,AU
+3234853376,3234853631,TH
3234853632,3234853887,US
3234853888,3234854143,EC
3234854144,3234854911,US
@@ -74985,7 +75912,13 @@
3235970560,3235970815,CA
3235970816,3235971071,US
3235971072,3235971327,CA
-3235971328,3236044799,US
+3235971328,3235996671,US
+3235996672,3235996927,CA
+3235996928,3235997695,US
+3235997696,3235997951,CA
+3235997952,3235998719,US
+3235998720,3235999231,CA
+3235999232,3236044799,US
3236044800,3236052991,CA
3236052992,3236069375,US
3236069376,3236102143,CA
@@ -75003,12 +75936,28 @@
3236163520,3236163583,IE
3236163584,3236167935,US
3236167936,3236175871,CA
-3236175872,3236191487,US
-3236191744,3236200447,US
+3236175872,3236200447,US
3236200448,3236233215,MY
3236233216,3236239359,US
3236239360,3236241407,CA
-3236241408,3236291071,US
+3236241408,3236267519,US
+3236267520,3236268031,DE
+3236268032,3236268543,ES
+3236268544,3236272639,US
+3236272640,3236272895,HK
+3236272896,3236273919,US
+3236273920,3236274175,DE
+3236274176,3236275199,US
+3236275200,3236275711,FR
+3236275712,3236276223,AU
+3236276224,3236277759,US
+3236277760,3236278783,IN
+3236278784,3236281855,US
+3236281856,3236282367,SG
+3236282368,3236287487,US
+3236287488,3236287743,EC
+3236287744,3236287999,CO
+3236288000,3236291071,US
3236291072,3236291327,GB
3236291328,3236302847,US
3236306944,3236312063,US
@@ -75016,10 +75965,12 @@
3236312320,3236312575,GH
3236312576,3236312831,GR
3236312832,3236313087,QA
-3236313088,3236365567,US
+3236313088,3236314367,US
+3236314368,3236314623,GB
+3236314624,3236365567,US
3236365568,3236365823,CA
3236365824,3236368127,US
-3236368128,3236368383,AU
+3236368128,3236368383,NZ
3236368384,3236372991,US
3236372992,3236373247,AU
3236373248,3236373503,US
@@ -75145,7 +76096,11 @@
3236958208,3236962303,AU
3236962304,3236995623,US
3236995624,3236995631,NL
-3236995632,3237038079,US
+3236995632,3237003263,US
+3237003264,3237003519,GB
+3237003520,3237016831,US
+3237016832,3237017087,GB
+3237017088,3237038079,US
3237038080,3237038335,CA
3237038336,3237043967,US
3237043968,3237044223,CH
@@ -75180,7 +76135,7 @@
3237291264,3237294847,US
3237294848,3237295103,CA
3237295104,3237296639,US
-3237296640,3237297151,AU
+3237296640,3237297151,SG
3237297152,3237297407,CL
3237297408,3237300479,US
3237302528,3237305087,US
@@ -77220,7 +78175,6 @@
3244828160,3244828415,FI
3244828416,3244828671,FR
3244828672,3244828927,SA
-3244828928,3244829183,MD
3244829184,3244829439,CH
3244829440,3244829695,DK
3244829696,3244829951,IL
@@ -77266,7 +78220,6 @@
3244841216,3244841471,GB
3244841472,3244841727,DE
3244841728,3244842239,GB
-3244842496,3244842751,RU
3244842752,3244843007,DE
3244843008,3244843263,UA
3244843264,3244843519,RU
@@ -77299,7 +78252,6 @@
3244850688,3244850943,GB
3244850944,3244851455,RU
3244851456,3244851711,NL
-3244851712,3244851967,TR
3244851968,3244852223,GB
3244852224,3244852479,CH
3244852480,3244852735,UA
@@ -77499,7 +78451,6 @@
3244909312,3244909567,IL
3244909568,3244909823,RU
3244909824,3244910079,NL
-3244910080,3244910335,CY
3244910336,3244910591,DE
3244910592,3244910847,GB
3244910848,3244911103,DE
@@ -77805,7 +78756,8 @@
3245127936,3245128191,LV
3245128192,3245128447,IT
3245128448,3245128703,CH
-3245128704,3245129471,DK
+3245128704,3245129215,LU
+3245129216,3245129471,DK
3245129472,3245129983,GB
3245129984,3245130239,DE
3245130240,3245130495,PL
@@ -80152,7 +81104,11 @@
3253775808,3253775823,DE
3253775824,3253776159,GB
3253776160,3253776175,DE
-3253776176,3253796863,GB
+3253776176,3253778231,GB
+3253778232,3253778239,FR
+3253778240,3253778271,GB
+3253778272,3253778287,DE
+3253778288,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -81290,7 +82246,9 @@
3257742336,3257743359,DE
3257743360,3257748479,NL
3257748480,3257749503,DE
-3257749504,3257765887,NL
+3257749504,3257753087,NL
+3257753088,3257753343,DE
+3257753344,3257765887,NL
3257765888,3257767935,DE
3257767936,3257782271,NL
3257782272,3257784319,DE
@@ -81773,7 +82731,9 @@
3259963392,3259964415,PL
3259964416,3259964927,GB
3259964928,3259964959,NL
-3259964960,3259965439,GB
+3259964960,3259965023,GB
+3259965024,3259965031,DE
+3259965032,3259965439,GB
3259965440,3259966463,RU
3259967488,3259968511,RS
3259968512,3259969535,RU
@@ -81955,10 +82915,9 @@
3261767680,3261775871,RS
3261775872,3261776383,PL
3261776384,3261777407,RU
-3261777408,3261777449,IR
+3261777408,3261777449,GB
3261777450,3261777451,NL
-3261777452,3261777663,IR
-3261777664,3261777919,GB
+3261777452,3261777919,GB
3261777920,3261778431,PL
3261778944,3261779455,RO
3261779456,3261779967,DE
@@ -82066,7 +83025,7 @@
3262043648,3262043903,NL
3262043904,3262044159,GB
3262044160,3262044415,RS
-3262044416,3262044671,DE
+3262044416,3262044671,LU
3262044672,3262044927,GR
3262044928,3262045183,UA
3262045184,3262045439,LT
@@ -82790,8 +83749,8 @@
3264615168,3264616263,GB
3264616264,3264616271,CH
3264616272,3264616335,GB
-3264616336,3264616336,CH
-3264616337,3264617983,GB
+3264616336,3264616337,CH
+3264616338,3264617983,GB
3264617984,3264618239,US
3264618240,3264619391,GB
3264619392,3264619519,BE
@@ -83218,8 +84177,8 @@
3266781184,3266789375,PL
3266789376,3266797567,SM
3266797568,3266797823,GB
-3266797824,3266798079,ES
-3266798080,3266798847,GB
+3266797824,3266798207,ES
+3266798208,3266798847,GB
3266798848,3266798879,CZ
3266798880,3266804099,GB
3266804100,3266804100,NL
@@ -83289,9 +84248,17 @@
3267095552,3267096575,PL
3267096576,3267097599,DE
3267097600,3267098623,KZ
-3267098624,3267099391,GB
-3267099392,3267099399,BE
-3267099400,3267099647,GB
+3267098624,3267099007,GB
+3267099008,3267099043,FR
+3267099044,3267099135,GB
+3267099136,3267099263,DE
+3267099264,3267099327,NL
+3267099328,3267099383,GB
+3267099384,3267099387,NL
+3267099388,3267099399,BE
+3267099400,3267099407,GB
+3267099408,3267099415,DE
+3267099416,3267099647,GB
3267099648,3267100671,IT
3267100672,3267166207,FI
3267166208,3267231743,GB
@@ -84435,6 +85402,8 @@
3273339136,3273339391,DE
3273339392,3273340415,GB
3273340928,3273341711,FR
+3273342022,3273342022,GB
+3273342034,3273342034,GB
3273342208,3273342231,AE
3273342464,3273342975,DE
3273342976,3273343999,GB
@@ -84545,7 +85514,7 @@
3273436672,3273437183,DE
3273437184,3273437695,RO
3273438208,3273438719,IL
-3273438720,3273439231,GB
+3273438720,3273439231,UA
3273439232,3273439743,RO
3273439744,3273440255,DE
3273440256,3273440767,RO
@@ -85914,7 +86883,9 @@
3277403904,3277404159,GB
3277404160,3277404415,DE
3277404416,3277404655,IT
-3277404656,3277404671,GB
+3277404656,3277404664,GB
+3277404665,3277404665,IT
+3277404666,3277404671,GB
3277404672,3277404735,CH
3277404736,3277404927,GB
3277404928,3277405183,NL
@@ -86302,7 +87273,6 @@
3279054848,3279055359,RU
3279055360,3279055871,SA
3279056896,3279057151,RU
-3279057152,3279057407,GB
3279057408,3279057919,FR
3279058944,3279059455,UA
3279059456,3279060479,RU
@@ -87122,7 +88092,7 @@
3283977728,3283978751,RU
3283978752,3283979263,RO
3283979264,3283979775,IL
-3283979776,3283980287,NO
+3283979776,3283980287,NL
3283980288,3283980799,RO
3283980800,3283981823,CH
3283981824,3283982335,RO
@@ -87462,8 +88432,8 @@
3285120512,3285121023,RO
3285121024,3285121535,SE
3285121536,3285122047,CY
-3285122048,3285122559,GB
-3285122560,3285123071,RU
+3285122048,3285122303,GB
+3285122304,3285123071,RU
3285123072,3285188607,BE
3285188608,3285319679,RU
3285319680,3285320191,HU
@@ -87669,8 +88639,7 @@
3285913648,3285913655,IE
3285913656,3285913703,GB
3285913704,3285913711,FI
-3285913712,3285913863,GB
-3285913872,3285913903,GB
+3285913712,3285913903,GB
3285913920,3285913951,GB
3285917696,3285918207,GB
3285919744,3285921791,QA
@@ -87702,6 +88671,7 @@
3285939840,3285939967,GB
3285940736,3285940767,IT
3285941248,3285941503,ES
+3285943808,3285944063,CH
3285949604,3285949607,CH
3285949856,3285949887,ES
3285950208,3285950463,IT
@@ -88550,6 +89520,7 @@
3288782848,3288783359,NG
3288783360,3288784127,KE
3288784128,3288785407,ZA
+3288785408,3288785663,UG
3288787968,3288788223,EG
3288788224,3288792831,ZA
3288792832,3288793087,AO
@@ -88944,11 +89915,17 @@
3291549696,3291549951,LR
3291549952,3291550207,GA
3291611136,3291611647,ZA
-3291742208,3292004351,US
+3291742208,3291939062,US
+3291939063,3291939063,JP
+3291939064,3292004351,US
3292004352,3292266495,SC
3292397568,3292463103,US
3292463104,3292528639,ZA
+3292528640,3294625791,MA
+3294625792,3295674367,KE
+3295674368,3296722943,MA
3296722944,3298820095,EG
+3299344384,3299606527,TG
3299606528,3299868671,GH
3299868672,3300130815,TN
3300130816,3300392959,CI
@@ -89105,6 +90082,8 @@
3302545920,3302546431,TZ
3302546432,3302546943,SL
3302546944,3302547455,KE
+3302547456,3302547967,ZW
+3302547968,3302548479,CI
3302548480,3302548991,GH
3302548992,3302549503,ZA
3302549504,3302550015,KE
@@ -89183,7 +90162,9 @@
3304062976,3304456191,SC
3304456192,3304521727,NG
3304521728,3304587263,SC
-3304587264,3304718335,ZA
+3304587264,3304669183,ZA
+3304669184,3304685567,TZ
+3304701952,3304718335,AO
3304849408,3305111551,ZA
3305111552,3307208703,TN
3307208704,3309305855,EG
@@ -89524,7 +90505,10 @@
3322880000,3322888191,AU
3322888192,3322945535,US
3322945536,3322951679,CN
-3322951680,3322970111,US
+3322951680,3322953727,US
+3322953728,3322960895,NL
+3322960896,3322969343,US
+3322969344,3322970111,NL
3322970112,3323002879,CA
3323002880,3323003135,US
3323003392,3323004671,US
@@ -89772,7 +90756,8 @@
3325067264,3325100287,CA
3325100288,3325100543,US
3325101056,3325108223,US
-3325110272,3325128703,US
+3325110272,3325122559,US
+3325123072,3325128703,US
3325128704,3325129215,TH
3325129216,3325131775,US
3325131776,3325132031,AU
@@ -91117,7 +92102,9 @@
3344671744,3344676863,US
3344676864,3344677247,CA
3344677248,3344677263,US
-3344677264,3344677407,CA
+3344677264,3344677279,CA
+3344677280,3344677295,US
+3344677296,3344677407,CA
3344677408,3344677423,US
3344677424,3344678911,CA
3344678912,3344681983,US
@@ -91400,8 +92387,8 @@
3350823424,3350823935,US
3350823936,3350834687,CA
3350834688,3350835199,US
-3350835200,3350836735,CA
-3350836736,3350836991,US
+3350835200,3350836223,CA
+3350836224,3350836991,US
3350836992,3350837247,CA
3350837248,3350837759,US
3350837760,3350843391,CA
@@ -91653,7 +92640,9 @@
3353335336,3353335337,NL
3353335338,3353653503,US
3353653504,3353653759,GB
-3353653760,3353714431,US
+3353653760,3353688063,US
+3353688064,3353688575,GB
+3353688576,3353714431,US
3353714432,3353714687,BE
3353714688,3353722367,US
3353722368,3353722623,GB
@@ -92133,7 +93122,8 @@
3356157952,3356158207,CL
3356158208,3356158463,MX
3356158464,3356158719,CL
-3356158976,3356159999,CL
+3356158976,3356159743,CL
+3356159744,3356159999,BR
3356160000,3356160255,MX
3356160256,3356160511,GT
3356160512,3356160767,CL
@@ -93610,7 +94600,7 @@
3389035776,3389036031,SG
3389036032,3389036287,AU
3389036288,3389036543,NZ
-3389037056,3389037567,AU
+3389036800,3389037567,AU
3389037568,3389038591,NC
3389038592,3389044735,HK
3389044736,3389046783,AU
@@ -93675,7 +94665,8 @@
3389222912,3389223935,US
3389223936,3389226239,IN
3389226240,3389226495,AU
-3389226496,3389227007,IN
+3389226496,3389226751,SG
+3389226752,3389227007,IN
3389227008,3389227519,CN
3389227520,3389228031,PK
3389228032,3389228799,AU
@@ -93703,6 +94694,7 @@
3389302016,3389302527,AU
3389302528,3389302783,PK
3389302784,3389303039,VN
+3389303040,3389303295,IN
3389303296,3389303807,ID
3389303808,3389304063,IN
3389304064,3389304319,BD
@@ -93751,7 +94743,8 @@
3389407744,3389408255,CN
3389408256,3389409279,JP
3389409280,3389409791,CN
-3389409792,3389412351,AU
+3389409792,3389411327,AU
+3389411584,3389412351,AU
3389412352,3389412607,NZ
3389412608,3389412863,PH
3389412864,3389413119,AU
@@ -94088,7 +95081,9 @@
3390414336,3390414847,SG
3390414848,3390418943,JP
3390418944,3390423039,MV
-3390423040,3390439423,SG
+3390423040,3390429439,SG
+3390429440,3390429951,HK
+3390429952,3390439423,SG
3390439424,3390441471,NZ
3390441472,3390443519,TH
3390443520,3390447359,NZ
@@ -94112,9 +95107,12 @@
3390770432,3390770687,AU
3390770944,3390771199,AU
3390771200,3390775295,SG
-3390775296,3390801919,NZ
+3390775296,3390790399,NZ
+3390790400,3390790655,AU
+3390790656,3390801919,NZ
3390801920,3390802431,CN
-3390802432,3390832639,NZ
+3390802432,3390825727,NZ
+3390826496,3390832639,NZ
3390832640,3390963711,TH
3390963712,3391094783,KR
3391094784,3391356927,JP
@@ -94126,7 +95124,9 @@
3391444480,3391444991,VN
3391444992,3391453183,NZ
3391453184,3391453439,ID
-3391453440,3391487999,NZ
+3391453440,3391469055,NZ
+3391469056,3391469311,AU
+3391469312,3391487999,NZ
3391488000,3391489023,CN
3391489024,3391490047,NP
3391490048,3391492095,CN
@@ -94188,7 +95188,9 @@
3391717888,3391718399,CN
3391718400,3391718911,IN
3391718912,3391719423,JP
-3391719424,3391721471,NZ
+3391719424,3391720959,NZ
+3391720960,3391721215,CN
+3391721216,3391721471,NZ
3391721472,3391721983,AU
3391721984,3391722239,TW
3391722240,3391722495,PH
@@ -94352,8 +95354,7 @@
3392130816,3392135167,ID
3392135168,3392143359,TH
3392143360,3392208895,JP
-3392208896,3392217343,NZ
-3392217600,3392287743,NZ
+3392208896,3392287743,NZ
3392287744,3392288767,NP
3392288768,3392324607,NZ
3392324608,3392325119,AU
@@ -94435,6 +95436,7 @@
3392487424,3392499711,IN
3392499712,3392503807,JP
3392503808,3392505343,HK
+3392505344,3392505855,IN
3392506880,3392507903,HK
3392507904,3392508927,KH
3392508928,3392510975,HK
@@ -94600,7 +95602,6 @@
3393021440,3393021695,IN
3393021696,3393021951,HK
3393021952,3393022463,ID
-3393022464,3393022975,SG
3393022976,3393023231,PH
3393023232,3393023487,AU
3393023488,3393023743,SG
@@ -94611,6 +95612,7 @@
3393025280,3393025535,IN
3393025536,3393025791,PH
3393025792,3393026047,AU
+3393026048,3393026559,IN
3393026560,3393026815,AU
3393027072,3393028095,ID
3393028096,3393060863,AU
@@ -94831,7 +95833,9 @@
3394035712,3394039807,MY
3394039808,3394040575,SG
3394040576,3394040831,IN
-3394040832,3394041855,SG
+3394040832,3394041087,SG
+3394041088,3394041343,MY
+3394041344,3394041855,SG
3394041856,3394042879,AU
3394042880,3394043903,CN
3394043904,3394060287,HK
@@ -94924,6 +95928,7 @@
3394502656,3394503679,HK
3394503680,3394507263,CN
3394507264,3394507775,JP
+3394507776,3394508287,AU
3394508544,3394508799,PH
3394508800,3394510847,CN
3394510848,3394514943,BD
@@ -95131,10 +96136,11 @@
3395180032,3395180287,JP
3395180288,3395180543,HK
3395180544,3395181055,VN
+3395181056,3395181567,TH
3395181568,3395182591,CN
3395182592,3395190783,SG
3395190784,3395198975,JP
-3395198976,3395203071,MY
+3395200768,3395201023,MY
3395203072,3395215359,JP
3395215360,3395219455,HK
3395219456,3395223551,TH
@@ -95166,6 +96172,7 @@
3397026304,3397026815,TH
3397026816,3397027071,CN
3397027072,3397027327,PH
+3397027328,3397027839,IN
3397027840,3397029887,JP
3397029888,3397033983,MY
3397033984,3397038079,ID
@@ -95175,7 +96182,6 @@
3397070848,3397074943,PH
3397074944,3397083135,HK
3397083136,3397087231,CN
-3397087232,3397088255,JP
3397088256,3397090303,CN
3397090304,3397091327,TW
3397091328,3397093375,GU
@@ -95224,8 +96230,7 @@
3397213184,3397213439,IN
3397213440,3397213695,AU
3397213696,3397214207,ID
-3397214208,3397214719,BD
-3397214720,3397215231,AU
+3397214208,3397215231,AU
3397215232,3397215743,ID
3397215744,3397216255,PH
3397216256,3397216767,AU
@@ -95259,7 +96264,9 @@
3397323776,3397328895,CN
3397328896,3397330943,ID
3397330944,3397337087,CN
-3397337088,3397338375,HK
+3397337088,3397338039,HK
+3397338040,3397338043,SG
+3397338044,3397338375,HK
3397338376,3397338379,JP
3397338380,3397339647,HK
3397339648,3397339687,SG
@@ -95306,8 +96313,7 @@
3397500928,3397501951,BD
3397501952,3397503999,IN
3397504000,3397505023,TH
-3397505280,3397505535,IN
-3397506048,3397506559,IN
+3397505024,3397506559,IN
3397506560,3397506815,AU
3397506816,3397507071,IN
3397507072,3397507583,ID
@@ -95517,7 +96523,9 @@
3398640672,3398640695,SG
3398640696,3398642431,JP
3398642432,3398642687,AU
-3398642688,3398646783,JP
+3398642688,3398643679,JP
+3398643680,3398643695,NZ
+3398643696,3398646783,JP
3398646784,3398647039,AU
3398647040,3398647807,JP
3398647808,3398655999,IN
@@ -96483,7 +97491,8 @@
3406835968,3406836735,CN
3406836736,3406838271,AU
3406838272,3406838527,CN
-3406838528,3406857471,AU
+3406838528,3406839551,AU
+3406839808,3406857471,AU
3406857472,3406857727,CN
3406857728,3406864639,AU
3406864640,3406865151,CN
@@ -96743,7 +97752,8 @@
3407240192,3407241215,CN
3407241216,3407241983,AU
3407241984,3407242239,CN
-3407242240,3407243775,AU
+3407242240,3407243263,AU
+3407243264,3407243775,HK
3407243776,3407244031,CN
3407244032,3407244287,AU
3407244800,3407247871,AU
@@ -96772,7 +97782,8 @@
3407282176,3407282431,CN
3407282688,3407294207,AU
3407294208,3407294463,CN
-3407294464,3407297791,AU
+3407294464,3407295487,AU
+3407295744,3407297791,AU
3407297792,3407298559,CN
3407298560,3407300863,AU
3407300864,3407301119,CN
@@ -96817,7 +97828,8 @@
3407352320,3407352575,CN
3407352576,3407354623,AU
3407354624,3407354879,CN
-3407354880,3407358719,AU
+3407354880,3407357439,AU
+3407357696,3407358719,AU
3407358720,3407358975,CN
3407358976,3407360511,AU
3407360512,3407361023,ID
@@ -96969,7 +97981,9 @@
3407523328,3407523583,AU
3407523584,3407523839,JP
3407523840,3407524095,CN
-3407524096,3407526143,AU
+3407524096,3407524607,AU
+3407524608,3407524863,NZ
+3407524864,3407526143,AU
3407526144,3407526399,CN
3407526400,3407530495,AU
3407530496,3407531007,CN
@@ -97027,7 +98041,9 @@
3407595520,3407595775,CN
3407595776,3407596031,AU
3407596032,3407596287,CN
-3407596288,3407603967,AU
+3407596288,3407602943,AU
+3407602944,3407603199,JP
+3407603200,3407603967,AU
3407603968,3407604223,CN
3407604224,3407604479,AU
3407604480,3407604735,IN
@@ -97035,7 +98051,9 @@
3407606016,3407606271,CN
3407606272,3407608319,AU
3407608320,3407608575,CN
-3407608576,3407612415,AU
+3407608576,3407608715,AU
+3407608716,3407608736,JP
+3407608737,3407612415,AU
3407612416,3407612671,CN
3407612672,3407612927,AU
3407612928,3407613183,CN
@@ -97155,7 +98173,7 @@
3407748608,3407750655,AU
3407750656,3407751167,SG
3407751168,3407753215,AU
-3407753216,3407753727,SG
+3407753216,3407753727,HK
3407753728,3407757823,AU
3407757824,3407758079,CN
3407758080,3407761663,AU
@@ -97168,7 +98186,8 @@
3407771904,3407772159,CN
3407772160,3407772415,AU
3407772416,3407772671,CN
-3407772672,3407779839,AU
+3407772672,3407773439,AU
+3407773696,3407779839,AU
3407779840,3407780095,CN
3407780096,3407780863,AU
3407780864,3407781119,CN
@@ -97220,7 +98239,9 @@
3407826944,3407827199,CN
3407827200,3407828223,AU
3407828224,3407828479,CN
-3407828480,3407831295,AU
+3407828480,3407828991,AU
+3407828992,3407829503,US
+3407829504,3407831295,AU
3407831296,3407831551,CN
3407831552,3407833343,AU
3407833344,3407833855,CN
@@ -97294,7 +98315,7 @@
3407910912,3407911167,CN
3407911168,3407919615,AU
3407919616,3407920127,CN
-3407920128,3407921151,AU
+3407920384,3407921151,AU
3407921152,3407921407,CN
3407921408,3407922175,AU
3407922176,3407922431,CN
@@ -97418,7 +98439,8 @@
3408055296,3408056319,CN
3408056320,3408062463,AU
3408062464,3408062719,CN
-3408062720,3408064511,AU
+3408062720,3408063999,AU
+3408064256,3408064511,AU
3408064512,3408064767,CN
3408065024,3408065279,CN
3408065280,3408065791,AU
@@ -97438,7 +98460,7 @@
3409387008,3409387263,CN
3409387264,3409396479,AU
3409396480,3409396735,PH
-3409396736,3409403135,AU
+3409396992,3409403135,AU
3409403136,3409403391,CN
3409403392,3409405183,AU
3409405184,3409405439,CN
@@ -97452,7 +98474,9 @@
3409412096,3409412607,CN
3409412608,3409416703,AU
3409416704,3409417215,CN
-3409417216,3409420287,AU
+3409417216,3409418495,AU
+3409418496,3409418751,PL
+3409418752,3409420287,AU
3409420288,3409420543,IN
3409420544,3409423615,AU
3409423616,3409423871,IN
@@ -97990,7 +99014,9 @@
3413251072,3413262335,JP
3413262336,3413263359,PH
3413263360,3413264383,IN
-3413264384,3413265407,SG
+3413264384,3413264639,ID
+3413264640,3413264895,AU
+3413264896,3413265407,SG
3413265408,3413266431,AU
3413266432,3413270527,CN
3413270528,3413278719,TH
@@ -98167,7 +99193,12 @@
3415080960,3415082239,MY
3415082240,3415083007,SG
3415083008,3415083519,AU
-3415083520,3415088127,SG
+3415083520,3415084031,SG
+3415084032,3415084543,CN
+3415084544,3415085055,US
+3415085056,3415087615,SG
+3415087616,3415087871,US
+3415087872,3415088127,SG
3415088128,3415089151,HK
3415089152,3415097343,MY
3415097344,3415103487,ID
@@ -98302,7 +99333,9 @@
3416327168,3416328191,HK
3416328192,3416330239,AU
3416330240,3416334335,ID
-3416334336,3416342527,SG
+3416334336,3416339455,SG
+3416339456,3416339711,IN
+3416339712,3416342527,SG
3416342528,3416371199,AU
3416371200,3416371711,PH
3416371712,3416371967,VN
@@ -98580,7 +99613,9 @@
3418282240,3418282495,AU
3418282496,3418283519,PH
3418283520,3418284031,AU
-3418284032,3418286079,SG
+3418284032,3418285567,SG
+3418285568,3418285823,JP
+3418285824,3418286079,SG
3418286080,3418287103,AU
3418287104,3418288127,SG
3418288128,3418290175,ID
@@ -98595,7 +99630,9 @@
3418294272,3418296319,VN
3418296320,3418297343,HK
3418297344,3418298367,CN
-3418298368,3418299391,HK
+3418298368,3418298879,HK
+3418298880,3418299135,CN
+3418299136,3418299391,HK
3418299392,3418300415,CN
3418300416,3418300927,BD
3418300928,3418301439,IN
@@ -99517,7 +100554,9 @@
3435271680,3435507711,US
3435507712,3435511807,CA
3435511808,3436249343,US
-3436249344,3436255743,CA
+3436249344,3436252415,CA
+3436252416,3436253183,US
+3436253184,3436255743,CA
3436255744,3436256255,US
3436256256,3436278271,CA
3436278272,3436278527,US
@@ -99722,7 +100761,9 @@
3448987648,3448989695,IN
3448989696,3448990719,HK
3448990720,3448991743,IN
-3448991744,3449098751,US
+3448991744,3449098239,US
+3449098240,3449098495,GB
+3449098496,3449098751,US
3449098752,3449099263,DE
3449099264,3449100799,US
3449100800,3449101311,AU
@@ -100197,7 +101238,9 @@
3453408256,3453409023,BB
3453409024,3453409535,KN
3453409536,3453411327,BB
-3453411328,3453552127,US
+3453411328,3453419519,US
+3453419520,3453427711,MO
+3453427712,3453552127,US
3453552128,3453552383,GB
3453552384,3453552639,US
3453552640,3453552895,GB
@@ -100980,8 +102023,7 @@
3464421632,3464421887,CA
3464421888,3464426495,US
3464426496,3464426751,GD
-3464426752,3464428543,US
-3464428800,3464429311,US
+3464426752,3464429311,US
3464429312,3464429567,CA
3464429568,3464548351,US
3464548352,3464548607,AG
@@ -102457,7 +103499,9 @@
3495375872,3495376895,CA
3495376896,3495399423,US
3495399424,3495400447,KN
-3495400448,3495406335,US
+3495400448,3495405055,US
+3495405056,3495405567,HK
+3495405568,3495406335,US
3495406336,3495406591,LB
3495406592,3495412735,US
3495412736,3495413759,CA
@@ -103646,7 +104690,9 @@
3518472192,3518762495,US
3518762496,3518762751,GB
3518762752,3518765311,US
-3518765312,3518765567,CA
+3518765312,3518765343,CA
+3518765344,3518765351,US
+3518765352,3518765567,CA
3518765568,3518912511,US
3518912512,3518912767,IN
3518912768,3518918143,US
@@ -103811,7 +104857,8 @@
3523297280,3523317759,PH
3523317760,3523330047,JP
3523330048,3523338239,AU
-3523338240,3523340287,MY
+3523338240,3523339775,MY
+3523339776,3523340287,HK
3523340288,3523341311,AU
3523341312,3523342335,JP
3523342336,3523346431,BD
@@ -103860,13 +104907,67 @@
3523686400,3523688447,AU
3523688448,3523690495,CN
3523690496,3523698687,IN
-3523698688,3523700735,JP
+3523698688,3523698863,HK
+3523698864,3523698879,JP
+3523698880,3523698943,HK
+3523698944,3523698975,JP
+3523698976,3523699007,HK
+3523699008,3523699071,JP
+3523699072,3523699199,HK
+3523699200,3523699711,US
+3523699712,3523700223,JP
+3523700224,3523700287,US
+3523700288,3523700351,JP
+3523700352,3523700415,US
+3523700416,3523700671,JP
+3523700672,3523700679,HK
+3523700680,3523700735,JP
3523700736,3523701759,HK
-3523701760,3523707903,JP
+3523701760,3523702783,JP
+3523702784,3523702799,SG
+3523702800,3523702807,SN
+3523702808,3523702847,SG
+3523702848,3523702871,JP
+3523702872,3523702911,SG
+3523702912,3523703039,JP
+3523703040,3523703103,SG
+3523703104,3523704703,JP
+3523704704,3523704719,SG
+3523704720,3523704751,JP
+3523704752,3523704783,SG
+3523704784,3523704791,JP
+3523704792,3523704831,SG
+3523704832,3523704839,HK
+3523704840,3523706879,JP
+3523706880,3523707039,AU
+3523707040,3523707071,JP
+3523707072,3523707103,AU
+3523707104,3523707119,JP
+3523707120,3523707135,AU
+3523707136,3523707903,GB
3523707904,3523708159,AU
-3523708160,3523723263,JP
+3523708160,3523708287,JP
+3523708288,3523708319,AU
+3523708320,3523708351,JP
+3523708352,3523708415,AU
+3523708416,3523708927,JP
+3523708928,3523708975,AU
+3523708976,3523708991,JP
+3523708992,3523709183,AU
+3523709184,3523713023,JP
+3523713024,3523713135,AU
+3523713136,3523714047,JP
+3523714048,3523714719,AU
+3523714720,3523714799,JP
+3523714800,3523714943,AU
+3523714944,3523715007,GB
+3523715008,3523715031,JP
+3523715032,3523715071,AU
+3523715072,3523723263,JP
3523723264,3523725311,US
-3523725312,3523739647,JP
+3523725312,3523737599,JP
+3523737600,3523738111,US
+3523738112,3523739647,JP
3523739648,3524001791,AU
3524001792,3524132863,CN
3524132864,3524145151,PH
@@ -103875,9 +104976,20 @@
3524157440,3524161535,AU
3524161536,3524247551,CN
3524247552,3524263935,AU
-3524263936,3524274175,PH
+3524263936,3524266495,PH
+3524266496,3524266751,SG
+3524266752,3524274175,PH
3524274176,3524274431,SG
3524274432,3524280319,PH
+3524280320,3524281343,JP
+3524281344,3524282367,AU
+3524282368,3524288511,IN
+3524288512,3524289535,HK
+3524289536,3524290559,IN
+3524290560,3524291583,CN
+3524291584,3524294655,IN
+3524294656,3524295679,SG
+3524295680,3524296703,PH
3524296704,3524313087,CN
3524313088,3524329471,KR
3524329472,3524362239,TW
@@ -103895,7 +105007,9 @@
3524745984,3524747263,MP
3524747264,3524755455,PH
3524755456,3524763647,AU
-3524763648,3524788223,PH
+3524763648,3524781791,PH
+3524781792,3524781823,SG
+3524781824,3524788223,PH
3524788224,3524853759,SG
3524853760,3526361087,CN
3526361088,3526393855,NZ
@@ -103923,7 +105037,9 @@
3526926336,3526934527,JP
3526934528,3526942719,CN
3526942720,3526950911,AU
-3526950912,3527004159,JP
+3526950912,3527002111,JP
+3527002112,3527003647,IN
+3527003648,3527004159,JP
3527004160,3527008255,ID
3527008256,3527016447,KR
3527016448,3527933951,TW
@@ -104398,7 +105514,9 @@
3559200256,3559200511,FI
3559200512,3559200639,SE
3559200640,3559200671,FI
-3559200672,3559202815,SE
+3559200672,3559201607,SE
+3559201608,3559201615,FI
+3559201616,3559202815,SE
3559202816,3559211007,DE
3559211008,3559219199,SK
3559219200,3559227391,SE
@@ -105476,7 +106594,9 @@
3567389440,3567390975,DE
3567390976,3567391231,GB
3567391232,3567391487,DE
-3567391488,3567394815,GB
+3567391488,3567393801,GB
+3567393802,3567393802,SI
+3567393803,3567394815,GB
3567394816,3567395071,IE
3567395072,3567403007,GB
3567403008,3567419391,IT
@@ -105575,9 +106695,7 @@
3568795648,3568803839,GB
3568803840,3568812031,IT
3568812032,3568828415,ES
-3568828416,3568904191,DE
-3568904192,3568904447,GB
-3568904448,3568959487,DE
+3568828416,3568959487,DE
3568959488,3569025023,AT
3569025024,3569057791,NL
3569057792,3569074687,GB
@@ -106117,13 +107235,13 @@
3579740160,3579772927,IE
3579772928,3579838463,DE
3579838464,3580100607,ES
-3580100608,3580103679,SE
-3580103680,3580106751,LV
-3580106752,3580112895,SE
+3580100608,3580103167,SE
+3580103168,3580107775,LV
+3580107776,3580112895,SE
3580112896,3580116991,LV
3580116992,3580131327,SE
-3580131328,3580133375,LV
-3580133376,3580135423,SE
+3580131328,3580134399,LV
+3580134400,3580135423,SE
3580135424,3580135935,EE
3580135936,3580136447,SE
3580136448,3580138495,HR
@@ -106133,32 +107251,38 @@
3580162048,3580164095,EE
3580164096,3580165887,SE
3580165888,3580166143,NL
-3580166144,3580199935,SE
+3580166144,3580198911,SE
+3580198912,3580199551,LV
+3580199552,3580199935,SE
3580199936,3580200447,EE
3580200448,3580200959,SE
3580200960,3580203007,LT
-3580203008,3580204543,SE
+3580203008,3580203647,SE
+3580203648,3580203775,AT
+3580203776,3580204543,SE
3580204544,3580205055,NL
3580205056,3580206079,SE
3580206080,3580207103,HR
3580207104,3580208127,LV
3580208128,3580209151,EE
3580209152,3580213247,HR
-3580213248,3580214271,LV
-3580214272,3580215295,SE
+3580213248,3580215295,LV
3580215296,3580217343,EE
-3580217344,3580221439,SE
-3580221440,3580221951,LV
+3580217344,3580220415,SE
+3580220416,3580221951,LV
3580221952,3580223487,SE
3580223488,3580231679,DE
-3580231680,3580232447,SE
+3580231680,3580231935,SE
+3580231936,3580232191,LV
+3580232192,3580232447,SE
3580232448,3580233215,LT
3580233216,3580233727,SE
3580233728,3580235263,LT
3580235264,3580235775,SE
3580235776,3580236799,LT
3580236800,3580237567,LV
-3580237568,3580239871,SE
+3580237568,3580237823,SE
+3580237824,3580239871,LV
3580239872,3580241919,EE
3580241920,3580243967,SE
3580243968,3580244991,EE
@@ -106167,7 +107291,8 @@
3580248064,3580254207,EE
3580254208,3580255231,LV
3580255232,3580258303,DE
-3580258304,3580258815,SE
+3580258304,3580258559,LV
+3580258560,3580258815,SE
3580258816,3580260351,DE
3580260352,3580265471,AT
3580265472,3580266495,SE
@@ -106322,7 +107447,9 @@
3582443520,3582451711,DE
3582451712,3582459903,LU
3582459904,3582468095,NL
-3582468096,3582476287,SE
+3582468096,3582476239,SE
+3582476240,3582476247,DK
+3582476248,3582476287,SE
3582476288,3582484479,DE
3582484480,3582492671,CI
3582492672,3582509055,IT
@@ -107210,6 +108337,7 @@
3589810432,3589810687,PL
3589810688,3589816319,RU
3589825792,3589826047,DE
+3589826718,3589826718,AT
3589827584,3589827647,DE
3589827712,3589827839,DE
3589828736,3589828991,NL
@@ -109385,7 +110513,9 @@
3650920928,3650920959,LB
3650920960,3650920991,GB
3650920992,3650921007,IL
-3650921008,3650922799,GB
+3650921008,3650921087,GB
+3650921088,3650921215,GR
+3650921216,3650922799,GB
3650922800,3650922815,FR
3650922816,3650926335,GB
3650926336,3650926591,DE
@@ -109716,7 +110846,7 @@
3663992320,3663992575,MY
3663992576,3663993599,NZ
3663993600,3663996159,ID
-3663996160,3663996415,AU
+3663996160,3663996415,BD
3663996416,3663996671,TH
3663996672,3663997183,AU
3663997184,3663997439,ID
@@ -109901,7 +111031,7 @@
3707207680,3707208703,BD
3707208704,3707209727,NZ
3707209728,3707211775,CN
-3707211776,3707215871,ID
+3707211776,3707215871,NZ
3707215872,3707217919,BD
3707217920,3707219967,ID
3707219968,3707222015,AU
diff --git a/src/config/geoip6 b/src/config/geoip6
index 94e13e255c..228b046ec4 100644
--- a/src/config/geoip6
+++ b/src/config/geoip6
@@ -1,7 +1,8 @@
-# Last updated based on January 5 2016 Maxmind GeoLite2 Country
+# Last updated based on February 2 2016 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
+76:96:42:219::,76:96:42:219:ffff:ffff:ffff:ffff,US
600:8801:9400:580::,600:8801:9400:580::,US
2001:200::,2001:200::7fff:ffff:ffff:ffff:ffff,JP
2001:200:120::,2001:200:120:7fff:ffff:ffff:ffff:ffff,JP
@@ -90,7 +91,9 @@
2001:420:4084::,2001:420:4084:7fff:ffff:ffff:ffff:ffff,GB
2001:420:4084:8000::,2001:420:4085:ffff:ffff:ffff:ffff:ffff,US
2001:420:4086::,2001:420:4086:7fff:ffff:ffff:ffff:ffff,GB
-2001:420:4086:8000::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US
+2001:420:4086:8000::,2001:420:4490:ffff:ffff:ffff:ffff:ffff,US
+2001:420:4491::,2001:420:4491:7fff:ffff:ffff:ffff:ffff,NL
+2001:420:4491:8000::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US
2001:420:44da::,2001:420:44da:7fff:ffff:ffff:ffff:ffff,ES
2001:420:44da:8000::,2001:420:44ef:ffff:ffff:ffff:ffff:ffff,US
2001:420:44f0::,2001:420:44f0:7fff:ffff:ffff:ffff:ffff,FR
@@ -114,13 +117,17 @@
2001:420:5505::,2001:420:5505:7fff:ffff:ffff:ffff:ffff,IN
2001:420:5505:8000::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US
2001:420:5883::,2001:420:5883:7fff:ffff:ffff:ffff:ffff,CN
-2001:420:5883:8000::,2001:420:5894:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5883:8000::,2001:420:5894:11ff:ffff:ffff:ffff:ffff,US
+2001:420:5894:1200::,2001:420:5894:12ff:ffff:ffff:ffff:ffff,CN
+2001:420:5894:1300::,2001:420:5894:ffff:ffff:ffff:ffff:ffff,US
2001:420:5895::,2001:420:5895:7fff:ffff:ffff:ffff:ffff,CN
-2001:420:5895:8000::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5895:8000::,2001:420:5899:ffff:ffff:ffff:ffff:ffff,US
+2001:420:589a::,2001:420:589a:7fff:ffff:ffff:ffff:ffff,CN
+2001:420:589a:8000::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US
2001:420:5a40::,2001:420:5a40:7fff:ffff:ffff:ffff:ffff,CN
-2001:420:5a40:8000::,2001:420:5a44:11ff:ffff:ffff:ffff:ffff,US
-2001:420:5a44:1200::,2001:420:5a44:12ff:ffff:ffff:ffff:ffff,CN
-2001:420:5a44:1300::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5a40:8000::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US
+2001:420:5a44::,2001:420:5a44:7fff:ffff:ffff:ffff:ffff,CN
+2001:420:5a44:8000::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US
2001:420:5c40::,2001:420:5c40:7fff:ffff:ffff:ffff:ffff,SG
2001:420:5c40:8000::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,US
2001:420:5c41::,2001:420:5c41:7fff:ffff:ffff:ffff:ffff,SG
@@ -160,8 +167,8 @@
2001:470::,2001:470:0:284::,US
2001:470:0:284::1,2001:470:0:284::1,AT
2001:470:0:284::2,2001:470:17:ffff:ffff:ffff:ffff:ffff,US
-2001:470:18::,2001:470:18:7ff:ffff:ffff:ffff:ffff,CN
-2001:470:18:800::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US
+2001:470:18::,2001:470:18:7fff:ffff:ffff:ffff:ffff,CN
+2001:470:18:8000::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US
2001:470:19::,2001:470:19:7fff:ffff:ffff:ffff:ffff,HK
2001:470:19:8000::,2001:470:1c:ff:ffff:ffff:ffff:ffff,US
2001:470:1c:100::,2001:470:1c:7ff:ffff:ffff:ffff:ffff,CA
@@ -169,9 +176,9 @@
2001:470:1c:900::,2001:470:1c:bff:ffff:ffff:ffff:ffff,CA
2001:470:1c:c00::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US
2001:470:1d::,2001:470:1d:7fff:ffff:ffff:ffff:ffff,CA
-2001:470:1d:8000::,2001:470:23:ffff:ffff:ffff:ffff:ffff,US
-2001:470:24::,2001:470:24:7fff:ffff:ffff:ffff:ffff,TW
-2001:470:24:8000::,2001:470:26:b6c:ffff:ffff:ffff:ffff,US
+2001:470:1d:8000::,2001:470:23:7ff:ffff:ffff:ffff:ffff,US
+2001:470:23:800::,2001:470:23:bff:ffff:ffff:ffff:ffff,KR
+2001:470:23:c00::,2001:470:26:b6c:ffff:ffff:ffff:ffff,US
2001:470:26:b6d::,2001:470:26:b6d:ffff:ffff:ffff:ffff,AT
2001:470:26:b6e::,2001:470:27:1a5:ffff:ffff:ffff:ffff,US
2001:470:27:1a6::,2001:470:27:1a6:ffff:ffff:ffff:ffff,RU
@@ -179,44 +186,46 @@
2001:470:28:36::,2001:470:28:36:ffff:ffff:ffff:ffff,SE
2001:470:28:37::,2001:470:28:1a5:ffff:ffff:ffff:ffff,US
2001:470:28:1a6::,2001:470:28:1a6:ffff:ffff:ffff:ffff,RU
-2001:470:28:1a7::,2001:470:28:9c1:ffff:ffff:ffff:ffff,US
+2001:470:28:1a7::,2001:470:28:2df:ffff:ffff:ffff:ffff,US
+2001:470:28:2e0::,2001:470:28:2e0:ffff:ffff:ffff:ffff,SE
+2001:470:28:2e1::,2001:470:28:9c1:ffff:ffff:ffff:ffff,US
2001:470:28:9c2::,2001:470:28:9c2:ffff:ffff:ffff:ffff,SE
2001:470:28:9c3::,2001:470:28:a2b:ffff:ffff:ffff:ffff,US
2001:470:28:a2c::,2001:470:28:a2c:ffff:ffff:ffff:ffff,SE
2001:470:28:a2d::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US
2001:470:3d::,2001:470:3d:7fff:ffff:ffff:ffff:ffff,PH
-2001:470:3d:8000::,2001:470:6d:ffff:ffff:ffff:ffff:ffff,US
-2001:470:6e::,2001:470:6e:3ff:ffff:ffff:ffff:ffff,CZ
-2001:470:6e:400::,2001:470:6f:49e:ffff:ffff:ffff:ffff,US
+2001:470:3d:8000::,2001:470:6e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:6f::,2001:470:6f:49e:ffff:ffff:ffff:ffff,CZ
2001:470:6f:49f::,2001:470:6f:49f:ffff:ffff:ffff:ffff,SK
-2001:470:6f:4a0::,2001:470:70:6ff:ffff:ffff:ffff:ffff,US
+2001:470:6f:4a0::,2001:470:6f:7fff:ffff:ffff:ffff:ffff,CZ
+2001:470:6f:8000::,2001:470:70:6ff:ffff:ffff:ffff:ffff,US
2001:470:70:700::,2001:470:70:7ff:ffff:ffff:ffff:ffff,RU
-2001:470:70:800::,2001:470:70:ffff:ffff:ffff:ffff:ffff,US
-2001:470:71::,2001:470:71:5ff:ffff:ffff:ffff:ffff,UA
+2001:470:70:800::,2001:470:71:5ff:ffff:ffff:ffff:ffff,US
2001:470:71:600::,2001:470:71:600:ffff:ffff:ffff:ffff,PL
-2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,UA
+2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,US
2001:470:71:60c::,2001:470:71:60c:ffff:ffff:ffff:ffff,PL
-2001:470:71:60d::,2001:470:71:7fff:ffff:ffff:ffff:ffff,UA
-2001:470:71:8000::,2001:470:d2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:71:60d::,2001:470:d2:ffff:ffff:ffff:ffff:ffff,US
2001:470:d3::,2001:470:d3:7fff:ffff:ffff:ffff:ffff,DE
2001:470:d3:8000::,2001:470:1857:ffff:ffff:ffff:ffff:ffff,US
2001:470:1858::,2001:470:1858:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:1858:8000::,2001:470:18c1:7fff:ffff:ffff:ffff:ffff,US
+2001:470:1858:8000::,2001:470:18ae:ffff:ffff:ffff:ffff:ffff,US
+2001:470:18af::,2001:470:18af:7fff:ffff:ffff:ffff:ffff,GB
+2001:470:18af:8000::,2001:470:18c1:7fff:ffff:ffff:ffff:ffff,US
2001:470:18c1:8000::,2001:470:18c1:ffff:ffff:ffff:ffff:ffff,GB
2001:470:18c2::,2001:470:1f07:ffff:ffff:ffff:ffff:ffff,US
-2001:470:1f08::,2001:470:1f08:1ff:ffff:ffff:ffff:ffff,GB
-2001:470:1f08:200::,2001:470:1f08:415::1,US
+2001:470:1f08::,2001:470:1f08:3ff:ffff:ffff:ffff:ffff,GB
+2001:470:1f08:400::,2001:470:1f08:415::1,US
2001:470:1f08:415::2,2001:470:1f08:415::2,GB
-2001:470:1f08:415::3,2001:470:1f08:bff:ffff:ffff:ffff:ffff,US
-2001:470:1f08:c00::,2001:470:1f08:dff:ffff:ffff:ffff:ffff,GB
-2001:470:1f08:e00::,2001:470:1f08:fff:ffff:ffff:ffff:ffff,US
+2001:470:1f08:415::3,2001:470:1f08:fff:ffff:ffff:ffff:ffff,US
2001:470:1f08:1000::,2001:470:1f08:11ff:ffff:ffff:ffff:ffff,GB
2001:470:1f08:1200::,2001:470:1f08:13ff:ffff:ffff:ffff:ffff,RU
2001:470:1f08:1400::,2001:470:1f08:17ff:ffff:ffff:ffff:ffff,US
2001:470:1f08:1800::,2001:470:1f08:1fff:ffff:ffff:ffff:ffff,GB
-2001:470:1f08:2000::,2001:470:1f08:ffff:ffff:ffff:ffff:ffff,US
-2001:470:1f09::,2001:470:1f09:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:1f09:8000::,2001:470:1f0a:7ff:ffff:ffff:ffff:ffff,US
+2001:470:1f08:2000::,2001:470:1f09:2b5:ffff:ffff:ffff:ffff,US
+2001:470:1f09:2b6::,2001:470:1f09:2b6:ffff:ffff:ffff:ffff,GB
+2001:470:1f09:2b7::,2001:470:1f09:414:ffff:ffff:ffff:ffff,US
+2001:470:1f09:415::,2001:470:1f09:415:ffff:ffff:ffff:ffff,GB
+2001:470:1f09:416::,2001:470:1f0a:7ff:ffff:ffff:ffff:ffff,US
2001:470:1f0a:800::,2001:470:1f0a:bff:ffff:ffff:ffff:ffff,RU
2001:470:1f0a:c00::,2001:470:1f0b:30e:ffff:ffff:ffff:ffff,US
2001:470:1f0b:30f::,2001:470:1f0b:30f:ffff:ffff:ffff:ffff,DE
@@ -271,7 +280,9 @@
2001:470:49e5:8000::,2001:470:49e5:ffff:ffff:ffff:ffff:ffff,CN
2001:470:49e6::,2001:470:507c:ffff:ffff:ffff:ffff:ffff,US
2001:470:507d::,2001:470:507d:7fff:ffff:ffff:ffff:ffff,UA
-2001:470:507d:8000::,2001:470:52ba:ffff:ffff:ffff:ffff:ffff,US
+2001:470:507d:8000::,2001:470:51e8:ffff:ffff:ffff:ffff:ffff,US
+2001:470:51e9::,2001:470:51e9:7fff:ffff:ffff:ffff:ffff,DE
+2001:470:51e9:8000::,2001:470:52ba:ffff:ffff:ffff:ffff:ffff,US
2001:470:52bb::,2001:470:52bb:7fff:ffff:ffff:ffff:ffff,UA
2001:470:52bb:8000::,2001:470:52c5:ffff:ffff:ffff:ffff:ffff,US
2001:470:52c6::,2001:470:52c6:7fff:ffff:ffff:ffff:ffff,DE
@@ -281,7 +292,9 @@
2001:470:5803:8000::,2001:470:5803:ffff:ffff:ffff:ffff:ffff,CZ
2001:470:5804::,2001:470:5853:ffff:ffff:ffff:ffff:ffff,US
2001:470:5854::,2001:470:5854:7fff:ffff:ffff:ffff:ffff,CZ
-2001:470:5854:8000::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5854:8000::,2001:470:587d:ffff:ffff:ffff:ffff:ffff,US
+2001:470:587e::,2001:470:587e:7fff:ffff:ffff:ffff:ffff,CZ
+2001:470:587e:8000::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US
2001:470:591b::,2001:470:591b:7fff:ffff:ffff:ffff:ffff,CZ
2001:470:591b:8000::,2001:470:591c:ffff:ffff:ffff:ffff:ffff,US
2001:470:591d::,2001:470:591d:7fff:ffff:ffff:ffff:ffff,CZ
@@ -297,9 +310,13 @@
2001:470:5a35::,2001:470:5a35:ffff:ffff:ffff:ffff:ffff,CZ
2001:470:5a36::,2001:470:5a39:ffff:ffff:ffff:ffff:ffff,US
2001:470:5a3a::,2001:470:5a3a:ffff:ffff:ffff:ffff:ffff,CZ
-2001:470:5a3b::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5a3b::,2001:470:5a80:ffff:ffff:ffff:ffff:ffff,US
+2001:470:5a81::,2001:470:5a81:ffff:ffff:ffff:ffff:ffff,CZ
+2001:470:5a82::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US
2001:470:60a3::,2001:470:60a3:7fff:ffff:ffff:ffff:ffff,BY
-2001:470:60a3:8000::,2001:470:60f4:7fff:ffff:ffff:ffff:ffff,US
+2001:470:60a3:8000::,2001:470:60e4:ffff:ffff:ffff:ffff:ffff,US
+2001:470:60e5::,2001:470:60e5:7fff:ffff:ffff:ffff:ffff,PL
+2001:470:60e5:8000::,2001:470:60f4:7fff:ffff:ffff:ffff:ffff,US
2001:470:60f4:8000::,2001:470:60f4:ffff:ffff:ffff:ffff:ffff,PL
2001:470:60f5::,2001:470:613f:ffff:ffff:ffff:ffff:ffff,US
2001:470:6140::,2001:470:6140:7fff:ffff:ffff:ffff:ffff,PL
@@ -341,9 +358,7 @@
2001:470:6b77::,2001:470:6b77:7fff:ffff:ffff:ffff:ffff,GB
2001:470:6b77:8000::,2001:470:6bba:ffff:ffff:ffff:ffff:ffff,US
2001:470:6bbb::,2001:470:6bbb:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:6bbb:8000::,2001:470:6bd1:ffff:ffff:ffff:ffff:ffff,US
-2001:470:6bd2::,2001:470:6bd2:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:6bd2:8000::,2001:470:6bee:7fff:ffff:ffff:ffff:ffff,US
+2001:470:6bbb:8000::,2001:470:6bee:7fff:ffff:ffff:ffff:ffff,US
2001:470:6bee:8000::,2001:470:6bee:ffff:ffff:ffff:ffff:ffff,IN
2001:470:6bef::,2001:470:6c0d:ffff:ffff:ffff:ffff:ffff,US
2001:470:6c0e::,2001:470:6c0e:7fff:ffff:ffff:ffff:ffff,GB
@@ -391,13 +406,17 @@
2001:470:7193::,2001:470:7193:7fff:ffff:ffff:ffff:ffff,DE
2001:470:7193:8000::,2001:470:71d4:ffff:ffff:ffff:ffff:ffff,US
2001:470:71d5::,2001:470:71d5:7fff:ffff:ffff:ffff:ffff,UA
-2001:470:71d5:8000::,2001:470:7280:ffff:ffff:ffff:ffff:ffff,US
+2001:470:71d5:8000::,2001:470:71f7:ffff:ffff:ffff:ffff:ffff,US
+2001:470:71f8::,2001:470:71f8:7fff:ffff:ffff:ffff:ffff,DE
+2001:470:71f8:8000::,2001:470:7280:ffff:ffff:ffff:ffff:ffff,US
2001:470:7281::,2001:470:7281:7fff:ffff:ffff:ffff:ffff,DE
2001:470:7281:8000::,2001:470:7286:ffff:ffff:ffff:ffff:ffff,US
2001:470:7287::,2001:470:7287:ffff:ffff:ffff:ffff:ffff,PL
2001:470:7288::,2001:470:72bd:ffff:ffff:ffff:ffff:ffff,US
2001:470:72be::,2001:470:72be:7fff:ffff:ffff:ffff:ffff,DE
-2001:470:72be:8000::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US
+2001:470:72be:8000::,2001:470:72da:ffff:ffff:ffff:ffff:ffff,US
+2001:470:72db::,2001:470:72db:7fff:ffff:ffff:ffff:ffff,RU
+2001:470:72db:8000::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US
2001:470:730a::,2001:470:730a:7fff:ffff:ffff:ffff:ffff,DE
2001:470:730a:8000::,2001:470:7368:ffff:ffff:ffff:ffff:ffff,US
2001:470:7369::,2001:470:7369:7fff:ffff:ffff:ffff:ffff,TR
@@ -405,7 +424,9 @@
2001:470:7384::,2001:470:7384:7fff:ffff:ffff:ffff:ffff,BG
2001:470:7384:8000::,2001:470:73d1:ffff:ffff:ffff:ffff:ffff,US
2001:470:73d2::,2001:470:73d2:7fff:ffff:ffff:ffff:ffff,DE
-2001:470:73d2:8000::,2001:470:742b:7fff:ffff:ffff:ffff:ffff,US
+2001:470:73d2:8000::,2001:470:73e8:7fff:ffff:ffff:ffff:ffff,US
+2001:470:73e8:8000::,2001:470:73e8:ffff:ffff:ffff:ffff:ffff,DE
+2001:470:73e9::,2001:470:742b:7fff:ffff:ffff:ffff:ffff,US
2001:470:742b:8000::,2001:470:742b:ffff:ffff:ffff:ffff:ffff,RU
2001:470:742c::,2001:470:7479:ffff:ffff:ffff:ffff:ffff,US
2001:470:747a::,2001:470:747a:7fff:ffff:ffff:ffff:ffff,DE
@@ -431,7 +452,9 @@
2001:470:785a::,2001:470:785a:ffff:ffff:ffff:ffff:ffff,AT
2001:470:785b::,2001:470:78ab:ffff:ffff:ffff:ffff:ffff,US
2001:470:78ac::,2001:470:78ac:7fff:ffff:ffff:ffff:ffff,NL
-2001:470:78ac:8000::,2001:470:78db:ffff:ffff:ffff:ffff:ffff,US
+2001:470:78ac:8000::,2001:470:78c7:ffff:ffff:ffff:ffff:ffff,US
+2001:470:78c8::,2001:470:78c8:7fff:ffff:ffff:ffff:ffff,NL
+2001:470:78c8:8000::,2001:470:78db:ffff:ffff:ffff:ffff:ffff,US
2001:470:78dc::,2001:470:78dc:7fff:ffff:ffff:ffff:ffff,NL
2001:470:78dc:8000::,2001:470:78e3:ffff:ffff:ffff:ffff:ffff,US
2001:470:78e4::,2001:470:78e4:7fff:ffff:ffff:ffff:ffff,NL
@@ -445,7 +468,9 @@
2001:470:7a92::,2001:470:7a92:7fff:ffff:ffff:ffff:ffff,DE
2001:470:7a92:8000::,2001:470:7a99:ffff:ffff:ffff:ffff:ffff,US
2001:470:7a9a::,2001:470:7a9a:ffff:ffff:ffff:ffff:ffff,NL
-2001:470:7a9b::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7a9b::,2001:470:7b22:ffff:ffff:ffff:ffff:ffff,US
+2001:470:7b23::,2001:470:7b23:7fff:ffff:ffff:ffff:ffff,ES
+2001:470:7b23:8000::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US
2001:470:7ba7::,2001:470:7ba7:7fff:ffff:ffff:ffff:ffff,NL
2001:470:7ba7:8000::,2001:470:7baf:ffff:ffff:ffff:ffff:ffff,US
2001:470:7bb0::,2001:470:7bb0:7fff:ffff:ffff:ffff:ffff,BE
@@ -473,7 +498,9 @@
2001:470:80f1::,2001:470:80f1:7fff:ffff:ffff:ffff:ffff,AU
2001:470:80f1:8000::,2001:470:814c:ffff:ffff:ffff:ffff:ffff,US
2001:470:814d::,2001:470:814d:7fff:ffff:ffff:ffff:ffff,AU
-2001:470:814d:8000::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US
+2001:470:814d:8000::,2001:470:81b0:ffff:ffff:ffff:ffff:ffff,US
+2001:470:81b1::,2001:470:81b1:7fff:ffff:ffff:ffff:ffff,CN
+2001:470:81b1:8000::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US
2001:470:81ef::,2001:470:81ef:7fff:ffff:ffff:ffff:ffff,CA
2001:470:81ef:8000::,2001:470:828d:ffff:ffff:ffff:ffff:ffff,US
2001:470:828e::,2001:470:828e:7fff:ffff:ffff:ffff:ffff,CA
@@ -497,13 +524,13 @@
2001:470:8c40::,2001:470:8c40:7fff:ffff:ffff:ffff:ffff,CA
2001:470:8c40:8000::,2001:470:8c6b:ffff:ffff:ffff:ffff:ffff,US
2001:470:8c6c::,2001:470:8c6c:7fff:ffff:ffff:ffff:ffff,AU
-2001:470:8c6c:8000::,2001:470:90a6:ffff:ffff:ffff:ffff:ffff,US
-2001:470:90a7::,2001:470:90a7:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:90a7:8000::,2001:470:94f2:7fff:ffff:ffff:ffff:ffff,US
+2001:470:8c6c:8000::,2001:470:94f2:7fff:ffff:ffff:ffff:ffff,US
2001:470:94f2:8000::,2001:470:94f2:ffff:ffff:ffff:ffff:ffff,CZ
2001:470:94f3::,2001:470:9616:ffff:ffff:ffff:ffff:ffff,US
2001:470:9617::,2001:470:9617:7fff:ffff:ffff:ffff:ffff,GB
-2001:470:9617:8000::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9617:8000::,2001:470:9678:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9679::,2001:470:9679:7fff:ffff:ffff:ffff:ffff,GB
+2001:470:9679:8000::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US
2001:470:974f::,2001:470:974f:7fff:ffff:ffff:ffff:ffff,GB
2001:470:974f:8000::,2001:470:9794:ffff:ffff:ffff:ffff:ffff,US
2001:470:9795::,2001:470:9795:ffff:ffff:ffff:ffff:ffff,GB
@@ -515,9 +542,7 @@
2001:470:99b9::,2001:470:99b9:7fff:ffff:ffff:ffff:ffff,DE
2001:470:99b9:8000::,2001:470:9d38:ffff:ffff:ffff:ffff:ffff,US
2001:470:9d39::,2001:470:9d39:7fff:ffff:ffff:ffff:ffff,DE
-2001:470:9d39:8000::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US
-2001:470:9ec0::,2001:470:9ec0:7fff:ffff:ffff:ffff:ffff,DE
-2001:470:9ec0:8000::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US
+2001:470:9d39:8000::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US
2001:470:9f5f::,2001:470:9f5f:7fff:ffff:ffff:ffff:ffff,RU
2001:470:9f5f:8000::,2001:470:b009:ffff:ffff:ffff:ffff:ffff,US
2001:470:b00a::,2001:470:b00a:7fff:ffff:ffff:ffff:ffff,CA
@@ -525,13 +550,19 @@
2001:470:b048::,2001:470:b048:7fff:ffff:ffff:ffff:ffff,CA
2001:470:b048:8000::,2001:470:b083:ffff:ffff:ffff:ffff:ffff,US
2001:470:b084::,2001:470:b084:7fff:ffff:ffff:ffff:ffff,CA
-2001:470:b084:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b084:8000::,2001:470:b08d:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b08e::,2001:470:b08e:7fff:ffff:ffff:ffff:ffff,CA
+2001:470:b08e:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US
2001:470:b0e2::,2001:470:b0e2:ffff:ffff:ffff:ffff:ffff,CA
2001:470:b0e3::,2001:470:b136:7fff:ffff:ffff:ffff:ffff,US
2001:470:b136:8000::,2001:470:b136:ffff:ffff:ffff:ffff:ffff,CA
2001:470:b137::,2001:470:b14d:ffff:ffff:ffff:ffff:ffff,US
2001:470:b14e::,2001:470:b14e:7fff:ffff:ffff:ffff:ffff,CA
-2001:470:b14e:8000::,2001:470:b218:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b14e:8000::,2001:470:b16f:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b170::,2001:470:b170:7fff:ffff:ffff:ffff:ffff,CA
+2001:470:b170:8000::,2001:470:b1c3:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b1c4::,2001:470:b1c4:7fff:ffff:ffff:ffff:ffff,CA
+2001:470:b1c4:8000::,2001:470:b218:ffff:ffff:ffff:ffff:ffff,US
2001:470:b219::,2001:470:b219:7fff:ffff:ffff:ffff:ffff,CA
2001:470:b219:8000::,2001:470:b23e:ffff:ffff:ffff:ffff:ffff,US
2001:470:b23f::,2001:470:b23f:7fff:ffff:ffff:ffff:ffff,CA
@@ -571,13 +602,13 @@
2001:470:b518::,2001:470:b518:7fff:ffff:ffff:ffff:ffff,PL
2001:470:b518:8000::,2001:470:b59e:ffff:ffff:ffff:ffff:ffff,US
2001:470:b59f::,2001:470:b59f:7fff:ffff:ffff:ffff:ffff,CH
-2001:470:b59f:8000::,2001:470:b60d:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b59f:8000::,2001:470:b5f5:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b5f6::,2001:470:b5f6:7fff:ffff:ffff:ffff:ffff,DE
+2001:470:b5f6:8000::,2001:470:b60d:ffff:ffff:ffff:ffff:ffff,US
2001:470:b60e::,2001:470:b60e:7fff:ffff:ffff:ffff:ffff,DE
2001:470:b60e:8000::,2001:470:b625:ffff:ffff:ffff:ffff:ffff,US
2001:470:b626::,2001:470:b626:7fff:ffff:ffff:ffff:ffff,DE
-2001:470:b626:8000::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US
-2001:470:b7a5::,2001:470:b7a5:7fff:ffff:ffff:ffff:ffff,CH
-2001:470:b7a5:8000::,2001:470:b7b6:ffff:ffff:ffff:ffff:ffff,US
+2001:470:b626:8000::,2001:470:b7b6:ffff:ffff:ffff:ffff:ffff,US
2001:470:b7b7::,2001:470:b7b7:7fff:ffff:ffff:ffff:ffff,AT
2001:470:b7b7:8000::,2001:470:b8e6:ffff:ffff:ffff:ffff:ffff,US
2001:470:b8e7::,2001:470:b8e7:7fff:ffff:ffff:ffff:ffff,CR
@@ -599,7 +630,9 @@
2001:470:cd93:8000::,2001:470:cd93:ffff:ffff:ffff:ffff:ffff,FR
2001:470:cd94::,2001:470:d050:ffff:ffff:ffff:ffff:ffff,US
2001:470:d051::,2001:470:d051:7fff:ffff:ffff:ffff:ffff,NL
-2001:470:d051:8000::,2001:470:d17a:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d051:8000::,2001:470:d075:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d076::,2001:470:d076:7fff:ffff:ffff:ffff:ffff,NL
+2001:470:d076:8000::,2001:470:d17a:ffff:ffff:ffff:ffff:ffff,US
2001:470:d17b::,2001:470:d17b:7fff:ffff:ffff:ffff:ffff,PL
2001:470:d17b:8000::,2001:470:d4ec:ffff:ffff:ffff:ffff:ffff,US
2001:470:d4ed::,2001:470:d4ed:7fff:ffff:ffff:ffff:ffff,FR
@@ -611,7 +644,9 @@
2001:470:d891::,2001:470:d891:7fff:ffff:ffff:ffff:ffff,BR
2001:470:d891:8000::,2001:470:d9cc:ffff:ffff:ffff:ffff:ffff,US
2001:470:d9cd::,2001:470:d9cd:7fff:ffff:ffff:ffff:ffff,DO
-2001:470:d9cd:8000::,2001:470:db28:ffff:ffff:ffff:ffff:ffff,US
+2001:470:d9cd:8000::,2001:470:da01:ffff:ffff:ffff:ffff:ffff,US
+2001:470:da02::,2001:470:da02:7fff:ffff:ffff:ffff:ffff,AR
+2001:470:da02:8000::,2001:470:db28:ffff:ffff:ffff:ffff:ffff,US
2001:470:db29::,2001:470:db29:7fff:ffff:ffff:ffff:ffff,DO
2001:470:db29:8000::,2001:470:dc00:ffff:ffff:ffff:ffff:ffff,US
2001:470:dc01::,2001:470:dc01:7fff:ffff:ffff:ffff:ffff,SE
@@ -661,7 +696,9 @@
2001:470:e1e5::,2001:470:e1e5:7fff:ffff:ffff:ffff:ffff,CA
2001:470:e1e5:8000::,2001:470:e20e:ffff:ffff:ffff:ffff:ffff,US
2001:470:e20f::,2001:470:e20f:7fff:ffff:ffff:ffff:ffff,CA
-2001:470:e20f:8000::,2001:470:e939:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e20f:8000::,2001:470:e2fa:ffff:ffff:ffff:ffff:ffff,US
+2001:470:e2fb::,2001:470:e2fb:7fff:ffff:ffff:ffff:ffff,CA
+2001:470:e2fb:8000::,2001:470:e939:ffff:ffff:ffff:ffff:ffff,US
2001:470:e93a::,2001:470:e93a:7fff:ffff:ffff:ffff:ffff,CA
2001:470:e93a:8000::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US
2001:470:e97f::,2001:470:e97f:7fff:ffff:ffff:ffff:ffff,CA
@@ -677,7 +714,9 @@
2001:470:ecf7::,2001:470:ecf7:7fff:ffff:ffff:ffff:ffff,ID
2001:470:ecf7:8000::,2001:470:ed26:ffff:ffff:ffff:ffff:ffff,US
2001:470:ed27::,2001:470:ed27:7fff:ffff:ffff:ffff:ffff,ID
-2001:470:ed27:8000::,2001:470:ed3c:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ed27:8000::,2001:470:ed39:ffff:ffff:ffff:ffff:ffff,US
+2001:470:ed3a::,2001:470:ed3a:7fff:ffff:ffff:ffff:ffff,SG
+2001:470:ed3a:8000::,2001:470:ed3c:ffff:ffff:ffff:ffff:ffff,US
2001:470:ed3d::,2001:470:ed3d:7fff:ffff:ffff:ffff:ffff,SG
2001:470:ed3d:8000::,2001:470:ed42:ffff:ffff:ffff:ffff:ffff,US
2001:470:ed43::,2001:470:ed43:7fff:ffff:ffff:ffff:ffff,ID
@@ -705,7 +744,9 @@
2001:470:f83d:8000::,2001:470:f83d:ffff:ffff:ffff:ffff:ffff,CN
2001:470:f83e::,2001:470:f891:ffff:ffff:ffff:ffff:ffff,US
2001:470:f892::,2001:470:f892:7fff:ffff:ffff:ffff:ffff,CN
-2001:470:f892:8000::,2001:470:f91b:ffff:ffff:ffff:ffff:ffff,US
+2001:470:f892:8000::,2001:470:f90f:7fff:ffff:ffff:ffff:ffff,US
+2001:470:f90f:8000::,2001:470:f90f:ffff:ffff:ffff:ffff:ffff,CN
+2001:470:f910::,2001:470:f91b:ffff:ffff:ffff:ffff:ffff,US
2001:470:f91c::,2001:470:f91c:7fff:ffff:ffff:ffff:ffff,CN
2001:470:f91c:8000::,2001:470:fa48:ffff:ffff:ffff:ffff:ffff,US
2001:470:fa49::,2001:470:fa49:7fff:ffff:ffff:ffff:ffff,CN
@@ -983,6 +1024,15 @@
2001:678:d0::,2001:678:d0:ffff:ffff:ffff:ffff:ffff,NL
2001:678:d4::,2001:678:d4:ffff:ffff:ffff:ffff:ffff,IT
2001:678:d8::,2001:678:d8:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:dc::,2001:678:dc:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:e0::,2001:678:e0:ffff:ffff:ffff:ffff:ffff,MD
+2001:678:e4::,2001:678:e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:678:e8::,2001:678:e8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:ec::,2001:678:ec:ffff:ffff:ffff:ffff:ffff,RU
+2001:678:f0::,2001:678:f0:ffff:ffff:ffff:ffff:ffff,SE
+2001:678:f4::,2001:678:f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:678:f8::,2001:678:f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:fc::,2001:678:fc:ffff:ffff:ffff:ffff:ffff,LT
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
@@ -1012,6 +1062,7 @@
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
+2001:67c:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:7c::,2001:67c:7c:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:80::,2001:67c:80:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ
@@ -1170,7 +1221,8 @@
2001:67c:2f0::,2001:67c:2f0:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:2f4::,2001:67c:2f4:ffff:ffff:ffff:ffff:ffff,LU
2001:67c:2f8::,2001:67c:2f8:ffff:ffff:ffff:ffff:ffff,CH
-2001:67c:2fc::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2fc::,2001:67c:2fc:7fff:ffff:ffff:ffff:ffff,DE
+2001:67c:2fc:8000::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,US
2001:67c:300::,2001:67c:300:ffff:ffff:ffff:ffff:ffff,SI
2001:67c:304::,2001:67c:304:ffff:ffff:ffff:ffff:ffff,BE
2001:67c:308::,2001:67c:308:ffff:ffff:ffff:ffff:ffff,DE
@@ -1555,7 +1607,6 @@
2001:67c:1154::,2001:67c:1154:ffff:ffff:ffff:ffff:ffff,TR
2001:67c:1158::,2001:67c:1158:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:115c::,2001:67c:115c:ffff:ffff:ffff:ffff:ffff,RO
-2001:67c:1160::,2001:67c:1160:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1164::,2001:67c:1164:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:1168::,2001:67c:1168:ffff:ffff:ffff:ffff:ffff,PL
2001:67c:116c::,2001:67c:116c:ffff:ffff:ffff:ffff:ffff,SE
@@ -1740,7 +1791,6 @@
2001:67c:1508::,2001:67c:1508:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:150c::,2001:67c:150c:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:1510::,2001:67c:1510:ffff:ffff:ffff:ffff:ffff,GB
-2001:67c:1514::,2001:67c:1514:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1518::,2001:67c:1518:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:151c::,2001:67c:151c:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:1520::,2001:67c:1520:ffff:ffff:ffff:ffff:ffff,GB
@@ -1912,7 +1962,6 @@
2001:67c:186c::,2001:67c:186c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1870::,2001:67c:1870:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:1874::,2001:67c:1874:ffff:ffff:ffff:ffff:ffff,CZ
-2001:67c:1878::,2001:67c:1878:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:187c::,2001:67c:187c:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:1880::,2001:67c:1880:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1884::,2001:67c:1884:ffff:ffff:ffff:ffff:ffff,GB
@@ -2633,7 +2682,6 @@
2001:67c:29d8::,2001:67c:29d8:ffff:ffff:ffff:ffff:ffff,AE
2001:67c:29dc::,2001:67c:29dc:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:29e0::,2001:67c:29e0:ffff:ffff:ffff:ffff:ffff,UA
-2001:67c:29e4::,2001:67c:29e4:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:29e8::,2001:67c:29e8:ffff:ffff:ffff:ffff:ffff,TR
2001:67c:29ec::,2001:67c:29ec:ffff:ffff:ffff:ffff:ffff,NO
2001:67c:29f0::,2001:67c:29f0:ffff:ffff:ffff:ffff:ffff,BG
@@ -2956,6 +3004,10 @@
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,GB
+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
+2001:67c:2f4c::,2001:67c:2f4c:ffff:ffff:ffff:ffff:ffff,BG
2001:680::,2001:680:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:688::,2001:688:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:690::,2001:697:ffff:ffff:ffff:ffff:ffff:ffff,PT
@@ -2977,13 +3029,17 @@
2001:6f8:900::,2001:6f8:900:ffff:ffff:ffff:ffff:ffff,DE
2001:6f8:901::,2001:6f8:91c:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:91d::,2001:6f8:91d:7fff:ffff:ffff:ffff:ffff,DE
-2001:6f8:91d:8000::,2001:6f8:1011:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:91d:8000::,2001:6f8:96b:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:96c::,2001:6f8:96c:7fff:ffff:ffff:ffff:ffff,DE
+2001:6f8:96c:8000::,2001:6f8:1011:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:1012::,2001:6f8:1012:7fff:ffff:ffff:ffff:ffff,DE
2001:6f8:1012:8000::,2001:6f8:107c:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:107d::,2001:6f8:107d:7fff:ffff:ffff:ffff:ffff,DE
2001:6f8:107d:8000::,2001:6f8:10f1:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:10f2::,2001:6f8:10f2:7fff:ffff:ffff:ffff:ffff,DE
-2001:6f8:10f2:8000::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:10f2:8000::,2001:6f8:1182:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:1183::,2001:6f8:1183:7fff:ffff:ffff:ffff:ffff,DE
+2001:6f8:1183:8000::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:11ac::,2001:6f8:11ac:7fff:ffff:ffff:ffff:ffff,DE
2001:6f8:11ac:8000::,2001:6f8:11b1:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:11b2::,2001:6f8:11b2:7fff:ffff:ffff:ffff:ffff,AT
@@ -2993,7 +3049,9 @@
2001:6f8:12ca:8000::,2001:6f8:12ca:ffff:ffff:ffff:ffff:ffff,DE
2001:6f8:12cb::,2001:6f8:12d8:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:12d9::,2001:6f8:12d9:7fff:ffff:ffff:ffff:ffff,DE
-2001:6f8:12d9:8000::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:12d9:8000::,2001:6f8:1368:ffff:ffff:ffff:ffff:ffff,GB
+2001:6f8:1369::,2001:6f8:1369:7fff:ffff:ffff:ffff:ffff,DE
+2001:6f8:1369:8000::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:13e1::,2001:6f8:13e1:7fff:ffff:ffff:ffff:ffff,DE
2001:6f8:13e1:8000::,2001:6f8:13ff:ffff:ffff:ffff:ffff:ffff,GB
2001:6f8:1400::,2001:6f8:14ff:ffff:ffff:ffff:ffff:ffff,BE
@@ -3034,11 +3092,14 @@
2001:7d0::,2001:7d0:ffff:ffff:ffff:ffff:ffff:ffff,EE
2001:7d8::,2001:7d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:7e0::,2001:7e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2001:7e8::,2001:7e8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:7e8::,2001:7e8:c036:ffff:ffff:ffff:ffff:ffff,LU
+2001:7e8:c037::,2001:7e8:c037:7fff:ffff:ffff:ffff:ffff,FR
+2001:7e8:c037:8000::,2001:7e8:ffff:ffff:ffff:ffff:ffff:ffff,LU
2001:7f8::,2001:7f8::ffff:ffff:ffff:ffff:ffff,DE
2001:7f8:1::,2001:7f8:1:ffff:ffff:ffff:ffff:ffff,NL
2001:7f8:2::,2001:7f8:2:ffff:ffff:ffff:ffff:ffff,IT
2001:7f8:3::,2001:7f8:4:ffff:ffff:ffff:ffff:ffff,GB
+2001:7f8:5::,2001:7f8:5:ffff:ffff:ffff:ffff:ffff,RU
2001:7f8:6::,2001:7f8:6:ffff:ffff:ffff:ffff:ffff,BG
2001:7f8:7::,2001:7f8:7:ffff:ffff:ffff:ffff:ffff,FI
2001:7f8:8::,2001:7f8:8:ffff:ffff:ffff:ffff:ffff,DE
@@ -3243,9 +3304,7 @@
2001:920:18a1::,2001:920:18a1:7fff:ffff:ffff:ffff:ffff,DE
2001:920:18a1:8000::,2001:920:18ad:ffff:ffff:ffff:ffff:ffff,GB
2001:920:18ae::,2001:920:18ae:7fff:ffff:ffff:ffff:ffff,DE
-2001:920:18ae:8000::,2001:920:18bf:ffff:ffff:ffff:ffff:ffff,GB
-2001:920:18c0::,2001:920:18c0:7fff:ffff:ffff:ffff:ffff,DE
-2001:920:18c0:8000::,2001:920:18c0:ffff:ffff:ffff:ffff:ffff,GB
+2001:920:18ae:8000::,2001:920:18c0:ffff:ffff:ffff:ffff:ffff,GB
2001:920:18c1::,2001:920:18c1:7fff:ffff:ffff:ffff:ffff,DE
2001:920:18c1:8000::,2001:920:5809:ffff:ffff:ffff:ffff:ffff,GB
2001:920:580a::,2001:920:580a:7fff:ffff:ffff:ffff:ffff,ES
@@ -3299,7 +3358,9 @@
2001:a48::,2001:a48:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:a50::,2001:a50:ffff:ffff:ffff:ffff:ffff:ffff,ES
2001:a58::,2001:a58:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2001:a60::,2001:a67:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:a60::,2001:a61:2175:7fff:ffff:ffff:ffff:ffff,DE
+2001:a61:2175:8000::,2001:a61:2175:ffff:ffff:ffff:ffff:ffff,CH
+2001:a61:2176::,2001:a67:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:a68::,2001:a68:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:a70::,2001:a70:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:a78::,2001:a78:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -3311,7 +3372,9 @@
2001:aa8::,2001:ab7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:ab8::,2001:ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2001:ac8::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:ac8::,2001:ac8:20::ffff:ffff:ffff:ffff,GB
+2001:ac8:20:1::,2001:ac8:20:1:ffff:ffff:ffff:ffff,DE
+2001:ac8:20:2::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE
2001:ad8::,2001:ae1:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:ae8::,2001:ae8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -3690,7 +3753,6 @@
2001:df0:26c::,2001:df0:26c:ffff:ffff:ffff:ffff:ffff,SG
2001:df0:26d::,2001:df0:26f:ffff:ffff:ffff:ffff:ffff,ID
2001:df0:270::,2001:df0:270:ffff:ffff:ffff:ffff:ffff,IN
-2001:df0:271::,2001:df0:271:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:272::,2001:df0:272:ffff:ffff:ffff:ffff:ffff,MY
2001:df0:273::,2001:df0:273:ffff:ffff:ffff:ffff:ffff,ID
2001:df0:274::,2001:df0:277:ffff:ffff:ffff:ffff:ffff,NP
@@ -3869,21 +3931,35 @@
2001:df0:2c00::,2001:df0:2c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:2e00::,2001:df0:2e00:ffff:ffff:ffff:ffff:ffff,CN
2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:3200::,2001:df0:3200:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:3600::,2001:df0:3600:ffff:ffff:ffff:ffff:ffff,SG
2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:3a00::,2001:df0:3a00:ffff:ffff:ffff:ffff:ffff,IN
2001:df0:3c00::,2001:df0:3c00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:3e00::,2001:df0:3e00:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4200::,2001:df0:4200:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:4400::,2001:df0:4400:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:4600::,2001:df0:4600:ffff:ffff:ffff:ffff:ffff,SG
2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4a00::,2001:df0:4a00:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:4e00::,2001:df0:4e00:ffff:ffff:ffff:ffff:ffff,TW
2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:5200::,2001:df0:5200:ffff:ffff:ffff:ffff:ffff,IN
2001:df0:5400::,2001:df0:5400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:5600::,2001:df0:5600:ffff:ffff:ffff:ffff:ffff,MY
2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:5a00::,2001:df0:5a00:ffff:ffff:ffff:ffff:ffff,BD
2001:df0:5c00::,2001:df0:5c00:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:5e00::,2001:df0:5e00:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6200::,2001:df0:6200:ffff:ffff:ffff:ffff:ffff,MY
2001:df0:6400::,2001:df0:6400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:6600::,2001:df0:6600:ffff:ffff:ffff:ffff:ffff,SG
2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:6a00::,2001:df0:6a00:ffff:ffff:ffff:ffff:ffff,HK
2001:df0:7000::,2001:df0:7000:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:7400::,2001:df0:7400:ffff:ffff:ffff:ffff:ffff,IN
-2001:df0:7800::,2001:df0:7800:ffff:ffff:ffff:ffff:ffff,WS
2001:df0:7c00::,2001:df0:7c00:ffff:ffff:ffff:ffff:ffff,HK
2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN
2001:df0:8400::,2001:df0:8400:ffff:ffff:ffff:ffff:ffff,IN
@@ -3934,7 +4010,6 @@
2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN
2001:df1:4c00::,2001:df1:4c00:ffff:ffff:ffff:ffff:ffff,HK
2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK
-2001:df1:5400::,2001:df1:5400:ffff:ffff:ffff:ffff:ffff,KR
2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD
2001:df1:5c00::,2001:df1:5c00:ffff:ffff:ffff:ffff:ffff,ID
2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG
@@ -4343,7 +4418,7 @@
2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN
2001:df7:fc00::,2001:df7:fc00:ffff:ffff:ffff:ffff:ffff,SG
2001:df8::,2001:df8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP
2001:e00::,2001:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID
2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -4597,8 +4672,8 @@
2001:16c0:1234:8000::,2001:16c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:16d8::,2001:16d8:dcff:ffff:ffff:ffff:ffff:ffff,SE
-2001:16d8:dd00::,2001:16d8:dd00:ffff:ffff:ffff:ffff:ffff,DK
-2001:16d8:dd01::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE
+2001:16d8:dd00::,2001:16d8:dd00:7fff:ffff:ffff:ffff:ffff,DK
+2001:16d8:dd00:8000::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE
2001:16d8:dd73::,2001:16d8:dd73:7fff:ffff:ffff:ffff:ffff,DK
2001:16d8:dd73:8000::,2001:16d8:dd84:ffff:ffff:ffff:ffff:ffff,SE
2001:16d8:dd85::,2001:16d8:dd85:7fff:ffff:ffff:ffff:ffff,DK
@@ -4688,8 +4763,8 @@
2001:19f0:5000:8000::,2001:19f0:5000:ffff:ffff:ffff:ffff:ffff,NL
2001:19f0:5001::,2001:19f0:5800:7fff:ffff:ffff:ffff:ffff,US
2001:19f0:5800:8000::,2001:19f0:5800:ffff:ffff:ffff:ffff:ffff,AU
-2001:19f0:5801::,2001:19f0:67ff:ffff:ffff:ffff:ffff:ffff,US
-2001:19f0:6800::,2001:19f0:6800:87ff:ffff:ffff:ffff:ffff,FR
+2001:19f0:5801::,2001:19f0:6800:7fff:ffff:ffff:ffff:ffff,US
+2001:19f0:6800:8000::,2001:19f0:6800:87ff:ffff:ffff:ffff:ffff,FR
2001:19f0:6800:8800::,2001:19f0:6c00:7fff:ffff:ffff:ffff:ffff,US
2001:19f0:6c00:8000::,2001:19f0:6c00:ffff:ffff:ffff:ffff:ffff,DE
2001:19f0:6c01::,2001:19f0:7000:9bc8:ffff:ffff:ffff:ffff,US
@@ -4767,16 +4842,16 @@
2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:2002:2f8::,2001:2002:2f8:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:2f9:8000::,2001:2002:2f9:ffff:ffff:ffff:ffff:ffff,SE
-2001:2002:3e14:8000::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE
-2001:2002:4e42::,2001:2002:4e42:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:4e43::,2001:2002:4e44:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:3e14::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e42::,2001:2002:4e44:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:4e45::,2001:2002:4e45:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e46::,2001:2002:4e46:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e47::,2001:2002:4e47:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:4e48::,2001:2002:4e48:afff:ffff:ffff:ffff:ffff,SE
-2001:2002:4e49::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE
-2001:2002:51e0::,2001:2002:51e1:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:51e2::,2001:2002:51e2:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:51e3::,2001:2002:51e5:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:51e6::,2001:2002:51e6:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:4e48:c000::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e0::,2001:2002:51e0:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e1::,2001:2002:51e1:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:51e3:8000::,2001:2002:51e6:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:51e7::,2001:2002:51e9:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:51eb::,2001:2002:51eb:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:51ec:8000::,2001:2002:51ec:ffff:ffff:ffff:ffff:ffff,SE
@@ -4784,15 +4859,18 @@
2001:2002:5ae0::,2001:2002:5ae1:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:5ae2::,2001:2002:5ae3:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:5ae4:8000::,2001:2002:5ae4:ffff:ffff:ffff:ffff:ffff,SE
-2001:2002:5ae5:8000::,2001:2002:5ae6:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:5ae6:8000::,2001:2002:5ae6:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:c2ec:8000::,2001:2002:c2ec:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:c343:8000::,2001:2002:c343:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:c3c6::,2001:2002:c3c6:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:c3fc::,2001:2002:c3fc:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:d541::,2001:2002:d541:ffff:ffff:ffff:ffff:ffff,SE
-2001:2002:d543::,2001:2002:d543:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d540::,2001:2002:d540:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:d541::,2001:2002:d542:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:d543::,2001:2002:d543:7fff:ffff:ffff:ffff:ffff,SE
2001:2002:d9d0::,2001:2002:d9d0:7fff:ffff:ffff:ffff:ffff,SE
-2001:2002:d9d2::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d9d1::,2001:2002:d9d1:7fff:ffff:ffff:ffff:ffff,SE
+2001:2002:d9d2::,2001:2002:d9d2:ffff:ffff:ffff:ffff:ffff,SE
+2001:2002:d9d3:8000::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:d9d4:8000::,2001:2002:d9d4:ffff:ffff:ffff:ffff:ffff,SE
2001:2002:d9d7::,2001:2002:d9d7:ffff:ffff:ffff:ffff:ffff,SE
2001:2003:50dc::,2001:2003:50df:7fff:ffff:ffff:ffff:ffff,FI
@@ -4804,6 +4882,7 @@
2001:2003:f072:8000::,2001:2003:f072:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f0ab::,2001:2003:f0ab:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f0b6::,2001:2003:f0b6:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f0c8:8000::,2001:2003:f0c8:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f0e5:8000::,2001:2003:f0e5:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f13d:8000::,2001:2003:f13d:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f19b::,2001:2003:f19b:7fff:ffff:ffff:ffff:ffff,FI
@@ -4828,16 +4907,21 @@
2001:2003:f4a6:8000::,2001:2003:f4a6:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f543::,2001:2003:f543:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f5dc::,2001:2003:f5dc:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f603:8000::,2001:2003:f603:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f617::,2001:2003:f617:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f620::,2001:2003:f620:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f639::,2001:2003:f639:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f64e::,2001:2003:f64e:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f662::,2001:2003:f662:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f67c:8000::,2001:2003:f67c:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f6a9:8000::,2001:2003:f6a9:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f6ba::,2001:2003:f6ba:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f6da::,2001:2003:f6da:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f72a::,2001:2003:f72a:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f72c:8000::,2001:2003:f72c:ffff:ffff:ffff:ffff:ffff,FI
+2001:2003:f744:8000::,2001:2003:f744:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f764::,2001:2003:f764:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f786::,2001:2003:f786:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f798:8000::,2001:2003:f798:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f7a3:8000::,2001:2003:f7a3:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f802::,2001:2003:f802:7fff:ffff:ffff:ffff:ffff,FI
@@ -4845,6 +4929,7 @@
2001:2003:f825:8000::,2001:2003:f825:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f839::,2001:2003:f839:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f83c::,2001:2003:f83c:7fff:ffff:ffff:ffff:ffff,FI
+2001:2003:f849::,2001:2003:f849:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f882:8000::,2001:2003:f882:ffff:ffff:ffff:ffff:ffff,FI
2001:2003:f8d4::,2001:2003:f8d4:7fff:ffff:ffff:ffff:ffff,FI
2001:2003:f8f6:8000::,2001:2003:f8f6:ffff:ffff:ffff:ffff:ffff,FI
@@ -4869,7 +4954,14 @@
2001:2010:d038:8000::,2001:2010:d038:ffff:ffff:ffff:ffff:ffff,DK
2001:2010:d039:8000::,2001:2010:d03a:ffff:ffff:ffff:ffff:ffff,DK
2001:2010:d04e:8000::,2001:2010:d04e:ffff:ffff:ffff:ffff:ffff,DK
+2001:2011:c002::,2001:2011:c002:ffff:ffff:ffff:ffff:ffff,DK
+2001:2012:3ec6::,2001:2012:3ec6:ffff:ffff:ffff:ffff:ffff,DK
+2001:2012:3ec7:8000::,2001:2012:3ec7:ffff:ffff:ffff:ffff:ffff,DK
+2001:2012:c213:8000::,2001:2012:c213:ffff:ffff:ffff:ffff:ffff,DK
2001:2040:4b::,2001:2040:4b:ffff:ffff:ffff:ffff:ffff,SE
+2001:2040:c006::,2001:2040:c006:ffff:ffff:ffff:ffff:ffff,SE
+2001:2060:41::,2001:2060:41:7fff:ffff:ffff:ffff:ffff,FI
+2001:2060:bffb::,2001:2060:bffb:ffff:ffff:ffff:ffff:ffff,FI
2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4018::,2001:4018:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -4925,7 +5017,9 @@
2001:41d0:2:4dbe::,2001:41d0:2:4dbe:ffff:ffff:ffff:ffff,CZ
2001:41d0:2:4dbf::,2001:41d0:a:5dff:ffff:ffff:ffff:ffff,FR
2001:41d0:a:5e00::,2001:41d0:a:5fff:ffff:ffff:ffff:ffff,ES
-2001:41d0:a:6000::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:41d0:a:6000::,2001:41d0:129:9bff:ffff:ffff:ffff:ffff,FR
+2001:41d0:129:9c00::,2001:41d0:129:9cff:ffff:ffff:ffff:ffff,NL
+2001:41d0:129:9d00::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:41d8::,2001:41d8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:41e0::,2001:41e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:41e8::,2001:41e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -5105,6 +5199,7 @@
2001:43f8:af0::,2001:43f8:af1:ffff:ffff:ffff:ffff:ffff,BJ
2001:43f8:b00::,2001:43f8:b00:ffff:ffff:ffff:ffff:ffff,KE
2001:43f8:b10::,2001:43f8:b10:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:b20::,2001:43f8:b20:ffff:ffff:ffff:ffff:ffff,CI
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
@@ -5221,7 +5316,9 @@
2001:4960::,2001:4960:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4968::,2001:4968:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4970::,2001:4970:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:4978::,2001:4978:1e2:ffff:ffff:ffff:ffff:ffff,US
+2001:4978::,2001:4978:f:7fff:ffff:ffff:ffff:ffff,US
+2001:4978:f:8000::,2001:4978:f:ffff:ffff:ffff:ffff:ffff,CA
+2001:4978:10::,2001:4978:1e2:ffff:ffff:ffff:ffff:ffff,US
2001:4978:1e3::,2001:4978:1e3:7fff:ffff:ffff:ffff:ffff,CA
2001:4978:1e3:8000::,2001:4978:2d0:ffff:ffff:ffff:ffff:ffff,US
2001:4978:2d1::,2001:4978:2d1:7fff:ffff:ffff:ffff:ffff,CA
@@ -5280,12 +5377,16 @@
2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:4c08::,2001:4c08:2000:ffff:ffff:ffff:ffff:ffff,GB
2001:4c08:2001::,2001:4c08:2001:7fff:ffff:ffff:ffff:ffff,NL
-2001:4c08:2001:8000::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c08:2001:8000::,2001:4c08:200c:ffff:ffff:ffff:ffff:ffff,GB
+2001:4c08:200d::,2001:4c08:200d:7fff:ffff:ffff:ffff:ffff,DE
+2001:4c08:200d:8000::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4c10::,2001:4c10:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:4c20::,2001:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4c28::,2001:4c28::ffff:ffff:ffff:ffff:ffff,NO
2001:4c28:1::,2001:4c28:1:7fff:ffff:ffff:ffff:ffff,RU
-2001:4c28:1:8000::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4c28:1:8000::,2001:4c28:2fff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4c28:3000::,2001:4c28:3000:7fff:ffff:ffff:ffff:ffff,US
+2001:4c28:3000:8000::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO
2001:4c30::,2001:4c30:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:4c38::,2001:4c3f:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:4c40::,2001:4c40:ffff:ffff:ffff:ffff:ffff:ffff,BE
@@ -5362,15 +5463,13 @@
2003:61:ea1c::,2003:61:ea1c:7fff:ffff:ffff:ffff:ffff,GB
2003:61:ea1c:8000::,2003:62:4e56:7fff:ffff:ffff:ffff:ffff,DE
2003:62:4e56:8000::,2003:62:4e56:ffff:ffff:ffff:ffff:ffff,CH
-2003:62:4e57::,2003:77:8f34:ffff:ffff:ffff:ffff:ffff,DE
-2003:77:8f35::,2003:77:8f35:7fff:ffff:ffff:ffff:ffff,NL
-2003:77:8f35:8000::,2003:7a:8943:7fff:ffff:ffff:ffff:ffff,DE
-2003:7a:8943:8000::,2003:7a:8943:ffff:ffff:ffff:ffff:ffff,US
-2003:7a:8944::,2003:84:ab78:ffff:ffff:ffff:ffff:ffff,DE
-2003:84:ab79::,2003:84:ab79:7fff:ffff:ffff:ffff:ffff,RO
-2003:84:ab79:8000::,2003:87:292f:ffff:ffff:ffff:ffff:ffff,DE
+2003:62:4e57::,2003:6a:7f66:7fff:ffff:ffff:ffff:ffff,DE
+2003:6a:7f66:8000::,2003:6a:7f66:ffff:ffff:ffff:ffff:ffff,CH
+2003:6a:7f67::,2003:87:292f:ffff:ffff:ffff:ffff:ffff,DE
2003:87:2930::,2003:87:2930:7fff:ffff:ffff:ffff:ffff,NZ
-2003:87:2930:8000::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2003:87:2930:8000::,2003:87:2968:7fff:ffff:ffff:ffff:ffff,DE
+2003:87:2968:8000::,2003:87:2968:ffff:ffff:ffff:ffff:ffff,NZ
+2003:87:2969::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
2067:8e00::,2067:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
2160:150::,2160:150:7fff:ffff:ffff:ffff:ffff:ffff,US
2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR
@@ -5558,9 +5657,7 @@
2400:8380::,2400:8380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:8400::,2400:8400:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:8480::,2400:8480:ffff:ffff:ffff:ffff:ffff:ffff,MM
-2400:8500::,2400:8500:24ff:ffff:ffff:ffff:ffff:ffff,JP
-2400:8500:2500::,2400:8500:2500:7fff:ffff:ffff:ffff:ffff,US
-2400:8500:2500:8000::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8500::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:8580::,2400:8580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:8600::,2400:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:8680::,2400:8680:ffff:ffff:ffff:ffff:ffff:ffff,HK
@@ -5570,11 +5667,7 @@
2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:8900::,2400:8900::f03c:91ff:fe70:9ac8,SG
2400:8900::f03c:91ff:fe70:9ac9,2400:8900::f03c:91ff:fe70:9ac9,JP
-2400:8900::f03c:91ff:fe70:9aca,2400:8900:e000:ffff:ffff:ffff:ffff:ffff,SG
-2400:8900:e001::,2400:8900:e001:29ff:ffff:ffff:ffff:ffff,CN
-2400:8900:e001:2a00::,2400:8900:e001:2a00::,SG
-2400:8900:e001:2a00::1,2400:8900:e001:7fff:ffff:ffff:ffff:ffff,CN
-2400:8900:e001:8000::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:8900::f03c:91ff:fe70:9aca,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
@@ -5695,9 +5788,78 @@
2400:c900::,2400:c900:ffff:ffff:ffff:ffff:ffff:ffff,ID
2400:c980::,2400:c980:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD
-2400:cb00::,2400:cb00:f00c:ffff:ffff:ffff:ffff:ffff,HK
-2400:cb00:f00d::,2400:cb00:f00d:7fff:ffff:ffff:ffff:ffff,US
-2400:cb00:f00d:8000::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00::,2400:cb00::ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:1::,2400:cb00:3:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:4::,2400:cb00:4:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:5::,2400:cb00:10:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:11::,2400:cb00:12:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:13::,2400:cb00:13:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:14::,2400:cb00:17:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:18::,2400:cb00:18:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:19::,2400:cb00:19:ffff:ffff:ffff:ffff:ffff,FR
+2400:cb00:1a::,2400:cb00:1f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:20::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,NL
+2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,GB
+2400:cb00:22::,2400:cb00:22:ffff:ffff:ffff:ffff:ffff,JP
+2400:cb00:23::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:25::,2400:cb00:25:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:26::,2400:cb00:26:ffff:ffff:ffff:ffff:ffff,AU
+2400:cb00:27::,2400:cb00:28:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:29::,2400:cb00:29:ffff:ffff:ffff:ffff:ffff,CA
+2400:cb00:2a::,2400:cb00:2f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:30::,2400:cb00:30:ffff:ffff:ffff:ffff:ffff,AT
+2400:cb00:31::,2400:cb00:31:ffff:ffff:ffff:ffff:ffff,CZ
+2400:cb00:32::,2400:cb00:32:ffff:ffff:ffff:ffff:ffff,SE
+2400:cb00:33::,2400:cb00:33:ffff:ffff:ffff:ffff:ffff,PL
+2400:cb00:34::,2400:cb00:34:ffff:ffff:ffff:ffff:ffff,KR
+2400:cb00:35::,2400:cb00:35:ffff:ffff:ffff:ffff:ffff,SG
+2400:cb00:36::,2400:cb00:36:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:37::,2400:cb00:37:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:38::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,CL
+2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT
+2400:cb00:3a::,2400:cb00:3f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:40::,2400:cb00:40:ffff:ffff:ffff:ffff:ffff,ES
+2400:cb00:41::,2400:cb00:41:ffff:ffff:ffff:ffff:ffff,CO
+2400:cb00:42::,2400:cb00:42:ffff:ffff:ffff:ffff:ffff,BR
+2400:cb00:43::,2400:cb00:43:ffff:ffff:ffff:ffff:ffff,PE
+2400:cb00:44::,2400:cb00:44:ffff:ffff:ffff:ffff:ffff,AR
+2400:cb00:45::,2400:cb00:45:ffff:ffff:ffff:ffff:ffff,ZA
+2400:cb00:46::,2400:cb00:46:ffff:ffff:ffff:ffff:ffff,NZ
+2400:cb00:47::,2400:cb00:47:ffff:ffff:ffff:ffff:ffff,AU
+2400:cb00:48::,2400:cb00:48:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:49::,2400:cb00:49:ffff:ffff:ffff:ffff:ffff,FR
+2400:cb00:4a::,2400:cb00:4f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:50::,2400:cb00:50:ffff:ffff:ffff:ffff:ffff,RO
+2400:cb00:51::,2400:cb00:51:ffff:ffff:ffff:ffff:ffff,JP
+2400:cb00:52::,2400:cb00:52:ffff:ffff:ffff:ffff:ffff,IE
+2400:cb00:53::,2400:cb00:53:ffff:ffff:ffff:ffff:ffff,KW
+2400:cb00:54::,2400:cb00:54:ffff:ffff:ffff:ffff:ffff,QA
+2400:cb00:55::,2400:cb00:55:ffff:ffff:ffff:ffff:ffff,OM
+2400:cb00:56::,2400:cb00:56:ffff:ffff:ffff:ffff:ffff,MY
+2400:cb00:57::,2400:cb00:59:ffff:ffff:ffff:ffff:ffff,IN
+2400:cb00:5a::,2400:cb00:5f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:60::,2400:cb00:60:ffff:ffff:ffff:ffff:ffff,AE
+2400:cb00:61::,2400:cb00:61:ffff:ffff:ffff:ffff:ffff,KE
+2400:cb00:62::,2400:cb00:62:ffff:ffff:ffff:ffff:ffff,EG
+2400:cb00:63::,2400:cb00:63:ffff:ffff:ffff:ffff:ffff,GB
+2400:cb00:64::,2400:cb00:64:ffff:ffff:ffff:ffff:ffff,CH
+2400:cb00:65::,2400:cb00:65:ffff:ffff:ffff:ffff:ffff,DK
+2400:cb00:66::,2400:cb00:66:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:67::,2400:cb00:67:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:68::,2400:cb00:68:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:69::,2400:cb00:69:ffff:ffff:ffff:ffff:ffff,CA
+2400:cb00:6a::,2400:cb00:6f:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:70::,2400:cb00:70:ffff:ffff:ffff:ffff:ffff,CA
+2400:cb00:71::,2400:cb00:71:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:72::,2400:cb00:72:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:73::,2400:cb00:73:ffff:ffff:ffff:ffff:ffff,PL
+2400:cb00:74::,2400:cb00:74:ffff:ffff:ffff:ffff:ffff,BG
+2400:cb00:75::,2400:cb00:75:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:76::,2400:cb00:77:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:78::,2400:cb00:78:ffff:ffff:ffff:ffff:ffff,BE
+2400:cb00:79::,2400:cb00:82:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb00:83::,2400:cb00:83:ffff:ffff:ffff:ffff:ffff,NO
+2400:cb00:84::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:cb80::,2400:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:cc00::,2400:cc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:cc80::,2400:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -5918,7 +6080,9 @@
2401:3d80::,2401:3d80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:3e00::,2401:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KH
2401:3e80::,2401:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2401:3f00::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:3f00::,2401:3f00:10:ffff:ffff:ffff:ffff:ffff,SG
+2401:3f00:11::,2401:3f00:11:7fff:ffff:ffff:ffff:ffff,ID
+2401:3f00:11:8000::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
2401:3f80::,2401:3f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:4000::,2401:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR
2401:4080::,2401:4080:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -6120,7 +6284,6 @@
2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN
2401:b880::,2401:b880:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
-2401:b980::,2401:b980:ffff:ffff:ffff:ffff:ffff:ffff,TH
2401:ba00::,2401:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:ba80::,2401:ba80:ffff:ffff:ffff:ffff:ffff:ffff,PK
2401:bb00::,2401:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
@@ -6271,9 +6434,7 @@
2401:fa00:8::,2401:fa00:8:7fff:ffff:ffff:ffff:ffff,IN
2401:fa00:8:8000::,2401:fa00:8:ffff:ffff:ffff:ffff:ffff,MY
2401:fa00:9::,2401:fa00:9:ffff:ffff:ffff:ffff:ffff,AU
-2401:fa00:a::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN
-2401:fa00:d::,2401:fa00:d:7fff:ffff:ffff:ffff:ffff,KR
-2401:fa00:d:8000::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,IN
+2401:fa00:a::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,IN
2401:fa00:f:8000::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG
2401:fa00:10::,2401:fa00:10:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:11::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,AU
@@ -7387,37 +7548,72 @@
2404:1500::,2404:1500:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:1580::,2404:1580:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:1600::,2404:1601:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1680::,2404:1680:ffff:ffff:ffff:ffff:ffff:ffff,TH
2404:1700::,2404:1700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1780::,2404:1780:ffff:ffff:ffff:ffff:ffff:ffff,MM
2404:1800::,2404:1800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1880::,2404:1880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:1900::,2404:1900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1980::,2404:1980:ffff:ffff:ffff:ffff:ffff:ffff,JP
2404:1a00::,2404:1a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:1a80::,2404:1a80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:1b00::,2404:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1b80::,2404:1b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:1c00::,2404:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1c80::,2404:1c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:1d00::,2404:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1d80::,2404:1d80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:1e00::,2404:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1e80::,2404:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:1f00::,2404:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:1f80::,2404:1f80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2404:2000::,2404:2000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:2080::,2404:2080:ffff:ffff:ffff:ffff:ffff:ffff,AU
2404:2100::,2404:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:2180::,2404:2180:ffff:ffff:ffff:ffff:ffff:ffff,SG
2404:2200::,2404:2200:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2280::,2404:2280:ffff:ffff:ffff:ffff:ffff:ffff,SG
2404:2300::,2404:2300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:2380::,2404:2380:ffff:ffff:ffff:ffff:ffff:ffff,PH
2404:2400::,2404:2400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2480::,2404:2480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:2580::,2404:2580:ffff:ffff:ffff:ffff:ffff:ffff,TH
2404:2600::,2404:2600:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:2680::,2404:2680:ffff:ffff:ffff:ffff:ffff:ffff,JP
2404:2700::,2404:2700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2404:2780::,2404:2780:ffff:ffff:ffff:ffff:ffff:ffff,AU
2404:2800::,2404:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2880::,2404:2880:ffff:ffff:ffff:ffff:ffff:ffff,KR
2404:2900::,2404:2900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2980::,2404:2980:ffff:ffff:ffff:ffff:ffff:ffff,BD
2404:2a00::,2404:2a00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2a80::,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
+2404:2d80::,2404:2d80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2404:2e00::,2404:2e00:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2404:2e80::,2404:2e80:ffff:ffff:ffff:ffff:ffff:ffff,NP
2404:2f00::,2404:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:2f80::,2404:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:3080::,2404:3080:ffff:ffff:ffff:ffff:ffff:ffff,BD
2404:3100::,2404:3100:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:3180::,2404:3180:ffff:ffff:ffff:ffff:ffff:ffff,BD
2404:3200::,2404:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:3280::,2404:3280:ffff:ffff:ffff:ffff:ffff:ffff,TH
2404:3300::,2404:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3380::,2404:3380:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:3480::,2404:3480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:3500::,2404:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:3580::,2404:3580:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:3600::,2404:3601:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3680::,2404:3680:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:3700::,2404:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3780::,2404:3780:ffff:ffff:ffff:ffff:ffff:ffff,NP
2404:3800::,2404:3800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3880::,2404:3880:ffff:ffff:ffff:ffff:ffff:ffff,HK
2404:3900::,2404:3900:ffff:ffff:ffff:ffff:ffff:ffff,ID
2404:3a00::,2404:3a00:ffff:ffff:ffff:ffff:ffff:ffff,VN
2404:3b00::,2404:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -8111,7 +8307,7 @@
2406:e100::,2406:e100:ffff:ffff:ffff:ffff:ffff:ffff,PH
2406:e200::,2406:e200:ffff:ffff:ffff:ffff:ffff:ffff,HK
2406:e300::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
-2406:e400::,2406:e400:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2406:e400::,2406:e401:ffff:ffff:ffff:ffff:ffff:ffff,MV
2406:e500::,2406:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:e600::,2406:e600:ffff:ffff:ffff:ffff:ffff:ffff,AU
2406:e700::,2406:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -8476,6 +8672,11 @@
2602:230::,2602:231: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:ff5b::,2602:ff5b:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff5c::,2602:ff5c:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff5d::,2602:ff5d:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff5e::,2602:ff5e:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff5f::,2602:ff5f:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff60::,2602:ff60:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff61::,2602:ff61:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff62::,2602:ff62:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -8618,7 +8819,7 @@
2602:ffe7::,2602:ffe7:fff:ffff:ffff:ffff:ffff:ffff,PR
2602:ffe8::,2602:ffe8:3ff:ffff:ffff:ffff:ffff:ffff,US
2602:ffe8:400::,2602:ffe8:4ff:ffff:ffff:ffff:ffff:ffff,AU
-2602:ffe8:500::,2602:ffe9:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffe8:500::,2602:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,US
2602:ffea::,2602:ffeb:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffec::,2602:ffec:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ffed::,2602:ffed:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -8641,6 +8842,7 @@
2602:ffff::,2602:ffff:fff:ffff:ffff:ffff:ffff:ffff,US
2603::,2603:10ff:ffff:ffff:ffff:ffff:ffff:ffff,US
2603:2000::,2603:30ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2603:4000::,2603:40ff:ffff:ffff:ffff:ffff:ffff:ffff,US
2604::,2604::ffff:ffff:ffff:ffff:ffff:ffff,US
2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:100::,2604:100:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8663,7 +8865,6 @@
2604:980::,2604:980:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a00::,2604:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a80::,2604:a80:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:b00::,2604:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:b80::,2604:b80:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:c00::,2604:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:c80::,2604:c80:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -8971,8 +9172,8 @@
2604:a780::,2604:a780:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a800::,2604:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a880::,2604:a880:cac:ffff:ffff:ffff:ffff:ffff,US
-2604:a880:cad::,2604:a880:cad:7fff:ffff:ffff:ffff:ffff,CA
-2604:a880:cad:8000::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a880:cad::,2604:a880:cad:ffff:ffff:ffff:ffff:ffff,CA
+2604:a880:cae::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a900::,2604:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:a980::,2604:a980:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:aa00::,2604:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9159,7 +9360,7 @@
2605:900::,2605:900:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:980::,2605:980:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:a00::,2605:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:a80::,2605:a80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:a80::,2605:a80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US
2605:b80::,2605:b80:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -9545,7 +9746,7 @@
2605:d180::,2605:d180:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d280::,2605:d280:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d300::,2605:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
-2605:d380::,2605:d380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d380::,2605:d380:fff:ffff:ffff:ffff:ffff:ffff,US
2605:d400::,2605:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d480::,2605:d480:ffff:ffff:ffff:ffff:ffff:ffff,US
2605:d500::,2605:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
@@ -9668,7 +9869,6 @@
2606:1100::,2606:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1180::,2606:1180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1200::,2606:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
-2606:1280::,2606:1280:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1300::,2606:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1380::,2606:1380:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:1400::,2606:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9710,7 +9910,51 @@
2606:2680::,2606:2680:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2700::,2606:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:2780::,2606:2780:ffff:ffff:ffff:ffff:ffff:ffff,US
-2606:2800::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2800::,2606:2800:420a:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:420b::,2606:2800:420b:ffff:ffff:ffff:ffff:ffff,BR
+2606:2800:420c::,2606:2800:420c:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:420d::,2606:2800:420d:ffff:ffff:ffff:ffff:ffff,EC
+2606:2800:420e::,2606:2800:5000:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5001::,2606:2800:5001:ffff:ffff:ffff:ffff:ffff,ES
+2606:2800:5002::,2606:2800:500f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5010::,2606:2800:5011:ffff:ffff:ffff:ffff:ffff,GB
+2606:2800:5012::,2606:2800:501f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5020::,2606:2800:5021:ffff:ffff:ffff:ffff:ffff,DE
+2606:2800:5022::,2606:2800:5030:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5031::,2606:2800:5033:ffff:ffff:ffff:ffff:ffff,FR
+2606:2800:5034::,2606:2800:503f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5040::,2606:2800:5041:ffff:ffff:ffff:ffff:ffff,NL
+2606:2800:5042::,2606:2800:504f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5050::,2606:2800:5051:ffff:ffff:ffff:ffff:ffff,AT
+2606:2800:5052::,2606:2800:505f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5060::,2606:2800:5061:ffff:ffff:ffff:ffff:ffff,SE
+2606:2800:5062::,2606:2800:506f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5070::,2606:2800:5071:ffff:ffff:ffff:ffff:ffff,DE
+2606:2800:5072::,2606:2800:507f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5080::,2606:2800:5080:ffff:ffff:ffff:ffff:ffff,IT
+2606:2800:5081::,2606:2800:508f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:5090::,2606:2800:5090:ffff:ffff:ffff:ffff:ffff,PL
+2606:2800:5091::,2606:2800:5fff:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6000::,2606:2800:6001:ffff:ffff:ffff:ffff:ffff,SG
+2606:2800:6002::,2606:2800:600f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6010::,2606:2800:6011:ffff:ffff:ffff:ffff:ffff,HK
+2606:2800:6012::,2606:2800:601f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6020::,2606:2800:6023:ffff:ffff:ffff:ffff:ffff,JP
+2606:2800:6024::,2606:2800:6027:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6028::,2606:2800:6029:ffff:ffff:ffff:ffff:ffff,JP
+2606:2800:602a::,2606:2800:602a:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:602b::,2606:2800:602b:ffff:ffff:ffff:ffff:ffff,JP
+2606:2800:602c::,2606:2800:602f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6030::,2606:2800:6031:ffff:ffff:ffff:ffff:ffff,AU
+2606:2800:6032::,2606:2800:6032:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6033::,2606:2800:6033:ffff:ffff:ffff:ffff:ffff,AU
+2606:2800:6034::,2606:2800:603f:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:6040::,2606:2800:6041:ffff:ffff:ffff:ffff:ffff,HK
+2606:2800:6042::,2606:2800:60ef:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:60f0::,2606:2800:60f3:ffff:ffff:ffff:ffff:ffff,IN
+2606:2800:60f4::,2606:2800:7000:ffff:ffff:ffff:ffff:ffff,US
+2606:2800:7001::,2606:2800:7001:ffff:ffff:ffff:ffff:ffff,CO
+2606:2800:7002::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2880::,2606:2880:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2900::,2606:2900:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:2980::,2606:2980:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9776,7 +10020,9 @@
2606:4580::,2606:4580:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:4600::,2606:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:4680::,2606:4680:ffff:ffff:ffff:ffff:ffff:ffff,US
-2606:4700::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4700::,2606:4700:1000:7fff:ffff:ffff:ffff:ffff,US
+2606:4700:1000:8000::,2606:4700:1000:ffff:ffff:ffff:ffff:ffff,DE
+2606:4700:1001::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:4780::,2606:4780:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:4800::,2606:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:4880::,2606:4880:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9895,7 +10141,6 @@
2606:8100::,2606:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:8180::,2606:8180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:8200::,2606:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
-2606:8280::,2606:8280:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:8300::,2606:830f:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:8380::,2606:8380:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:8400::,2606:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -10083,23 +10328,41 @@
2606:e000::,2606:e000:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:e080::,2606:e080:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e100::,2606:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e180::,2606:e180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e200::,2606:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e280::,2606:e280:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e300::,2606:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e380::,2606:e380:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:e400::,2606:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e480::,2606:e480:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e500::,2606:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e580::,2606:e580:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e600::,2606:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e680::,2606:e680:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e700::,2606:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e780::,2606:e780:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e800::,2606:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e880::,2606:e880:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:e900::,2606:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e980::,2606:e980:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:ea00::,2606:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ea80::,2606:ea80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:eb00::,2606:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:eb80::,2606:eb80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:ec00::,2606:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ec80::,2606:ec80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:ed00::,2606:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ed80::,2606:ed80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:ee00::,2606:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:ee80::,2606:ee80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:ef00::,2606:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ef80::,2606:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f000::,2606:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f080::,2606:f080:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:f100::,2606:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f180::,2606:f180:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f200::,2606:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f280::,2606:f280:ffff:ffff:ffff:ffff:ffff:ffff,CA
2606:f300::,2606:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f400::,2606:f40f:ffff:ffff:ffff:ffff:ffff:ffff,US
2606:f500::,2606:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -10207,7 +10470,7 @@
2607:5d00::,2607:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:5e00::,2607:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:5f00::,2607:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:6000::,2607:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6000::,2607:600f:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:6100::,2607:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:6200::,2607:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:6300::,2607:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -10447,7 +10710,7 @@
2607:f2e8::,2607:f2e8:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f2f0::,2607:f2f0:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f2f8::,2607:f2f8:ffff:ffff:ffff:ffff:ffff:ffff,US
-2607:f300::,2607:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f300::,2607:f300:fff:ffff:ffff:ffff:ffff:ffff,US
2607:f308::,2607:f308:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f310::,2607:f310:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:f318::,2607:f318:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -11063,9 +11326,7 @@
2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US
2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US
2620:0:1000::,2620::100b:ffff:ffff:ffff:ffff:ffff,US
-2620:0:100c::,2620::100c:7fff:ffff:ffff:ffff:ffff,CA
-2620:0:100c:8000::,2620::100c:ffff:ffff:ffff:ffff:ffff,US
-2620:0:100d::,2620::100d:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:100c::,2620::100d:ffff:ffff:ffff:ffff:ffff,CA
2620:0:100e::,2620::1010:ffff:ffff:ffff:ffff:ffff,US
2620:0:1011::,2620::1011:7fff:ffff:ffff:ffff:ffff,AR
2620:0:1011:8000::,2620::1017:7fff:ffff:ffff:ffff:ffff,US
@@ -11073,8 +11334,8 @@
2620:0:1018::,2620::1019:ffff:ffff:ffff:ffff:ffff,US
2620:0:101a::,2620::101a:7fff:ffff:ffff:ffff:ffff,BR
2620:0:101a:8000::,2620::101f:ffff:ffff:ffff:ffff:ffff,US
-2620:0:1020::,2620::1020:7fff:ffff:ffff:ffff:ffff,MX
-2620:0:1020:8000::,2620::1024:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX
+2620:0:1021::,2620::1024:ffff:ffff:ffff:ffff:ffff,US
2620:0:1025::,2620::1025:7fff:ffff:ffff:ffff:ffff,BR
2620:0:1025:8000::,2620::1034:ffff:ffff:ffff:ffff:ffff,US
2620:0:1035::,2620::1035:ffff:ffff:ffff:ffff:ffff,CA
@@ -11404,7 +11665,7 @@
2620:2f:4000::,2620:2f:4000:ffff:ffff:ffff:ffff:ffff,US
2620:2f:8000::,2620:2f:8000:ffff:ffff:ffff:ffff:ffff,US
2620:2f:c000::,2620:2f:c000:ffff:ffff:ffff:ffff:ffff,US
-2620:30::,2620:30::ffff:ffff:ffff:ffff:ffff,US
+2620:30::,2620:30:f:ffff:ffff:ffff:ffff:ffff,US
2620:30:4000::,2620:30:4000:ffff:ffff:ffff:ffff:ffff,US
2620:30:8000::,2620:30:8000:ffff:ffff:ffff:ffff:ffff,US
2620:30:c000::,2620:30:c00f:ffff:ffff:ffff:ffff:ffff,US
@@ -11794,7 +12055,6 @@
2620:98:8000::,2620:98:8000:ffff:ffff:ffff:ffff:ffff,US
2620:98:c000::,2620:98:c000:ffff:ffff:ffff:ffff:ffff,US
2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US
-2620:99:4000::,2620:99:4000:ffff:ffff:ffff:ffff:ffff,CA
2620:99:8000::,2620:99:8000:ffff:ffff:ffff:ffff:ffff,US
2620:99:c000::,2620:99:c000:ffff:ffff:ffff:ffff:ffff,US
2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA
@@ -11920,7 +12180,7 @@
2620:b9:4000::,2620:b9:4000:ffff:ffff:ffff:ffff:ffff,US
2620:b9:8000::,2620:b9:8000:ffff:ffff:ffff:ffff:ffff,US
2620:b9:c000::,2620:b9:c000:ffff:ffff:ffff:ffff:ffff,US
-2620:ba::,2620:ba::ffff:ffff:ffff:ffff:ffff,US
+2620:ba::,2620:ba:ff:ffff:ffff:ffff:ffff:ffff,US
2620:ba:4000::,2620:ba:4000:ffff:ffff:ffff:ffff:ffff,US
2620:ba:8000::,2620:ba:8000:ffff:ffff:ffff:ffff:ffff,US
2620:ba:c000::,2620:ba:c000:ffff:ffff:ffff:ffff:ffff,US
@@ -12135,18 +12395,29 @@
2620:ef:8000::,2620:ef:8000:ffff:ffff:ffff:ffff:ffff,US
2620:ef:c000::,2620:ef:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f0::,2620:f0::ffff:ffff:ffff:ffff:ffff,US
-2620:f0:4000::,2620:f0:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:f0:4000::,2620:f0:400f:ffff:ffff:ffff:ffff:ffff,US
2620:f0:8000::,2620:f0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f0:c000::,2620:f0:c00f:ffff:ffff:ffff:ffff:ffff,US
2620:f1::,2620:f1::ffff:ffff:ffff:ffff:ffff,US
+2620:f1:4000::,2620:f1:4000:ffff:ffff:ffff:ffff:ffff,CA
2620:f1:8000::,2620:f1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f1:c000::,2620:f1:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f2::,2620:f2::ffff:ffff:ffff:ffff:ffff,CA
+2620:f2:4000::,2620:f2:4000:ffff:ffff:ffff:ffff:ffff,US
2620:f2:8000::,2620:f2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f2:c000::,2620:f2:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f3::,2620:f3::ffff:ffff:ffff:ffff:ffff,US
+2620:f3:4000::,2620:f3:4000:ffff:ffff:ffff:ffff:ffff,US
2620:f3:8000::,2620:f3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f3:c000::,2620:f3:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f4::,2620:f4::ffff:ffff:ffff:ffff:ffff,US
+2620:f4:4000::,2620:f4:40ff:ffff:ffff:ffff:ffff:ffff,US
2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:f4:c000::,2620:f4:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US
+2620:f5:4000::,2620:f5:4000:ffff:ffff:ffff:ffff:ffff,US
2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f5:c000::,2620:f5:c000:ffff:ffff:ffff:ffff:ffff,US
2620:f6:8000::,2620:f6:8000:ffff:ffff:ffff:ffff:ffff,US
2620:f7::,2620:f7::ffff:ffff:ffff:ffff:ffff,US
2620:f7:8000::,2620:f7:8000:ffff:ffff:ffff:ffff:ffff,US
@@ -12328,7 +12599,9 @@
2620:10a:3000::,2620:10a:30ff:ffff:ffff:ffff:ffff:ffff,US
2620:10a:4000::,2620:10a:40ff:ffff:ffff:ffff:ffff:ffff,US
2620:10a:5000::,2620:10a:50ff:ffff:ffff:ffff:ffff:ffff,US
-2620:10a:6000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:6000::,2620:10a:6000:3fff:ffff:ffff:ffff:ffff,US
+2620:10a:6000:4000::,2620:10a:6000:7fff:ffff:ffff:ffff:ffff,CA
+2620:10a:6000:8000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US
2620:10a:8000::,2620:10a:80ff:ffff:ffff:ffff:ffff:ffff,CA
2620:10a:9000::,2620:10a:90ff:ffff:ffff:ffff:ffff:ffff,US
2620:10a:a000::,2620:10a:a0ff:ffff:ffff:ffff:ffff:ffff,US
@@ -12380,7 +12653,9 @@
2620:10d:9000::,2620:10d:900f:ffff:ffff:ffff:ffff:ffff,US
2620:10d:a000::,2620:10d:a0ff:ffff:ffff:ffff:ffff:ffff,US
2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US
-2620:10d:c000::,2620:10d:c0f0:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c000::,2620:10d:c091:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c092::,2620:10d:c092:7fff:ffff:ffff:ffff:ffff,GB
+2620:10d:c092:8000::,2620:10d:c0f0:ffff:ffff:ffff:ffff:ffff,US
2620:10d:c0f1::,2620:10d:c0f1:7fff:ffff:ffff:ffff:ffff,KR
2620:10d:c0f1:8000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US
2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA
@@ -12750,6 +13025,15 @@
2620:124:a000::,2620:124:a00f:ffff:ffff:ffff:ffff:ffff,US
2620:124:b000::,2620:124:b0ff:ffff:ffff:ffff:ffff:ffff,CA
2620:124:c000::,2620:124:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:124:d000::,2620:124:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:124:e000::,2620:124:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:124:f000::,2620:124:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:125::,2620:125:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:125:1000::,2620:125:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:125:2000::,2620:125:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:125:3000::,2620:125:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:125:4000::,2620:125:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:125:5000::,2620:125:500f:ffff:ffff:ffff:ffff:ffff,CA
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
@@ -12815,7 +13099,7 @@
2620:1c0::,2620:1c0:ffff:ffff:ffff:ffff:ffff:ffff,US
2620:1d0::,2620:1d1:ffff:ffff:ffff:ffff:ffff:ffff,US
2620:1d2::,2620:1d2:ffff:ffff:ffff:ffff:ffff:ffff,CA
-2620:1d3::,2620:1d3:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1d3::,2620:1d5:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e0::,2620:1e1:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e2::,2620:1e2:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1e3::,2620:1e3:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -12828,7 +13112,6 @@
2620:1ea::,2620:1ea:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1eb::,2620:1eb:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1ec::,2620:1ec:fff:ffff:ffff:ffff:ffff:ffff,US
-2620:1ed::,2620:1ed:fff:ffff:ffff:ffff:ffff:ffff,CA
2620:1ee::,2620:1ee:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1ef::,2620:1ef:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1f0::,2620:1f1:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -13123,6 +13406,7 @@
2801:10:4000::,2801:10:4000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:6000::,2801:10:6000:ffff:ffff:ffff:ffff:ffff,HN
2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:9000::,2801:10:9000:ffff:ffff:ffff:ffff:ffff,PY
2801:10:a000::,2801:10:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO
2801:10:e000::,2801:10:e000:ffff:ffff:ffff:ffff:ffff,AR
@@ -13191,7 +13475,6 @@
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:4000::,2801:18:4000: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
2801:18:a000::,2801:18:a000:ffff:ffff:ffff:ffff:ffff,BO
@@ -13251,6 +13534,7 @@
2801:1e:a000::,2801:1e:a000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e:e000::,2801:1e:e000:ffff:ffff:ffff:ffff:ffff,SV
2801:1f::,2801:1f::ffff:ffff:ffff:ffff:ffff,AR
+2801:1f:1000::,2801:1f:1000:ffff:ffff:ffff:ffff:ffff,HN
2801:1f:2000::,2801:1f:2000:ffff:ffff:ffff:ffff:ffff,CR
2801:1f:4000::,2801:1f:4000:ffff:ffff:ffff:ffff:ffff,CR
2801:1f:6000::,2801:1f:6000:ffff:ffff:ffff:ffff:ffff,AR
@@ -13540,6 +13824,7 @@
2801:80:1660::,2801:80:1660:ffff:ffff:ffff:ffff:ffff,BR
2801:80:1670::,2801:80:1670:ffff:ffff:ffff:ffff:ffff,BR
2801:80:1680::,2801:80:1680:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1690::,2801:80:1690: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
@@ -13683,6 +13968,7 @@
2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:1440::,2803:1440:ffff:ffff:ffff:ffff:ffff:ffff,GT
2803:1500::,2803:1500:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2803:1540::,2803:1540:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:1580::,2803:1580:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ
2803:1640::,2803:1640:ffff:ffff:ffff:ffff:ffff:ffff,NI
@@ -13724,6 +14010,7 @@
2803:2440::,2803:2440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2480::,2803:2480:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:2500::,2803:2500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2540::,2803:2540:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:2580::,2803:2580:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2640::,2803:2640:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -13765,6 +14052,7 @@
2803:3440::,2803:3440:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3500::,2803:3500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3540::,2803:3540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3580::,2803:3580:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:3600::,2803:3600:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:3640::,2803:3640:ffff:ffff:ffff:ffff:ffff:ffff,DO
@@ -13849,6 +14137,7 @@
2803:5440::,2803:5440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5480::,2803:5480:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5500::,2803:5500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5540::,2803:5540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5580::,2803:5580:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:5640::,2803:5640:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -13889,6 +14178,7 @@
2803:6440::,2803:6440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:6500::,2803:6500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:6540::,2803:6540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6580::,2803:6580:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6640::,2803:6640:ffff:ffff:ffff:ffff:ffff:ffff,DO
@@ -14015,6 +14305,7 @@
2803:9440::,2803:9440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9500::,2803:9500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9540::,2803:9540:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:9580::,2803:9580:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW
2803:9640::,2803:9640:ffff:ffff:ffff:ffff:ffff:ffff,DO
@@ -14056,6 +14347,7 @@
2803:a440::,2803:a440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a500::,2803:a500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a540::,2803:a540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a580::,2803:a580:ffff:ffff:ffff:ffff:ffff:ffff,HT
2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a640::,2803:a640:ffff:ffff:ffff:ffff:ffff:ffff,DO
@@ -14138,6 +14430,7 @@
2803:c440::,2803:c440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c480::,2803:c480:ffff:ffff:ffff:ffff:ffff:ffff,AR
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:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:c640::,2803:c640:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -14181,6 +14474,7 @@
2803:d440::,2803:d440:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:d500::,2803:d500:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:d540::,2803:d540:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:d580::,2803:d580:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:d600::,2803:d600:ffff:ffff:ffff:ffff:ffff:ffff,UY
2803:d640::,2803:d640:ffff:ffff:ffff:ffff:ffff:ffff,SV
@@ -14223,6 +14517,7 @@
2803:e440::,2803:e440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e480::,2803:e480:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e500::,2803:e500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:e540::,2803:e540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e580::,2803:e580:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:e640::,2803:e640:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -16237,6 +16532,7 @@
2804:1f18::,2804:1f18:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f1a::,2804:1f1a:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1f1c::,2804:1f1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f1e::,2804:1f1e:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:2000::,2804:2000:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:2004::,2804:2004:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:2008::,2804:2008:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -17058,10 +17354,75 @@
2804:2ccc::,2804:2ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:2cd0::,2804:2cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:2cd4::,2804:2cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cd8::,2804:2cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cdc::,2804:2cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ce0::,2804:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ce4::,2804:2ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ce8::,2804:2ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cec::,2804:2cec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cf0::,2804:2cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cf4::,2804:2cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cf8::,2804:2cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cfc::,2804:2cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d00::,2804:2d00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d04::,2804:2d04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d08::,2804:2d08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d0c::,2804:2d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d10::,2804:2d10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d14::,2804:2d14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d18::,2804:2d18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d1c::,2804:2d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d20::,2804:2d20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d24::,2804:2d24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d28::,2804:2d28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d2c::,2804:2d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d30::,2804:2d30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d34::,2804:2d34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d38::,2804:2d38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d3c::,2804:2d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d40::,2804:2d40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d44::,2804:2d44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d48::,2804:2d48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d4c::,2804:2d4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d50::,2804:2d50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d54::,2804:2d54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d58::,2804:2d58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d5c::,2804:2d5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d60::,2804:2d60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d64::,2804:2d64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d68::,2804:2d68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d6c::,2804:2d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d70::,2804:2d70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d74::,2804:2d74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d78::,2804:2d78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d7c::,2804:2d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d80::,2804:2d80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d84::,2804:2d84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d88::,2804:2d88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d8c::,2804:2d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d90::,2804:2d90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d94::,2804:2d94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d98::,2804:2d98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d9c::,2804:2d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2da0::,2804:2da0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2da4::,2804:2da4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2da8::,2804:2da8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dac::,2804:2dac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2db0::,2804:2db0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2db4::,2804:2db4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2db8::,2804:2db8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dbc::,2804:2dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dc0::,2804:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dc4::,2804:2dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dc8::,2804:2dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dcc::,2804:2dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dd0::,2804:2dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dd4::,2804:2dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dd8::,2804:2dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ddc::,2804:2ddc: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:21d:ffff:ffff:ffff:ffff:ffff:ffff,MX
-2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:217::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:230::,2806:230:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:238::,2806:238::ffff:ffff:ffff:ffff:ffff,MX
2806:238:10::,2806:238:10:ffff:ffff:ffff:ffff:ffff,MX
@@ -17738,6 +18099,7 @@
2a00:4280::,2a00:4280:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:42a0::,2a00:42a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:42c0::,2a00:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:42e0::,2a00:42e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:4300::,2a00:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:4320::,2a00:4320:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:4340::,2a00:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -17777,6 +18139,7 @@
2a00:4780::,2a00:4780:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:47a0::,2a00:47a0:ffff:ffff:ffff:ffff:ffff:ffff,KG
2a00:47c0::,2a00:47c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:47e0::,2a00:47e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:4800::,2a00:4807:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a00:4820::,2a00:4820:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:4840::,2a00:4847:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -18021,6 +18384,7 @@
2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a00:6640::,2a00:6647:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a00:66c0::,2a00:66c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:66e0::,2a00:66e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -18193,7 +18557,9 @@
2a00:79e0:15::,2a00:79e0:15:ffff:ffff:ffff:ffff:ffff,DE
2a00:79e0:16::,2a00:79e0:1b:ffff:ffff:ffff:ffff:ffff,CH
2a00:79e0:1c::,2a00:79e0:1c:ffff:ffff:ffff:ffff:ffff,GH
-2a00:79e0:1d::,2a00:79e0:22:ffff:ffff:ffff:ffff:ffff,CH
+2a00:79e0:1d::,2a00:79e0:1e:ffff:ffff:ffff:ffff:ffff,CH
+2a00:79e0:1f::,2a00:79e0:1f:ffff:ffff:ffff:ffff:ffff,LT
+2a00:79e0:20::,2a00:79e0:22:ffff:ffff:ffff:ffff:ffff,CH
2a00:79e0:23::,2a00:79e0:23:ffff:ffff:ffff:ffff:ffff,GB
2a00:79e0:24::,2a00:79e1:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:7a00::,2a00:7a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -18309,6 +18675,7 @@
2a00:8820::,2a00:8820:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a00:8840::,2a00:8840:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a00:8860:8001::,2a00:8860:8001:7fff:ffff:ffff:ffff:ffff,US
+2a00:8860:8007::,2a00:8860:8007:7fff:ffff:ffff:ffff:ffff,US
2a00:8880::,2a00:8880:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:88a0::,2a00:88a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a00:88c0::,2a00:88c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -18461,7 +18828,6 @@
2a00:9ae0::,2a00:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:9b00::,2a00:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a00:9b20::,2a00:9b20:ffff:ffff:ffff:ffff:ffff:ffff,IR
-2a00:9b40::,2a00:9b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a00:9b60::,2a00:9b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:9b80::,2a00:9b80:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:9ba0::,2a00:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -18633,6 +18999,7 @@
2a00:b040::,2a00:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:b060::,2a00:b060:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a00:b080::,2a00:b080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+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
@@ -18834,7 +19201,9 @@
2a00:ca00::,2a00:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK
-2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:ca60::,2a00:ca60:16:7fff:ffff:ffff:ffff:ffff,LU
+2a00:ca60:16:8000::,2a00:ca60:16:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ca60:17::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU
2a00:ca80::,2a00:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:caa0::,2a00:caa0:ffff:ffff:ffff:ffff:ffff:ffff,JO
2a00:cac0::,2a00:cac0:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -18894,7 +19263,9 @@
2a00:d140::,2a00:d140:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a00:d160::,2a00:d160:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:d180::,2a00:d180:ffff:ffff:ffff:ffff:ffff:ffff,PT
-2a00:d1a0::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d1a0::,2a00:d1a0:f:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d1a0:10::,2a00:d1a0:1f:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d1a0:20::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:d1c0::,2a00:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:d1e0::,2a00:d1e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:d200::,2a00:d200:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -19016,7 +19387,9 @@
2a00:e120::,2a00:e120:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:e140::,2a00:e140:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:e160::,2a00:e160:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a00:e180::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e180::,2a00:e180:12ca:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e180:12cb::,2a00:e180:12cb:7fff:ffff:ffff:ffff:ffff,US
+2a00:e180:12cb:8000::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:e1a0::,2a00:e1a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:e1c0::,2a00:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:e1e0::,2a00:e1e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -19123,6 +19496,7 @@
2a00:eea0::,2a00:eea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:eec0::,2a00:eec0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:eee0::,2a00:eee0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:ef00::,2a00:ef00:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:ef20::,2a00:ef20:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:ef40::,2a00:ef40:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:ef60::,2a00:ef67:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -19200,7 +19574,7 @@
2a00:f8a0::,2a00:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:f8c0::,2a00:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LI
2a00:f8e0::,2a00:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a00:f900::,2a00:f900:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:f900::,2a00:f907:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a00:f920::,2a00:f920:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:f940::,2a00:f940:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:f960::,2a00:f960:ffff:ffff:ffff:ffff:ffff:ffff,IS
@@ -19244,7 +19618,7 @@
2a00:fe20::,2a00:fe20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:fe40::,2a00:fe40:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:fe60::,2a00:fe60:ffff:ffff:ffff:ffff:ffff:ffff,FI
-2a00:fe80::,2a00:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:fe80::,2a00:fe87:ffff:ffff:ffff:ffff:ffff:ffff,ME
2a00:fea0::,2a00:fea7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:fec0::,2a00:fec0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a00:fee0::,2a00:fee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -19350,7 +19724,7 @@
2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE
-2a01:260::,2a01:260:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:260::,2a01:267:ffff:ffff:ffff:ffff:ffff:ffff,SI
2a01:268::,2a01:268:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a01:270::,2a01:270:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a01:278::,2a01:27f:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -19369,7 +19743,6 @@
2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:2d8::,2a01:2df:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a01:300:22::,2a01:300:22:7fff:ffff:ffff:ffff:ffff,GB
2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:310::,2a01:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:320::,2a01:320:ffff:ffff:ffff:ffff:ffff:ffff,MD
@@ -19408,6 +19781,7 @@
2a01:3e0:1601::,2a01:3e0:1601:ffff:ffff:ffff:ffff:ffff,FI
2a01:3e0:1700::,2a01:3e0:1701:ff:ffff:ffff:ffff:ffff,GB
2a01:3e0:1b00::,2a01:3e0:1b00:ffff:ffff:ffff:ffff:ffff,FI
+2a01:3e0:1d00::,2a01:3e0:1d00:ff:ffff:ffff:ffff:ffff,CH
2a01:3e0:ff24::,2a01:3e0:ff24:ffff:ffff:ffff:ffff:ffff,DE
2a01:3e8::,2a01:3e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:3f0::,2a01:3f7:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -19458,7 +19832,7 @@
2a01:558::,2a01:558:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:560::,2a01:567:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a01:568::,2a01:570:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,US
2a01:580::,2a01:580:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:590::,2a01:590:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:598::,2a01:59f:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -20022,6 +20396,7 @@
2a01:7cc0::,2a01:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a01:7ce0::,2a01:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:7d00::,2a01:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7d20::,2a01:7d20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a01:7d40::,2a01:7d40:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a01:7d60::,2a01:7d60:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a01:7d80::,2a01:7d80:ffff:ffff:ffff:ffff:ffff:ffff,HU
@@ -20129,7 +20504,7 @@
2a01:8a40::,2a01:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:8a60::,2a01:8a60:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:8a80::,2a01:8a80:ffff:ffff:ffff:ffff:ffff:ffff,SK
-2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a01:8ac0::,2a01:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:8ae0::,2a01:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:8b00::,2a01:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -20344,6 +20719,7 @@
2a01:a500::,2a01:a500:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:a520::,2a01:a520:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a01:a540::,2a01:a540:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:a560::,2a01:a560:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a01:a580::,2a01:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:a5a0::,2a01:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01:a5c0::,2a01:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20388,6 +20764,7 @@
2a01:aac0::,2a01:aac0:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a01:aae0::,2a01:aae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:ab00::,2a01:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:ab20::,2a01:ab20:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:ab40::,2a01:ab40:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:ab60::,2a01:ab60:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:ab80::,2a01:ab80:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -20483,7 +20860,6 @@
2a01:b740::,2a01:b740:ffff:ffff:ffff:ffff:ffff:ffff,IE
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,IT
2a01:b7c0::,2a01:b7c0: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
@@ -20953,7 +21329,9 @@
2a02:c60::,2a02:c60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:c68::,2a02:c68:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:c70::,2a02:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a02:c78::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c78::,2a02:c7d:424:5fff:ffff:ffff:ffff:ffff,GB
+2a02:c7d:424:6000::,2a02:c7d:424:6fff:ffff:ffff:ffff:ffff,US
+2a02:c7d:424:7000::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:c80::,2a02:c80:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a02:c88::,2a02:c88:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:c90::,2a02:c90:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -21138,7 +21516,8 @@
2a02:1770::,2a02:1770:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:1778::,2a02:1778:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:1780::,2a02:1780:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a02:1788::,2a02:1788:4ff:7fff:ffff:ffff:ffff:ffff,GB
+2a02:1788::,2a02:1788:4fe:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1788:4ff::,2a02:1788:4ff:7fff:ffff:ffff:ffff:ffff,RO
2a02:1788:4ff:8000::,2a02:1788:4ff:ffff:ffff:ffff:ffff:ffff,US
2a02:1788:500::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:1790::,2a02:1790:ffff:ffff:ffff:ffff:ffff:ffff,FI
@@ -21155,7 +21534,9 @@
2a02:17e8::,2a02:17e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:17f0::,2a02:17f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:17f8::,2a02:17f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:1800::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1800::,2a02:1811:8511:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1811:8512::,2a02:1811:8512:7fff:ffff:ffff:ffff:ffff,NL
+2a02:1811:8512:8000::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:2000::,2a02:2000:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a02:2008::,2a02:2008:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:2010::,2a02:2017:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -21575,6 +21956,7 @@
2a02:4360::,2a02:4360:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:4380::,2a02:4380:ffff:ffff:ffff:ffff:ffff:ffff,AZ
2a02:43a0::,2a02:43a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:43c0::,2a02:43c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:43e0::,2a02:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:4400::,2a02:4400:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a02:4420::,2a02:4420:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -21664,6 +22046,7 @@
2a02:4f20::,2a02:4f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:4f40::,2a02:4f40:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:4f60::,2a02:4f67:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f80::,2a02:4f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:4fa0::,2a02:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,IS
2a02:4fc0::,2a02:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,GR
2a02:4fe0::,2a02:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -22067,9 +22450,7 @@
2a02:a000::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a02:a200::,2a02:a21f:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:a300::,2a02:a31f:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a02:a400::,2a02:a44f:7982:ffff:ffff:ffff:ffff:ffff,NL
-2a02:a44f:7983::,2a02:a44f:7983:7fff:ffff:ffff:ffff:ffff,DE
-2a02:a44f:7983:8000::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a400::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:a800::,2a02:a83f:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:aa00::,2a02:aa1f:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a02:ab00::,2a02:ab07:ffff:ffff:ffff:ffff:ffff:ffff,SK
@@ -22343,6 +22724,8 @@
2a02:f9c0::,2a02:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:fa00::,2a02:fa07:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a02:fa40::,2a02:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:fa80::,2a02:fa80:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:faa0::,2a02:faa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:fb00::,2a02:fb07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:fb40::,2a02:fb47:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:fb80::,2a02:fb87:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -22630,7 +23013,6 @@
2a03:2060::,2a03:2060:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:20a0::,2a03:20a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a03:20c0::,2a03:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:20e0::,2a03:20e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:2100::,2a03:2100:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:2120::,2a03:2120:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -22670,6 +23052,7 @@
2a03:2560::,2a03:2560:ffff:ffff:ffff:ffff:ffff:ffff,MK
2a03:2580::,2a03:2580:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:25a0::,2a03:25a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:25c0::,2a03:25c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:25e0::,2a03:25e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:2600::,2a03:2600:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:2620::,2a03:2620:ffff:ffff:ffff:ffff:ffff:ffff,TR
@@ -22677,6 +23060,7 @@
2a03:2660::,2a03:2660:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a03:2680::,2a03:2680:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:26a0::,2a03:26a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:26c0::,2a03:26c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:26e0::,2a03:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:2700::,2a03:2700:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:2720::,2a03:2720:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -22723,6 +23107,7 @@
2a03:2a80::,2a03:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:2aa0::,2a03:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a03:2ac0::,2a03:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2ae0::,2a03:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a03:2b00::,2a03:2b00:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:2b20::,2a03:2b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:2b40::,2a03:2b40:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -22992,7 +23377,8 @@
2a03:4a80:8::,2a03:4a80:8:ffff:ffff:ffff:ffff:ffff,TR
2a03:4a80:9::,2a03:4a80:9:ffff:ffff:ffff:ffff:ffff,UA
2a03:4a80:a::,2a03:4a80:a:ffff:ffff:ffff:ffff:ffff,MX
-2a03:4a80:b::,2a03:4a80:fffe:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4a80:b::,2a03:4a80:b:ffff:ffff:ffff:ffff:ffff,AE
+2a03:4a80:c::,2a03:4a80:fffe:ffff:ffff:ffff:ffff:ffff,NL
2a03:4a80:ffff::,2a03:4a80:ffff:7fff:ffff:ffff:ffff:ffff,US
2a03:4a80:ffff:8000::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4aa0::,2a03:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -23695,10 +24081,15 @@
2a03:a380::,2a03:a380:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:a3a0::,2a03:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:a3c0::,2a03:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a3e0::,2a03:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:a400::,2a03:a400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a420::,2a03:a420:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:a440::,2a03:a440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a460::,2a03:a460:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a03:a480::,2a03:a480:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:a4a0::,2a03:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:a4c0::,2a03:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a4e0::,2a03:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a03:a500::,2a03:a500:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a03:a540::,2a03:a540:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:a580::,2a03:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -23726,6 +24117,7 @@
2a03:ab00::,2a03:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:ab40::,2a03:ab40:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a03:ab80::,2a03:ab80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:abc0::,2a03:abc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:ac00::,2a03:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:ac40::,2a03:ac40:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:ac80::,2a03:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SE
@@ -23914,6 +24306,7 @@
2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d9c0::,2a03:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:da00::,2a03:da00:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a03:da40::,2a03:da40:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:da80::,2a03:da80:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -24240,7 +24633,6 @@
2a04:2b00::,2a04:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:2b40::,2a04:2b47:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO
-2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:2c40:7::,2a04:2c40:7:7fff:ffff:ffff:ffff:ffff,FR
2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA
@@ -24578,6 +24970,7 @@
2a04:7ec0::,2a04:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:7f00::,2a04:7f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a04:7f40::,2a04:7f47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:7f80::,2a04:7f87:ffff:ffff:ffff:ffff:ffff:ffff,QA
2a04:7fc0::,2a04:7fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:8000::,2a04:8007:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a04:8040::,2a04:8047:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -24857,6 +25250,7 @@
2a04:c600::,2a04:c607:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:c640::,2a04:c647:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:c680::,2a04:c687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c6c0::,2a04:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a04:c700::,2a04:c707:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:c740::,2a04:c747:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a04:c780::,2a04:c787:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -24915,6 +25309,7 @@
2a04:d4c0::,2a04:d4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:d500::,2a04:d507:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a04:d540::,2a04:d547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d580::,2a04:d587:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a04:d5c0::,2a04:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a04:d600::,2a04:d607:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:d640::,2a04:d647:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -24972,6 +25367,7 @@
2a04:e340::,2a04:e347:ffff:ffff:ffff:ffff:ffff:ffff,AE
2a04:e380::,2a04:e387:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:e3c0::,2a04:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e400::,2a04:e407:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:e440::,2a04:e447:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:e480::,2a04:e487:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:e4c0:10::,2a04:e4c0:10:ffff:ffff:ffff:ffff:ffff,GB
@@ -25009,6 +25405,7 @@
2a04:eac0::,2a04:eac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:eb00::,2a04:eb07:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a04:eb40::,2a04:eb47:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:eb80::,2a04:eb87:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a04:ebc0::,2a04:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:ec00::,2a04:ec01:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:ec10::,2a04:ec11:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -25055,6 +25452,8 @@
2a04:f5c0::,2a04:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:f600::,2a04:f607:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:f680::,2a04:f687:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:f6c0::,2a04:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:f700::,2a04:f707:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a04:f740::,2a04:f747:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:f780::,2a04:f787:ffff:ffff:ffff:ffff:ffff:ffff,IN
2a04:f7c0::,2a04:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -25092,6 +25491,7 @@
2a04:ff80::,2a04:ff87:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a04:ffc0::,2a04:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a05::,2a05:7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a05:40::,2a05:47:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a05:80::,2a05:87:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:c0::,2a05:c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a05:100::,2a05:107:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -25104,7 +25504,6 @@
2a05:300::,2a05:307:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a05:340::,2a05:347:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:380::,2a05:387:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a05:3c0::,2a05:3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:400::,2a05:407:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:440::,2a05:447:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:480::,2a05:487:ffff:ffff:ffff:ffff:ffff:ffff,UA
@@ -25138,10 +25537,12 @@
2a05:b80::,2a05:b87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:bc0::,2a05:bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:c00::,2a05:c07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a05:c40::,2a05:c47:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:c80::,2a05:c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:cc0::,2a05:cc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:d00::,2a05:d07:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:d40::,2a05:d47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:d80::,2a05:d87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:dc0::,2a05:dc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:e00::,2a05:e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:e40::,2a05:e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -25201,12 +25602,15 @@
2a05:1d80::,2a05:1d87:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a05:1dc0::,2a05:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a05:1e00::,2a05:1e07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:1e40::,2a05:1e47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a05:1e80::,2a05:1e87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:1ec0::,2a05:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:1f00::,2a05:1f07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:1f40::,2a05:1f47:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a05:1f80::,2a05:1f87:ffff:ffff:ffff:ffff:ffff:ffff,BA
2a05:1fc0::,2a05:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a05:2000::,2a05:2007:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a05:2040::,2a05:2047:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:2080::,2a05:2087:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:20c0::,2a05:20c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:2100::,2a05:2107:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -25232,12 +25636,14 @@
2a05:2500::,2a05:2507:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:2540::,2a05:2547:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a05:2580::,2a05:2587:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a05:25c0::,2a05:25c7:ffff:ffff:ffff:ffff:ffff:ffff,KW
2a05:2600::,2a05:2607:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a05:2640::,2a05:2647:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:2680::,2a05:2687:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:26c0::,2a05:26c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:2700::,2a05:2707:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:2740::,2a05:2747:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a05:2780::,2a05:2787:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a05:27c0::,2a05:27c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a05:2800::,2a05:2807:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a05:2840::,2a05:2847:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -25282,6 +25688,7 @@
2a05:3200::,2a05:3207:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a05:3240::,2a05:3247:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:3280::,2a05:3287:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a05:32c0::,2a05:32c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:3300::,2a05:3307:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:3380::,2a05:3387:ffff:ffff:ffff:ffff:ffff:ffff,YE
2a05:33c0::,2a05:33c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
@@ -25373,6 +25780,7 @@
2a05:4980::,2a05:4987:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a05:49c0::,2a05:49c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a05:4a00::,2a05:4a07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a05:4a40::,2a05:4a47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a05:4ac0::,2a05:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:4b00::,2a05:4b07:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a05:4b40::,2a05:4b47:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -25449,6 +25857,7 @@
2a05:5c80::,2a05:5c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:5cc0::,2a05:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:5d00::,2a05:5d07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a05:5d40::,2a05:5d47:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a05:5d80::,2a05:5d87:ffff:ffff:ffff:ffff:ffff:ffff,MK
2a05:5dc0::,2a05:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:5e00::,2a05:5e07:ffff:ffff:ffff:ffff:ffff:ffff,AE
@@ -25526,6 +25935,7 @@
2a05:7000::,2a05:7007:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:7040::,2a05:7047:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:7080::,2a05:7087:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a05:70c0::,2a05:70c7:ffff:ffff:ffff:ffff:ffff:ffff,HR
2a05:7100::,2a05:7107:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:7140::,2a05:7147:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a05:7180::,2a05:7187:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -25781,7 +26191,9 @@
2a05:b000::,2a05:b007:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a05:b040::,2a05:b047:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a05:b080::,2a05:b087:ffff:ffff:ffff:ffff:ffff:ffff,FI
-2a05:b0c0::,2a05:b0c6:6ff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:b0c0::,2a05:b0c6:25f:ffff:ffff:ffff:ffff:ffff,GB
+2a05:b0c6:260::,2a05:b0c6:260:7fff:ffff:ffff:ffff:ffff,US
+2a05:b0c6:260:8000::,2a05:b0c6:6ff:ffff:ffff:ffff:ffff:ffff,GB
2a05:b0c6:700::,2a05:b0c6:7ff:ffff:ffff:ffff:ffff:ffff,AT
2a05:b0c6:800::,2a05:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:b100::,2a05:b107:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -25998,6 +26410,7 @@
2a05:e700::,2a05:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:e740::,2a05:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:e780::,2a05:e787:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a05:e7c0::,2a05:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a05:e800::,2a05:e807:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a05:e840::,2a05:e847:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a05:e880::,2a05:e887:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -26077,6 +26490,7 @@
2a05:fb00::,2a05:fb07:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a05:fb80::,2a05:fb87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:fbc0::,2a05:fbc3:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a05:fbe0::,2a05:fbe3:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a05:fc00::,2a05:fc07:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a05:fc40::,2a05:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:fc80::,2a05:fc87:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -26295,6 +26709,7 @@
2a06:30c0::,2a06:30c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a06:3100::,2a06:3107:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a06:3180::,2a06:3187:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a06:31c0::,2a06:31c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a06:3200::,2a06:3207:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a06:3240::,2a06:3247:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a06:3280::,2a06:3287:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -26417,6 +26832,8 @@
2a06:50c0::,2a06:50c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a06:5100::,2a06:5107:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a06:5140::,2a06:5147:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:5180::,2a06:5187:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a06:51c0::,2a06:51c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a06:5200::,2a06:5207:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a06:5240::,2a06:5247:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a06:5280::,2a06:5287:ffff:ffff:ffff:ffff:ffff:ffff,RO
@@ -26862,7 +27279,6 @@
2a06:bd00::,2a06:bd07:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a06:bd40::,2a06:bd47:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a06:bd80::,2a06:bd87:ffff:ffff:ffff:ffff:ffff:ffff,IS
-2a06:bdc0::,2a06:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a06:be00::,2a06:be07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a06:be40::,2a06:be47:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a06:be80::,2a06:be87:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -27025,6 +27441,97 @@
2a06:e5c0::,2a06:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a06:e600::,2a06:e607:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a06:e640::,2a06:e647:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a06:e680::,2a06:e687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:e6c0::,2a06:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a06:e700::,2a06:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:e740::,2a06:e747:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a06:e780::,2a06:e787:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a06:e7c0::,2a06:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a06:e800::,2a06:e807:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a06:e840::,2a06:e847:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a06:e880::,2a06:e887:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a06:e8c0::,2a06:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a06:e900::,2a06:e907:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a06:e940::,2a06:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:e980::,2a06:e987:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a06:e9c0::,2a06:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ea00::,2a06:ea07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:ea40::,2a06:ea47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a06:ea80::,2a06:ea87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:eac0::,2a06:eac7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a06:eb00::,2a06:eb07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:eb40::,2a06:eb47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:eb80::,2a06:eb87:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a06:ebc0::,2a06:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a06:ec00::,2a06:ec07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ec40::,2a06:ec47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:ec80::,2a06:ec87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a06:ecc0::,2a06:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a06:ed00::,2a06:ed07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ed40::,2a06:ed47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:ed80::,2a06:ed87:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a06:edc0::,2a06:edc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ee00::,2a06:ee07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a06:ee40::,2a06:ee47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ee80::,2a06:ee87:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a06:eec0::,2a06:eec7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a06:ef00::,2a06:ef07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a06:ef40::,2a06:ef47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:ef80::,2a06:ef87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:efc0::,2a06:efc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a06:f000::,2a06:f007:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a06:f040::,2a06:f047:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a06:f080::,2a06:f087:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:f0c0::,2a06:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a06:f100::,2a06:f107:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a06:f140::,2a06:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:f180::,2a06:f187:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a06:f1c0::,2a06:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a06:f200::,2a06:f207:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a06:f240::,2a06:f247:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a06:f280::,2a06:f287:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:f2c0::,2a06:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:f300::,2a06:f307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a06:f340::,2a06:f347:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:f380::,2a06:f387:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a06:f3c0::,2a06:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a06:f400::,2a06:f407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:f440::,2a06:f447:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:f480::,2a06:f487:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a06:f4c0::,2a06:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a06:f500::,2a06:f507:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a06:f540::,2a06:f547:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:f580::,2a06:f587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:f5c0::,2a06:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a06:f600::,2a06:f607:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a06:f640::,2a06:f647:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a06:f680::,2a06:f687:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a06:f6c0::,2a06:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:f700::,2a06:f707:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a06:f740::,2a06:f747:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a06:f780::,2a06:f787:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a06:f7c0::,2a06:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a06:f800::,2a06:f807:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a06:f840::,2a06:f847:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a06:f880::,2a06:f887:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a06:f8c0::,2a06:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a06:f900::,2a06:f907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a06:f940::,2a06:f947:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a06:f980::,2a06:f987:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a06:f9c0::,2a06:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a06:fa00::,2a06:fa07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:fa40::,2a06:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a06:fa80::,2a06:fa87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a06:fac0::,2a06:fac7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a06:fb00::,2a06:fb07:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a06:fb40::,2a06:fb47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a06:fb80::,2a06:fb87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a06:fbc0::,2a06:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a06:fc00::,2a06:fc07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a06:fc40::,2a06:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a06:fc80::,2a06:fc87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a06:fcc0::,2a06:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a06:fd00::,2a06:fd07:ffff:ffff:ffff:ffff:ffff:ffff,BE
2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG
2c0e:2000::,2c0e:2fff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0e:4000::,2c0e:40ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
@@ -27075,6 +27582,9 @@
2c0f:f560::,2c0f:f560:ffff:ffff:ffff:ffff:ffff:ffff,KM
2c0f:f568::,2c0f:f568:ffff:ffff:ffff:ffff:ffff:ffff,CG
2c0f:f570::,2c0f:f570:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f578::,2c0f:f578:ffff:ffff:ffff:ffff:ffff:ffff,TG
+2c0f:f580::,2c0f:f580:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f588::,2c0f:f588:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN
2c0f:f608::,2c0f:f608:ffff:ffff:ffff:ffff:ffff:ffff,RE
2c0f:f610::,2c0f:f610:ffff:ffff:ffff:ffff:ffff:ffff,ZA
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 719d27caa9..daf0b2af0b 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -1778,7 +1778,7 @@ pick_tor2web_rendezvous_node(router_crn_flags_t flags,
router_add_running_nodes_to_smartlist(all_live_nodes,
allow_invalid,
0, 0, 0,
- need_desc);
+ need_desc, 0);
/* Filter all_live_nodes to only add live *and* whitelisted RPs to
* the list whitelisted_live_rps. */
@@ -2144,7 +2144,9 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
const node_t *choice;
smartlist_t *excluded;
const or_options_t *options = get_options();
- router_crn_flags_t flags = CRN_NEED_GUARD|CRN_NEED_DESC;
+ /* If possible, choose an entry server with a preferred address,
+ * otherwise, choose one with an allowed address */
+ router_crn_flags_t flags = CRN_NEED_GUARD|CRN_NEED_DESC|CRN_PREF_ADDR;
const node_t *node;
if (state && options->UseEntryGuards &&
@@ -2161,14 +2163,6 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
* family. */
nodelist_add_node_and_family(excluded, node);
}
- if (firewall_is_fascist_or()) {
- /* Exclude all ORs that we can't reach through our firewall */
- smartlist_t *nodes = nodelist_get_list();
- SMARTLIST_FOREACH(nodes, const node_t *, node, {
- if (!fascist_firewall_allows_node(node))
- smartlist_add(excluded, (void*)node);
- });
- }
/* and exclude current entry guards and their families,
* unless we're in a test network, and excluding guards
* would exclude all nodes (i.e. we're in an incredibly small tor network,
@@ -2247,9 +2241,11 @@ onion_extend_cpath(origin_circuit_t *circ)
if (r) {
/* If we're a client, use the preferred address rather than the
primary address, for potentially connecting to an IPv6 OR
- port. */
- info = extend_info_from_node(r, server_mode(get_options()) == 0);
- tor_assert(info);
+ port. Servers always want the primary (IPv4) address. */
+ int client = (server_mode(get_options()) == 0);
+ info = extend_info_from_node(r, client);
+ /* Clients can fail to find an allowed address */
+ tor_assert(info || client);
}
} else {
const node_t *r =
@@ -2324,33 +2320,43 @@ extend_info_new(const char *nickname, const char *digest,
* <b>for_direct_connect</b> is true, in which case the preferred
* address is used instead. May return NULL if there is not enough
* info about <b>node</b> to extend to it--for example, if there is no
- * routerinfo_t or microdesc_t.
+ * routerinfo_t or microdesc_t, or if for_direct_connect is true and none of
+ * the node's addresses are allowed by tor's firewall and IP version config.
**/
extend_info_t *
extend_info_from_node(const node_t *node, int for_direct_connect)
{
tor_addr_port_t ap;
+ int valid_addr = 0;
if (node->ri == NULL && (node->rs == NULL || node->md == NULL))
return NULL;
+ /* Choose a preferred address first, but fall back to an allowed address.
+ * choose_address returns 1 on success, but get_prim_orport returns 0. */
if (for_direct_connect)
- node_get_pref_orport(node, &ap);
+ valid_addr = fascist_firewall_choose_address_node(node,
+ FIREWALL_OR_CONNECTION,
+ 0, &ap);
else
- node_get_prim_orport(node, &ap);
+ valid_addr = !node_get_prim_orport(node, &ap);
- log_debug(LD_CIRC, "using %s for %s",
- fmt_addrport(&ap.addr, ap.port),
- node->ri ? node->ri->nickname : node->rs->nickname);
+ if (valid_addr)
+ log_debug(LD_CIRC, "using %s for %s",
+ fmt_addrport(&ap.addr, ap.port),
+ node->ri ? node->ri->nickname : node->rs->nickname);
+ else
+ log_warn(LD_CIRC, "Could not choose valid address for %s",
+ node->ri ? node->ri->nickname : node->rs->nickname);
- if (node->ri)
+ if (valid_addr && node->ri)
return extend_info_new(node->ri->nickname,
node->identity,
node->ri->onion_pkey,
node->ri->onion_curve25519_pkey,
&ap.addr,
ap.port);
- else if (node->rs && node->md)
+ else if (valid_addr && node->rs && node->md)
return extend_info_new(node->rs->nickname,
node->identity,
node->md->onion_pkey,
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index dcbeb1e2bb..ade371d39f 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -53,6 +53,7 @@ static void cpath_ref_decref(crypt_path_reference_t *cpath_ref);
//static void circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
// const uint8_t *token);
static void circuit_clear_rend_token(or_circuit_t *circ);
+static void circuit_about_to_free_atexit(circuit_t *circ);
static void circuit_about_to_free(circuit_t *circ);
/********* END VARIABLES ************/
@@ -901,6 +902,7 @@ circuit_free_all(void)
}
}
tmp->global_circuitlist_idx = -1;
+ circuit_about_to_free_atexit(tmp);
circuit_free(tmp);
SMARTLIST_DEL_CURRENT(lst, tmp);
} SMARTLIST_FOREACH_END(tmp);
@@ -1744,6 +1746,32 @@ circuit_mark_for_close_, (circuit_t *circ, int reason, int line,
smartlist_add(circuits_pending_close, circ);
}
+/** Called immediately before freeing a marked circuit <b>circ</b> from
+ * circuit_free_all() while shutting down Tor; this is a safe-at-shutdown
+ * version of circuit_about_to_free(). It's important that it at least
+ * do circuitmux_detach_circuit() when appropriate.
+ */
+static void
+circuit_about_to_free_atexit(circuit_t *circ)
+{
+
+ if (circ->n_chan) {
+ circuit_clear_cell_queue(circ, circ->n_chan);
+ circuitmux_detach_circuit(circ->n_chan->cmux, circ);
+ circuit_set_n_circid_chan(circ, 0, NULL);
+ }
+
+ if (! CIRCUIT_IS_ORIGIN(circ)) {
+ or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
+
+ if (or_circ->p_chan) {
+ circuit_clear_cell_queue(circ, or_circ->p_chan);
+ circuitmux_detach_circuit(or_circ->p_chan->cmux, circ);
+ circuit_set_p_circid_chan(or_circ, 0, NULL);
+ }
+ }
+}
+
/** Called immediately before freeing a marked circuit <b>circ</b>.
* Disconnects the circuit from other data structures, launches events
* as appropriate, and performs other housekeeping.
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 05201a5473..5ffd1f68c7 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -2006,8 +2006,13 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if (r && node_has_descriptor(r)) {
/* We might want to connect to an IPv6 bridge for loading
descriptors so we use the preferred address rather than
- the primary. */
+ the primary. */
extend_info = extend_info_from_node(r, conn->want_onehop ? 1 : 0);
+ if (!extend_info) {
+ log_warn(LD_CIRC,"Could not make a one-hop connection to %s. "
+ "Discarding this circuit.", conn->chosen_exit_name);
+ return -1;
+ }
} else {
log_debug(LD_DIR, "considering %d, %s",
want_onehop, conn->chosen_exit_name);
diff --git a/src/or/config.c b/src/or/config.c
index d2d88159df..d71cf6dec7 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -190,10 +190,12 @@ static config_var_t option_vars_[] = {
V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
V(ClientOnly, BOOL, "0"),
- V(ClientPreferIPv6ORPort, BOOL, "0"),
+ V(ClientPreferIPv6ORPort, AUTOBOOL, "auto"),
+ V(ClientPreferIPv6DirPort, AUTOBOOL, "auto"),
V(ClientRejectInternalAddresses, BOOL, "1"),
V(ClientTransportPlugin, LINELIST, NULL),
V(ClientUseIPv6, BOOL, "0"),
+ V(ClientUseIPv4, BOOL, "1"),
V(ConsensusParams, STRING, NULL),
V(ConnLimit, UINT, "1000"),
V(ConnDirectionStatistics, BOOL, "0"),
@@ -3078,6 +3080,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
+ /* Terminate Reachable*Addresses with reject *
+ */
for (i=0; i<3; i++) {
config_line_t **linep =
(i==0) ? &options->ReachableAddresses :
@@ -3087,8 +3091,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
continue;
/* We need to end with a reject *:*, not an implicit accept *:* */
for (;;) {
- if (!strcmp((*linep)->value, "reject *:*")) /* already there */
- break;
linep = &((*linep)->next);
if (!*linep) {
*linep = tor_malloc_zero(sizeof(config_line_t));
@@ -3104,11 +3106,29 @@ options_validate(or_options_t *old_options, or_options_t *options,
if ((options->ReachableAddresses ||
options->ReachableORAddresses ||
- options->ReachableDirAddresses) &&
+ options->ReachableDirAddresses ||
+ options->ClientUseIPv4 == 0) &&
server_mode(options))
REJECT("Servers must be able to freely connect to the rest "
"of the Internet, so they must not set Reachable*Addresses "
- "or FascistFirewall.");
+ "or FascistFirewall or FirewallPorts or ClientUseIPv4 0.");
+
+ /* We check if Reachable*Addresses blocks all addresses in
+ * parse_reachable_addresses(). */
+
+#define WARN_PLEASE_USE_IPV6_LOG_MSG \
+ "ClientPreferIPv6%sPort 1 is ignored unless tor is using IPv6. " \
+ "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges."
+
+ if (!fascist_firewall_use_ipv6(options)
+ && options->ClientPreferIPv6ORPort == 1)
+ log_warn(LD_CONFIG, WARN_PLEASE_USE_IPV6_LOG_MSG, "OR");
+
+ if (!fascist_firewall_use_ipv6(options)
+ && options->ClientPreferIPv6DirPort == 1)
+ log_warn(LD_CONFIG, WARN_PLEASE_USE_IPV6_LOG_MSG, "Dir");
+
+#undef WARN_PLEASE_USE_IPV6_LOG_MSG
if (options->UseBridges &&
server_mode(options))
diff --git a/src/or/connection.c b/src/or/connection.c
index 123c33a876..a1e9850dc0 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -19,6 +19,7 @@
*/
#define TOR_CHANNEL_INTERNAL_
#define CONNECTION_PRIVATE
+#include "backtrace.h"
#include "channel.h"
#include "channeltls.h"
#include "circuitbuild.h"
@@ -37,6 +38,7 @@
#include "ext_orport.h"
#include "geoip.h"
#include "main.h"
+#include "nodelist.h"
#include "policies.h"
#include "reasons.h"
#include "relay.h"
@@ -44,6 +46,7 @@
#include "rendcommon.h"
#include "rephist.h"
#include "router.h"
+#include "routerlist.h"
#include "transports.h"
#include "routerparse.h"
#include "transports.h"
@@ -1111,7 +1114,6 @@ connection_listener_new(const struct sockaddr *listensockaddr,
start_reading = 1;
tor_addr_from_sockaddr(&addr, listensockaddr, &usePort);
-
log_notice(LD_NET, "Opening %s on %s",
conn_type_to_string(type), fmt_addrport(&addr, usePort));
@@ -1715,6 +1717,67 @@ connection_connect_sockaddr,(connection_t *conn,
return inprogress ? 0 : 1;
}
+/* Log a message if connection attempt is made when IPv4 or IPv6 is disabled.
+ * Log a less severe message if we couldn't conform to ClientPreferIPv6ORPort
+ * or ClientPreferIPv6ORPort. */
+static void
+connection_connect_log_client_use_ip_version(const connection_t *conn)
+{
+ const or_options_t *options = get_options();
+
+ /* Only clients care about ClientUseIPv4/6, bail out early on servers, and
+ * on connections we don't care about */
+ if (server_mode(options) || !conn || conn->type == CONN_TYPE_EXIT) {
+ return;
+ }
+
+ /* We're only prepared to log OR and DIR connections here */
+ if (conn->type != CONN_TYPE_OR && conn->type != CONN_TYPE_DIR) {
+ return;
+ }
+
+ const int must_ipv4 = !fascist_firewall_use_ipv6(options);
+ const int must_ipv6 = (options->ClientUseIPv4 == 0);
+ const int pref_ipv6 = (conn->type == CONN_TYPE_OR
+ ? fascist_firewall_prefer_ipv6_orport(options)
+ : fascist_firewall_prefer_ipv6_dirport(options));
+ tor_addr_t real_addr;
+ tor_addr_make_null(&real_addr, AF_UNSPEC);
+
+ /* OR conns keep the original address in real_addr, as addr gets overwritten
+ * with the descriptor address */
+ if (conn->type == CONN_TYPE_OR) {
+ const or_connection_t *or_conn = TO_OR_CONN((connection_t *)conn);
+ tor_addr_copy(&real_addr, &or_conn->real_addr);
+ } else if (conn->type == CONN_TYPE_DIR) {
+ tor_addr_copy(&real_addr, &conn->addr);
+ }
+
+ /* Check if we broke a mandatory address family restriction */
+ if ((must_ipv4 && tor_addr_family(&real_addr) == AF_INET6)
+ || (must_ipv6 && tor_addr_family(&real_addr) == AF_INET)) {
+ log_warn(LD_BUG, "%s connection to %s violated ClientUseIPv%s 0.",
+ conn->type == CONN_TYPE_OR ? "OR" : "Dir",
+ fmt_addr(&real_addr),
+ options->ClientUseIPv4 == 0 ? "4" : "6");
+ log_backtrace(LOG_WARN, LD_BUG, "Address came from");
+ }
+
+ /* Check if we couldn't satisfy an address family preference */
+ if ((!pref_ipv6 && tor_addr_family(&real_addr) == AF_INET6)
+ || (pref_ipv6 && tor_addr_family(&real_addr) == AF_INET)) {
+ log_info(LD_NET, "Connection to %s doesn't satisfy ClientPreferIPv6%sPort "
+ "%d, with ClientUseIPv4 %d, and fascist_firewall_use_ipv6 %d "
+ "(ClientUseIPv6 %d and UseBridges %d).",
+ fmt_addr(&real_addr),
+ conn->type == CONN_TYPE_OR ? "OR" : "Dir",
+ conn->type == CONN_TYPE_OR ? options->ClientPreferIPv6ORPort
+ : options->ClientPreferIPv6DirPort,
+ options->ClientUseIPv4, fascist_firewall_use_ipv6(options),
+ options->ClientUseIPv6, options->UseBridges);
+ }
+}
+
/** Take conn, make a nonblocking socket; try to connect to
* addr:port (port arrives in *host order*). If fail, return -1 and if
* applicable put your best guess about errno into *<b>socket_error</b>.
@@ -1739,6 +1802,10 @@ connection_connect(connection_t *conn, const char *address,
const or_options_t *options = get_options();
int protocol_family;
+ /* Log if we didn't stick to ClientUseIPv4/6 or ClientPreferIPv6OR/DirPort
+ */
+ connection_connect_log_client_use_ip_version(conn);
+
if (tor_addr_family(addr) == AF_INET6)
protocol_family = PF_INET6;
else
@@ -2398,7 +2465,8 @@ retry_listener_ports(smartlist_t *old_conns,
/* We don't need to be root to create a UNIX socket, so defer until after
* setuid. */
const or_options_t *options = get_options();
- if (port->is_unix_addr && !geteuid() && strcmp(options->User, "root"))
+ if (port->is_unix_addr && !geteuid() && (options->User) &&
+ strcmp(options->User, "root"))
continue;
#endif
@@ -4246,10 +4314,10 @@ connection_write_to_buf_impl_,(const char *string, size_t len,
/** Return a connection with given type, address, port, and purpose;
* or NULL if no such connection exists (or if all such connections are marked
* for close). */
-connection_t *
-connection_get_by_type_addr_port_purpose(int type,
+MOCK_IMPL(connection_t *,
+connection_get_by_type_addr_port_purpose,(int type,
const tor_addr_t *addr, uint16_t port,
- int purpose)
+ int purpose))
{
CONN_GET_TEMPLATE(conn,
(conn->type == type &&
diff --git a/src/or/connection.h b/src/or/connection.h
index 59ea6d898e..ec5c3945ec 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -186,9 +186,9 @@ connection_get_outbuf_len(connection_t *conn)
connection_t *connection_get_by_global_id(uint64_t id);
connection_t *connection_get_by_type(int type);
-connection_t *connection_get_by_type_addr_port_purpose(int type,
- const tor_addr_t *addr,
- uint16_t port, int purpose);
+MOCK_DECL(connection_t *,connection_get_by_type_addr_port_purpose,(int type,
+ const tor_addr_t *addr,
+ uint16_t port, int purpose));
connection_t *connection_get_by_type_state(int type, int state);
connection_t *connection_get_by_type_state_rendquery(int type, int state,
const char *rendquery);
diff --git a/src/or/control.c b/src/or/control.c
index 66182fe2a4..2c0209ed85 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -2864,12 +2864,26 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
}
/* now circ refers to something that is ready to be extended */
+ int first_node = zero_circ;
SMARTLIST_FOREACH(nodes, const node_t *, node,
{
- extend_info_t *info = extend_info_from_node(node, 0);
- tor_assert(info); /* True, since node_has_descriptor(node) == true */
+ extend_info_t *info = extend_info_from_node(node, first_node);
+ if (first_node && !info) {
+ log_warn(LD_CONTROL,
+ "controller tried to connect to a node that doesn't have any "
+ "addresses that are allowed by the firewall configuration; "
+ "circuit marked for closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), -END_CIRC_REASON_CONNECTFAILED);
+ connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn);
+ goto done;
+ } else {
+ /* True, since node_has_descriptor(node) == true and we are extending
+ * to the node's primary address */
+ tor_assert(info);
+ }
circuit_append_new_exit(circ, info);
extend_info_free(info);
+ first_node = 0;
});
/* now that we've populated the cpath, start extending */
diff --git a/src/or/directory.c b/src/or/directory.c
index c1fa37f242..fc610d05c4 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -4,6 +4,7 @@
/* See LICENSE for licensing information */
#include "or.h"
+#include "backtrace.h"
#include "buffers.h"
#include "circuitbuild.h"
#include "config.h"
@@ -82,18 +83,18 @@ static void dir_microdesc_download_failed(smartlist_t *failed,
static void note_client_request(int purpose, int compressed, size_t bytes);
static int client_likes_consensus(networkstatus_t *v, const char *want_url);
-static void directory_initiate_command_rend(const tor_addr_t *addr,
- uint16_t or_port,
- uint16_t dir_port,
- const char *digest,
- uint8_t dir_purpose,
- uint8_t router_purpose,
- dir_indirection_t indirection,
- const char *resource,
- const char *payload,
- size_t payload_len,
- time_t if_modified_since,
- const rend_data_t *rend_query);
+static void directory_initiate_command_rend(
+ const tor_addr_port_t *or_addr_port,
+ const tor_addr_port_t *dir_addr_port,
+ const char *digest,
+ uint8_t dir_purpose,
+ uint8_t router_purpose,
+ dir_indirection_t indirection,
+ const char *resource,
+ const char *payload,
+ size_t payload_len,
+ time_t if_modified_since,
+ const rend_data_t *rend_query);
/********* START VARIABLES **********/
@@ -313,7 +314,6 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
SMARTLIST_FOREACH_BEGIN(dirservers, dir_server_t *, ds) {
routerstatus_t *rs = &(ds->fake_status);
size_t upload_len = payload_len;
- tor_addr_t ds_addr;
if ((type & ds->type) == 0)
continue;
@@ -344,11 +344,12 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
log_info(LD_DIR, "Uploading an extrainfo too (length %d)",
(int) extrainfo_len);
}
- tor_addr_from_ipv4h(&ds_addr, ds->addr);
if (purpose_needs_anonymity(dir_purpose, router_purpose)) {
indirection = DIRIND_ANONYMOUS;
- } else if (!fascist_firewall_allows_address_dir(&ds_addr,ds->dir_port)) {
- if (fascist_firewall_allows_address_or(&ds_addr,ds->or_port))
+ } else if (!fascist_firewall_allows_dir_server(ds,
+ FIREWALL_DIR_CONNECTION,
+ 0)) {
+ if (fascist_firewall_allows_dir_server(ds, FIREWALL_OR_CONNECTION, 0))
indirection = DIRIND_ONEHOP;
else
indirection = DIRIND_ANONYMOUS;
@@ -496,11 +497,14 @@ MOCK_IMPL(void, directory_get_from_dirserver, (
const node_t *node = choose_random_dirguard(type);
if (node && node->ri) {
/* every bridge has a routerinfo. */
- tor_addr_t addr;
routerinfo_t *ri = node->ri;
- node_get_addr(node, &addr);
- directory_initiate_command(&addr,
- ri->or_port, 0/*no dirport*/,
+ /* clients always make OR connections to bridges */
+ tor_addr_port_t or_ap;
+ /* we are willing to use a non-preferred address if we need to */
+ fascist_firewall_choose_address_node(node, FIREWALL_OR_CONNECTION, 0,
+ &or_ap);
+ directory_initiate_command(&or_ap.addr, or_ap.port,
+ NULL, 0, /*no dirport*/
ri->cache_info.identity_digest,
dir_purpose,
router_purpose,
@@ -609,6 +613,80 @@ dirind_is_anon(dir_indirection_t ind)
return ind == DIRIND_ANON_DIRPORT || ind == DIRIND_ANONYMOUS;
}
+/* Choose reachable OR and Dir addresses and ports from status, copying them
+ * into use_or_ap and use_dir_ap. If indirection is anonymous, then we're
+ * connecting via another relay, so choose the primary IPv4 address and ports.
+ *
+ * status should have at least one reachable address, if we can't choose a
+ * reachable address, warn and return -1. Otherwise, return 0.
+ */
+static int
+directory_choose_address_routerstatus(const routerstatus_t *status,
+ dir_indirection_t indirection,
+ tor_addr_port_t *use_or_ap,
+ tor_addr_port_t *use_dir_ap)
+{
+ tor_assert(status != NULL);
+ tor_assert(use_or_ap != NULL);
+ tor_assert(use_dir_ap != NULL);
+
+ const int anonymized_connection = dirind_is_anon(indirection);
+ int have_or = 0, have_dir = 0;
+
+ /* We expect status to have at least one reachable address if we're
+ * connecting to it directly.
+ *
+ * Therefore, we can simply use the other address if the one we want isn't
+ * allowed by the firewall.
+ *
+ * (When Tor uploads and downloads a hidden service descriptor, it uses
+ * DIRIND_ANONYMOUS, except for Tor2Web, which uses DIRIND_ONEHOP.
+ * So this code will only modify the address for Tor2Web's HS descriptor
+ * fetches. Even Single Onion Servers (NYI) use DIRIND_ANONYMOUS, to avoid
+ * HSDirs denying service by rejecting descriptors.)
+ */
+
+ /* Initialise the OR / Dir addresses */
+ tor_addr_make_null(&use_or_ap->addr, AF_UNSPEC);
+ use_or_ap->port = 0;
+ tor_addr_make_null(&use_dir_ap->addr, AF_UNSPEC);
+ use_dir_ap->port = 0;
+
+ if (anonymized_connection) {
+ /* Use the primary (IPv4) OR address if we're making an indirect
+ * connection. */
+ tor_addr_from_ipv4h(&use_or_ap->addr, status->addr);
+ use_or_ap->port = status->or_port;
+ have_or = 1;
+ } else {
+ /* We use an IPv6 address if we have one and we prefer it.
+ * Use the preferred address and port if they are reachable, otherwise,
+ * use the alternate address and port (if any).
+ */
+ have_or = fascist_firewall_choose_address_rs(status,
+ FIREWALL_OR_CONNECTION, 0,
+ use_or_ap);
+ }
+
+ have_dir = fascist_firewall_choose_address_rs(status,
+ FIREWALL_DIR_CONNECTION, 0,
+ use_dir_ap);
+
+ /* We rejected both addresses. This isn't great. */
+ if (!have_or && !have_dir) {
+ log_warn(LD_BUG, "Rejected all OR and Dir addresses from %s when "
+ "launching a directory connection to: IPv4 %s OR %d Dir %d "
+ "IPv6 %s OR %d Dir %d", routerstatus_describe(status),
+ fmt_addr32(status->addr), status->or_port,
+ status->dir_port, fmt_addr(&status->ipv6_addr),
+ status->ipv6_orport, status->dir_port);
+ log_backtrace(LOG_WARN, LD_BUG, "Addresses came from");
+ return -1;
+ }
+
+ return 0;
+}
+
/** Same as directory_initiate_command_routerstatus(), but accepts
* rendezvous data to fetch a hidden service descriptor. */
void
@@ -624,8 +702,11 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
{
const or_options_t *options = get_options();
const node_t *node;
- tor_addr_t addr;
+ tor_addr_port_t use_or_ap, use_dir_ap;
const int anonymized_connection = dirind_is_anon(indirection);
+
+ tor_assert(status != NULL);
+
node = node_get_by_id(status->identity_digest);
if (!node && anonymized_connection) {
@@ -634,7 +715,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
routerstatus_describe(status));
return;
}
- tor_addr_from_ipv4h(&addr, status->addr);
if (options->ExcludeNodes && options->StrictNodes &&
routerset_contains_routerstatus(options->ExcludeNodes, status, -1)) {
@@ -646,13 +726,30 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
return;
}
- directory_initiate_command_rend(&addr,
- status->or_port, status->dir_port,
- status->identity_digest,
- dir_purpose, router_purpose,
- indirection, resource,
- payload, payload_len, if_modified_since,
- rend_query);
+ /* At this point, if we are a clients making a direct connection to a
+ * directory server, we have selected a server that has at least one address
+ * allowed by ClientUseIPv4/6 and Reachable{"",OR,Dir}Addresses. This
+ * selection uses the preference in ClientPreferIPv6{OR,Dir}Port, if
+ * possible. (If UseBridges is set, clients always use IPv6, and prefer it
+ * by default.)
+ *
+ * Now choose an address that we can use to connect to the directory server.
+ */
+ if (directory_choose_address_routerstatus(status, indirection, &use_or_ap,
+ &use_dir_ap) < 0) {
+ return;
+ }
+
+ /* We don't retry the alternate OR/Dir address for the same directory if
+ * the address we choose fails (#6772).
+ * Instead, we'll retry another directory on failure. */
+
+ directory_initiate_command_rend(&use_or_ap, &use_dir_ap,
+ status->identity_digest,
+ dir_purpose, router_purpose,
+ indirection, resource,
+ payload, payload_len, if_modified_since,
+ rend_query);
}
/** Launch a new connection to the directory server <b>status</b> to
@@ -874,27 +971,52 @@ directory_command_should_use_begindir(const or_options_t *options,
if (indirection == DIRIND_DIRECT_CONN || indirection == DIRIND_ANON_DIRPORT)
return 0;
if (indirection == DIRIND_ONEHOP)
- if (!fascist_firewall_allows_address_or(addr, or_port) ||
+ if (!fascist_firewall_allows_address_addr(addr, or_port,
+ FIREWALL_OR_CONNECTION, 0) ||
directory_fetches_from_authorities(options))
return 0; /* We're firewalled or are acting like a relay -- also no. */
return 1;
}
-/** Helper for directory_initiate_command_routerstatus: send the
- * command to a server whose address is <b>address</b>, whose IP is
- * <b>addr</b>, whose directory port is <b>dir_port</b>, whose tor version
- * <b>supports_begindir</b>, and whose identity key digest is
- * <b>digest</b>. */
+/** Helper for directory_initiate_command_rend: send the
+ * command to a server whose OR address/port is <b>or_addr</b>/<b>or_port</b>,
+ * whose directory address/port is <b>dir_addr</b>/<b>dir_port</b>, whose
+ * identity key digest is <b>digest</b>, with purposes <b>dir_purpose</b> and
+ * <b>router_purpose</b>, making an (in)direct connection as specified in
+ * <b>indirection</b>, with command <b>resource</b>, <b>payload</b> of
+ * <b>payload_len</b>, and asking for a result only <b>if_modified_since</b>.
+ */
void
-directory_initiate_command(const tor_addr_t *_addr,
- uint16_t or_port, uint16_t dir_port,
+directory_initiate_command(const tor_addr_t *or_addr, uint16_t or_port,
+ const tor_addr_t *dir_addr, uint16_t dir_port,
const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
dir_indirection_t indirection, const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since)
{
- directory_initiate_command_rend(_addr, or_port, dir_port,
+ tor_addr_port_t or_ap, dir_ap;
+
+ /* Use the null tor_addr and 0 port if the address or port isn't valid. */
+ if (tor_addr_port_is_valid(or_addr, or_port, 0)) {
+ tor_addr_copy(&or_ap.addr, or_addr);
+ or_ap.port = or_port;
+ } else {
+ /* the family doesn't matter here, so make it IPv4 */
+ tor_addr_make_null(&or_ap.addr, AF_INET);
+ or_port = 0;
+ }
+
+ if (tor_addr_port_is_valid(dir_addr, dir_port, 0)) {
+ tor_addr_copy(&dir_ap.addr, dir_addr);
+ dir_ap.port = dir_port;
+ } else {
+ /* the family doesn't matter here, so make it IPv4 */
+ tor_addr_make_null(&dir_ap.addr, AF_INET);
+ dir_port = 0;
+ }
+
+ directory_initiate_command_rend(&or_ap, &dir_ap,
digest, dir_purpose,
router_purpose, indirection,
resource, payload, payload_len,
@@ -914,10 +1036,11 @@ is_sensitive_dir_purpose(uint8_t dir_purpose)
}
/** Same as directory_initiate_command(), but accepts rendezvous data to
- * fetch a hidden service descriptor. */
+ * fetch a hidden service descriptor, and takes its address & port arguments
+ * as tor_addr_port_t. */
static void
-directory_initiate_command_rend(const tor_addr_t *_addr,
- uint16_t or_port, uint16_t dir_port,
+directory_initiate_command_rend(const tor_addr_port_t *or_addr_port,
+ const tor_addr_port_t *dir_addr_port,
const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
dir_indirection_t indirection,
@@ -926,29 +1049,34 @@ directory_initiate_command_rend(const tor_addr_t *_addr,
time_t if_modified_since,
const rend_data_t *rend_query)
{
+ tor_assert(or_addr_port);
+ tor_assert(dir_addr_port);
+ tor_assert(or_addr_port->port || dir_addr_port->port);
+ tor_assert(digest);
+
dir_connection_t *conn;
const or_options_t *options = get_options();
int socket_error = 0;
- int use_begindir = directory_command_should_use_begindir(options, _addr,
- or_port, router_purpose, indirection);
+ const int use_begindir = directory_command_should_use_begindir(options,
+ &or_addr_port->addr, or_addr_port->port,
+ router_purpose, indirection);
const int anonymized_connection = dirind_is_anon(indirection);
- tor_addr_t addr;
-
- tor_assert(_addr);
- tor_assert(or_port || dir_port);
- tor_assert(digest);
+ const int or_connection = use_begindir || anonymized_connection;
- tor_addr_copy(&addr, _addr);
+ tor_addr_t addr;
+ tor_addr_copy(&addr, &(or_connection ? or_addr_port : dir_addr_port)->addr);
+ uint16_t port = (or_connection ? or_addr_port : dir_addr_port)->port;
+ uint16_t dir_port = dir_addr_port->port;
log_debug(LD_DIR, "anonymized %d, use_begindir %d.",
anonymized_connection, use_begindir);
if (!dir_port && !use_begindir) {
char ipaddr[TOR_ADDR_BUF_LEN];
- tor_addr_to_str(ipaddr, _addr, TOR_ADDR_BUF_LEN, 0);
+ tor_addr_to_str(ipaddr, &addr, TOR_ADDR_BUF_LEN, 0);
log_warn(LD_BUG, "Cannot use directory server without dirport or "
- "begindir! Address: %s, ORPort: %d, DirPort: %d",
- escaped_safe_str_client(ipaddr), or_port, dir_port);
+ "begindir! Address: %s, DirPort: %d, Connection Port: %d",
+ escaped_safe_str_client(ipaddr), dir_port, port);
return;
}
@@ -963,13 +1091,26 @@ directory_initiate_command_rend(const tor_addr_t *_addr,
/* ensure that we don't make direct connections when a SOCKS server is
* configured. */
- if (!anonymized_connection && !use_begindir && !options->HTTPProxy &&
+ if (!or_connection && !options->HTTPProxy &&
(options->Socks4Proxy || options->Socks5Proxy)) {
log_warn(LD_DIR, "Cannot connect to a directory server through a "
"SOCKS proxy!");
return;
}
+ if (or_connection && (!or_addr_port->port
+ || tor_addr_is_null(&or_addr_port->addr))) {
+ log_warn(LD_DIR, "Cannot make an OR connection without an OR port.");
+ log_backtrace(LOG_WARN, LD_BUG, "Address came from");
+ return;
+ } else if (!or_connection && (!dir_addr_port->port
+ || tor_addr_is_null(&dir_addr_port->addr))) {
+ log_warn(LD_DIR, "Cannot make a Dir connection without a Dir port.");
+ log_backtrace(LOG_WARN, LD_BUG, "Address came from");
+
+ return;
+ }
+
/* ensure we don't make excess connections when we're already downloading
* a consensus during bootstrap */
if (connection_dir_avoid_extra_connection_for_purpose(dir_purpose)) {
@@ -980,7 +1121,7 @@ directory_initiate_command_rend(const tor_addr_t *_addr,
/* set up conn so it's got all the data we need to remember */
tor_addr_copy(&conn->base_.addr, &addr);
- conn->base_.port = use_begindir ? or_port : dir_port;
+ conn->base_.port = port;
conn->base_.address = tor_dup_addr(&addr);
memcpy(conn->identity_digest, digest, DIGEST_LEN);
@@ -998,7 +1139,7 @@ directory_initiate_command_rend(const tor_addr_t *_addr,
if (rend_query)
conn->rend_data = rend_data_dup(rend_query);
- if (!anonymized_connection && !use_begindir) {
+ if (!or_connection) {
/* then we want to connect to dirport directly */
if (options->HTTPProxy) {
@@ -1159,6 +1300,23 @@ directory_get_consensus_url(const char *resource)
return url;
}
+/**
+ * Copies the ipv6 from source to destination, subject to buffer size limit
+ * size. If decorate is true, makes sure the copied address is decorated.
+ */
+static void
+copy_ipv6_address(char* destination, const char* source, size_t len,
+ int decorate) {
+ tor_assert(destination);
+ tor_assert(source);
+
+ if (decorate && source[0] != '[') {
+ tor_snprintf(destination, len, "[%s]", source);
+ } else {
+ strlcpy(destination, source, len);
+ }
+}
+
/** Queue an appropriate HTTP command on conn-\>outbuf. The other args
* are as in directory_initiate_command().
*/
@@ -1170,6 +1328,9 @@ directory_send_command(dir_connection_t *conn,
{
char proxystring[256];
char hoststring[128];
+ /* NEEDS to be the same size hoststring.
+ Will be decorated with brackets around it if it is ipv6. */
+ char decorated_address[128];
smartlist_t *headers = smartlist_new();
char *url;
char request[8192];
@@ -1182,12 +1343,20 @@ directory_send_command(dir_connection_t *conn,
if (resource)
conn->requested_resource = tor_strdup(resource);
+ /* decorate the ip address if it is ipv6 */
+ if (strchr(conn->base_.address, ':')) {
+ copy_ipv6_address(decorated_address, conn->base_.address,
+ sizeof(decorated_address), 1);
+ } else {
+ strlcpy(decorated_address, conn->base_.address, sizeof(decorated_address));
+ }
+
/* come up with a string for which Host: we want */
if (conn->base_.port == 80) {
- strlcpy(hoststring, conn->base_.address, sizeof(hoststring));
+ strlcpy(hoststring, decorated_address, sizeof(hoststring));
} else {
- tor_snprintf(hoststring, sizeof(hoststring),"%s:%d",
- conn->base_.address, conn->base_.port);
+ tor_snprintf(hoststring, sizeof(hoststring), "%s:%d",
+ decorated_address, conn->base_.port);
}
/* Format if-modified-since */
diff --git a/src/or/directory.h b/src/or/directory.h
index c5b5a5afe1..2630705fdb 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -68,8 +68,8 @@ int connection_dir_process_inbuf(dir_connection_t *conn);
int connection_dir_finished_flushing(dir_connection_t *conn);
int connection_dir_finished_connecting(dir_connection_t *conn);
void connection_dir_about_to_close(dir_connection_t *dir_conn);
-void directory_initiate_command(const tor_addr_t *addr,
- uint16_t or_port, uint16_t dir_port,
+void directory_initiate_command(const tor_addr_t *or_addr, uint16_t or_port,
+ const tor_addr_t *dir_addr, uint16_t dir_port,
const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
dir_indirection_t indirection,
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 491557e9cd..3771818457 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -3103,7 +3103,7 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
DSR_HEX|DSR_SORT_UNIQ);
SMARTLIST_FOREACH_BEGIN(digests, const char *, d) {
if (router_digest_is_me(d)) {
- /* make sure desc_routerinfo exists */
+ /* calling router_get_my_routerinfo() to make sure it exists */
const routerinfo_t *ri = router_get_my_routerinfo();
if (ri)
smartlist_add(descs_out, (void*) &(ri->cache_info));
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index 789c53da17..95d9fecfe4 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -87,7 +87,7 @@ get_entry_guards(void)
/** Check whether the entry guard <b>e</b> is usable, given the directory
* authorities' opinion about the router (stored in <b>ri</b>) and the user's
- * configuration (in <b>options</b>). Set <b>e</b>-&gt;bad_since
+ * configuration (in <b>options</b>). Set <b>e</b>->bad_since
* accordingly. Return true iff the entry guard's status changes.
*
* If it's not usable, set *<b>reason</b> to a static string explaining why.
@@ -117,6 +117,9 @@ entry_guard_set_status(entry_guard_t *e, const node_t *node,
*reason = "not recommended as a guard";
else if (routerset_contains_node(options->ExcludeNodes, node))
*reason = "excluded";
+ /* We only care about OR connection connectivity for entry guards. */
+ else if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION, 0))
+ *reason = "unreachable by config";
else if (e->path_bias_disabled)
*reason = "path-biased";
@@ -268,7 +271,7 @@ entry_is_live(const entry_guard_t *e, entry_is_live_flags_t flags,
*msg = "not fast/stable";
return NULL;
}
- if (!fascist_firewall_allows_node(node)) {
+ if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION, 0)) {
*msg = "unreachable by config";
return NULL;
}
@@ -918,7 +921,8 @@ entry_guards_set_from_config(const or_options_t *options)
} else if (routerset_contains_node(options->ExcludeNodes, node)) {
SMARTLIST_DEL_CURRENT(entry_nodes, node);
continue;
- } else if (!fascist_firewall_allows_node(node)) {
+ } else if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION,
+ 0)) {
SMARTLIST_DEL_CURRENT(entry_nodes, node);
continue;
} else if (! node->is_possible_guard) {
@@ -2116,8 +2120,18 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
return;
}
- directory_initiate_command(&bridge->addr,
- bridge->port, 0/*no dirport*/,
+ /* Until we get a descriptor for the bridge, we only know one address for
+ * it. If we */
+ if (!fascist_firewall_allows_address_addr(&bridge->addr, bridge->port,
+ FIREWALL_OR_CONNECTION, 0)) {
+ log_notice(LD_CONFIG, "Tried to fetch a descriptor directly from a "
+ "bridge, but that bridge is not reachable through our "
+ "firewall.");
+ return;
+ }
+
+ directory_initiate_command(&bridge->addr, bridge->port,
+ NULL, 0, /*no dirport*/
bridge->identity,
DIR_PURPOSE_FETCH_SERVERDESC,
ROUTER_PURPOSE_BRIDGE,
@@ -2178,7 +2192,8 @@ fetch_bridge_descriptors(const or_options_t *options, time_t now)
!options->UpdateBridgesFromAuthority, !num_bridge_auths);
if (ask_bridge_directly &&
- !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) {
+ !fascist_firewall_allows_address_addr(&bridge->addr, bridge->port,
+ FIREWALL_OR_CONNECTION, 0)) {
log_notice(LD_DIR, "Bridge at '%s' isn't reachable by our "
"firewall policy. %s.",
fmt_addrport(&bridge->addr, bridge->port),
@@ -2226,6 +2241,7 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
* does so through an address from any source other than node_get_addr().
*/
tor_addr_t addr;
+ const or_options_t *options = get_options();
if (node->ri) {
routerinfo_t *ri = node->ri;
@@ -2258,9 +2274,15 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
}
}
- /* Mark which address to use based on which bridge_t we got. */
- node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 &&
- !tor_addr_is_null(&node->ri->ipv6_addr));
+ if (options->ClientPreferIPv6ORPort == -1) {
+ /* Mark which address to use based on which bridge_t we got. */
+ node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 &&
+ !tor_addr_is_null(&node->ri->ipv6_addr));
+ } else {
+ /* Mark which address to use based on user preference */
+ node->ipv6_preferred = (fascist_firewall_prefer_ipv6_orport(options) &&
+ !tor_addr_is_null(&node->ri->ipv6_addr));
+ }
/* XXXipv6 we lack support for falling back to another address for
the same relay, warn the user */
@@ -2269,10 +2291,13 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
node_get_pref_orport(node, &ap);
log_notice(LD_CONFIG,
"Bridge '%s' has both an IPv4 and an IPv6 address. "
- "Will prefer using its %s address (%s).",
+ "Will prefer using its %s address (%s) based on %s.",
ri->nickname,
- tor_addr_family(&ap.addr) == AF_INET6 ? "IPv6" : "IPv4",
- fmt_addrport(&ap.addr, ap.port));
+ node->ipv6_preferred ? "IPv6" : "IPv4",
+ fmt_addrport(&ap.addr, ap.port),
+ options->ClientPreferIPv6ORPort == -1 ?
+ "the configured Bridge address" :
+ "ClientPreferIPv6ORPort");
}
}
if (node->rs) {
diff --git a/src/or/main.c b/src/or/main.c
index bd4f7eaa71..408f2447c1 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -191,32 +191,6 @@ int quiet_level = 0;
*
****************************************************************************/
-#if 0 && defined(USE_BUFFEREVENTS)
-static void
-free_old_inbuf(connection_t *conn)
-{
- if (! conn->inbuf)
- return;
-
- tor_assert(conn->outbuf);
- tor_assert(buf_datalen(conn->inbuf) == 0);
- tor_assert(buf_datalen(conn->outbuf) == 0);
- buf_free(conn->inbuf);
- buf_free(conn->outbuf);
- conn->inbuf = conn->outbuf = NULL;
-
- if (conn->read_event) {
- event_del(conn->read_event);
- tor_event_free(conn->read_event);
- }
- if (conn->write_event) {
- event_del(conn->read_event);
- tor_event_free(conn->write_event);
- }
- conn->read_event = conn->write_event = NULL;
-}
-#endif
-
#if defined(_WIN32) && defined(USE_BUFFEREVENTS)
/** Remove the kernel-space send and receive buffers for <b>s</b>. For use
* with IOCP only. */
@@ -946,18 +920,6 @@ conn_close_if_marked(int i)
* would make much more sense to react in
* connection_handle_read_impl, or to just stop reading in
* mark_and_flush */
-#if 0
-#define MARKED_READING_RATE 180
- static ratelim_t marked_read_lim = RATELIM_INIT(MARKED_READING_RATE);
- char *m;
- if ((m = rate_limit_log(&marked_read_lim, now))) {
- log_warn(LD_BUG, "Marked connection (fd %d, type %s, state %s) "
- "is still reading; that shouldn't happen.%s",
- (int)conn->s, conn_type_to_string(conn->type),
- conn_state_to_string(conn->type, conn->state), m);
- tor_free(m);
- }
-#endif
conn->read_blocked_on_bw = 1;
connection_stop_reading(conn);
}
@@ -1414,11 +1376,23 @@ reschedule_directory_downloads(void)
periodic_event_reschedule(launch_descriptor_fetches_event);
}
+#define LONGEST_TIMER_PERIOD (30 * 86400)
+/** Helper: Return the number of seconds between <b>now</b> and <b>next</b>,
+ * clipped to the range [1 second, LONGEST_TIMER_PERIOD]. */
static inline int
safe_timer_diff(time_t now, time_t next)
{
if (next > now) {
- tor_assert(next - now <= INT_MAX);
+ /* There were no computers at signed TIME_MIN (1902 on 32-bit systems),
+ * and nothing that could run Tor. It's a bug if 'next' is around then.
+ * On 64-bit systems with signed TIME_MIN, TIME_MIN is before the Big
+ * Bang. We cannot extrapolate past a singularity, but there was probably
+ * nothing that could run Tor then, either.
+ **/
+ tor_assert(next > TIME_MIN + LONGEST_TIMER_PERIOD);
+
+ if (next - LONGEST_TIMER_PERIOD > now)
+ return LONGEST_TIMER_PERIOD;
return (int)(next - now);
} else {
return 1;
@@ -2195,7 +2169,10 @@ got_libevent_error(void)
void
ip_address_changed(int at_interface)
{
- int server = server_mode(get_options());
+ const or_options_t *options = get_options();
+ int server = server_mode(options);
+ int exit_reject_private = (server && options->ExitRelay
+ && options->ExitPolicyRejectPrivate);
if (at_interface) {
if (! server) {
@@ -2209,10 +2186,15 @@ ip_address_changed(int at_interface)
reset_bandwidth_test();
stats_n_seconds_working = 0;
router_reset_reachability();
- mark_my_descriptor_dirty("IP address changed");
}
}
+ /* Exit relays incorporate interface addresses in their exit policies when
+ * ExitPolicyRejectPrivate is set */
+ if (exit_reject_private || (server && !at_interface)) {
+ mark_my_descriptor_dirty("IP address changed");
+ }
+
dns_servers_relaunch_checks();
}
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 056d5e8cb9..23e9b0e176 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -224,7 +224,6 @@ nodelist_set_consensus(networkstatus_t *ns)
{
const or_options_t *options = get_options();
int authdir = authdir_mode_v3(options);
- int client = !server_mode(options);
init_nodelist();
if (ns->flavor == FLAV_MICRODESC)
@@ -261,7 +260,7 @@ nodelist_set_consensus(networkstatus_t *ns)
node->is_bad_exit = rs->is_bad_exit;
node->is_hs_dir = rs->is_hs_dir;
node->ipv6_preferred = 0;
- if (client && options->ClientPreferIPv6ORPort == 1 &&
+ if (fascist_firewall_prefer_ipv6_orport(options) &&
(tor_addr_is_null(&rs->ipv6_addr) == 0 ||
(node->md && tor_addr_is_null(&node->md->ipv6_addr) == 0)))
node->ipv6_preferred = 1;
@@ -761,6 +760,40 @@ node_exit_policy_is_exact(const node_t *node, sa_family_t family)
return 1;
}
+/* Check if the "addr" and port_field fields from r are a valid non-listening
+ * address/port. If so, set valid to true and add a newly allocated
+ * tor_addr_port_t containing "addr" and port_field to sl.
+ * "addr" is an IPv4 host-order address and port_field is a uint16_t.
+ * r is typically a routerinfo_t or routerstatus_t.
+ */
+#define SL_ADD_NEW_IPV4_AP(r, port_field, sl, valid) \
+ STMT_BEGIN \
+ if (tor_addr_port_is_valid_ipv4h((r)->addr, (r)->port_field, 0)) { \
+ valid = 1; \
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); \
+ tor_addr_from_ipv4h(&ap->addr, (r)->addr); \
+ ap->port = (r)->port_field; \
+ smartlist_add((sl), ap); \
+ } \
+ STMT_END
+
+/* Check if the "addr" and port_field fields from r are a valid non-listening
+ * address/port. If so, set valid to true and add a newly allocated
+ * tor_addr_port_t containing "addr" and port_field to sl.
+ * "addr" is a tor_addr_t and port_field is a uint16_t.
+ * r is typically a routerinfo_t or routerstatus_t.
+ */
+#define SL_ADD_NEW_IPV6_AP(r, port_field, sl, valid) \
+ STMT_BEGIN \
+ if (tor_addr_port_is_valid(&(r)->ipv6_addr, (r)->port_field, 0)) { \
+ valid = 1; \
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); \
+ tor_addr_copy(&ap->addr, &(r)->ipv6_addr); \
+ ap->port = (r)->port_field; \
+ smartlist_add((sl), ap); \
+ } \
+ STMT_END
+
/** Return list of tor_addr_port_t with all OR ports (in the sense IP
* addr + TCP port) for <b>node</b>. Caller must free all elements
* using tor_free() and free the list using smartlist_free().
@@ -773,30 +806,38 @@ smartlist_t *
node_get_all_orports(const node_t *node)
{
smartlist_t *sl = smartlist_new();
+ int valid = 0;
+ /* Find a valid IPv4 address and port */
if (node->ri != NULL) {
- if (node->ri->addr != 0) {
- tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
- tor_addr_from_ipv4h(&ap->addr, node->ri->addr);
- ap->port = node->ri->or_port;
- smartlist_add(sl, ap);
- }
- if (!tor_addr_is_null(&node->ri->ipv6_addr)) {
- tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
- tor_addr_copy(&ap->addr, &node->ri->ipv6_addr);
- ap->port = node->ri->or_port;
- smartlist_add(sl, ap);
- }
- } else if (node->rs != NULL) {
- tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
- tor_addr_from_ipv4h(&ap->addr, node->rs->addr);
- ap->port = node->rs->or_port;
- smartlist_add(sl, ap);
+ SL_ADD_NEW_IPV4_AP(node->ri, or_port, sl, valid);
+ }
+
+ /* If we didn't find a valid address/port in the ri, try the rs */
+ if (!valid && node->rs != NULL) {
+ SL_ADD_NEW_IPV4_AP(node->rs, or_port, sl, valid);
+ }
+
+ /* Find a valid IPv6 address and port */
+ valid = 0;
+ if (node->ri != NULL) {
+ SL_ADD_NEW_IPV6_AP(node->ri, ipv6_orport, sl, valid);
+ }
+
+ if (!valid && node->rs != NULL) {
+ SL_ADD_NEW_IPV6_AP(node->rs, ipv6_orport, sl, valid);
+ }
+
+ if (!valid && node->md != NULL) {
+ SL_ADD_NEW_IPV6_AP(node->md, ipv6_orport, sl, valid);
}
return sl;
}
+#undef SL_ADD_NEW_IPV4_AP
+#undef SL_ADD_NEW_IPV6_AP
+
/** Wrapper around node_get_prim_orport for backward
compatibility. */
void
@@ -812,9 +853,13 @@ node_get_addr(const node_t *node, tor_addr_t *addr_out)
uint32_t
node_get_prim_addr_ipv4h(const node_t *node)
{
- if (node->ri) {
+ /* Don't check the ORPort or DirPort, as this function isn't port-specific,
+ * and the node might have a valid IPv4 address, yet have a zero
+ * ORPort or DirPort.
+ */
+ if (node->ri && tor_addr_is_valid_ipv4h(node->ri->addr, 0)) {
return node->ri->addr;
- } else if (node->rs) {
+ } else if (node->rs && tor_addr_is_valid_ipv4h(node->rs->addr, 0)) {
return node->rs->addr;
}
return 0;
@@ -825,13 +870,13 @@ node_get_prim_addr_ipv4h(const node_t *node)
void
node_get_address_string(const node_t *node, char *buf, size_t len)
{
- if (node->ri) {
- strlcpy(buf, fmt_addr32(node->ri->addr), len);
- } else if (node->rs) {
+ uint32_t ipv4_addr = node_get_prim_addr_ipv4h(node);
+
+ if (tor_addr_is_valid_ipv4h(ipv4_addr, 0)) {
tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, node->rs->addr);
+ tor_addr_from_ipv4h(&addr, ipv4_addr);
tor_addr_to_str(buf, &addr, len, 0);
- } else {
+ } else if (len > 0) {
buf[0] = '\0';
}
}
@@ -890,30 +935,80 @@ node_get_declared_family(const node_t *node)
return NULL;
}
+/* Does this node have a valid IPv6 address?
+ * Prefer node_has_ipv6_orport() or node_has_ipv6_dirport() for
+ * checking specific ports. */
+int
+node_has_ipv6_addr(const node_t *node)
+{
+ /* Don't check the ORPort or DirPort, as this function isn't port-specific,
+ * and the node might have a valid IPv6 address, yet have a zero
+ * ORPort or DirPort.
+ */
+ if (node->ri && tor_addr_is_valid(&node->ri->ipv6_addr, 0))
+ return 1;
+ if (node->rs && tor_addr_is_valid(&node->rs->ipv6_addr, 0))
+ return 1;
+ if (node->md && tor_addr_is_valid(&node->md->ipv6_addr, 0))
+ return 1;
+
+ return 0;
+}
+
+/* Does this node have a valid IPv6 ORPort? */
+int
+node_has_ipv6_orport(const node_t *node)
+{
+ tor_addr_port_t ipv6_orport;
+ node_get_pref_ipv6_orport(node, &ipv6_orport);
+ return tor_addr_port_is_valid_ap(&ipv6_orport, 0);
+}
+
+/* Does this node have a valid IPv6 DirPort? */
+int
+node_has_ipv6_dirport(const node_t *node)
+{
+ tor_addr_port_t ipv6_dirport;
+ node_get_pref_ipv6_dirport(node, &ipv6_dirport);
+ return tor_addr_port_is_valid_ap(&ipv6_dirport, 0);
+}
+
/** Return 1 if we prefer the IPv6 address and OR TCP port of
* <b>node</b>, else 0.
*
- * We prefer the IPv6 address if the router has an IPv6 address and
+ * We prefer the IPv6 address if the router has an IPv6 address,
+ * and we can use IPv6 addresses, and:
* i) the node_t says that it prefers IPv6
* or
- * ii) the router has no IPv4 address. */
+ * ii) the router has no IPv4 OR address.
+ */
int
-node_ipv6_preferred(const node_t *node)
+node_ipv6_or_preferred(const node_t *node)
{
+ const or_options_t *options = get_options();
tor_addr_port_t ipv4_addr;
node_assert_ok(node);
- if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) {
- if (node->ri)
- return !tor_addr_is_null(&node->ri->ipv6_addr);
- if (node->md)
- return !tor_addr_is_null(&node->md->ipv6_addr);
- if (node->rs)
- return !tor_addr_is_null(&node->rs->ipv6_addr);
+ /* XX/teor - node->ipv6_preferred is set from
+ * fascist_firewall_prefer_ipv6_orport() each time the consensus is loaded.
+ */
+ if (!fascist_firewall_use_ipv6(options)) {
+ return 0;
+ } else if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) {
+ return node_has_ipv6_orport(node);
}
return 0;
}
+#define RETURN_IPV4_AP(r, port_field, ap_out) \
+ STMT_BEGIN \
+ if (r && tor_addr_port_is_valid_ipv4h((r)->addr, (r)->port_field, 0)) { \
+ tor_addr_from_ipv4h(&(ap_out)->addr, (r)->addr); \
+ (ap_out)->port = (r)->port_field; \
+ return 0; \
+ } \
+ STMT_END
+
/** Copy the primary (IPv4) OR port (IP address and TCP port) for
* <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and
* port was copied, else return non-zero.*/
@@ -923,20 +1018,10 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
node_assert_ok(node);
tor_assert(ap_out);
- if (node->ri) {
- if (node->ri->addr == 0 || node->ri->or_port == 0)
- return -1;
- tor_addr_from_ipv4h(&ap_out->addr, node->ri->addr);
- ap_out->port = node->ri->or_port;
- return 0;
- }
- if (node->rs) {
- if (node->rs->addr == 0 || node->rs->or_port == 0)
- return -1;
- tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
- ap_out->port = node->rs->or_port;
- return 0;
- }
+ RETURN_IPV4_AP(node->ri, or_port, ap_out);
+ RETURN_IPV4_AP(node->rs, or_port, ap_out);
+ /* Microdescriptors only have an IPv6 address */
+
return -1;
}
@@ -945,21 +1030,12 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
void
node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
{
- const or_options_t *options = get_options();
tor_assert(ap_out);
- /* Cheap implementation of config option ClientUseIPv6 -- simply
- don't prefer IPv6 when ClientUseIPv6 is not set and we're not a
- client running with bridges. See #4455 for more on this subject.
-
- Note that this filter is too strict since we're hindering not
- only clients! Erring on the safe side shouldn't be a problem
- though. XXX move this check to where outgoing connections are
- made? -LN */
- if ((options->ClientUseIPv6 || options->UseBridges) &&
- node_ipv6_preferred(node)) {
+ if (node_ipv6_or_preferred(node)) {
node_get_pref_ipv6_orport(node, ap_out);
} else {
+ /* the primary ORPort is always on IPv4 */
node_get_prim_orport(node, ap_out);
}
}
@@ -972,20 +1048,113 @@ node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
node_assert_ok(node);
tor_assert(ap_out);
- /* We prefer the microdesc over a potential routerstatus here. They
- are not being synchronised atm so there might be a chance that
- they differ at some point, f.ex. when flipping
- UseMicrodescriptors? -LN */
+ /* Prefer routerstatus over microdesc for consistency with the
+ * fascist_firewall_* functions. Also check if the address or port are valid,
+ * and try another alternative if they are not. */
- if (node->ri) {
+ if (node->ri && tor_addr_port_is_valid(&node->ri->ipv6_addr,
+ node->ri->ipv6_orport, 0)) {
tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr);
ap_out->port = node->ri->ipv6_orport;
- } else if (node->md) {
+ } else if (node->rs && tor_addr_port_is_valid(&node->rs->ipv6_addr,
+ node->rs->ipv6_orport, 0)) {
+ tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr);
+ ap_out->port = node->rs->ipv6_orport;
+ } else if (node->md && tor_addr_port_is_valid(&node->md->ipv6_addr,
+ node->md->ipv6_orport, 0)) {
tor_addr_copy(&ap_out->addr, &node->md->ipv6_addr);
ap_out->port = node->md->ipv6_orport;
- } else if (node->rs) {
+ } else {
+ tor_addr_make_null(&ap_out->addr, AF_INET6);
+ ap_out->port = 0;
+ }
+}
+
+/** Return 1 if we prefer the IPv6 address and Dir TCP port of
+ * <b>node</b>, else 0.
+ *
+ * We prefer the IPv6 address if the router has an IPv6 address,
+ * and we can use IPv6 addresses, and:
+ * i) the router has no IPv4 Dir address.
+ * or
+ * ii) our preference is for IPv6 Dir addresses.
+ */
+int
+node_ipv6_dir_preferred(const node_t *node)
+{
+ const or_options_t *options = get_options();
+ tor_addr_port_t ipv4_addr;
+ node_assert_ok(node);
+
+ /* node->ipv6_preferred is set from fascist_firewall_prefer_ipv6_orport(),
+ * so we can't use it to determine DirPort IPv6 preference.
+ * This means that bridge clients will use IPv4 DirPorts by default.
+ */
+ if (!fascist_firewall_use_ipv6(options)) {
+ return 0;
+ } else if (node_get_prim_dirport(node, &ipv4_addr)
+ || fascist_firewall_prefer_ipv6_dirport(get_options())) {
+ return node_has_ipv6_dirport(node);
+ }
+ return 0;
+}
+
+/** Copy the primary (IPv4) Dir port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and
+ * port was copied, else return non-zero.*/
+int
+node_get_prim_dirport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ RETURN_IPV4_AP(node->ri, dir_port, ap_out);
+ RETURN_IPV4_AP(node->rs, dir_port, ap_out);
+ /* Microdescriptors only have an IPv6 address */
+
+ return -1;
+}
+
+#undef RETURN_IPV4_AP
+
+/** Copy the preferred Dir port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_dirport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ tor_assert(ap_out);
+
+ if (node_ipv6_dir_preferred(node)) {
+ node_get_pref_ipv6_dirport(node, ap_out);
+ } else {
+ /* the primary DirPort is always on IPv4 */
+ node_get_prim_dirport(node, ap_out);
+ }
+}
+
+/** Copy the preferred IPv6 Dir port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_ipv6_dirport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ /* Check if the address or port are valid, and try another alternative if
+ * they are not. Note that microdescriptors have no dir_port. */
+
+ /* Assume IPv4 and IPv6 dirports are the same */
+ if (node->ri && tor_addr_port_is_valid(&node->ri->ipv6_addr,
+ node->ri->dir_port, 0)) {
+ tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr);
+ ap_out->port = node->ri->dir_port;
+ } else if (node->rs && tor_addr_port_is_valid(&node->rs->ipv6_addr,
+ node->rs->dir_port, 0)) {
tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr);
- ap_out->port = node->rs->ipv6_orport;
+ ap_out->port = node->rs->dir_port;
+ } else {
+ tor_addr_make_null(&ap_out->addr, AF_INET6);
+ ap_out->port = 0;
}
}
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index a131e0dd4e..8271e7532a 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -55,10 +55,20 @@ void node_get_address_string(const node_t *node, char *cp, size_t len);
long node_get_declared_uptime(const node_t *node);
time_t node_get_published_on(const node_t *node);
const smartlist_t *node_get_declared_family(const node_t *node);
-int node_ipv6_preferred(const node_t *node);
+
+int node_has_ipv6_addr(const node_t *node);
+int node_has_ipv6_orport(const node_t *node);
+int node_has_ipv6_dirport(const node_t *node);
+/* Deprecated - use node_ipv6_or_preferred or node_ipv6_dir_preferred */
+#define node_ipv6_preferred(node) node_ipv6_or_preferred(node)
+int node_ipv6_or_preferred(const node_t *node);
int node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out);
void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out);
void node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out);
+int node_ipv6_dir_preferred(const node_t *node);
+int node_get_prim_dirport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_dirport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_ipv6_dirport(const node_t *node, tor_addr_port_t *ap_out);
int node_has_curve25519_onion_key(const node_t *node);
MOCK_DECL(smartlist_t *, nodelist_get_list, (void));
diff --git a/src/or/or.h b/src/or/or.h
index 6faeb34d56..f438212b31 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -2414,7 +2414,8 @@ typedef struct node_t {
/* Local info: derived. */
- /** True if the IPv6 OR port is preferred over the IPv4 OR port. */
+ /** True if the IPv6 OR port is preferred over the IPv4 OR port.
+ * XX/teor - can this become out of date if the torrc changes? */
unsigned int ipv6_preferred:1;
/** According to the geoip db what country is this router in? */
@@ -4081,12 +4082,24 @@ typedef struct {
* over randomly chosen exits. */
int ClientRejectInternalAddresses;
- /** If true, clients may connect over IPv6. XXX we don't really
- enforce this -- clients _may_ set up outgoing IPv6 connections
- even when this option is not set. */
+ /** If true, clients may connect over IPv4. If false, they will avoid
+ * connecting over IPv4. We enforce this for OR and Dir connections. */
+ int ClientUseIPv4;
+ /** If true, clients may connect over IPv6. If false, they will avoid
+ * connecting over IPv4. We enforce this for OR and Dir connections.
+ * Use fascist_firewall_use_ipv6() instead of accessing this value
+ * directly. */
int ClientUseIPv6;
- /** If true, prefer an IPv6 OR port over an IPv4 one. */
+ /** If true, prefer an IPv6 OR port over an IPv4 one for entry node
+ * connections. If auto, bridge clients prefer IPv6, and other clients
+ * prefer IPv4. Use fascist_firewall_prefer_ipv6_orport() instead of
+ * accessing this value directly. */
int ClientPreferIPv6ORPort;
+ /** If true, prefer an IPv6 directory port over an IPv4 one for direct
+ * directory connections. If auto, bridge clients prefer IPv6, and other
+ * clients prefer IPv4. Use fascist_firewall_prefer_ipv6_dirport() instead of
+ * accessing this value directly. */
+ int ClientPreferIPv6DirPort;
/** The length of time that we think a consensus should be fresh. */
int V3AuthVotingInterval;
@@ -5145,6 +5158,8 @@ typedef struct dir_server_t {
char *description;
char *nickname;
char *address; /**< Hostname. */
+ /* XX/teor - why do we duplicate the address and port fields here and in
+ * fake_status? Surely we could just use fake_status (#17867). */
tor_addr_t ipv6_addr; /**< IPv6 address if present; AF_UNSPEC if not */
uint32_t addr; /**< IPv4 address. */
uint16_t dir_port; /**< Directory port. */
@@ -5230,7 +5245,9 @@ typedef enum {
CRN_ALLOW_INVALID = 1<<3,
/* XXXX not used, apparently. */
CRN_WEIGHT_AS_EXIT = 1<<5,
- CRN_NEED_DESC = 1<<6
+ CRN_NEED_DESC = 1<<6,
+ /* On clients, only provide nodes that satisfy ClientPreferIPv6OR */
+ CRN_PREF_ADDR = 1<<7
} router_crn_flags_t;
/** Return value for router_add_to_routerlist() and dirserv_add_descriptor() */
diff --git a/src/or/policies.c b/src/or/policies.c
index 4706a9da72..984ab6acf9 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -13,6 +13,7 @@
#include "or.h"
#include "config.h"
#include "dirserv.h"
+#include "networkstatus.h"
#include "nodelist.h"
#include "policies.h"
#include "router.h"
@@ -270,16 +271,76 @@ parse_reachable_addresses(void)
"Error parsing ReachableDirAddresses entry; ignoring.");
ret = -1;
}
+
+ /* We ignore ReachableAddresses for relays */
+ if (!server_mode(options)) {
+ if ((reachable_or_addr_policy
+ && policy_is_reject_star(reachable_or_addr_policy, AF_UNSPEC))
+ || (reachable_dir_addr_policy
+ && policy_is_reject_star(reachable_dir_addr_policy, AF_UNSPEC))) {
+ log_warn(LD_CONFIG, "Tor cannot connect to the Internet if "
+ "ReachableAddresses, ReachableORAddresses, or "
+ "ReachableDirAddresses reject all addresses. Please accept "
+ "some addresses in these options.");
+ } else if (options->ClientUseIPv4 == 1
+ && ((reachable_or_addr_policy
+ && policy_is_reject_star(reachable_or_addr_policy, AF_INET))
+ || (reachable_dir_addr_policy
+ && policy_is_reject_star(reachable_dir_addr_policy, AF_INET)))) {
+ log_warn(LD_CONFIG, "You have set ClientUseIPv4 1, but "
+ "ReachableAddresses, ReachableORAddresses, or "
+ "ReachableDirAddresses reject all IPv4 addresses. "
+ "Tor will not connect using IPv4.");
+ } else if (fascist_firewall_use_ipv6(options)
+ && ((reachable_or_addr_policy
+ && policy_is_reject_star(reachable_or_addr_policy, AF_INET6))
+ || (reachable_dir_addr_policy
+ && policy_is_reject_star(reachable_dir_addr_policy, AF_INET6)))) {
+ log_warn(LD_CONFIG, "You have configured tor to use IPv6 "
+ "(ClientUseIPv6 1 or UseBridges 1), but "
+ "ReachableAddresses, ReachableORAddresses, or "
+ "ReachableDirAddresses reject all IPv6 addresses. "
+ "Tor will not connect using IPv6.");
+ }
+ }
+
return ret;
}
-/** Return true iff the firewall options might block any address:port
- * combination.
+/* Return true iff ClientUseIPv4 0 or ClientUseIPv6 0 might block any OR or Dir
+ * address:port combination. */
+static int
+firewall_is_fascist_impl(void)
+{
+ const or_options_t *options = get_options();
+ /* Assume every non-bridge relay has an IPv4 address.
+ * Clients which use bridges may only know the IPv6 address of their
+ * bridge. */
+ return (options->ClientUseIPv4 == 0
+ || (!fascist_firewall_use_ipv6(options)
+ && options->UseBridges == 1));
+}
+
+/** Return true iff the firewall options, including ClientUseIPv4 0 and
+ * ClientUseIPv6 0, might block any OR address:port combination.
+ * Address preferences may still change which address is selected even if
+ * this function returns false.
*/
int
firewall_is_fascist_or(void)
{
- return reachable_or_addr_policy != NULL;
+ return (reachable_or_addr_policy != NULL || firewall_is_fascist_impl());
+}
+
+/** Return true iff the firewall options, including ClientUseIPv4 0 and
+ * ClientUseIPv6 0, might block any Dir address:port combination.
+ * Address preferences may still change which address is selected even if
+ * this function returns false.
+ */
+int
+firewall_is_fascist_dir(void)
+{
+ return (reachable_dir_addr_policy != NULL || firewall_is_fascist_impl());
}
/** Return true iff <b>policy</b> (possibly NULL) will allow a
@@ -317,49 +378,626 @@ addr_policy_permits_address(uint32_t addr, uint16_t port,
return addr_policy_permits_tor_addr(&a, port, policy);
}
-/** Return true iff we think our firewall will let us make an OR connection to
- * addr:port. */
-int
-fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port)
+/** Return true iff we think our firewall will let us make a connection to
+ * addr:port.
+ *
+ * If we are configured as a server, ignore any address family preference and
+ * just use IPv4.
+ * Otherwise:
+ * - return false for all IPv4 addresses:
+ * - if ClientUseIPv4 is 0, or
+ * if pref_only and pref_ipv6 are both true;
+ * - return false for all IPv6 addresses:
+ * - if fascist_firewall_use_ipv6() is 0, or
+ * - if pref_only is true and pref_ipv6 is false.
+ *
+ * Return false if addr is NULL or tor_addr_is_null(), or if port is 0. */
+STATIC int
+fascist_firewall_allows_address(const tor_addr_t *addr,
+ uint16_t port,
+ smartlist_t *firewall_policy,
+ int pref_only, int pref_ipv6)
{
+ const or_options_t *options = get_options();
+
+ if (!addr || tor_addr_is_null(addr) || !port) {
+ return 0;
+ }
+
+ if (!server_mode(options)) {
+ if (tor_addr_family(addr) == AF_INET &&
+ (!options->ClientUseIPv4 || (pref_only && pref_ipv6)))
+ return 0;
+
+ /* Bridges can always use IPv6 */
+ if (tor_addr_family(addr) == AF_INET6 &&
+ (!fascist_firewall_use_ipv6(options) || (pref_only && !pref_ipv6)))
+ return 0;
+ }
+
return addr_policy_permits_tor_addr(addr, port,
- reachable_or_addr_policy);
+ firewall_policy);
}
-/** Return true iff we think our firewall will let us make an OR connection to
- * <b>ri</b>. */
+/** Is this client configured to use IPv6?
+ */
int
-fascist_firewall_allows_or(const routerinfo_t *ri)
+fascist_firewall_use_ipv6(const or_options_t *options)
{
- /* XXXX proposal 118 */
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, ri->addr);
- return fascist_firewall_allows_address_or(&addr, ri->or_port);
+ /* Clients use IPv6 if it's set, or they use bridges, or they don't use
+ * IPv4 */
+ return (options->ClientUseIPv6 == 1 || options->UseBridges == 1
+ || options->ClientUseIPv4 == 0);
}
-/** Return true iff we think our firewall will let us make an OR connection to
- * <b>node</b>. */
+/** Do we prefer to connect to IPv6, ignoring ClientPreferIPv6ORPort and
+ * ClientPreferIPv6DirPort?
+ * If we're unsure, return -1, otherwise, return 1 for IPv6 and 0 for IPv4.
+ */
+static int
+fascist_firewall_prefer_ipv6_impl(const or_options_t *options)
+{
+ /*
+ Cheap implementation of config options ClientUseIPv4 & ClientUseIPv6 --
+ If we're a server or IPv6 is disabled, use IPv4.
+ If IPv4 is disabled, use IPv6.
+ */
+
+ if (server_mode(options) || !fascist_firewall_use_ipv6(options)) {
+ return 0;
+ }
+
+ if (!options->ClientUseIPv4) {
+ return 1;
+ }
+
+ return -1;
+}
+
+/** Do we prefer to connect to IPv6 ORPorts?
+ */
int
-fascist_firewall_allows_node(const node_t *node)
+fascist_firewall_prefer_ipv6_orport(const or_options_t *options)
+{
+ /* node->ipv6_preferred is set from fascist_firewall_prefer_ipv6_orport()
+ * each time the consensus is loaded.
+ * If our preferences change, we will only reset ipv6_preferred on the node
+ * when the next consensus is loaded. But the consensus is realoded when the
+ * configuration changes after a HUP. So as long as the result of this
+ * function only depends on Tor's options, everything should work ok.
+ */
+ int pref_ipv6 = fascist_firewall_prefer_ipv6_impl(options);
+
+ if (pref_ipv6 >= 0) {
+ return pref_ipv6;
+ }
+
+ /* We can use both IPv4 and IPv6 - which do we prefer? */
+ if (options->ClientPreferIPv6ORPort == 1) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/** Do we prefer to connect to IPv6 DirPorts?
+ */
+int
+fascist_firewall_prefer_ipv6_dirport(const or_options_t *options)
{
- if (node->ri) {
- return fascist_firewall_allows_or(node->ri);
- } else if (node->rs) {
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, node->rs->addr);
- return fascist_firewall_allows_address_or(&addr, node->rs->or_port);
+ int pref_ipv6 = fascist_firewall_prefer_ipv6_impl(options);
+
+ if (pref_ipv6 >= 0) {
+ return pref_ipv6;
+ }
+
+ /* We can use both IPv4 and IPv6 - which do we prefer? */
+ if (options->ClientPreferIPv6DirPort == 1) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/** Return true iff we think our firewall will let us make a connection to
+ * addr:port. Uses ReachableORAddresses or ReachableDirAddresses based on
+ * fw_connection.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family.
+ */
+int
+fascist_firewall_allows_address_addr(const tor_addr_t *addr, uint16_t port,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ const or_options_t *options = get_options();
+
+ if (fw_connection == FIREWALL_OR_CONNECTION) {
+ return fascist_firewall_allows_address(addr, port,
+ reachable_or_addr_policy,
+ pref_only,
+ fascist_firewall_prefer_ipv6_orport(options));
+ } else if (fw_connection == FIREWALL_DIR_CONNECTION) {
+ return fascist_firewall_allows_address(addr, port,
+ reachable_dir_addr_policy,
+ pref_only,
+ fascist_firewall_prefer_ipv6_dirport(options));
+ } else {
+ log_warn(LD_BUG, "Bad firewall_connection_t value %d.",
+ fw_connection);
+ return 0;
+ }
+}
+
+/** Return true iff we think our firewall will let us make a connection to
+ * addr:port (ap). Uses ReachableORAddresses or ReachableDirAddresses based on
+ * fw_connection.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family.
+ */
+int
+fascist_firewall_allows_address_ap(const tor_addr_port_t *ap,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ tor_assert(ap);
+ return fascist_firewall_allows_address_addr(&ap->addr, ap->port,
+ fw_connection, pref_only);
+}
+
+/* Return true iff we think our firewall will let us make a connection to
+ * ipv4h_or_addr:ipv4_or_port. ipv4h_or_addr is interpreted in host order.
+ * Uses ReachableORAddresses or ReachableDirAddresses based on
+ * fw_connection.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family. */
+int
+fascist_firewall_allows_address_ipv4h(uint32_t ipv4h_or_addr,
+ uint16_t ipv4_or_port,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ tor_addr_t ipv4_or_addr;
+ tor_addr_from_ipv4h(&ipv4_or_addr, ipv4h_or_addr);
+ return fascist_firewall_allows_address_addr(&ipv4_or_addr, ipv4_or_port,
+ fw_connection, pref_only);
+}
+
+/** Return true iff we think our firewall will let us make a connection to
+ * ipv4h_addr/ipv6_addr. Uses ipv4_orport/ipv6_orport/ReachableORAddresses or
+ * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and
+ * <b>fw_connection</b>.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family. */
+static int
+fascist_firewall_allows_base(uint32_t ipv4h_addr, uint16_t ipv4_orport,
+ uint16_t ipv4_dirport,
+ const tor_addr_t *ipv6_addr, uint16_t ipv6_orport,
+ uint16_t ipv6_dirport,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ if (fascist_firewall_allows_address_ipv4h(ipv4h_addr,
+ (fw_connection == FIREWALL_OR_CONNECTION
+ ? ipv4_orport
+ : ipv4_dirport),
+ fw_connection,
+ pref_only)) {
+ return 1;
+ }
+
+ if (fascist_firewall_allows_address_addr(ipv6_addr,
+ (fw_connection == FIREWALL_OR_CONNECTION
+ ? ipv6_orport
+ : ipv6_dirport),
+ fw_connection,
+ pref_only)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/** Like fascist_firewall_allows_ri, but doesn't consult the node. */
+static int
+fascist_firewall_allows_ri_impl(const routerinfo_t *ri,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ if (!ri) {
+ return 0;
+ }
+
+ /* Assume IPv4 and IPv6 DirPorts are the same */
+ return fascist_firewall_allows_base(ri->addr, ri->or_port, ri->dir_port,
+ &ri->ipv6_addr, ri->ipv6_orport,
+ ri->dir_port, fw_connection, pref_only);
+}
+
+/** Like fascist_firewall_allows_rs, but doesn't consult the node. */
+static int
+fascist_firewall_allows_rs_impl(const routerstatus_t *rs,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ if (!rs) {
+ return 0;
+ }
+
+ /* Assume IPv4 and IPv6 DirPorts are the same */
+ return fascist_firewall_allows_base(rs->addr, rs->or_port, rs->dir_port,
+ &rs->ipv6_addr, rs->ipv6_orport,
+ rs->dir_port, fw_connection, pref_only);
+}
+
+/** Return true iff we think our firewall will let us make a connection to
+ * <b>rs</b> on either its IPv4 or IPv6 address. Uses
+ * or_port/ipv6_orport/ReachableORAddresses or dir_port/ReachableDirAddresses
+ * based on IPv4/IPv6 and <b>fw_connection</b>.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family.
+ * Consults the corresponding node if the addresses in rs are not permitted. */
+int
+fascist_firewall_allows_rs(const routerstatus_t *rs,
+ firewall_connection_t fw_connection, int pref_only)
+{
+ if (!rs) {
+ return 0;
+ }
+
+ /* Assume IPv4 and IPv6 DirPorts are the same */
+ if (fascist_firewall_allows_rs_impl(rs, fw_connection, pref_only)) {
+ return 1;
} else {
+ const node_t *node = node_get_by_id(rs->identity_digest);
+ return fascist_firewall_allows_node(node, fw_connection, pref_only);
+ }
+}
+
+/** Like fascist_firewall_allows_md, but doesn't consult the node. */
+static int
+fascist_firewall_allows_md_impl(const microdesc_t *md,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ if (!md) {
+ return 0;
+ }
+
+ /* Can't check dirport, it doesn't have one */
+ if (fw_connection == FIREWALL_DIR_CONNECTION) {
+ return 0;
+ }
+
+ /* Also can't check IPv4, doesn't have that either */
+ return fascist_firewall_allows_address_addr(&md->ipv6_addr, md->ipv6_orport,
+ fw_connection, pref_only);
+}
+
+/** Return true iff we think our firewall will let us make a connection to
+ * <b>node</b>:
+ * - if <b>preferred</b> is true, on its preferred address,
+ * - if not, on either its IPv4 or IPv6 address.
+ * Uses or_port/ipv6_orport/ReachableORAddresses or
+ * dir_port/ReachableDirAddresses based on IPv4/IPv6 and <b>fw_connection</b>.
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family. */
+int
+fascist_firewall_allows_node(const node_t *node,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ if (!node) {
+ return 0;
+ }
+
+ node_assert_ok(node);
+
+ /* Sometimes, the rs is missing the IPv6 address info, and we need to go
+ * all the way to the md */
+ if (node->ri && fascist_firewall_allows_ri_impl(node->ri, fw_connection,
+ pref_only)) {
+ return 1;
+ } else if (node->rs && fascist_firewall_allows_rs_impl(node->rs,
+ fw_connection,
+ pref_only)) {
return 1;
+ } else if (node->md && fascist_firewall_allows_md_impl(node->md,
+ fw_connection,
+ pref_only)) {
+ return 1;
+ } else {
+ /* If we know nothing, assume it's unreachable, we'll never get an address
+ * to connect to. */
+ return 0;
}
}
-/** Return true iff we think our firewall will let us make a directory
- * connection to addr:port. */
+/** Return true iff we think our firewall will let us make a connection to
+ * <b>ds</b> on either its IPv4 or IPv6 address. Uses ReachableORAddresses or
+ * ReachableDirAddresses based on <b>fw_connection</b> (some directory
+ * connections are tunneled over ORPorts).
+ * If pref_only, return false if addr is not in the client's preferred address
+ * family. */
int
-fascist_firewall_allows_address_dir(const tor_addr_t *addr, uint16_t port)
+fascist_firewall_allows_dir_server(const dir_server_t *ds,
+ firewall_connection_t fw_connection,
+ int pref_only)
{
- return addr_policy_permits_tor_addr(addr, port,
- reachable_dir_addr_policy);
+ if (!ds) {
+ return 0;
+ }
+
+ /* A dir_server_t always has a fake_status. As long as it has the same
+ * addresses/ports in both fake_status and dir_server_t, this works fine.
+ * (See #17867.)
+ * This function relies on fascist_firewall_allows_rs looking up the node on
+ * failure, because it will get the latest info for the relay. */
+ return fascist_firewall_allows_rs(&ds->fake_status, fw_connection,
+ pref_only);
+}
+
+/** If a and b are both valid and allowed by fw_connection,
+ * choose one based on want_a and return it.
+ * Otherwise, return whichever is allowed.
+ * Otherwise, return NULL.
+ * If pref_only, only return an address if it's in the client's preferred
+ * address family. */
+static const tor_addr_port_t *
+fascist_firewall_choose_address_impl(const tor_addr_port_t *a,
+ const tor_addr_port_t *b,
+ int want_a,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ const tor_addr_port_t *use_a = NULL;
+ const tor_addr_port_t *use_b = NULL;
+
+ if (fascist_firewall_allows_address_ap(a, fw_connection, pref_only)) {
+ use_a = a;
+ }
+
+ if (fascist_firewall_allows_address_ap(b, fw_connection, pref_only)) {
+ use_b = b;
+ }
+
+ /* If both are allowed */
+ if (use_a && use_b) {
+ /* Choose a if we want it */
+ return (want_a ? use_a : use_b);
+ } else {
+ /* Choose a if we have it */
+ return (use_a ? use_a : use_b);
+ }
+}
+
+/** If a and b are both valid and preferred by fw_connection,
+ * choose one based on want_a and return it.
+ * Otherwise, return whichever is preferred.
+ * If neither are preferred, and pref_only is false:
+ * - If a and b are both allowed by fw_connection,
+ * choose one based on want_a and return it.
+ * - Otherwise, return whichever is preferred.
+ * Otherwise, return NULL. */
+const tor_addr_port_t *
+fascist_firewall_choose_address(const tor_addr_port_t *a,
+ const tor_addr_port_t *b,
+ int want_a,
+ firewall_connection_t fw_connection,
+ int pref_only)
+{
+ const tor_addr_port_t *pref = fascist_firewall_choose_address_impl(
+ a, b, want_a,
+ fw_connection,
+ 1);
+ if (pref_only || pref) {
+ /* If there is a preferred address, use it. If we can only use preferred
+ * addresses, and neither address is preferred, pref will be NULL, and we
+ * want to return NULL, so return it. */
+ return pref;
+ } else {
+ /* If there's no preferred address, and we can return addresses that are
+ * not preferred, use an address that's allowed */
+ return fascist_firewall_choose_address_impl(a, b, want_a, fw_connection,
+ 0);
+ }
+}
+
+/** Copy an address and port into <b>ap</b> that we think our firewall will
+ * let us connect to. Uses ipv4_addr/ipv6_addr and
+ * ipv4_orport/ipv6_orport/ReachableORAddresses or
+ * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and
+ * <b>fw_connection</b>.
+ * If pref_only, only choose preferred addresses. In either case, choose
+ * a preferred address before an address that's not preferred.
+ * If neither address is chosen, return 0, else return 1. */
+static int
+fascist_firewall_choose_address_base(const tor_addr_t *ipv4_addr,
+ uint16_t ipv4_orport,
+ uint16_t ipv4_dirport,
+ const tor_addr_t *ipv6_addr,
+ uint16_t ipv6_orport,
+ uint16_t ipv6_dirport,
+ firewall_connection_t fw_connection,
+ int pref_only,
+ tor_addr_port_t* ap)
+{
+ const tor_addr_port_t *result = NULL;
+ /* This argument is ignored as long as the address pair is IPv4/IPv6,
+ * because we always have a preference in a client.
+ * For bridge clients, this selects the preferred address, which was
+ * previously IPv6 (if a bridge has both), so we keep that behaviour. */
+ const int bridge_client_prefer_ipv4 = 0;
+
+ tor_assert(ipv6_addr);
+ tor_assert(ap);
+
+ tor_addr_port_t ipv4_ap;
+ tor_addr_copy(&ipv4_ap.addr, ipv4_addr);
+ ipv4_ap.port = (fw_connection == FIREWALL_OR_CONNECTION
+ ? ipv4_orport
+ : ipv4_dirport);
+
+ tor_addr_port_t ipv6_ap;
+ tor_addr_copy(&ipv6_ap.addr, ipv6_addr);
+ ipv6_ap.port = (fw_connection == FIREWALL_OR_CONNECTION
+ ? ipv6_orport
+ : ipv6_dirport);
+
+ result = fascist_firewall_choose_address(&ipv4_ap, &ipv6_ap,
+ bridge_client_prefer_ipv4,
+ fw_connection, pref_only);
+
+ if (result) {
+ tor_addr_copy(&ap->addr, &result->addr);
+ ap->port = result->port;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+/** Like fascist_firewall_choose_address_base, but takes a host-order IPv4
+ * address as the first parameter. */
+static int
+fascist_firewall_choose_address_ipv4h(uint32_t ipv4h_addr,
+ uint16_t ipv4_orport,
+ uint16_t ipv4_dirport,
+ const tor_addr_t *ipv6_addr,
+ uint16_t ipv6_orport,
+ uint16_t ipv6_dirport,
+ firewall_connection_t fw_connection,
+ int pref_only,
+ tor_addr_port_t* ap)
+{
+ tor_addr_t ipv4_addr;
+ tor_addr_from_ipv4h(&ipv4_addr, ipv4h_addr);
+ return fascist_firewall_choose_address_base(&ipv4_addr, ipv4_orport,
+ ipv4_dirport, ipv6_addr,
+ ipv6_orport, ipv6_dirport,
+ fw_connection, pref_only, ap);
+}
+
+#define IPV6_OR_LOOKUP(r, identity_digest, ipv6_or_ap) \
+ STMT_BEGIN \
+ if (!(r)->ipv6_orport || tor_addr_is_null(&(r)->ipv6_addr)) { \
+ const node_t *node = node_get_by_id((identity_digest)); \
+ if (node) { \
+ node_get_pref_ipv6_orport(node, &(ipv6_or_ap)); \
+ } else { \
+ tor_addr_make_null(&(ipv6_or_ap).addr, AF_INET6); \
+ (ipv6_or_ap).port = 0; \
+ } \
+ } else { \
+ tor_addr_copy(&(ipv6_or_ap).addr, &(r)->ipv6_addr); \
+ (ipv6_or_ap).port = (r)->ipv6_orport; \
+ } \
+ STMT_END
+
+/** Copy an address and port from <b>rs</b> into <b>ap</b> that we think our
+ * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and
+ * ipv4_orport/ipv6_orport/ReachableORAddresses or
+ * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and
+ * <b>fw_connection</b>.
+ * If pref_only, only choose preferred addresses. In either case, choose
+ * a preferred address before an address that's not preferred.
+ * If neither address is chosen, return 0, else return 1.
+ * Consults the corresponding node if the addresses in rs are not valid. */
+int
+fascist_firewall_choose_address_rs(const routerstatus_t *rs,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t* ap)
+{
+ if (!rs) {
+ return 0;
+ }
+
+ tor_assert(ap);
+
+ /* Don't do the lookup if the IPv6 address/port in rs is OK.
+ * If it's OK, assume the dir_port is also OK. */
+ tor_addr_port_t ipv6_or_ap;
+ IPV6_OR_LOOKUP(rs, rs->identity_digest, ipv6_or_ap);
+
+ /* Assume IPv4 and IPv6 DirPorts are the same.
+ * Assume the IPv6 OR and Dir addresses are the same. */
+ return fascist_firewall_choose_address_ipv4h(rs->addr,
+ rs->or_port,
+ rs->dir_port,
+ &ipv6_or_ap.addr,
+ ipv6_or_ap.port,
+ rs->dir_port,
+ fw_connection,
+ pref_only,
+ ap);
+}
+
+/** Copy an address and port from <b>node</b> into <b>ap</b> that we think our
+ * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and
+ * ipv4_orport/ipv6_orport/ReachableORAddresses or
+ * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and
+ * <b>fw_connection</b>.
+ * If pref_only, only choose preferred addresses. In either case, choose
+ * a preferred address before an address that's not preferred.
+ * If neither address is chosen, return 0, else return 1. */
+int
+fascist_firewall_choose_address_node(const node_t *node,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t *ap)
+{
+ if (!node) {
+ return 0;
+ }
+
+ node_assert_ok(node);
+
+ tor_addr_port_t ipv4_or_ap;
+ node_get_prim_orport(node, &ipv4_or_ap);
+ tor_addr_port_t ipv4_dir_ap;
+ node_get_prim_dirport(node, &ipv4_dir_ap);
+
+ tor_addr_port_t ipv6_or_ap;
+ node_get_pref_ipv6_orport(node, &ipv6_or_ap);
+ tor_addr_port_t ipv6_dir_ap;
+ node_get_pref_ipv6_dirport(node, &ipv6_dir_ap);
+
+ /* Assume the IPv6 OR and Dir addresses are the same. */
+ return fascist_firewall_choose_address_base(&ipv4_or_ap.addr,
+ ipv4_or_ap.port,
+ ipv4_dir_ap.port,
+ &ipv6_or_ap.addr,
+ ipv6_or_ap.port,
+ ipv6_dir_ap.port,
+ fw_connection,
+ pref_only,
+ ap);
+}
+
+/** Copy an address and port from <b>ds</b> into <b>ap</b> that we think our
+ * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and
+ * ipv4_orport/ipv6_orport/ReachableORAddresses or
+ * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and
+ * <b>fw_connection</b>.
+ * If pref_only, only choose preferred addresses. In either case, choose
+ * a preferred address before an address that's not preferred.
+ * If neither address is chosen, return 0, else return 1. */
+int
+fascist_firewall_choose_address_dir_server(const dir_server_t *ds,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t *ap)
+{
+ if (!ds) {
+ return 0;
+ }
+
+ /* A dir_server_t always has a fake_status. As long as it has the same
+ * addresses/ports in both fake_status and dir_server_t, this works fine.
+ * (See #17867.)
+ * This function relies on fascist_firewall_choose_address_rs looking up the
+ * addresses from the node if it can, because that will get the latest info
+ * for the relay. */
+ return fascist_firewall_choose_address_rs(&ds->fake_status, fw_connection,
+ pref_only, ap);
}
/** Return 1 if <b>addr</b> is permitted to connect to our dir port,
diff --git a/src/or/policies.h b/src/or/policies.h
index 007f494482..65f10e2ed7 100644
--- a/src/or/policies.h
+++ b/src/or/policies.h
@@ -22,13 +22,55 @@
#define EXIT_POLICY_REJECT_PRIVATE (1 << 1)
#define EXIT_POLICY_ADD_DEFAULT (1 << 2)
+typedef enum firewall_connection_t {
+ FIREWALL_OR_CONNECTION = 0,
+ FIREWALL_DIR_CONNECTION = 1
+} firewall_connection_t;
+
typedef int exit_policy_parser_cfg_t;
int firewall_is_fascist_or(void);
-int fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port);
-int fascist_firewall_allows_or(const routerinfo_t *ri);
-int fascist_firewall_allows_node(const node_t *node);
-int fascist_firewall_allows_address_dir(const tor_addr_t *addr, uint16_t port);
+int firewall_is_fascist_dir(void);
+int fascist_firewall_use_ipv6(const or_options_t *options);
+int fascist_firewall_prefer_ipv6_orport(const or_options_t *options);
+int fascist_firewall_prefer_ipv6_dirport(const or_options_t *options);
+
+int fascist_firewall_allows_address_addr(const tor_addr_t *addr, uint16_t port,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_allows_address_ap(const tor_addr_port_t *ap,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_allows_address_ipv4h(uint32_t ipv4h_or_addr,
+ uint16_t ipv4_or_port,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_allows_rs(const routerstatus_t *rs,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_allows_node(const node_t *node,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_allows_dir_server(const dir_server_t *ds,
+ firewall_connection_t fw_connection,
+ int pref_only);
+
+const tor_addr_port_t * fascist_firewall_choose_address(
+ const tor_addr_port_t *a,
+ const tor_addr_port_t *b,
+ int want_a,
+ firewall_connection_t fw_connection,
+ int pref_only);
+int fascist_firewall_choose_address_rs(const routerstatus_t *rs,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t* ap);
+int fascist_firewall_choose_address_node(const node_t *node,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t* ap);
+int fascist_firewall_choose_address_dir_server(const dir_server_t *ds,
+ firewall_connection_t fw_connection,
+ int pref_only, tor_addr_port_t* ap);
+
int dir_policy_permits_address(const tor_addr_t *addr);
int socks_policy_permits_address(const tor_addr_t *addr);
int authdir_policy_permits_address(uint32_t addr, uint16_t port);
@@ -94,6 +136,10 @@ addr_policy_result_t compare_tor_addr_to_short_policy(
#ifdef POLICIES_PRIVATE
STATIC void append_exit_policy_string(smartlist_t **policy, const char *more);
+STATIC int fascist_firewall_allows_address(const tor_addr_t *addr,
+ uint16_t port,
+ smartlist_t *firewall_policy,
+ int pref_only, int pref_ipv6);
#endif
#endif
diff --git a/src/or/relay.c b/src/or/relay.c
index aea51a165b..9d44428c09 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -148,20 +148,15 @@ relay_digest_matches(crypto_digest_t *digest, cell_t *cell)
*
* If <b>encrypt_mode</b> is 1 then encrypt, else decrypt.
*
- * Return -1 if the crypto fails, else return 0.
+ * Returns 0.
*/
static int
relay_crypt_one_payload(crypto_cipher_t *cipher, uint8_t *in,
int encrypt_mode)
{
- int r;
(void)encrypt_mode;
- r = crypto_cipher_crypt_inplace(cipher, (char*) in, CELL_PAYLOAD_SIZE);
+ crypto_cipher_crypt_inplace(cipher, (char*) in, CELL_PAYLOAD_SIZE);
- if (r) {
- log_warn(LD_BUG,"Error during relay encryption");
- return -1;
- }
return 0;
}
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index e812a06ce6..b822295832 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -1367,11 +1367,19 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry,
smartlist_del(usable_nodes, i);
goto again;
}
+#ifdef ENABLE_TOR2WEB_MODE
+ new_extend_info = extend_info_from_node(node, options->Tor2webMode);
+#else
new_extend_info = extend_info_from_node(node, 0);
+#endif
if (!new_extend_info) {
+ const char *alternate_reason = "";
+#ifdef ENABLE_TOR2WEB_MODE
+ alternate_reason = ", or we cannot connect directly to it";
+#endif
log_info(LD_REND, "We don't have a descriptor for the intro-point relay "
- "'%s'; trying another.",
- extend_info_describe(intro->extend_info));
+ "'%s'%s; trying another.",
+ extend_info_describe(intro->extend_info), alternate_reason);
smartlist_del(usable_nodes, i);
goto again;
} else {
diff --git a/src/or/router.c b/src/or/router.c
index 741e1edb22..3b03c09f2b 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1293,14 +1293,15 @@ consider_testing_reachability(int test_or, int test_dir)
extend_info_free(ei);
}
+ /* XXX IPv6 self testing */
tor_addr_from_ipv4h(&addr, me->addr);
if (test_dir && !check_whether_dirport_reachable() &&
!connection_get_by_type_addr_port_purpose(
CONN_TYPE_DIR, &addr, me->dir_port,
DIR_PURPOSE_FETCH_SERVERDESC)) {
/* ask myself, via tor, for my server descriptor. */
- directory_initiate_command(&addr,
- me->or_port, me->dir_port,
+ directory_initiate_command(&addr, me->or_port,
+ &addr, me->dir_port,
me->cache_info.identity_digest,
DIR_PURPOSE_FETCH_SERVERDESC,
ROUTER_PURPOSE_GENERAL,
@@ -1739,7 +1740,8 @@ router_upload_dir_desc_to_dirservers(int force)
int
router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
{
- if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */
+ const routerinfo_t *me = router_get_my_routerinfo();
+ if (!me) /* make sure routerinfo exists */
return -1;
/* make sure it's resolved to something. this way we can't get a
@@ -1747,20 +1749,21 @@ router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
if (tor_addr_is_null(addr))
return -1;
- /* look at desc_routerinfo->exit_policy for both the v4 and the v6
- * policies. The exit_policy field in desc_routerinfo is a bit unusual,
- * in that it contains IPv6 and IPv6 entries. We don't want to look
- * at desc_routerinfio->ipv6_exit_policy, since that's a port summary. */
+ /* look at router_get_my_routerinfo()->exit_policy for both the v4 and the
+ * v6 policies. The exit_policy field in router_get_my_routerinfo() is a
+ * bit unusual, in that it contains IPv6 and IPv6 entries. We don't want to
+ * look at router_get_my_routerinfo()->ipv6_exit_policy, since that's a port
+ * summary. */
if ((tor_addr_family(addr) == AF_INET ||
tor_addr_family(addr) == AF_INET6)) {
return compare_tor_addr_to_addr_policy(addr, port,
- desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED;
+ me->exit_policy) != ADDR_POLICY_ACCEPTED;
#if 0
} else if (tor_addr_family(addr) == AF_INET6) {
return get_options()->IPv6Exit &&
desc_routerinfo->ipv6_exit_policy &&
compare_tor_addr_to_short_policy(addr, port,
- desc_routerinfo->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED;
+ me->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED;
#endif
} else {
return -1;
@@ -1772,10 +1775,10 @@ router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
MOCK_IMPL(int,
router_my_exit_policy_is_reject_star,(void))
{
- if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */
+ if (!router_get_my_routerinfo()) /* make sure routerinfo exists */
return -1;
- return desc_routerinfo->policy_is_reject_star;
+ return router_get_my_routerinfo()->policy_is_reject_star;
}
/** Return true iff I'm a server and <b>digest</b> is equal to
@@ -1834,12 +1837,13 @@ const char *
router_get_my_descriptor(void)
{
const char *body;
- if (!router_get_my_routerinfo())
+ const routerinfo_t *me = router_get_my_routerinfo();
+ if (! me)
return NULL;
- tor_assert(desc_routerinfo->cache_info.saved_location == SAVED_NOWHERE);
- body = signed_descriptor_get_body(&desc_routerinfo->cache_info);
+ tor_assert(me->cache_info.saved_location == SAVED_NOWHERE);
+ body = signed_descriptor_get_body(&me->cache_info);
/* Make sure this is nul-terminated. */
- tor_assert(!body[desc_routerinfo->cache_info.signed_descriptor_len]);
+ tor_assert(!body[me->cache_info.signed_descriptor_len]);
log_debug(LD_GENERAL,"my desc is '%s'", body);
return body;
}
@@ -2242,10 +2246,10 @@ check_descriptor_bandwidth_changed(time_t now)
{
static time_t last_changed = 0;
uint64_t prev, cur;
- if (!desc_routerinfo)
+ if (!router_get_my_routerinfo())
return;
- prev = desc_routerinfo->bandwidthcapacity;
+ prev = router_get_my_routerinfo()->bandwidthcapacity;
cur = we_are_hibernating() ? 0 : rep_hist_bandwidth_assess();
if ((prev != cur && (!prev || !cur)) ||
cur > prev*2 ||
@@ -2299,11 +2303,11 @@ check_descriptor_ipaddress_changed(time_t now)
(void) now;
- if (!desc_routerinfo)
+ if (router_get_my_routerinfo() == NULL)
return;
/* XXXX ipv6 */
- prev = desc_routerinfo->addr;
+ prev = router_get_my_routerinfo()->addr;
if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) {
log_info(LD_CONFIG,"options->Address didn't resolve into an IP.");
return;
@@ -3410,28 +3414,16 @@ router_free_all(void)
/** Return a smartlist of tor_addr_port_t's with all the OR ports of
<b>ri</b>. Note that freeing of the items in the list as well as
- the smartlist itself is the callers responsibility.
-
- XXX duplicating code from node_get_all_orports(). */
+ the smartlist itself is the callers responsibility. */
smartlist_t *
router_get_all_orports(const routerinfo_t *ri)
{
- smartlist_t *sl = smartlist_new();
tor_assert(ri);
-
- if (ri->addr != 0) {
- tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
- tor_addr_from_ipv4h(&ap->addr, ri->addr);
- ap->port = ri->or_port;
- smartlist_add(sl, ap);
- }
- if (!tor_addr_is_null(&ri->ipv6_addr)) {
- tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
- tor_addr_copy(&ap->addr, &ri->ipv6_addr);
- ap->port = ri->or_port;
- smartlist_add(sl, ap);
- }
-
- return sl;
+ node_t fake_node;
+ memset(&fake_node, 0, sizeof(fake_node));
+ /* we don't modify ri, fake_node is passed as a const node_t *
+ */
+ fake_node.ri = (routerinfo_t *)ri;
+ return node_get_all_orports(&fake_node);
}
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 139a2924fc..f6662705dc 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -13,6 +13,7 @@
#define ROUTERLIST_PRIVATE
#include "or.h"
+#include "backtrace.h"
#include "crypto_ed25519.h"
#include "circuitstats.h"
#include "config.h"
@@ -1460,9 +1461,190 @@ router_pick_dirserver_generic(smartlist_t *sourcelist,
return router_pick_trusteddirserver_impl(sourcelist, type, flags, NULL);
}
+/* Check if we already have a directory fetch from ap, for serverdesc
+ * (including extrainfo) or microdesc documents.
+ * If so, return 1, if not, return 0.
+ * Also returns 0 if addr is NULL, tor_addr_is_null(addr), or dir_port is 0.
+ */
+STATIC int
+router_is_already_dir_fetching(const tor_addr_port_t *ap, int serverdesc,
+ int microdesc)
+{
+ if (!ap || tor_addr_is_null(&ap->addr) || !ap->port) {
+ return 0;
+ }
+
+ /* XX/teor - we're not checking tunnel connections here, see #17848
+ */
+ if (serverdesc && (
+ connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_SERVERDESC)
+ || connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_EXTRAINFO))) {
+ return 1;
+ }
+
+ if (microdesc && (
+ connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_MICRODESC))) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Check if we already have a directory fetch from ds, for serverdesc
+ * (including extrainfo) or microdesc documents.
+ * If so, return 1, if not, return 0.
+ */
+static int
+router_is_already_dir_fetching_ds(const dir_server_t *ds,
+ int serverdesc,
+ int microdesc)
+{
+ tor_addr_port_t ipv4_dir_ap, ipv6_dir_ap;
+
+ /* Assume IPv6 DirPort is the same as IPv4 DirPort */
+ tor_addr_from_ipv4h(&ipv4_dir_ap.addr, ds->addr);
+ ipv4_dir_ap.port = ds->dir_port;
+ tor_addr_copy(&ipv6_dir_ap.addr, &ds->ipv6_addr);
+ ipv6_dir_ap.port = ds->dir_port;
+
+ return (router_is_already_dir_fetching(&ipv4_dir_ap, serverdesc, microdesc)
+ || router_is_already_dir_fetching(&ipv6_dir_ap, serverdesc, microdesc));
+}
+
+/* Check if we already have a directory fetch from rs, for serverdesc
+ * (including extrainfo) or microdesc documents.
+ * If so, return 1, if not, return 0.
+ */
+static int
+router_is_already_dir_fetching_rs(const routerstatus_t *rs,
+ int serverdesc,
+ int microdesc)
+{
+ tor_addr_port_t ipv4_dir_ap, ipv6_dir_ap;
+
+ /* Assume IPv6 DirPort is the same as IPv4 DirPort */
+ tor_addr_from_ipv4h(&ipv4_dir_ap.addr, rs->addr);
+ ipv4_dir_ap.port = rs->dir_port;
+ tor_addr_copy(&ipv6_dir_ap.addr, &rs->ipv6_addr);
+ ipv6_dir_ap.port = rs->dir_port;
+
+ return (router_is_already_dir_fetching(&ipv4_dir_ap, serverdesc, microdesc)
+ || router_is_already_dir_fetching(&ipv6_dir_ap, serverdesc, microdesc));
+}
+
+#ifndef LOG_FALSE_POSITIVES_DURING_BOOTSTRAP
+#define LOG_FALSE_POSITIVES_DURING_BOOTSTRAP 0
+#endif
+
+/* Log a message if rs is not found or not a preferred address */
+static void
+router_picked_poor_directory_log(const routerstatus_t *rs)
+{
+ const networkstatus_t *usable_consensus;
+ usable_consensus = networkstatus_get_reasonably_live_consensus(time(NULL),
+ usable_consensus_flavor());
+
+#if !LOG_FALSE_POSITIVES_DURING_BOOTSTRAP
+ /* Don't log early in the bootstrap process, it's normal to pick from a
+ * small pool of nodes. Of course, this won't help if we're trying to
+ * diagnose bootstrap issues. */
+ if (!smartlist_len(nodelist_get_list()) || !usable_consensus
+ || !router_have_minimum_dir_info()) {
+ return;
+ }
+#endif
+
+ /* We couldn't find a node, or the one we have doesn't fit our preferences.
+ * This might be a bug. */
+ if (!rs) {
+ log_warn(LD_BUG, "Firewall denied all OR and Dir addresses for all relays "
+ "when searching for a directory.");
+ log_backtrace(LOG_WARN, LD_BUG, "Node search initiated by");
+ } else if (!fascist_firewall_allows_rs(rs, FIREWALL_OR_CONNECTION, 1)
+ && !fascist_firewall_allows_rs(rs, FIREWALL_DIR_CONNECTION, 1)
+ ) {
+ log_warn(LD_BUG, "Selected a directory %s with non-preferred OR and Dir "
+ "addresses for launching a connection: "
+ "IPv4 %s OR %d Dir %d IPv6 %s OR %d Dir %d",
+ routerstatus_describe(rs),
+ fmt_addr32(rs->addr), rs->or_port,
+ rs->dir_port, fmt_addr(&rs->ipv6_addr),
+ rs->ipv6_orport, rs->dir_port);
+ log_backtrace(LOG_WARN, LD_BUG, "Node search initiated by");
+ }
+}
+
+#undef LOG_FALSE_POSITIVES_DURING_BOOTSTRAP
+
/** How long do we avoid using a directory server after it's given us a 503? */
#define DIR_503_TIMEOUT (60*60)
+/* Common retry code for router_pick_directory_server_impl and
+ * router_pick_trusteddirserver_impl. Retry with the non-preferred IP version.
+ * Must be called before RETRY_WITHOUT_EXCLUDE().
+ *
+ * If we got no result, and we are applying IP preferences, and we are a
+ * client that could use an alternate IP version, try again with the
+ * opposite preferences. */
+#define RETRY_ALTERNATE_IP_VERSION(retry_label) \
+ STMT_BEGIN \
+ if (result == NULL && try_ip_pref && options->ClientUseIPv4 \
+ && fascist_firewall_use_ipv6(options) && !server_mode(options) \
+ && n_not_preferred && !n_busy) { \
+ n_excluded = 0; \
+ n_busy = 0; \
+ try_ip_pref = 0; \
+ n_not_preferred = 0; \
+ goto retry_label; \
+ } \
+ STMT_END \
+
+/* Common retry code for router_pick_directory_server_impl and
+ * router_pick_trusteddirserver_impl. Retry without excluding nodes, but with
+ * the preferred IP version. Must be called after RETRY_ALTERNATE_IP_VERSION().
+ *
+ * If we got no result, and we are excluding nodes, and StrictNodes is
+ * not set, try again without excluding nodes. */
+#define RETRY_WITHOUT_EXCLUDE(retry_label) \
+ STMT_BEGIN \
+ if (result == NULL && try_excluding && !options->StrictNodes \
+ && n_excluded && !n_busy) { \
+ try_excluding = 0; \
+ n_excluded = 0; \
+ n_busy = 0; \
+ try_ip_pref = 1; \
+ n_not_preferred = 0; \
+ goto retry_label; \
+ } \
+ STMT_END
+
+/* When iterating through the routerlist, can OR address/port preference
+ * and reachability checks be skipped?
+ */
+static int
+router_skip_or_reachability(const or_options_t *options, int try_ip_pref)
+{
+ /* Servers always have and prefer IPv4.
+ * And if clients are checking against the firewall for reachability only,
+ * but there's no firewall, don't bother checking */
+ return server_mode(options) || (!try_ip_pref && !firewall_is_fascist_or());
+}
+
+/* When iterating through the routerlist, can Dir address/port preference
+ * and reachability checks be skipped?
+ */
+static int
+router_skip_dir_reachability(const or_options_t *options, int try_ip_pref)
+{
+ /* Servers always have and prefer IPv4.
+ * And if clients are checking against the firewall for reachability only,
+ * but there's no firewall, don't bother checking */
+ return server_mode(options) || (!try_ip_pref && !firewall_is_fascist_dir());
+}
+
/** Pick a random running valid directory server/mirror from our
* routerlist. Arguments are as for router_pick_directory_server(), except:
*
@@ -1487,11 +1669,12 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags,
const int no_microdesc_fetching = (flags & PDS_NO_EXISTING_MICRODESC_FETCH);
const int for_guard = (flags & PDS_FOR_GUARD);
int try_excluding = 1, n_excluded = 0, n_busy = 0;
+ int try_ip_pref = 1, n_not_preferred = 0;
if (!consensus)
return NULL;
- retry_without_exclude:
+ retry_search:
direct = smartlist_new();
tunnel = smartlist_new();
@@ -1500,11 +1683,13 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags,
overloaded_direct = smartlist_new();
overloaded_tunnel = smartlist_new();
+ const int skip_or = router_skip_or_reachability(options, try_ip_pref);
+ const int skip_dir = router_skip_dir_reachability(options, try_ip_pref);
+
/* Find all the running dirservers we know about. */
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
int is_trusted, is_trusted_extrainfo;
int is_overloaded;
- tor_addr_t addr;
const routerstatus_t *status = node->rs;
const country_t country = node->country;
if (!status)
@@ -1535,36 +1720,34 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags,
continue;
}
- /* XXXX IP6 proposal 118 */
- tor_addr_from_ipv4h(&addr, status->addr);
-
- if (no_serverdesc_fetching && (
- connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_SERVERDESC)
- || connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_EXTRAINFO)
- )) {
- ++n_busy;
- continue;
- }
-
- if (no_microdesc_fetching && connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_MICRODESC)
- ) {
+ if (router_is_already_dir_fetching_rs(status,
+ no_serverdesc_fetching,
+ no_microdesc_fetching)) {
++n_busy;
continue;
}
is_overloaded = status->last_dir_503_at + DIR_503_TIMEOUT > now;
- if ((!fascistfirewall ||
- fascist_firewall_allows_address_or(&addr, status->or_port)))
+ /* Clients use IPv6 addresses if the server has one and the client
+ * prefers IPv6.
+ * Add the router if its preferred address and port are reachable.
+ * If we don't get any routers, we'll try again with the non-preferred
+ * address for each router (if any). (To ensure correct load-balancing
+ * we try routers that only have one address both times.)
+ */
+ if (!fascistfirewall || skip_or ||
+ fascist_firewall_allows_rs(status, FIREWALL_OR_CONNECTION,
+ try_ip_pref))
smartlist_add(is_trusted ? trusted_tunnel :
is_overloaded ? overloaded_tunnel : tunnel, (void*)node);
- else if (!fascistfirewall ||
- fascist_firewall_allows_address_dir(&addr, status->dir_port))
+ else if (skip_dir ||
+ fascist_firewall_allows_rs(status, FIREWALL_DIR_CONNECTION,
+ try_ip_pref))
smartlist_add(is_trusted ? trusted_direct :
is_overloaded ? overloaded_direct : direct, (void*)node);
+ else if (!tor_addr_is_null(&status->ipv6_addr))
+ ++n_not_preferred;
} SMARTLIST_FOREACH_END(node);
if (smartlist_len(tunnel)) {
@@ -1593,19 +1776,15 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags,
smartlist_free(overloaded_direct);
smartlist_free(overloaded_tunnel);
- if (result == NULL && try_excluding && !options->StrictNodes && n_excluded
- && !n_busy) {
- /* If we got no result, and we are excluding nodes, and StrictNodes is
- * not set, try again without excluding nodes. */
- try_excluding = 0;
- n_excluded = 0;
- n_busy = 0;
- goto retry_without_exclude;
- }
+ RETRY_ALTERNATE_IP_VERSION(retry_search);
+
+ RETRY_WITHOUT_EXCLUDE(retry_search);
if (n_busy_out)
*n_busy_out = n_busy;
+ router_picked_poor_directory_log(result ? result->rs : NULL);
+
return result ? result->rs : NULL;
}
@@ -1656,22 +1835,25 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
smartlist_t *pick_from;
int n_busy = 0;
int try_excluding = 1, n_excluded = 0;
+ int try_ip_pref = 1, n_not_preferred = 0;
if (!sourcelist)
return NULL;
- retry_without_exclude:
+ retry_search:
direct = smartlist_new();
tunnel = smartlist_new();
overloaded_direct = smartlist_new();
overloaded_tunnel = smartlist_new();
+ const int skip_or = router_skip_or_reachability(options, try_ip_pref);
+ const int skip_dir = router_skip_dir_reachability(options, try_ip_pref);
+
SMARTLIST_FOREACH_BEGIN(sourcelist, const dir_server_t *, d)
{
int is_overloaded =
d->fake_status.last_dir_503_at + DIR_503_TIMEOUT > now;
- tor_addr_t addr;
if (!d->is_running) continue;
if ((type & d->type) == 0)
continue;
@@ -1687,35 +1869,29 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
continue;
}
- /* XXXX IP6 proposal 118 */
- tor_addr_from_ipv4h(&addr, d->addr);
-
- if (no_serverdesc_fetching) {
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_SERVERDESC)
- || connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_EXTRAINFO)) {
- //log_debug(LD_DIR, "We have an existing connection to fetch "
- // "descriptor from %s; delaying",d->description);
- ++n_busy;
- continue;
- }
- }
- if (no_microdesc_fetching) {
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_MICRODESC)) {
- ++n_busy;
- continue;
- }
+ if (router_is_already_dir_fetching_ds(d, no_serverdesc_fetching,
+ no_microdesc_fetching)) {
+ ++n_busy;
+ continue;
}
- if (d->or_port &&
- (!fascistfirewall ||
- fascist_firewall_allows_address_or(&addr, d->or_port)))
+ /* Clients use IPv6 addresses if the server has one and the client
+ * prefers IPv6.
+ * Add the router if its preferred address and port are reachable.
+ * If we don't get any routers, we'll try again with the non-preferred
+ * address for each router (if any). (To ensure correct load-balancing
+ * we try routers that only have one address both times.)
+ */
+ if (!fascistfirewall || skip_or ||
+ fascist_firewall_allows_dir_server(d, FIREWALL_OR_CONNECTION,
+ try_ip_pref))
smartlist_add(is_overloaded ? overloaded_tunnel : tunnel, (void*)d);
- else if (!fascistfirewall ||
- fascist_firewall_allows_address_dir(&addr, d->dir_port))
+ else if (skip_dir ||
+ fascist_firewall_allows_dir_server(d, FIREWALL_DIR_CONNECTION,
+ try_ip_pref))
smartlist_add(is_overloaded ? overloaded_direct : direct, (void*)d);
+ else if (!tor_addr_is_null(&d->ipv6_addr))
+ ++n_not_preferred;
}
SMARTLIST_FOREACH_END(d);
@@ -1742,19 +1918,14 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
smartlist_free(overloaded_direct);
smartlist_free(overloaded_tunnel);
- if (result == NULL && try_excluding && !options->StrictNodes && n_excluded
- && !n_busy) {
- /* If we got no result, and we are excluding nodes, and StrictNodes is
- * not set, try again without excluding nodes. */
- try_excluding = 0;
- n_excluded = 0;
- n_busy = 0;
- goto retry_without_exclude;
- }
+ RETRY_ALTERNATE_IP_VERSION(retry_search);
+
+ RETRY_WITHOUT_EXCLUDE(retry_search);
+
+ router_picked_poor_directory_log(result);
if (n_busy_out)
*n_busy_out = n_busy;
-
return result;
}
@@ -1824,8 +1995,12 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router)
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)
-{ /* XXXX MOVE */
+ int need_guard, int need_desc,
+ int pref_addr)
+{
+ 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))
@@ -1836,6 +2011,11 @@ router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid,
continue;
if (node_is_unreliable(node, need_uptime, need_capacity, need_guard))
continue;
+ /* Choose a node with an OR address that matches the firewall rules */
+ if (check_reach && !fascist_firewall_allows_node(node,
+ FIREWALL_OR_CONNECTION,
+ pref_addr))
+ continue;
smartlist_add(sl, (void *)node);
} SMARTLIST_FOREACH_END(node);
@@ -2297,6 +2477,10 @@ node_sl_choose_by_bandwidth(const smartlist_t *sl,
* If <b>CRN_NEED_DESC</b> is set in flags, we only consider nodes that
* have a routerinfo or microdescriptor -- that is, enough info to be
* used to build a circuit.
+ * If <b>CRN_PREF_ADDR</b> is set in flags, we only consider nodes that
+ * have an address that is preferred by the ClientPreferIPv6ORPort setting
+ * (regardless of this flag, we exclude nodes that aren't allowed by the
+ * firewall, including ClientUseIPv4 0 and fascist_firewall_use_ipv6() == 0).
*/
const node_t *
router_choose_random_node(smartlist_t *excludedsmartlist,
@@ -2309,6 +2493,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
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;
smartlist_t *sl=smartlist_new(),
*excludednodes=smartlist_new();
@@ -2334,7 +2519,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
router_add_running_nodes_to_smartlist(sl, allow_invalid,
need_uptime, need_capacity,
- need_guard, need_desc);
+ need_guard, need_desc, pref_addr);
log_debug(LD_CIRC,
"We found %d running nodes.",
smartlist_len(sl));
@@ -2363,7 +2548,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
choice = node_sl_choose_by_bandwidth(sl, rule);
smartlist_free(sl);
- if (!choice && (need_uptime || need_capacity || need_guard)) {
+ if (!choice && (need_uptime || need_capacity || need_guard || pref_addr)) {
/* try once more -- recurse but with fewer restrictions. */
log_info(LD_CIRC,
"We couldn't find any live%s%s%s routers; falling back "
@@ -2371,7 +2556,8 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
need_capacity?", fast":"",
need_uptime?", stable":"",
need_guard?", guard":"");
- flags &= ~ (CRN_NEED_UPTIME|CRN_NEED_CAPACITY|CRN_NEED_GUARD);
+ flags &= ~ (CRN_NEED_UPTIME|CRN_NEED_CAPACITY|CRN_NEED_GUARD|
+ CRN_PREF_ADDR);
choice = router_choose_random_node(
excludedsmartlist, excludedset, flags);
}
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index dd88aeb179..483dd06039 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -61,7 +61,8 @@ 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 need_guard, int need_desc,
+ int pref_addr);
const routerinfo_t *routerlist_find_my_routerinfo(void);
uint32_t router_get_advertised_bandwidth(const routerinfo_t *router);
@@ -245,6 +246,8 @@ MOCK_DECL(STATIC was_router_added_t, extrainfo_insert,
MOCK_DECL(STATIC void, initiate_descriptor_downloads,
(const routerstatus_t *source, int purpose, smartlist_t *digests,
int lo, int hi, int pds_flags));
+STATIC int router_is_already_dir_fetching(const tor_addr_port_t *ap,
+ int serverdesc, int microdesc);
#endif
diff --git a/src/test/log_test_helpers.h b/src/test/log_test_helpers.h
index 298237dddb..02f31a5220 100644
--- a/src/test/log_test_helpers.h
+++ b/src/test/log_test_helpers.h
@@ -23,6 +23,7 @@ void mock_clean_saved_logs(void);
const smartlist_t *mock_saved_logs(void);
int setup_capture_of_logs(int new_level);
void teardown_capture_of_logs(int prev);
+
int mock_saved_log_has_message(const char *msg);
int mock_saved_log_has_severity(int severity);
int mock_saved_log_has_entry(void);
diff --git a/src/test/test.c b/src/test/test.c
index f12ae21ff0..d671ac896e 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -319,11 +319,7 @@ test_circuit_timeout(void *arg)
int i, runs;
double close_ms;
(void)arg;
- tor_libevent_cfg cfg;
- memset(&cfg, 0, sizeof(cfg));
-
- tor_libevent_initialize(&cfg);
initialize_periodic_events();
circuit_build_times_init(&initial);
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
index 6d93731eea..5c72fc656d 100644
--- a/src/test/test_circuitmux.c
+++ b/src/test/test_circuitmux.c
@@ -36,11 +36,7 @@ test_cmux_destroy_cell_queue(void *arg)
circuit_t *circ = NULL;
cell_queue_t *cq = NULL;
packed_cell_t *pc = NULL;
- tor_libevent_cfg cfg;
- memset(&cfg, 0, sizeof(cfg));
-
- tor_libevent_initialize(&cfg);
scheduler_init();
(void) arg;
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 4824a94132..83a8b8ccc6 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -3312,7 +3312,6 @@ test_dir_download_status_schedule(void *arg)
tt_assert(increment == expected_increment);
tt_assert(dls_failure.next_attempt_at == TIME_MIN + expected_increment);
-#if TIME_T_IS_SIGNED
delay1 = INT_MAX;
increment = download_status_schedule_get_delay(&dls_failure,
schedule,
@@ -3320,7 +3319,6 @@ test_dir_download_status_schedule(void *arg)
expected_increment = delay1;
tt_assert(increment == expected_increment);
tt_assert(dls_failure.next_attempt_at == TIME_MAX);
-#endif
delay1 = 0;
increment = download_status_schedule_get_delay(&dls_attempt,
diff --git a/src/test/test_dns.c b/src/test/test_dns.c
index 6fdbe905e0..5289ca58ff 100644
--- a/src/test/test_dns.c
+++ b/src/test/test_dns.c
@@ -490,7 +490,7 @@ NS(test_main)(void *arg)
(void)arg;
- TO_CONN(exitconn)->address = tor_strdup("127.0.0.1.in-addr.arpa");
+ TO_CONN(exitconn)->address = tor_strdup("1.0.0.127.in-addr.arpa");
NS_MOCK(router_my_exit_policy_is_reject_star);
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 0011d3698a..fd19db095d 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -9,14 +9,16 @@
#include "or.h"
#include "test.h"
+
+#include "config.h"
#include "entrynodes.h"
-#include "routerparse.h"
#include "nodelist.h"
-#include "util.h"
+#include "policies.h"
#include "routerlist.h"
+#include "routerparse.h"
#include "routerset.h"
#include "statefile.h"
-#include "config.h"
+#include "util.h"
#include "test_helpers.h"
@@ -70,6 +72,14 @@ fake_network_setup(const struct testcase_t *testcase)
return dummy_state;
}
+static or_options_t mocked_options;
+
+static const or_options_t *
+mock_get_options(void)
+{
+ return &mocked_options;
+}
+
/** Test choose_random_entry() with none of our routers being guard nodes. */
static void
test_choose_random_entry_no_guards(void *arg)
@@ -78,6 +88,14 @@ test_choose_random_entry_no_guards(void *arg)
(void) arg;
+ MOCK(get_options, mock_get_options);
+
+ /* Check that we get a guard if it passes preferred
+ * address settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientPreferIPv6ORPort = 0;
+
/* Try to pick an entry even though none of our routers are guards. */
chosen_entry = choose_random_entry(NULL);
@@ -86,8 +104,55 @@ test_choose_random_entry_no_guards(void *arg)
can't find a proper entry guard. */
tt_assert(chosen_entry);
+ /* And with the other IP version active */
+ mocked_options.ClientUseIPv6 = 1;
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
+ /* And with the preference on auto */
+ mocked_options.ClientPreferIPv6ORPort = -1;
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
+ /* Check that we don't get a guard if it doesn't pass mandatory address
+ * settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 0;
+ mocked_options.ClientPreferIPv6ORPort = 0;
+
+ chosen_entry = choose_random_entry(NULL);
+
+ /* If we don't allow IPv4 at all, we don't get a guard*/
+ tt_assert(!chosen_entry);
+
+ /* Check that we get a guard if it passes allowed but not preferred address
+ * settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientUseIPv6 = 1;
+ mocked_options.ClientPreferIPv6ORPort = 1;
+
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
+ /* Check that we get a guard if it passes preferred address settings when
+ * they're auto */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientPreferIPv6ORPort = -1;
+
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
+ /* And with IPv6 active */
+ mocked_options.ClientUseIPv6 = 1;
+
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
done:
- ;
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ UNMOCK(get_options);
}
/** Test choose_random_entry() with only one of our routers being a
@@ -101,17 +166,78 @@ test_choose_random_entry_one_possible_guard(void *arg)
(void) arg;
+ MOCK(get_options, mock_get_options);
+
/* Set one of the nodes to be a guard. */
our_nodelist = nodelist_get_list();
the_guard = smartlist_get(our_nodelist, 4); /* chosen by fair dice roll */
the_guard->is_possible_guard = 1;
+ /* Check that we get the guard if it passes preferred
+ * address settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientPreferIPv6ORPort = 0;
+
/* Pick an entry. Make sure we pick the node we marked as guard. */
chosen_entry = choose_random_entry(NULL);
tt_ptr_op(chosen_entry, OP_EQ, the_guard);
+ /* And with the other IP version active */
+ mocked_options.ClientUseIPv6 = 1;
+ chosen_entry = choose_random_entry(NULL);
+ tt_ptr_op(chosen_entry, OP_EQ, the_guard);
+
+ /* And with the preference on auto */
+ mocked_options.ClientPreferIPv6ORPort = -1;
+ chosen_entry = choose_random_entry(NULL);
+ tt_ptr_op(chosen_entry, OP_EQ, the_guard);
+
+ /* Check that we don't get a guard if it doesn't pass mandatory address
+ * settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 0;
+ mocked_options.ClientPreferIPv6ORPort = 0;
+
+ chosen_entry = choose_random_entry(NULL);
+
+ /* If we don't allow IPv4 at all, we don't get a guard*/
+ tt_assert(!chosen_entry);
+
+ /* Check that we get a node if it passes allowed but not preferred
+ * address settings */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientUseIPv6 = 1;
+ mocked_options.ClientPreferIPv6ORPort = 1;
+
+ chosen_entry = choose_random_entry(NULL);
+
+ /* We disable the guard check and the preferred address check at the same
+ * time, so we can't be sure we get the guard */
+ tt_assert(chosen_entry);
+
+ /* Check that we get a node if it is allowed but not preferred when settings
+ * are auto */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientPreferIPv6ORPort = -1;
+
+ chosen_entry = choose_random_entry(NULL);
+
+ /* We disable the guard check and the preferred address check at the same
+ * time, so we can't be sure we get the guard */
+ tt_assert(chosen_entry);
+
+ /* and with IPv6 active */
+ mocked_options.ClientUseIPv6 = 1;
+
+ chosen_entry = choose_random_entry(NULL);
+ tt_assert(chosen_entry);
+
done:
- ;
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ UNMOCK(get_options);
}
/** Helper to conduct tests for populate_live_entry_guards().
@@ -624,6 +750,93 @@ test_entry_is_live(void *arg)
; /* XXX */
}
+#define TEST_IPV4_ADDR "123.45.67.89"
+#define TEST_IPV6_ADDR "[1234:5678:90ab:cdef::]"
+
+static void
+test_node_preferred_orport(void *arg)
+{
+ (void)arg;
+ tor_addr_t ipv4_addr;
+ const uint16_t ipv4_port = 4444;
+ tor_addr_t ipv6_addr;
+ const uint16_t ipv6_port = 6666;
+ routerinfo_t node_ri;
+ node_t node;
+ tor_addr_port_t ap;
+
+ /* Setup options */
+ memset(&mocked_options, 0, sizeof(mocked_options));
+ /* We don't test ClientPreferIPv6ORPort here, because it's used in
+ * nodelist_set_consensus to setup node.ipv6_preferred, which we set
+ * directly. */
+ MOCK(get_options, mock_get_options);
+
+ /* Setup IP addresses */
+ tor_addr_parse(&ipv4_addr, TEST_IPV4_ADDR);
+ tor_addr_parse(&ipv6_addr, TEST_IPV6_ADDR);
+
+ /* Setup node_ri */
+ memset(&node_ri, 0, sizeof(node_ri));
+ node_ri.addr = tor_addr_to_ipv4h(&ipv4_addr);
+ node_ri.or_port = ipv4_port;
+ tor_addr_copy(&node_ri.ipv6_addr, &ipv6_addr);
+ node_ri.ipv6_orport = ipv6_port;
+
+ /* Setup node */
+ memset(&node, 0, sizeof(node));
+ node.ri = &node_ri;
+
+ /* Check the preferred address is IPv4 if we're only using IPv4, regardless
+ * of whether we prefer it or not */
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientUseIPv6 = 0;
+ node.ipv6_preferred = 0;
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr));
+ tt_assert(ap.port == ipv4_port);
+
+ node.ipv6_preferred = 1;
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr));
+ tt_assert(ap.port == ipv4_port);
+
+ /* Check the preferred address is IPv4 if we're using IPv4 and IPv6, but
+ * don't prefer the IPv6 address */
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientUseIPv6 = 1;
+ node.ipv6_preferred = 0;
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr));
+ tt_assert(ap.port == ipv4_port);
+
+ /* Check the preferred address is IPv6 if we prefer it and
+ * ClientUseIPv6 is 1, regardless of ClientUseIPv4 */
+ mocked_options.ClientUseIPv4 = 1;
+ mocked_options.ClientUseIPv6 = 1;
+ node.ipv6_preferred = 1;
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr));
+ tt_assert(ap.port == ipv6_port);
+
+ mocked_options.ClientUseIPv4 = 0;
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr));
+ tt_assert(ap.port == ipv6_port);
+
+ /* Check the preferred address is IPv6 if we don't prefer it, but
+ * ClientUseIPv4 is 0 */
+ mocked_options.ClientUseIPv4 = 0;
+ mocked_options.ClientUseIPv6 = 1;
+ node.ipv6_preferred = fascist_firewall_prefer_ipv6_orport(&mocked_options);
+ node_get_pref_orport(&node, &ap);
+ tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr));
+ tt_assert(ap.port == ipv6_port);
+
+ done:
+ UNMOCK(get_options);
+}
+
static const struct testcase_setup_t fake_network = {
fake_network_setup, fake_network_cleanup
};
@@ -654,6 +867,9 @@ struct testcase_t entrynodes_tests[] = {
{ "entry_is_live",
test_entry_is_live,
TT_FORK, &fake_network, NULL },
+ { "node_preferred_orport",
+ test_node_preferred_orport,
+ 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_options.c b/src/test/test_options.c
index dcf97f897f..10ee1f962b 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -327,6 +327,7 @@ fixed_get_uname(void)
"V3AuthVoteDelay 20\n" \
"V3AuthDistDelay 20\n" \
"V3AuthNIntervalsValid 3\n" \
+ "ClientUseIPv4 1\n" \
"VirtualAddrNetworkIPv4 127.192.0.0/10\n" \
"VirtualAddrNetworkIPv6 [FE80::]/10\n" \
"SchedulerHighWaterMark__ 42\n" \
@@ -392,6 +393,14 @@ free_options_test_data(options_test_data_t *td)
tor_free(td);
}
+#define expect_log_msg(str) \
+ tt_assert_msg(mock_saved_log_has_message(str), \
+ "expected log to contain " # str);
+
+#define expect_no_log_msg(str) \
+ tt_assert_msg(!mock_saved_log_has_message(str), \
+ "expected log to not contain " # str);
+
static void
test_options_validate__uname_for_server(void *ignored)
{
@@ -1715,6 +1724,10 @@ test_options_validate__reachable_addresses(void *ignored)
tt_str_op(tdata->opt->ReachableAddresses->value, OP_EQ, "*:82");
tor_free(msg);
+#define SERVERS_REACHABLE_MSG "Servers must be able to freely connect to" \
+ " the rest of the Internet, so they must not set Reachable*Addresses or" \
+ " FascistFirewall or FirewallPorts or ClientUseIPv4 0."
+
free_options_test_data(tdata);
tdata = get_options_test_data("ReachableAddresses *:82\n"
"ORListenAddress 127.0.0.1:5555\n"
@@ -1726,9 +1739,7 @@ test_options_validate__reachable_addresses(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, "Servers must be able to freely connect to the rest of"
- " the Internet, so they must not set Reachable*Addresses or"
- " FascistFirewall.");
+ tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG);
tor_free(msg);
free_options_test_data(tdata);
@@ -1742,9 +1753,7 @@ test_options_validate__reachable_addresses(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, "Servers must be able to freely connect to the rest of"
- " the Internet, so they must not set Reachable*Addresses or"
- " FascistFirewall.");
+ tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG);
tor_free(msg);
free_options_test_data(tdata);
@@ -1758,11 +1767,107 @@ test_options_validate__reachable_addresses(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, "Servers must be able to freely connect to the rest of"
- " the Internet, so they must not set Reachable*Addresses or"
- " FascistFirewall.");
+ tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG);
+ tor_free(msg);
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data("ClientUseIPv4 0\n"
+ "ORListenAddress 127.0.0.1:5555\n"
+ "ORPort 955\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, SERVERS_REACHABLE_MSG);
+ tor_free(msg);
+
+ /* Test IPv4-only clients setting IPv6 preferences */
+
+#define WARN_PLEASE_USE_IPV6_OR_LOG_MSG \
+ "ClientPreferIPv6ORPort 1 is ignored unless tor is using IPv6. " \
+ "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges.\n"
+
+#define WARN_PLEASE_USE_IPV6_DIR_LOG_MSG \
+ "ClientPreferIPv6DirPort 1 is ignored unless tor is using IPv6. " \
+ "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges.\n"
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "ClientUseIPv4 1\n"
+ "ClientUseIPv6 0\n"
+ "UseBridges 0\n"
+ "ClientPreferIPv6ORPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ expect_log_msg(WARN_PLEASE_USE_IPV6_OR_LOG_MSG);
+ tor_free(msg);
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "ClientUseIPv4 1\n"
+ "ClientUseIPv6 0\n"
+ "UseBridges 0\n"
+ "ClientPreferIPv6DirPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ expect_log_msg(WARN_PLEASE_USE_IPV6_DIR_LOG_MSG);
tor_free(msg);
+ /* Now test an IPv4/IPv6 client setting IPv6 preferences */
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "ClientUseIPv4 1\n"
+ "ClientUseIPv6 1\n"
+ "ClientPreferIPv6ORPort 1\n"
+ "ClientPreferIPv6DirPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ tt_ptr_op(msg, OP_EQ, NULL);
+
+ /* Now test an IPv6 client setting IPv6 preferences */
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "ClientUseIPv6 1\n"
+ "ClientPreferIPv6ORPort 1\n"
+ "ClientPreferIPv6DirPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ tt_ptr_op(msg, OP_EQ, NULL);
+
+ /* And an implicit (IPv4 disabled) IPv6 client setting IPv6 preferences */
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "ClientUseIPv4 0\n"
+ "ClientPreferIPv6ORPort 1\n"
+ "ClientPreferIPv6DirPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ tt_ptr_op(msg, OP_EQ, NULL);
+
+ /* And an implicit (bridge) client setting IPv6 preferences */
+
+ free_options_test_data(tdata);
+ tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
+ "UseBridges 1\n"
+ "Bridge 127.0.0.1:12345\n"
+ "ClientPreferIPv6ORPort 1\n"
+ "ClientPreferIPv6DirPort 1\n");
+
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, 0);
+ tt_ptr_op(msg, OP_EQ, NULL);
+
done:
teardown_capture_of_logs(previous_log);
free_options_test_data(tdata);
@@ -1777,6 +1882,7 @@ test_options_validate__use_bridges(void *ignored)
char *msg;
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"
"MaxClientCircuitsPending 1\n"
diff --git a/src/test/test_policy.c b/src/test/test_policy.c
index 794978fc42..3688909acb 100644
--- a/src/test/test_policy.c
+++ b/src/test/test_policy.c
@@ -1129,6 +1129,537 @@ test_policies_getinfo_helper_policies(void *arg)
#undef TEST_IPV4_ADDR
#undef TEST_IPV6_ADDR
+#define TEST_IPV4_ADDR_STR "1.2.3.4"
+#define TEST_IPV6_ADDR_STR "[1002::4567]"
+#define REJECT_IPv4_FINAL_STR "reject 0.0.0.0/0:*"
+#define REJECT_IPv6_FINAL_STR "reject [::]/0:*"
+
+#define OTHER_IPV4_ADDR_STR "6.7.8.9"
+#define OTHER_IPV6_ADDR_STR "[afff::]"
+
+/** Run unit tests for fascist_firewall_allows_address */
+static void
+test_policies_fascist_firewall_allows_address(void *arg)
+{
+ (void)arg;
+ tor_addr_t ipv4_addr, ipv6_addr, r_ipv4_addr, r_ipv6_addr;
+ tor_addr_t n_ipv4_addr, n_ipv6_addr;
+ const uint16_t port = 1234;
+ smartlist_t *policy = NULL;
+ smartlist_t *e_policy = NULL;
+ addr_policy_t *item = NULL;
+ int malformed_list = 0;
+
+ /* Setup the options and the items in the policies */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ MOCK(get_options, mock_get_options);
+
+ policy = smartlist_new();
+ item = router_parse_addr_policy_item_from_string("accept "
+ TEST_IPV4_ADDR_STR ":*",
+ ADDR_POLICY_ACCEPT,
+ &malformed_list);
+ tt_assert(item);
+ tt_assert(!malformed_list);
+ smartlist_add(policy, item);
+ item = router_parse_addr_policy_item_from_string("accept "
+ TEST_IPV6_ADDR_STR,
+ ADDR_POLICY_ACCEPT,
+ &malformed_list);
+ tt_assert(item);
+ tt_assert(!malformed_list);
+ smartlist_add(policy, item);
+ /* Normally, policy_expand_unspec would do this for us */
+ item = router_parse_addr_policy_item_from_string(REJECT_IPv4_FINAL_STR,
+ ADDR_POLICY_ACCEPT,
+ &malformed_list);
+ tt_assert(item);
+ tt_assert(!malformed_list);
+ smartlist_add(policy, item);
+ item = router_parse_addr_policy_item_from_string(REJECT_IPv6_FINAL_STR,
+ ADDR_POLICY_ACCEPT,
+ &malformed_list);
+ tt_assert(item);
+ tt_assert(!malformed_list);
+ smartlist_add(policy, item);
+ item = NULL;
+
+ e_policy = smartlist_new();
+
+ /*
+ char *polstr = policy_dump_to_string(policy, 1, 1);
+ printf("%s\n", polstr);
+ tor_free(polstr);
+ */
+
+ /* Parse the addresses */
+ tor_addr_parse(&ipv4_addr, TEST_IPV4_ADDR_STR);
+ tor_addr_parse(&ipv6_addr, TEST_IPV6_ADDR_STR);
+ tor_addr_parse(&r_ipv4_addr, OTHER_IPV4_ADDR_STR);
+ tor_addr_parse(&r_ipv6_addr, OTHER_IPV6_ADDR_STR);
+ tor_addr_make_null(&n_ipv4_addr, AF_INET);
+ tor_addr_make_null(&n_ipv6_addr, AF_INET6);
+
+ /* Test the function's address matching with IPv4 and IPv6 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Preferring IPv4 */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 0)
+ == 0);
+
+ /* Preferring IPv6 */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 1)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 1)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 1)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 1)
+ == 0);
+
+ /* Test the function's address matching with UseBridges on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 1;
+
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Preferring IPv4 */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 0)
+ == 0);
+
+ /* Preferring IPv6 */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 1)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 1)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 1)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 1)
+ == 0);
+
+ /* bridge clients always use IPv6, regardless of ClientUseIPv6 */
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 0;
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Test the function's address matching with IPv4 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 0;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Test the function's address matching with IPv6 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 0;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Test the function's address matching with ClientUseIPv4 0.
+ * This means "use IPv6" regardless of the other settings. */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 0;
+ mock_options.ClientUseIPv6 = 0;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* Test the function's address matching for unusual inputs */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 1;
+
+ /* NULL and tor_addr_is_null addresses are rejected */
+ tt_assert(fascist_firewall_allows_address(NULL, port, policy, 0, 0) == 0);
+ tt_assert(fascist_firewall_allows_address(&n_ipv4_addr, port, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&n_ipv6_addr, port, policy, 0, 0)
+ == 0);
+
+ /* zero ports are rejected */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, 0, policy, 0, 0)
+ == 0);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, 0, policy, 0, 0)
+ == 0);
+
+ /* NULL and empty policies accept everything */
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, NULL, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, NULL, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, e_policy, 0, 0)
+ == 1);
+ tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, e_policy, 0, 0)
+ == 1);
+
+ done:
+ addr_policy_free(item);
+ addr_policy_list_free(policy);
+ addr_policy_list_free(e_policy);
+ UNMOCK(get_options);
+}
+
+#undef REJECT_IPv4_FINAL_STR
+#undef REJECT_IPv6_FINAL_STR
+#undef OTHER_IPV4_ADDR_STR
+#undef OTHER_IPV6_ADDR_STR
+
+#define TEST_IPV4_OR_PORT 1234
+#define TEST_IPV4_DIR_PORT 2345
+#define TEST_IPV6_OR_PORT 61234
+#define TEST_IPV6_DIR_PORT 62345
+
+/** Run unit tests for fascist_firewall_choose_address */
+static void
+test_policies_fascist_firewall_choose_address(void *arg)
+{
+ (void)arg;
+ tor_addr_port_t ipv4_or_ap, ipv4_dir_ap, ipv6_or_ap, ipv6_dir_ap;
+ tor_addr_port_t n_ipv4_ap, n_ipv6_ap;
+
+ /* Setup the options */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ MOCK(get_options, mock_get_options);
+
+ /* Parse the addresses */
+ tor_addr_parse(&ipv4_or_ap.addr, TEST_IPV4_ADDR_STR);
+ ipv4_or_ap.port = TEST_IPV4_OR_PORT;
+ tor_addr_parse(&ipv4_dir_ap.addr, TEST_IPV4_ADDR_STR);
+ ipv4_dir_ap.port = TEST_IPV4_DIR_PORT;
+
+ tor_addr_parse(&ipv6_or_ap.addr, TEST_IPV6_ADDR_STR);
+ ipv6_or_ap.port = TEST_IPV6_OR_PORT;
+ tor_addr_parse(&ipv6_dir_ap.addr, TEST_IPV6_ADDR_STR);
+ ipv6_dir_ap.port = TEST_IPV6_DIR_PORT;
+
+ tor_addr_make_null(&n_ipv4_ap.addr, AF_INET);
+ n_ipv4_ap.port = 0;
+ tor_addr_make_null(&n_ipv6_ap.addr, AF_INET6);
+ n_ipv6_ap.port = 0;
+
+ /* Choose an address with IPv4 and IPv6 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 0;
+
+ /* Preferring IPv4 */
+ mock_options.ClientPreferIPv6ORPort = 0;
+ mock_options.ClientPreferIPv6DirPort = 0;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Auto (Preferring IPv4) */
+ mock_options.ClientPreferIPv6ORPort = -1;
+ mock_options.ClientPreferIPv6DirPort = -1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Preferring IPv6 */
+ mock_options.ClientPreferIPv6ORPort = 1;
+ mock_options.ClientPreferIPv6DirPort = 1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv6_dir_ap);
+
+ /* Preferring IPv4 OR / IPv6 Dir */
+ mock_options.ClientPreferIPv6ORPort = 0;
+ mock_options.ClientPreferIPv6DirPort = 1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv6_dir_ap);
+
+ /* Preferring IPv6 OR / IPv4 Dir */
+ mock_options.ClientPreferIPv6ORPort = 1;
+ mock_options.ClientPreferIPv6DirPort = 0;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Choose an address with UseBridges on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.UseBridges = 1;
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+
+ /* Preferring IPv4 */
+ mock_options.ClientPreferIPv6ORPort = 0;
+ mock_options.ClientPreferIPv6DirPort = 0;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Auto:
+ * - bridge clients prefer the configured bridge OR address,
+ * - other clients prefer IPv4 OR by default,
+ * - all clients prefer IPv4 Dir by default.
+ */
+ mock_options.ClientPreferIPv6ORPort = -1;
+ mock_options.ClientPreferIPv6DirPort = -1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Preferring IPv6 */
+ mock_options.ClientPreferIPv6ORPort = 1;
+ mock_options.ClientPreferIPv6DirPort = 1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv6_dir_ap);
+
+ /* In the default configuration (Auto / IPv6 off), bridge clients should
+ * still use IPv6, and only prefer it for bridges configured with an IPv6
+ * address, regardless of ClientUseIPv6. */
+ mock_options.ClientUseIPv6 = 0;
+ mock_options.ClientPreferIPv6ORPort = -1;
+ mock_options.ClientPreferIPv6DirPort = -1;
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Choose an address with IPv4 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 0;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv4_dir_ap);
+
+ /* Choose an address with IPv6 on */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 0;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv6_dir_ap);
+
+ /* Choose an address with ClientUseIPv4 0.
+ * This means "use IPv6" regardless of the other settings. */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 0;
+ mock_options.ClientUseIPv6 = 0;
+ mock_options.UseBridges = 0;
+
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 1)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 1)
+ == &ipv6_dir_ap);
+
+ /* Choose from unusual inputs */
+ memset(&mock_options, 0, sizeof(or_options_t));
+ mock_options.ClientUseIPv4 = 1;
+ mock_options.ClientUseIPv6 = 1;
+ mock_options.UseBridges = 1;
+
+ tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &n_ipv6_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv4_or_ap);
+ tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &ipv6_or_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == &ipv6_or_ap);
+ tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &n_ipv6_ap, 0,
+ FIREWALL_OR_CONNECTION, 0)
+ == NULL);
+
+ tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &n_ipv6_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv4_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &ipv6_dir_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == &ipv6_dir_ap);
+ tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &n_ipv6_ap, 0,
+ FIREWALL_DIR_CONNECTION, 0)
+ == NULL);
+
+ done:
+ UNMOCK(get_options);
+}
+
+#undef TEST_IPV4_ADDR_STR
+#undef TEST_IPV6_ADDR_STR
+#undef TEST_IPV4_OR_PORT
+#undef TEST_IPV4_DIR_PORT
+#undef TEST_IPV6_OR_PORT
+#undef TEST_IPV6_DIR_PORT
+
struct testcase_t policy_tests[] = {
{ "router_dump_exit_policy_to_string", test_dump_exit_policy_to_string, 0,
NULL, NULL },
@@ -1139,6 +1670,10 @@ struct testcase_t policy_tests[] = {
{ "reject_interface_address", test_policies_reject_interface_address, 0,
NULL, NULL },
{ "reject_port_address", test_policies_reject_port_address, 0, NULL, NULL },
+ { "fascist_firewall_allows_address",
+ test_policies_fascist_firewall_allows_address, 0, NULL, NULL },
+ { "fascist_firewall_choose_address",
+ test_policies_fascist_firewall_choose_address, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_rendcache.c b/src/test/test_rendcache.c
index 77796994b4..7e04799db2 100644
--- a/src/test/test_rendcache.c
+++ b/src/test/test_rendcache.c
@@ -128,8 +128,8 @@ test_rend_cache_store_v2_desc_as_client(void *data)
// Test bad base32 failure
// This causes an assertion failure if we're running with assertions.
- // But when doing coverage, we can test it.
-#ifdef TOR_COVERAGE
+ // But when building without asserts, we can test it.
+#ifdef DISABLE_ASSERTS_IN_UNIT_TESTS
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
"!xqunszqnaolrrfmtzgaki7mxelgvkj", mock_rend_query, NULL);
tt_int_op(ret, OP_EQ, RCS_BADDESC);
diff --git a/src/test/test_routerlist.c b/src/test/test_routerlist.c
index 8c4254ccd7..fdbd5abf3b 100644
--- a/src/test/test_routerlist.c
+++ b/src/test/test_routerlist.c
@@ -11,6 +11,7 @@
#define TOR_UNIT_TESTING
#include "or.h"
#include "config.h"
+#include "connection.h"
#include "container.h"
#include "directory.h"
#include "dirvote.h"
@@ -371,6 +372,77 @@ test_router_pick_directory_server_impl(void *arg)
policies_free_all();
}
+connection_t *mocked_connection = NULL;
+
+/* Mock connection_get_by_type_addr_port_purpose by returning
+ * mocked_connection. */
+static connection_t *
+mock_connection_get_by_type_addr_port_purpose(int type,
+ const tor_addr_t *addr,
+ uint16_t port, int purpose)
+{
+ (void)type;
+ (void)addr;
+ (void)port;
+ (void)purpose;
+
+ return mocked_connection;
+}
+
+#define TEST_ADDR_STR "127.0.0.1"
+#define TEST_DIR_PORT 12345
+
+static void
+test_routerlist_router_is_already_dir_fetching(void *arg)
+{
+ (void)arg;
+ tor_addr_port_t test_ap, null_addr_ap, zero_port_ap;
+
+ /* Setup */
+ tor_addr_parse(&test_ap.addr, TEST_ADDR_STR);
+ test_ap.port = TEST_DIR_PORT;
+ tor_addr_make_null(&null_addr_ap.addr, AF_INET6);
+ null_addr_ap.port = TEST_DIR_PORT;
+ tor_addr_parse(&zero_port_ap.addr, TEST_ADDR_STR);
+ zero_port_ap.port = 0;
+ MOCK(connection_get_by_type_addr_port_purpose,
+ mock_connection_get_by_type_addr_port_purpose);
+
+ /* Test that we never get 1 from a NULL connection */
+ mocked_connection = NULL;
+ tt_assert(router_is_already_dir_fetching(&test_ap, 1, 1) == 0);
+ tt_assert(router_is_already_dir_fetching(&test_ap, 1, 0) == 0);
+ tt_assert(router_is_already_dir_fetching(&test_ap, 0, 1) == 0);
+ /* We always expect 0 in these cases */
+ tt_assert(router_is_already_dir_fetching(&test_ap, 0, 0) == 0);
+ tt_assert(router_is_already_dir_fetching(NULL, 1, 1) == 0);
+ tt_assert(router_is_already_dir_fetching(&null_addr_ap, 1, 1) == 0);
+ tt_assert(router_is_already_dir_fetching(&zero_port_ap, 1, 1) == 0);
+
+ /* Test that we get 1 with a connection in the appropriate circumstances */
+ mocked_connection = connection_new(CONN_TYPE_DIR, AF_INET);
+ tt_assert(router_is_already_dir_fetching(&test_ap, 1, 1) == 1);
+ tt_assert(router_is_already_dir_fetching(&test_ap, 1, 0) == 1);
+ tt_assert(router_is_already_dir_fetching(&test_ap, 0, 1) == 1);
+
+ /* Test that we get 0 even with a connection in the appropriate
+ * circumstances */
+ tt_assert(router_is_already_dir_fetching(&test_ap, 0, 0) == 0);
+ tt_assert(router_is_already_dir_fetching(NULL, 1, 1) == 0);
+ tt_assert(router_is_already_dir_fetching(&null_addr_ap, 1, 1) == 0);
+ tt_assert(router_is_already_dir_fetching(&zero_port_ap, 1, 1) == 0);
+
+ done:
+ /* If a connection is never set up, connection_free chokes on it. */
+ buf_free(mocked_connection->inbuf);
+ buf_free(mocked_connection->outbuf);
+ tor_free(mocked_connection);
+ UNMOCK(connection_get_by_type_addr_port_purpose);
+}
+
+#undef TEST_ADDR_STR
+#undef TEST_DIR_PORT
+
#define NODE(name, flags) \
{ #name, test_routerlist_##name, (flags), NULL, NULL }
#define ROUTER(name,flags) \
@@ -379,6 +451,7 @@ test_router_pick_directory_server_impl(void *arg)
struct testcase_t routerlist_tests[] = {
NODE(initiate_descriptor_downloads, 0),
NODE(launch_descriptor_downloads, 0),
+ NODE(router_is_already_dir_fetching, TT_FORK),
ROUTER(pick_directory_server_impl, TT_FORK),
END_OF_TESTCASES
};
diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c
index 71b3863963..138485c971 100644
--- a/src/test/test_tortls.c
+++ b/src/test/test_tortls.c
@@ -1612,7 +1612,7 @@ test_tortls_block_renegotiation(void *ignored)
tt_assert(!(tls->ssl->s3->flags &
SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION));
#endif
-
+
done:
tor_free(tls->ssl->s3);
tor_free(tls->ssl);
diff --git a/src/test/testing_common.c b/src/test/testing_common.c
index fc4e05c4e8..da9969d8d9 100644
--- a/src/test/testing_common.c
+++ b/src/test/testing_common.c
@@ -241,6 +241,11 @@ main(int c, const char **v)
update_approx_time(time(NULL));
options = options_new();
tor_threads_init();
+
+ struct tor_libevent_cfg cfg;
+ memset(&cfg, 0, sizeof(cfg));
+ tor_libevent_initialize(&cfg);
+
control_initialize_event_queue();
configure_backtrace_handler(get_version());
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index 7c6159ed5c..407ffc00fc 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -220,9 +220,6 @@
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS
-/* Define to 1 if time_t is signed. */
-#define TIME_T_IS_SIGNED
-
/* Define to 1 iff unaligned int access is allowed */
#define UNALIGNED_INT_ACCESS_OK
@@ -232,7 +229,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.8.1-alpha"
+#define VERSION "0.2.8.1-alpha-dev"