diff options
Diffstat (limited to 'src/network')
61 files changed, 17517 insertions, 717 deletions
diff --git a/src/network/.prev_CMakeLists.txt b/src/network/.prev_CMakeLists.txt new file mode 100644 index 0000000000..8f38d07e93 --- /dev/null +++ b/src/network/.prev_CMakeLists.txt @@ -0,0 +1,460 @@ +# Generated from network.pro. + +##################################################################### +## Network Module: +##################################################################### + +qt_add_module(Network + SOURCES + access/qabstractnetworkcache.cpp access/qabstractnetworkcache.h access/qabstractnetworkcache_p.h + access/qhsts.cpp access/qhsts_p.h + access/qhstspolicy.cpp access/qhstspolicy.h + access/qnetworkaccessauthenticationmanager.cpp access/qnetworkaccessauthenticationmanager_p.h + access/qnetworkaccessbackend.cpp access/qnetworkaccessbackend_p.h + access/qnetworkaccesscache.cpp access/qnetworkaccesscache_p.h + access/qnetworkaccesscachebackend.cpp access/qnetworkaccesscachebackend_p.h + access/qnetworkaccessdebugpipebackend.cpp access/qnetworkaccessdebugpipebackend_p.h + access/qnetworkaccessfilebackend.cpp access/qnetworkaccessfilebackend_p.h + access/qnetworkaccessmanager.cpp access/qnetworkaccessmanager.h access/qnetworkaccessmanager_p.h + access/qnetworkcookie.cpp access/qnetworkcookie.h access/qnetworkcookie_p.h + access/qnetworkcookiejar.cpp access/qnetworkcookiejar.h access/qnetworkcookiejar_p.h + access/qnetworkfile.cpp access/qnetworkfile_p.h + access/qnetworkreply.cpp access/qnetworkreply.h access/qnetworkreply_p.h + access/qnetworkreplydataimpl.cpp access/qnetworkreplydataimpl_p.h + access/qnetworkreplyfileimpl.cpp access/qnetworkreplyfileimpl_p.h + access/qnetworkreplyimpl.cpp access/qnetworkreplyimpl_p.h + access/qnetworkrequest.cpp access/qnetworkrequest.h access/qnetworkrequest_p.h + kernel/qauthenticator.cpp kernel/qauthenticator.h kernel/qauthenticator_p.h + kernel/qhostaddress.cpp kernel/qhostaddress.h kernel/qhostaddress_p.h + kernel/qhostinfo.cpp kernel/qhostinfo.h kernel/qhostinfo_p.h + kernel/qnetconmonitor_p.h + kernel/qnetworkdatagram.cpp kernel/qnetworkdatagram.h kernel/qnetworkdatagram_p.h + kernel/qnetworkinterface.cpp kernel/qnetworkinterface.h kernel/qnetworkinterface_p.h + kernel/qnetworkinterface_unix_p.h + kernel/qnetworkproxy.cpp kernel/qnetworkproxy.h + kernel/qtnetworkglobal.h kernel/qtnetworkglobal_p.h + socket/qabstractsocket.cpp socket/qabstractsocket.h socket/qabstractsocket_p.h + socket/qabstractsocketengine.cpp socket/qabstractsocketengine_p.h + socket/qtcpserver.cpp socket/qtcpserver.h socket/qtcpserver_p.h + socket/qtcpsocket.cpp socket/qtcpsocket.h socket/qtcpsocket_p.h + socket/qudpsocket.cpp socket/qudpsocket.h + ssl/qasn1element.cpp ssl/qasn1element_p.h + ssl/qpassworddigestor.cpp ssl/qpassworddigestor.h + ssl/qssl.cpp ssl/qssl.h ssl/qssl_p.h + ssl/qsslcertificate.cpp ssl/qsslcertificate.h ssl/qsslcertificate_p.h + ssl/qsslcertificateextension.cpp ssl/qsslcertificateextension.h ssl/qsslcertificateextension_p.h + DEFINES + QT_NO_FOREACH + QT_NO_USING_NAMESPACE + INCLUDE_DIRECTORIES + kernel + LIBRARIES + Qt::CorePrivate + PUBLIC_LIBRARIES + Qt::Core + PRIVATE_MODULE_INTERFACE + Qt::CorePrivate + PRECOMPILED_HEADER + "../corelib/global/qt_pch.h" +) + +#### Keys ignored in scope 1:.:.:network.pro:<TRUE>: +# MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" +# QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" + +## Scopes: +##################################################################### + +qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") + LINK_OPTIONS + "/BASE:0x64000000" +) + +if(ANDROID AND (QT_FEATURE_bearermanagement)) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES + jar/QtAndroidBearer.jar + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES + plugins/bearer/libplugins_bearer_qandroidbearer.so + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS + android.permission.ACCESS_NETWORK_STATE + ) +endif() + +qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement + SOURCES + bearer/qbearerengine.cpp bearer/qbearerengine_p.h + bearer/qbearerengine_impl_p.h + bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h + bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h + bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h + bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h + bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h + bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ftp + SOURCES + access/qftp.cpp access/qftp_p.h + access/qnetworkaccessftpbackend.cpp access/qnetworkaccessftpbackend_p.h + kernel/qurlinfo.cpp kernel/qurlinfo_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_networkdiskcache + SOURCES + access/qnetworkdiskcache.cpp access/qnetworkdiskcache.h access/qnetworkdiskcache_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_settings + SOURCES + access/qhstsstore.cpp access/qhstsstore_p.h +) + +qt_extend_target(Network CONDITION APPLE + LIBRARIES + ${FWCoreFoundation} + ${FWSecurity} +) + +qt_extend_target(Network CONDITION WASM + SOURCES + access/qnetworkreplywasmimpl.cpp access/qnetworkreplywasmimpl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_http + SOURCES + access/http2/bitstreams.cpp access/http2/bitstreams_p.h + access/http2/hpack.cpp access/http2/hpack_p.h + access/http2/hpacktable.cpp access/http2/hpacktable_p.h + access/http2/http2frames.cpp access/http2/http2frames_p.h + access/http2/http2protocol.cpp access/http2/http2protocol_p.h + access/http2/http2streams.cpp access/http2/http2streams_p.h + access/http2/huffman.cpp access/http2/huffman_p.h + access/qabstractprotocolhandler.cpp access/qabstractprotocolhandler_p.h + access/qhttp2configuration.cpp access/qhttp2configuration.h + access/qhttp2protocolhandler.cpp access/qhttp2protocolhandler_p.h + access/qhttpmultipart.cpp access/qhttpmultipart.h access/qhttpmultipart_p.h + access/qhttpnetworkconnection.cpp access/qhttpnetworkconnection_p.h + access/qhttpnetworkconnectionchannel.cpp access/qhttpnetworkconnectionchannel_p.h + access/qhttpnetworkheader.cpp access/qhttpnetworkheader_p.h + access/qhttpnetworkreply.cpp access/qhttpnetworkreply_p.h + access/qhttpnetworkrequest.cpp access/qhttpnetworkrequest_p.h + access/qhttpprotocolhandler.cpp access/qhttpprotocolhandler_p.h + access/qhttpthreaddelegate.cpp access/qhttpthreaddelegate_p.h + access/qnetworkreplyhttpimpl.cpp access/qnetworkreplyhttpimpl_p.h + socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_zlib + LIBRARIES + ZLIB::ZLIB +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib + INCLUDE_DIRECTORIES + ../3rdparty/zlib/src +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep + LIBRARIES + Qt::Core +) + +qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain + SOURCES + kernel/qtldurl.cpp kernel/qtldurl_p.h + kernel/qurltlds_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup.cpp kernel/qdnslookup.h kernel/qdnslookup_p.h +) + +qt_extend_target(Network CONDITION UNIX + SOURCES + kernel/qhostinfo_unix.cpp + socket/qnativesocketengine_unix.cpp + socket/qnet_unix_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dlopen AND UNIX + LIBRARIES + ${CMAKE_DL_LIBS} +) + +qt_extend_target(Network CONDITION QT_FEATURE_linux_netlink AND UNIX + SOURCES + kernel/qnetworkinterface_linux.cpp +) + +qt_extend_target(Network CONDITION UNIX AND NOT QT_FEATURE_linux_netlink + SOURCES + kernel/qnetworkinterface_unix.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup_android.cpp +) + +qt_extend_target(Network CONDITION WIN32 + SOURCES + kernel/qhostinfo_win.cpp +) + +qt_extend_target(Network CONDITION WIN32 AND NOT WINRT + SOURCES + kernel/qnetworkinterface_win.cpp + kernel/qnetworkproxy_win.cpp + socket/qnativesocketengine_win.cpp + LIBRARIES + advapi32 + dnsapi + iphlpapi +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT + SOURCES + kernel/qdnslookup_win.cpp +) + +qt_extend_target(Network CONDITION WINRT + SOURCES + kernel/qnetworkinterface_winrt.cpp + socket/qnativesocketengine_winrt.cpp socket/qnativesocketengine_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WINRT + SOURCES + kernel/qdnslookup_winrt.cpp +) + +qt_extend_target(Network CONDITION APPLE AND NOT APPLE_UIKIT + LIBRARIES + ${FWCoreServices} + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION APPLE_IOS OR APPLE_OSX + SOURCES + kernel/qnetconmonitor_darwin.mm + LIBRARIES + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION QT_FEATURE_netlistmgr AND NOT APPLE_IOS AND NOT APPLE_OSX + SOURCES + kernel/qnetconmonitor_win.cpp +) + +qt_extend_target(Network CONDITION NOT APPLE_IOS AND NOT APPLE_OSX AND NOT QT_FEATURE_netlistmgr + SOURCES + kernel/qnetconmonitor_stub.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_gssapi + LIBRARIES + GSSAPI::GSSAPI +) + +qt_extend_target(Network CONDITION APPLE_UIKIT + SOURCES + kernel/qnetworkinterface_uikit_p.h +) + +qt_extend_target(Network CONDITION APPLE_OSX + SOURCES + kernel/qnetworkproxy_mac.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_libproxy AND NOT APPLE_OSX AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_libproxy.cpp + LIBRARIES + ${CMAKE_DL_LIBS} + PkgConfig::Libproxy +) + +qt_extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_generic.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_socks5 + SOURCES + socket/qsocks5socketengine.cpp socket/qsocks5socketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_sctp + SOURCES + socket/qsctpserver.cpp socket/qsctpserver.h socket/qsctpserver_p.h + socket/qsctpsocket.cpp socket/qsctpsocket.h socket/qsctpsocket_p.h +) + +qt_extend_target(Network CONDITION NOT WINRT + SOURCES + socket/qnativesocketengine.cpp socket/qnativesocketengine_p.h +) + +qt_extend_target(Network CONDITION MSVC + MOC_OPTIONS + "-D_WINSOCK_DEPRECATED_NO_WARNINGS" +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver + SOURCES + socket/qlocalserver.cpp socket/qlocalserver.h socket/qlocalserver_p.h + socket/qlocalsocket.cpp socket/qlocalsocket.h socket/qlocalsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND (INTEGRITY OR WINRT) + SOURCES + socket/qlocalserver_tcp.cpp + socket/qlocalsocket_tcp.cpp + DEFINES + QT_LOCALSOCKET_TCP +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND UNIX AND NOT INTEGRITY AND NOT WINRT + SOURCES + socket/qlocalserver_unix.cpp + socket/qlocalsocket_unix.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND WIN32 AND NOT WINRT + SOURCES + socket/qlocalserver_win.cpp + socket/qlocalsocket_win.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_proxies + DEFINES + QT_USE_SYSTEM_PROXIES +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_openssl + SOURCES + ssl/qsslcertificate_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl + SOURCES + ssl/qocspresponse.cpp ssl/qocspresponse.h ssl/qocspresponse_p.h + ssl/qsslcipher.cpp ssl/qsslcipher.h ssl/qsslcipher_p.h + ssl/qsslconfiguration.cpp ssl/qsslconfiguration.h ssl/qsslconfiguration_p.h + ssl/qssldiffiehellmanparameters.cpp ssl/qssldiffiehellmanparameters.h ssl/qssldiffiehellmanparameters_p.h + ssl/qsslellipticcurve.cpp ssl/qsslellipticcurve.h + ssl/qsslerror.cpp ssl/qsslerror.h + ssl/qsslkey.h ssl/qsslkey_p.cpp ssl/qsslkey_p.h + ssl/qsslpresharedkeyauthenticator.cpp ssl/qsslpresharedkeyauthenticator.h ssl/qsslpresharedkeyauthenticator_p.h + ssl/qsslsocket.cpp ssl/qsslsocket.h ssl/qsslsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl AND WINRT + SOURCES + ssl/qsslcertificate_winrt.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_winrt.cpp + ssl/qsslsocket_winrt.cpp ssl/qsslsocket_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_schannel AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_schannel.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_schannel.cpp + ssl/qsslsocket_qt.cpp + ssl/qsslsocket_schannel.cpp ssl/qsslsocket_schannel_p.h + LIBRARIES + Crypt32 + Secur32 + bcrypt + ncrypt +) + +qt_extend_target(Network CONDITION QT_FEATURE_securetransport AND QT_FEATURE_ssl + SOURCES + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_mac.cpp + ssl/qsslkey_qt.cpp + ssl/qsslsocket_mac.cpp ssl/qsslsocket_mac_p.h + ssl/qsslsocket_mac_shared.cpp + ssl/qsslsocket_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_ssl + SOURCES + ssl/qdtls.cpp ssl/qdtls.h ssl/qdtls_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_openssl.cpp + ssl/qsslcontext_openssl.cpp ssl/qsslcontext_openssl_p.h + ssl/qssldiffiehellmanparameters_openssl.cpp + ssl/qsslellipticcurve_openssl.cpp + ssl/qsslkey_openssl.cpp + ssl/qsslsocket_openssl.cpp ssl/qsslsocket_openssl_p.h + ssl/qsslsocket_openssl_symbols.cpp ssl/qsslsocket_openssl_symbols_p.h + DEFINES + OPENSSL_API_COMPAT=0x10100000L +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qdtls_openssl.cpp ssl/qdtls_openssl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ocsp AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qocsp_p.h +) + +qt_extend_target(Network CONDITION APPLE AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslsocket_mac_shared.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT ANDROID_EMBEDDED + SOURCES + ssl/qsslsocket_openssl_android.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND build_pass + LIBRARIES + crypto_${CMAKE_SYSTEM_PROCESSOR} + ssl_${CMAKE_SYSTEM_PROCESSOR} +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND NOT ANDROID + LIBRARIES + OpenSSL::SSL +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked + LIBRARIES + OpenSSL::SSL_nolink +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 + SOURCES + ssl/qwindowscarootfetcher.cpp ssl/qwindowscarootfetcher_p.h + LIBRARIES + crypt32 +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND UNIX AND NOT ANDROID AND NOT INTEGRITY + SOURCES + kernel/qdnslookup_unix.cpp +) +qt_add_docs(Network + doc/qtnetwork.qdocconf +) + diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt new file mode 100644 index 0000000000..baea85ea99 --- /dev/null +++ b/src/network/CMakeLists.txt @@ -0,0 +1,461 @@ +# Generated from network.pro. + +##################################################################### +## Network Module: +##################################################################### + +qt_add_module(Network + SOURCES + access/qabstractnetworkcache.cpp access/qabstractnetworkcache.h access/qabstractnetworkcache_p.h + access/qhsts.cpp access/qhsts_p.h + access/qhstspolicy.cpp access/qhstspolicy.h + access/qnetworkaccessauthenticationmanager.cpp access/qnetworkaccessauthenticationmanager_p.h + access/qnetworkaccessbackend.cpp access/qnetworkaccessbackend_p.h + access/qnetworkaccesscache.cpp access/qnetworkaccesscache_p.h + access/qnetworkaccesscachebackend.cpp access/qnetworkaccesscachebackend_p.h + access/qnetworkaccessdebugpipebackend.cpp access/qnetworkaccessdebugpipebackend_p.h + access/qnetworkaccessfilebackend.cpp access/qnetworkaccessfilebackend_p.h + access/qnetworkaccessmanager.cpp access/qnetworkaccessmanager.h access/qnetworkaccessmanager_p.h + access/qnetworkcookie.cpp access/qnetworkcookie.h access/qnetworkcookie_p.h + access/qnetworkcookiejar.cpp access/qnetworkcookiejar.h access/qnetworkcookiejar_p.h + access/qnetworkfile.cpp access/qnetworkfile_p.h + access/qnetworkreply.cpp access/qnetworkreply.h access/qnetworkreply_p.h + access/qnetworkreplydataimpl.cpp access/qnetworkreplydataimpl_p.h + access/qnetworkreplyfileimpl.cpp access/qnetworkreplyfileimpl_p.h + access/qnetworkreplyimpl.cpp access/qnetworkreplyimpl_p.h + access/qnetworkrequest.cpp access/qnetworkrequest.h access/qnetworkrequest_p.h + kernel/qauthenticator.cpp kernel/qauthenticator.h kernel/qauthenticator_p.h + kernel/qhostaddress.cpp kernel/qhostaddress.h kernel/qhostaddress_p.h + kernel/qhostinfo.cpp kernel/qhostinfo.h kernel/qhostinfo_p.h + kernel/qnetconmonitor_p.h + kernel/qnetworkdatagram.cpp kernel/qnetworkdatagram.h kernel/qnetworkdatagram_p.h + kernel/qnetworkinterface.cpp kernel/qnetworkinterface.h kernel/qnetworkinterface_p.h + kernel/qnetworkinterface_unix_p.h + kernel/qnetworkproxy.cpp kernel/qnetworkproxy.h + kernel/qtnetworkglobal.h kernel/qtnetworkglobal_p.h + socket/qabstractsocket.cpp socket/qabstractsocket.h socket/qabstractsocket_p.h + socket/qabstractsocketengine.cpp socket/qabstractsocketengine_p.h + socket/qtcpserver.cpp socket/qtcpserver.h socket/qtcpserver_p.h + socket/qtcpsocket.cpp socket/qtcpsocket.h socket/qtcpsocket_p.h + socket/qudpsocket.cpp socket/qudpsocket.h + ssl/qasn1element.cpp ssl/qasn1element_p.h + ssl/qpassworddigestor.cpp ssl/qpassworddigestor.h + ssl/qssl.cpp ssl/qssl.h ssl/qssl_p.h + ssl/qsslcertificate.cpp ssl/qsslcertificate.h ssl/qsslcertificate_p.h + ssl/qsslcertificateextension.cpp ssl/qsslcertificateextension.h ssl/qsslcertificateextension_p.h + DEFINES + QT_NO_FOREACH + QT_NO_USING_NAMESPACE + INCLUDE_DIRECTORIES + kernel + LIBRARIES + Qt::CorePrivate + PUBLIC_LIBRARIES + Qt::Core + PRIVATE_MODULE_INTERFACE + Qt::CorePrivate + PRECOMPILED_HEADER + "../corelib/global/qt_pch.h" +) + +#### Keys ignored in scope 1:.:.:network.pro:<TRUE>: +# MODULE_WINRT_CAPABILITIES = "internetClient" "internetClientServer" "privateNetworkClientServer" +# QMAKE_LIBS = "$$QMAKE_LIBS_NETWORK" + +## Scopes: +##################################################################### + +qt_extend_target(Network CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i386") + LINK_OPTIONS + "/BASE:0x64000000" +) + +if(ANDROID AND (QT_FEATURE_bearermanagement)) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_BUNDLED_JAR_DEPENDENCIES + jar/QtAndroidBearer.jar + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_LIB_DEPENDENCIES + plugins/bearer/libplugins_bearer_qandroidbearer.so + ) + set_property(TARGET Network APPEND PROPERTY QT_ANDROID_PERMISSIONS + android.permission.ACCESS_NETWORK_STATE + ) +endif() + +qt_extend_target(Network CONDITION QT_FEATURE_bearermanagement + SOURCES + bearer/qbearerengine.cpp bearer/qbearerengine_p.h + bearer/qbearerengine_impl_p.h + bearer/qbearerplugin.cpp bearer/qbearerplugin_p.h + bearer/qnetworkconfigmanager.cpp bearer/qnetworkconfigmanager.h bearer/qnetworkconfigmanager_p.cpp bearer/qnetworkconfigmanager_p.h + bearer/qnetworkconfiguration.cpp bearer/qnetworkconfiguration.h bearer/qnetworkconfiguration_p.h + bearer/qnetworksession.cpp bearer/qnetworksession.h bearer/qnetworksession_p.h + bearer/qnetworksession_impl.cpp bearer/qnetworksession_impl_p.h + bearer/qsharednetworksession.cpp bearer/qsharednetworksession_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ftp + SOURCES + access/qftp.cpp access/qftp_p.h + access/qnetworkaccessftpbackend.cpp access/qnetworkaccessftpbackend_p.h + kernel/qurlinfo.cpp kernel/qurlinfo_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_networkdiskcache + SOURCES + access/qnetworkdiskcache.cpp access/qnetworkdiskcache.h access/qnetworkdiskcache_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_settings + SOURCES + access/qhstsstore.cpp access/qhstsstore_p.h +) + +qt_extend_target(Network CONDITION APPLE + LIBRARIES + ${FWCoreFoundation} + ${FWSecurity} +) + +qt_extend_target(Network CONDITION WASM + SOURCES + access/qnetworkreplywasmimpl.cpp access/qnetworkreplywasmimpl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_http + SOURCES + access/http2/bitstreams.cpp access/http2/bitstreams_p.h + access/http2/hpack.cpp access/http2/hpack_p.h + access/http2/hpacktable.cpp access/http2/hpacktable_p.h + access/http2/http2frames.cpp access/http2/http2frames_p.h + access/http2/http2protocol.cpp access/http2/http2protocol_p.h + access/http2/http2streams.cpp access/http2/http2streams_p.h + access/http2/huffman.cpp access/http2/huffman_p.h + access/qabstractprotocolhandler.cpp access/qabstractprotocolhandler_p.h + access/qhttp2configuration.cpp access/qhttp2configuration.h + access/qhttp2protocolhandler.cpp access/qhttp2protocolhandler_p.h + access/qhttpmultipart.cpp access/qhttpmultipart.h access/qhttpmultipart_p.h + access/qhttpnetworkconnection.cpp access/qhttpnetworkconnection_p.h + access/qhttpnetworkconnectionchannel.cpp access/qhttpnetworkconnectionchannel_p.h + access/qhttpnetworkheader.cpp access/qhttpnetworkheader_p.h + access/qhttpnetworkreply.cpp access/qhttpnetworkreply_p.h + access/qhttpnetworkrequest.cpp access/qhttpnetworkrequest_p.h + access/qhttpprotocolhandler.cpp access/qhttpprotocolhandler_p.h + access/qhttpthreaddelegate.cpp access/qhttpthreaddelegate_p.h + access/qnetworkreplyhttpimpl.cpp access/qnetworkreplyhttpimpl_p.h + socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_zlib + LIBRARIES + ZLIB::ZLIB +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib + INCLUDE_DIRECTORIES + ../3rdparty/zlib/src +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep + LIBRARIES + Qt::Core +) + +qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain + SOURCES + kernel/qtldurl.cpp kernel/qtldurl_p.h + kernel/qurltlds_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup.cpp kernel/qdnslookup.h kernel/qdnslookup_p.h +) + +qt_extend_target(Network CONDITION UNIX + SOURCES + kernel/qhostinfo_unix.cpp + socket/qnativesocketengine_unix.cpp + socket/qnet_unix_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dlopen AND UNIX + LIBRARIES + ${CMAKE_DL_LIBS} +) + +qt_extend_target(Network CONDITION QT_FEATURE_linux_netlink AND UNIX + SOURCES + kernel/qnetworkinterface_linux.cpp +) + +qt_extend_target(Network CONDITION UNIX AND NOT QT_FEATURE_linux_netlink + SOURCES + kernel/qnetworkinterface_unix.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_dnslookup + SOURCES + kernel/qdnslookup_android.cpp +) + +qt_extend_target(Network CONDITION WIN32 + SOURCES + kernel/qhostinfo_win.cpp +) + +qt_extend_target(Network CONDITION WIN32 AND NOT WINRT + SOURCES + kernel/qnetworkinterface_win.cpp + kernel/qnetworkproxy_win.cpp + socket/qnativesocketengine_win.cpp + LIBRARIES + advapi32 + dnsapi + iphlpapi +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WIN32 AND NOT WINRT + SOURCES + kernel/qdnslookup_win.cpp +) + +qt_extend_target(Network CONDITION WINRT + SOURCES + kernel/qnetworkinterface_winrt.cpp + socket/qnativesocketengine_winrt.cpp socket/qnativesocketengine_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND WINRT + SOURCES + kernel/qdnslookup_winrt.cpp +) + +qt_extend_target(Network CONDITION APPLE AND NOT APPLE_UIKIT + LIBRARIES + ${FWCoreServices} + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION APPLE_IOS OR APPLE_OSX + SOURCES + kernel/qnetconmonitor_darwin.mm + LIBRARIES + ${FWSystemConfiguration} +) + +qt_extend_target(Network CONDITION QT_FEATURE_netlistmgr AND NOT APPLE_IOS AND NOT APPLE_OSX + SOURCES + kernel/qnetconmonitor_win.cpp +) + +qt_extend_target(Network CONDITION NOT APPLE_IOS AND NOT APPLE_OSX AND NOT QT_FEATURE_netlistmgr + SOURCES + kernel/qnetconmonitor_stub.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_gssapi + LIBRARIES + GSSAPI::GSSAPI +) + +qt_extend_target(Network CONDITION APPLE_UIKIT + SOURCES + kernel/qnetworkinterface_uikit_p.h +) + +qt_extend_target(Network CONDITION APPLE_OSX + SOURCES + kernel/qnetworkproxy_mac.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_libproxy AND NOT APPLE_OSX AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_libproxy.cpp + LIBRARIES + ${CMAKE_DL_LIBS} + PkgConfig::Libproxy +) + +qt_extend_target(Network CONDITION NOT APPLE_OSX AND NOT QT_FEATURE_libproxy AND (UNIX OR WINRT) + SOURCES + kernel/qnetworkproxy_generic.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_socks5 + SOURCES + socket/qsocks5socketengine.cpp socket/qsocks5socketengine_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_sctp + SOURCES + socket/qsctpserver.cpp socket/qsctpserver.h socket/qsctpserver_p.h + socket/qsctpsocket.cpp socket/qsctpsocket.h socket/qsctpsocket_p.h +) + +qt_extend_target(Network CONDITION NOT WINRT + SOURCES + socket/qnativesocketengine.cpp socket/qnativesocketengine_p.h +) + +qt_extend_target(Network CONDITION MSVC + MOC_OPTIONS + "-D_WINSOCK_DEPRECATED_NO_WARNINGS" +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver + SOURCES + socket/qlocalserver.cpp socket/qlocalserver.h socket/qlocalserver_p.h + socket/qlocalsocket.cpp socket/qlocalsocket.h socket/qlocalsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND (INTEGRITY OR WINRT) + SOURCES + socket/qlocalserver_tcp.cpp + socket/qlocalsocket_tcp.cpp + DEFINES + QT_LOCALSOCKET_TCP +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND UNIX AND NOT INTEGRITY AND NOT WINRT + SOURCES + socket/qlocalserver_unix.cpp + socket/qlocalsocket_unix.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_localserver AND WIN32 AND NOT WINRT + SOURCES + socket/qlocalserver_win.cpp + socket/qlocalsocket_win.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_system_proxies + DEFINES + QT_USE_SYSTEM_PROXIES +) + +qt_extend_target(Network CONDITION NOT QT_FEATURE_openssl + SOURCES + ssl/qsslcertificate_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl + SOURCES + ssl/qocspresponse.cpp ssl/qocspresponse.h ssl/qocspresponse_p.h + ssl/qsslcipher.cpp ssl/qsslcipher.h ssl/qsslcipher_p.h + ssl/qsslconfiguration.cpp ssl/qsslconfiguration.h ssl/qsslconfiguration_p.h + ssl/qssldiffiehellmanparameters.cpp ssl/qssldiffiehellmanparameters.h ssl/qssldiffiehellmanparameters_p.h + ssl/qsslellipticcurve.cpp ssl/qsslellipticcurve.h + ssl/qsslerror.cpp ssl/qsslerror.h + ssl/qsslkey.h ssl/qsslkey_p.cpp ssl/qsslkey_p.h + ssl/qsslpresharedkeyauthenticator.cpp ssl/qsslpresharedkeyauthenticator.h ssl/qsslpresharedkeyauthenticator_p.h + ssl/qsslsocket.cpp ssl/qsslsocket.h ssl/qsslsocket_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ssl AND WINRT + SOURCES + ssl/qsslcertificate_winrt.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_winrt.cpp + ssl/qsslsocket_winrt.cpp ssl/qsslsocket_winrt_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_schannel AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_schannel.cpp + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_qt.cpp + ssl/qsslkey_schannel.cpp + ssl/qsslsocket_qt.cpp + ssl/qsslsocket_schannel.cpp ssl/qsslsocket_schannel_p.h + LIBRARIES + Crypt32 + Secur32 + bcrypt + ncrypt +) + +qt_extend_target(Network CONDITION QT_FEATURE_securetransport AND QT_FEATURE_ssl + SOURCES + ssl/qssldiffiehellmanparameters_dummy.cpp + ssl/qsslellipticcurve_dummy.cpp + ssl/qsslkey_mac.cpp + ssl/qsslkey_qt.cpp + ssl/qsslsocket_mac.cpp ssl/qsslsocket_mac_p.h + ssl/qsslsocket_mac_shared.cpp + ssl/qsslsocket_qt.cpp +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_ssl + SOURCES + ssl/qdtls.cpp ssl/qdtls.h ssl/qdtls_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslcertificate_openssl.cpp + ssl/qsslcontext_openssl.cpp ssl/qsslcontext_openssl_p.h + ssl/qssldiffiehellmanparameters_openssl.cpp + ssl/qsslellipticcurve_openssl.cpp + ssl/qsslkey_openssl.cpp + ssl/qsslsocket_openssl.cpp ssl/qsslsocket_openssl_p.h + ssl/qsslsocket_openssl_symbols.cpp ssl/qsslsocket_openssl_symbols_p.h + DEFINES + OPENSSL_API_COMPAT=0x10100000L +) + +qt_extend_target(Network CONDITION QT_FEATURE_dtls AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qdtls_openssl.cpp ssl/qdtls_openssl_p.h +) + +qt_extend_target(Network CONDITION QT_FEATURE_ocsp AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qocsp_p.h +) + +qt_extend_target(Network CONDITION APPLE AND QT_FEATURE_openssl AND QT_FEATURE_ssl + SOURCES + ssl/qsslsocket_mac_shared.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT ANDROID_EMBEDDED + SOURCES + ssl/qsslsocket_openssl_android.cpp +) + +qt_extend_target(Network CONDITION ANDROID AND QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND build_pass + LIBRARIES + crypto_${CMAKE_SYSTEM_PROCESSOR} + ssl_${CMAKE_SYSTEM_PROCESSOR} +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl AND NOT ANDROID + LIBRARIES + OpenSSL::SSL +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked + LIBRARIES + OpenSSL::SSL_nolink +) + +qt_extend_target(Network CONDITION QT_FEATURE_openssl AND QT_FEATURE_ssl AND WIN32 + SOURCES + ssl/qwindowscarootfetcher.cpp ssl/qwindowscarootfetcher_p.h + LIBRARIES + crypt32 +) + +qt_extend_target(Network CONDITION QT_FEATURE_dnslookup AND UNIX AND NOT ANDROID AND NOT INTEGRITY + SOURCES + kernel/qdnslookup_unix.cpp +) +qt_add_docs(Network + doc/qtnetwork.qdocconf +) + +qt_extend_target(Network CONDITION WIN32 PUBLIC_LIBRARIES ws2_32) # special case: mkspecs/common/msvc-desktop.conf diff --git a/src/network/access/access.pri b/src/network/access/access.pri index cfb20dcd71..083fbbf5fd 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -114,11 +114,4 @@ qtConfig(http) { access/qhttpthreaddelegate_p.h \ access/qnetworkreplyhttpimpl_p.h \ access/qhttp2configuration.h - - qtConfig(ssl) { - SOURCES += \ - access/qspdyprotocolhandler.cpp - HEADERS += \ - access/qspdyprotocolhandler_p.h - } } diff --git a/src/network/access/qabstractnetworkcache.h b/src/network/access/qabstractnetworkcache.h index e357dfe58f..a4048c5b8f 100644 --- a/src/network/access/qabstractnetworkcache.h +++ b/src/network/access/qabstractnetworkcache.h @@ -52,7 +52,6 @@ QT_BEGIN_NAMESPACE class QIODevice; class QDateTime; class QUrl; -template<class T> class QList; class QNetworkCacheMetaDataPrivate; class Q_NETWORK_EXPORT QNetworkCacheMetaData diff --git a/src/network/access/qhsts_p.h b/src/network/access/qhsts_p.h index c219d9eab5..b5be4ff455 100644 --- a/src/network/access/qhsts_p.h +++ b/src/network/access/qhsts_p.h @@ -66,7 +66,6 @@ QT_BEGIN_NAMESPACE -template<typename T> class QList; template <typename T> class QVector; class Q_AUTOTEST_EXPORT QHstsCache diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index dce51d4fd5..efbeb17d39 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -332,13 +332,13 @@ bool QHttp2ProtocolHandler::sendRequest() // so we cannot create new streams. m_channel->emitFinishedWithError(QNetworkReply::ProtocolUnknownError, "GOAWAY received, cannot start a request"); - m_channel->spdyRequestsToSend.clear(); + m_channel->h2RequestsToSend.clear(); return false; } // Process 'fake' (created by QNetworkAccessManager::connectToHostEncrypted()) // requests first: - auto &requests = m_channel->spdyRequestsToSend; + auto &requests = m_channel->h2RequestsToSend; for (auto it = requests.begin(), endIt = requests.end(); it != endIt;) { const auto &pair = *it; const QString scheme(pair.first.url().scheme()); @@ -862,7 +862,7 @@ void QHttp2ProtocolHandler::handleGOAWAY() m_channel->emitFinishedWithError(QNetworkReply::ProtocolUnknownError, "GOAWAY received, cannot start a request"); // Also, prevent further calls to sendRequest: - m_channel->spdyRequestsToSend.clear(); + m_channel->h2RequestsToSend.clear(); QNetworkReply::NetworkError error = QNetworkReply::NoError; QString message; @@ -1281,7 +1281,7 @@ quint32 QHttp2ProtocolHandler::createNewStream(const HttpMessagePair &message, b const auto replyPrivate = reply->d_func(); replyPrivate->connection = m_connection; replyPrivate->connectionChannel = m_channel; - reply->setSpdyWasUsed(true); + reply->setHttp2WasUsed(true); streamIDs.insert(reply, newStreamID); connect(reply, SIGNAL(destroyed(QObject*)), this, SLOT(_q_replyDestroyed(QObject*))); @@ -1387,7 +1387,7 @@ void QHttp2ProtocolHandler::deleteActiveStream(quint32 streamID) } removeFromSuspended(streamID); - if (m_channel->spdyRequestsToSend.size()) + if (m_channel->h2RequestsToSend.size()) QMetaObject::invokeMethod(this, "sendRequest", Qt::QueuedConnection); } @@ -1506,7 +1506,7 @@ void QHttp2ProtocolHandler::initReplyFromPushPromise(const HttpMessagePair &mess Q_ASSERT(promisedData.contains(cacheKey)); auto promise = promisedData.take(cacheKey); Q_ASSERT(message.second); - message.second->setSpdyWasUsed(true); + message.second->setHttp2WasUsed(true); qCDebug(QT_HTTP2) << "found cached/promised response on stream" << promise.reservedID; diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index fce01bf349..b64e4fde86 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -82,9 +82,6 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host hostName(hostName), port(port), encrypt(encrypt), delayIpv4(true) , activeChannelCount(type == QHttpNetworkConnection::ConnectionTypeHTTP2 || type == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || type == QHttpNetworkConnection::ConnectionTypeSPDY -#endif ? 1 : defaultHttpChannelCount) , channelCount(defaultHttpChannelCount) #ifndef QT_NO_NETWORKPROXY @@ -93,9 +90,9 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host , preConnectRequests(0) , connectionType(type) { - // We allocate all 6 channels even if it's SPDY or HTTP/2 enabled - // connection: in case the protocol negotiation via NPN/ALPN fails, - // we will have normally working HTTP/1.1. + // We allocate all 6 channels even if it's HTTP/2 enabled connection: + // in case the protocol negotiation via NPN/ALPN fails, we will have + // normally working HTTP/1.1. Q_ASSERT(channelCount >= activeChannelCount); channels = new QHttpNetworkConnectionChannel[channelCount]; } @@ -641,10 +638,10 @@ QHttpNetworkReply* QHttpNetworkConnectionPrivate::queueRequest(const QHttpNetwor break; } } - else { // SPDY, HTTP/2 ('h2' mode) + else { // HTTP/2 ('h2' mode) if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(request.priority(), pair); + channels[0].h2RequestsToSend.insert(request.priority(), pair); } #ifndef Q_OS_WINRT @@ -680,7 +677,7 @@ void QHttpNetworkConnectionPrivate::fillHttp2Queue() for (auto &pair : highPriorityQueue) { if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(QHttpNetworkRequest::HighPriority, pair); + channels[0].h2RequestsToSend.insert(QHttpNetworkRequest::HighPriority, pair); } highPriorityQueue.clear(); @@ -688,7 +685,7 @@ void QHttpNetworkConnectionPrivate::fillHttp2Queue() for (auto &pair : lowPriorityQueue) { if (!pair.second->d_func()->requestIsPrepared) prepareRequest(pair); - channels[0].spdyRequestsToSend.insert(pair.first.priority(), pair); + channels[0].h2RequestsToSend.insert(pair.first.priority(), pair); } lowPriorityQueue.clear(); @@ -984,12 +981,12 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) } } #ifndef QT_NO_SSL - // is the reply inside the SPDY pipeline of this channel already? - QMultiMap<int, HttpMessagePair>::iterator it = channels[i].spdyRequestsToSend.begin(); - QMultiMap<int, HttpMessagePair>::iterator end = channels[i].spdyRequestsToSend.end(); + // is the reply inside the H2 pipeline of this channel already? + QMultiMap<int, HttpMessagePair>::iterator it = channels[i].h2RequestsToSend.begin(); + QMultiMap<int, HttpMessagePair>::iterator end = channels[i].h2RequestsToSend.end(); for (; it != end; ++it) { if (it.value().second == reply) { - channels[i].spdyRequestsToSend.remove(it.key()); + channels[i].h2RequestsToSend.remove(it.key()); QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection); return; @@ -1068,9 +1065,8 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() break; } case QHttpNetworkConnection::ConnectionTypeHTTP2Direct: - case QHttpNetworkConnection::ConnectionTypeHTTP2: - case QHttpNetworkConnection::ConnectionTypeSPDY: { - if (channels[0].spdyRequestsToSend.isEmpty() && channels[0].switchedToHttp2) + case QHttpNetworkConnection::ConnectionTypeHTTP2: { + if (channels[0].h2RequestsToSend.isEmpty() && channels[0].switchedToHttp2) return; if (networkLayerState == IPv4) @@ -1079,7 +1075,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() channels[0].networkLayerPreference = QAbstractSocket::IPv6Protocol; channels[0].ensureConnection(); if (channels[0].socket && channels[0].socket->state() == QAbstractSocket::ConnectedState - && !channels[0].pendingEncrypt && channels[0].spdyRequestsToSend.size()) + && !channels[0].pendingEncrypt && channels[0].h2RequestsToSend.size()) channels[0].sendRequest(); break; } @@ -1234,19 +1230,18 @@ void QHttpNetworkConnectionPrivate::_q_hostLookupFinished(const QHostInfo &info) if (dequeueRequest(channels[0].socket)) { emitReplyError(channels[0].socket, channels[0].reply, QNetworkReply::HostNotFoundError); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; - } else if (connectionType == QHttpNetworkConnection::ConnectionTypeSPDY - || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 + } else if (connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { - for (const HttpMessagePair &spdyPair : qAsConst(channels[0].spdyRequestsToSend)) { + for (const HttpMessagePair &h2Pair : qAsConst(channels[0].h2RequestsToSend)) { // emit error for all replies - QHttpNetworkReply *currentReply = spdyPair.second; + QHttpNetworkReply *currentReply = h2Pair.second; Q_ASSERT(currentReply); emitReplyError(channels[0].socket, currentReply, QNetworkReply::HostNotFoundError); } } else { // Should not happen: we start a host lookup before sending a request, - // so it's natural to have requests either in SPDY/HTTP/2 queue, - // or in low/high priority queues. + // so it's natural to have requests either in HTTP/2 queue, or in low/high + // priority queues. qWarning("QHttpNetworkConnectionPrivate::_q_hostLookupFinished" " could not de-queue request, failed to report HostNotFoundError"); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; @@ -1576,17 +1571,12 @@ void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpN pauseConnection(); QHttpNetworkReply *reply; if (connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#if QT_CONFIG(ssl) - || connectionType == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - + || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { // we choose the reply to emit the proxyAuth signal from somewhat arbitrarily, // but that does not matter because the signal will ultimately be emitted // by the QNetworkAccessManager. - Q_ASSERT(chan->spdyRequestsToSend.count() > 0); - reply = chan->spdyRequestsToSend.cbegin().value().second; + Q_ASSERT(chan->h2RequestsToSend.count() > 0); + reply = chan->h2RequestsToSend.cbegin().value().second; } else { // HTTP reply = chan->reply; } diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 845b55bc5d..cfce3ecc00 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -96,7 +96,6 @@ public: enum ConnectionType { ConnectionTypeHTTP, - ConnectionTypeSPDY, ConnectionTypeHTTP2, ConnectionTypeHTTP2Direct }; @@ -172,7 +171,6 @@ private: friend class QHttpNetworkConnectionChannel; friend class QHttp2ProtocolHandler; friend class QHttpProtocolHandler; - friend class QSpdyProtocolHandler; Q_PRIVATE_SLOT(d_func(), void _q_startNextRequest()) Q_PRIVATE_SLOT(d_func(), void _q_hostLookupFinished(QHostInfo)) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 319c4953b1..c1bb19650f 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -48,7 +48,6 @@ #include <private/qhttp2protocolhandler_p.h> #include <private/qhttpprotocolhandler_p.h> -#include <private/qspdyprotocolhandler_p.h> #include <private/http2protocol_p.h> #ifndef QT_NO_SSL @@ -931,7 +930,7 @@ void QHttpNetworkConnectionChannel::_q_connected() } else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { state = QHttpNetworkConnectionChannel::IdleState; protocolHandler.reset(new QHttp2ProtocolHandler(this)); - if (spdyRequestsToSend.count() > 0) { + if (h2RequestsToSend.count() > 0) { // In case our peer has sent us its settings (window size, max concurrent streams etc.) // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection). QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); @@ -1109,15 +1108,11 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket || !connection->d_func()->lowPriorityQueue.isEmpty()); if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit error for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->finishedWithError(errorCode, errorString); } @@ -1144,12 +1139,8 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator* auth) { if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct -#ifndef QT_NO_SSL - || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY -#endif - ) { - if (spdyRequestsToSend.count() > 0) + || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { + if (h2RequestsToSend.count() > 0) connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth); } else { // HTTP // Need to dequeue the request before we can emit the error. @@ -1172,9 +1163,9 @@ void QHttpNetworkConnectionChannel::emitFinishedWithError(QNetworkReply::Network { if (reply) emit reply->finishedWithError(error, QHttpNetworkConnectionChannel::tr(message)); - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->finishedWithError(error, QHttpNetworkConnectionChannel::tr(message)); } @@ -1196,12 +1187,6 @@ void QHttpNetworkConnectionChannel::_q_encrypted() QByteArray nextProtocol = sslSocket->sslConfiguration().nextNegotiatedProtocol(); if (nextProtocol == QSslConfiguration::NextProtocolHttp1_1) { // fall through to create a QHttpProtocolHandler - } else if (nextProtocol == QSslConfiguration::NextProtocolSpdy3_0) { - protocolHandler.reset(new QSpdyProtocolHandler(this)); - connection->setConnectionType(QHttpNetworkConnection::ConnectionTypeSPDY); - // no need to re-queue requests, if SPDY was enabled on the request it - // has gone to the SPDY queue already - break; } else if (nextProtocol == QSslConfiguration::ALPNProtocolHTTP2) { switchedToHttp2 = true; protocolHandler.reset(new QHttp2ProtocolHandler(this)); @@ -1230,8 +1215,6 @@ void QHttpNetworkConnectionChannel::_q_encrypted() // it again on other channels that our connection can create/open. if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2) protocols.removeAll(QSslConfiguration::ALPNProtocolHTTP2); - else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY) - protocols.removeAll(QSslConfiguration::NextProtocolSpdy3_0); if (nProtocols > protocols.size()) { sslConfiguration->setAllowedNextProtocols(protocols); @@ -1241,13 +1224,13 @@ void QHttpNetworkConnectionChannel::_q_encrypted() } connection->setConnectionType(QHttpNetworkConnection::ConnectionTypeHTTP); - // We use only one channel for SPDY or HTTP/2, but normally six for + // We use only one channel for HTTP/2, but normally six for // HTTP/1.1 - let's restore this number to the reserved number of // channels: if (connection->d_func()->activeChannelCount < connection->d_func()->channelCount) { connection->d_func()->activeChannelCount = connection->d_func()->channelCount; - // re-queue requests from SPDY queue to HTTP queue, if any - requeueSpdyRequests(); + // re-queue requests from HTTP/2 queue to HTTP queue, if any + requeueHttp2Requests(); } break; } @@ -1267,11 +1250,9 @@ void QHttpNetworkConnectionChannel::_q_encrypted() state = QHttpNetworkConnectionChannel::IdleState; pendingEncrypt = false; - if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY || - connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 || + if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) { - // we call setSpdyWasUsed(true) on the replies in the SPDY handler when the request is sent - if (spdyRequestsToSend.count() > 0) { + if (h2RequestsToSend.count() > 0) { // In case our peer has sent us its settings (window size, max concurrent streams etc.) // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection). QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); @@ -1280,7 +1261,7 @@ void QHttpNetworkConnectionChannel::_q_encrypted() if (!reply) connection->d_func()->dequeueRequest(socket); if (reply) { - reply->setSpdyWasUsed(false); + reply->setHttp2WasUsed(false); Q_ASSERT(reply->d_func()->connectionChannel == this); emit reply->encrypted(); } @@ -1289,13 +1270,12 @@ void QHttpNetworkConnectionChannel::_q_encrypted() } } -void QHttpNetworkConnectionChannel::requeueSpdyRequests() +void QHttpNetworkConnectionChannel::requeueHttp2Requests() { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { - connection->d_func()->requeueRequest(spdyPairs.at(a)); - } - spdyRequestsToSend.clear(); + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) + connection->d_func()->requeueRequest(h2Pairs.at(a)); + h2RequestsToSend.clear(); } void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) @@ -1313,11 +1293,11 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) emit reply->sslErrors(errors); } #ifndef QT_NO_SSL - else { // SPDY - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + else { // HTTP/2 + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit SSL errors for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->sslErrors(errors); } @@ -1337,10 +1317,10 @@ void QHttpNetworkConnectionChannel::_q_preSharedKeyAuthenticationRequired(QSslPr if (reply) emit reply->preSharedKeyAuthenticationRequired(authenticator); } else { - QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values(); - for (int a = 0; a < spdyPairs.count(); ++a) { + QList<HttpMessagePair> h2Pairs = h2RequestsToSend.values(); + for (int a = 0; a < h2Pairs.count(); ++a) { // emit SSL errors for all replies - QHttpNetworkReply *currentReply = spdyPairs.at(a).second; + QHttpNetworkReply *currentReply = h2Pairs.at(a).second; Q_ASSERT(currentReply); emit currentReply->preSharedKeyAuthenticationRequired(authenticator); } diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index d8ac3979d1..c73c4c3bd5 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -123,10 +123,7 @@ public: bool authenticationCredentialsSent; bool proxyCredentialsSent; QScopedPointer<QAbstractProtocolHandler> protocolHandler; - // SPDY or HTTP/2 requests; SPDY is TLS-only, but - // HTTP/2 can be cleartext also, that's why it's - // outside of QT_NO_SSL section. Sorted by priority: - QMultiMap<int, HttpMessagePair> spdyRequestsToSend; + QMultiMap<int, HttpMessagePair> h2RequestsToSend; bool switchedToHttp2 = false; #ifndef QT_NO_SSL bool ignoreAllSslErrors; @@ -135,7 +132,7 @@ public: void ignoreSslErrors(); void ignoreSslErrors(const QList<QSslError> &errors); void setSslConfiguration(const QSslConfiguration &config); - void requeueSpdyRequests(); // when we wanted SPDY but got HTTP + void requeueHttp2Requests(); // when we wanted HTTP/2 but got HTTP/1.1 #endif // to emit the signal for all in-flight replies: void emitFinishedWithError(QNetworkReply::NetworkError error, const char *message); diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 2024c0fefb..78413062b4 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -292,14 +292,14 @@ bool QHttpNetworkReply::isPipeliningUsed() const return d_func()->pipeliningUsed; } -bool QHttpNetworkReply::isSpdyUsed() const +bool QHttpNetworkReply::isHttp2Used() const { - return d_func()->spdyUsed; + return d_func()->h2Used; } -void QHttpNetworkReply::setSpdyWasUsed(bool spdy) +void QHttpNetworkReply::setHttp2WasUsed(bool h2) { - d_func()->spdyUsed = spdy; + d_func()->h2Used = h2; } qint64 QHttpNetworkReply::removedContentLength() const @@ -329,15 +329,11 @@ QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl) forceConnectionCloseEnabled(false), lastChunkRead(false), currentChunkSize(0), currentChunkRead(0), readBufferMaxSize(0), - windowSizeDownload(65536), // 64K initial window size according to SPDY standard - windowSizeUpload(65536), // 64K initial window size according to SPDY standard - currentlyReceivedDataInWindow(0), - currentlyUploadedDataInWindow(0), totallyUploadedData(0), removedContentLength(-1), connection(nullptr), autoDecompress(false), responseData(), requestIsPrepared(false) - ,pipeliningUsed(false), spdyUsed(false), downstreamLimited(false) + ,pipeliningUsed(false), h2Used(false), downstreamLimited(false) ,userProvidedDownloadBuffer(nullptr) #ifndef QT_NO_COMPRESS ,inflateStrm(nullptr) diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 9c03a403e1..4638d056de 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -139,8 +139,8 @@ public: bool isFinished() const; bool isPipeliningUsed() const; - bool isSpdyUsed() const; - void setSpdyWasUsed(bool spdy); + bool isHttp2Used() const; + void setHttp2WasUsed(bool h2Used); qint64 removedContentLength() const; bool isRedirecting() const; @@ -253,11 +253,7 @@ public: qint64 currentChunkSize; qint64 currentChunkRead; qint64 readBufferMaxSize; - qint32 windowSizeDownload; // only for SPDY - qint32 windowSizeUpload; // only for SPDY - qint32 currentlyReceivedDataInWindow; // only for SPDY - qint32 currentlyUploadedDataInWindow; // only for SPDY - qint64 totallyUploadedData; // only for SPDY + qint64 totallyUploadedData; // HTTP/2 qint64 removedContentLength; QPointer<QHttpNetworkConnection> connection; QPointer<QHttpNetworkConnectionChannel> connectionChannel; @@ -270,7 +266,7 @@ public: bool requestIsPrepared; bool pipeliningUsed; - bool spdyUsed; + bool h2Used; bool downstreamLimited; char* userProvidedDownloadBuffer; diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp index 5fb8885bdf..0b03e6e69e 100644 --- a/src/network/access/qhttpnetworkrequest.cpp +++ b/src/network/access/qhttpnetworkrequest.cpp @@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Operation op, QHttpNetworkRequest::Priority pri, const QUrl &newUrl) : QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(nullptr), - autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false), + autoDecompress(false), pipeliningAllowed(false), http2Allowed(false), http2Direct(false), withCredentials(true), preConnect(false), redirectCount(0), redirectPolicy(QNetworkRequest::ManualRedirectPolicy) { @@ -59,7 +59,6 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest uploadByteDevice(other.uploadByteDevice), autoDecompress(other.autoDecompress), pipeliningAllowed(other.pipeliningAllowed), - spdyAllowed(other.spdyAllowed), http2Allowed(other.http2Allowed), http2Direct(other.http2Direct), withCredentials(other.withCredentials), @@ -83,7 +82,6 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot && (uploadByteDevice == other.uploadByteDevice) && (autoDecompress == other.autoDecompress) && (pipeliningAllowed == other.pipeliningAllowed) - && (spdyAllowed == other.spdyAllowed) && (http2Allowed == other.http2Allowed) && (http2Direct == other.http2Direct) // we do not clear the customVerb in setOperation @@ -339,16 +337,6 @@ void QHttpNetworkRequest::setPipeliningAllowed(bool b) d->pipeliningAllowed = b; } -bool QHttpNetworkRequest::isSPDYAllowed() const -{ - return d->spdyAllowed; -} - -void QHttpNetworkRequest::setSPDYAllowed(bool b) -{ - d->spdyAllowed = b; -} - bool QHttpNetworkRequest::isHTTP2Allowed() const { return d->http2Allowed; diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h index fb4896195b..f263e348ef 100644 --- a/src/network/access/qhttpnetworkrequest_p.h +++ b/src/network/access/qhttpnetworkrequest_p.h @@ -116,9 +116,6 @@ public: bool isPipeliningAllowed() const; void setPipeliningAllowed(bool b); - bool isSPDYAllowed() const; - void setSPDYAllowed(bool b); - bool isHTTP2Allowed() const; void setHTTP2Allowed(bool b); @@ -176,7 +173,6 @@ public: mutable QNonContiguousByteDevice* uploadByteDevice; bool autoDecompress; bool pipeliningAllowed; - bool spdyAllowed; bool http2Allowed; bool http2Direct; bool withCredentials; diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index dcc8c9337e..fa03bf7a11 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -236,7 +236,7 @@ QHttpThreadDelegate::QHttpThreadDelegate(QObject *parent) : , synchronous(false) , incomingStatusCode(0) , isPipeliningUsed(false) - , isSpdyUsed(false) + , isHttp2Used(false) , incomingContentLength(-1) , removedContentLength(-1) , incomingErrorCode(QNetworkReply::NoError) @@ -320,17 +320,6 @@ void QHttpThreadDelegate::startRequest() } } -#ifndef QT_NO_SSL - if (!isH2 && httpRequest.isSPDYAllowed() && ssl) { - connectionType = QHttpNetworkConnection::ConnectionTypeSPDY; - urlCopy.setScheme(QStringLiteral("spdy")); // to differentiate SPDY requests from HTTPS requests - QList<QByteArray> nextProtocols; - nextProtocols << QSslConfiguration::NextProtocolSpdy3_0 - << QSslConfiguration::NextProtocolHttp1_1; - incomingSslConfiguration->setAllowedNextProtocols(nextProtocols); - } -#endif // QT_NO_SSL - #ifndef QT_NO_NETWORKPROXY if (transparentProxy.type() != QNetworkProxy::NoProxy) cacheKey = makeCacheKey(urlCopy, &transparentProxy, httpRequest.peerVerifyName()); @@ -658,7 +647,7 @@ void QHttpThreadDelegate::headerChangedSlot() isPipeliningUsed = httpReply->isPipeliningUsed(); incomingContentLength = httpReply->contentLength(); removedContentLength = httpReply->removedContentLength(); - isSpdyUsed = httpReply->isSpdyUsed(); + isHttp2Used = httpReply->isHttp2Used(); emit downloadMetaData(incomingHeaders, incomingStatusCode, @@ -667,7 +656,7 @@ void QHttpThreadDelegate::headerChangedSlot() downloadBuffer, incomingContentLength, removedContentLength, - isSpdyUsed); + isHttp2Used); } void QHttpThreadDelegate::synchronousHeaderChangedSlot() @@ -683,7 +672,7 @@ void QHttpThreadDelegate::synchronousHeaderChangedSlot() incomingStatusCode = httpReply->statusCode(); incomingReasonPhrase = httpReply->reasonPhrase(); isPipeliningUsed = httpReply->isPipeliningUsed(); - isSpdyUsed = httpReply->isSpdyUsed(); + isHttp2Used = httpReply->isHttp2Used(); incomingContentLength = httpReply->contentLength(); } diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h index a5272fc15c..8a197b0b98 100644 --- a/src/network/access/qhttpthreaddelegate_p.h +++ b/src/network/access/qhttpthreaddelegate_p.h @@ -112,7 +112,7 @@ public: int incomingStatusCode; QString incomingReasonPhrase; bool isPipeliningUsed; - bool isSpdyUsed; + bool isHttp2Used; qint64 incomingContentLength; qint64 removedContentLength; QNetworkReply::NetworkError incomingErrorCode; diff --git a/src/network/access/qnetworkaccesscache.cpp b/src/network/access/qnetworkaccesscache.cpp index ba092f2618..4d65761a0b 100644 --- a/src/network/access/qnetworkaccesscache.cpp +++ b/src/network/access/qnetworkaccesscache.cpp @@ -121,8 +121,9 @@ void QNetworkAccessCache::clear() NodeHash::Iterator it = hashCopy.begin(); NodeHash::Iterator end = hashCopy.end(); for ( ; it != end; ++it) { - it->object->key.clear(); - it->object->dispose(); + (*it)->object->key.clear(); + (*it)->object->dispose(); + delete (*it); } // now delete: @@ -139,11 +140,10 @@ void QNetworkAccessCache::clear() */ void QNetworkAccessCache::linkEntry(const QByteArray &key) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) + Node * const node = hash.value(key); + if (!node) return; - Node *const node = &it.value(); Q_ASSERT(node != oldest && node != newest); Q_ASSERT(node->older == nullptr && node->newer == nullptr); Q_ASSERT(node->useCount == 0); @@ -168,12 +168,10 @@ void QNetworkAccessCache::linkEntry(const QByteArray &key) */ bool QNetworkAccessCache::unlinkEntry(const QByteArray &key) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) + Node * const node = hash.value(key); + if (!node) return false; - Node *const node = &it.value(); - bool wasOldest = false; if (node == oldest) { oldest = node->newer; @@ -230,6 +228,7 @@ void QNetworkAccessCache::timerEvent(QTimerEvent *) oldest->object->dispose(); hash.remove(oldest->key); // oldest gets deleted + delete oldest; oldest = next; } @@ -249,16 +248,20 @@ void QNetworkAccessCache::addEntry(const QByteArray &key, CacheableObject *entry if (unlinkEntry(key)) updateTimer(); - Node &node = hash[key]; // create the entry in the hash if it didn't exist - if (node.useCount) - qWarning("QNetworkAccessCache::addEntry: overriding active cache entry '%s'", - key.constData()); - if (node.object) - node.object->dispose(); - node.object = entry; - node.object->key = key; - node.key = key; - node.useCount = 1; + Node *node = hash.value(key); + if (!node) { + node = new Node; + hash.insert(key, node); + } + + if (node->useCount) + qWarning("QNetworkAccessCache::addEntry: overriding active cache entry '%s'", key.constData()); + if (node->object) + node->object->dispose(); + node->object = entry; + node->object->key = key; + node->key = key; + node->useCount = 1; } bool QNetworkAccessCache::hasEntry(const QByteArray &key) const @@ -268,11 +271,9 @@ bool QNetworkAccessCache::hasEntry(const QByteArray &key) const bool QNetworkAccessCache::requestEntry(const QByteArray &key, QObject *target, const char *member) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) - return false; // no such entry - - Node *node = &it.value(); + Node *node = hash.value(key); + if (!node) + return false; if (node->useCount > 0 && !node->object->shareable) { // object is not shareable and is in use @@ -294,13 +295,14 @@ bool QNetworkAccessCache::requestEntry(const QByteArray &key, QObject *target, c QNetworkAccessCache::CacheableObject *QNetworkAccessCache::requestEntryNow(const QByteArray &key) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) + Node *node = hash.value(key); + if (!node) return nullptr; - if (it->useCount > 0) { - if (it->object->shareable) { - ++it->useCount; - return it->object; + + if (node->useCount > 0) { + if (node->object->shareable) { + ++node->useCount; + return node->object; } // object in use and not shareable @@ -309,23 +311,21 @@ QNetworkAccessCache::CacheableObject *QNetworkAccessCache::requestEntryNow(const // entry not in use, let the caller have it bool wasOldest = unlinkEntry(key); - ++it->useCount; + ++node->useCount; if (wasOldest) updateTimer(); - return it->object; + return node->object; } void QNetworkAccessCache::releaseEntry(const QByteArray &key) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) { - qWarning("QNetworkAccessCache::releaseEntry: trying to release key '%s' that is not in cache", - key.constData()); + Node *node = hash.value(key); + if (!node) { + qWarning("QNetworkAccessCache::releaseEntry: trying to release key '%s' that is not in cache", key.constData()); return; } - Node *node = &it.value(); Q_ASSERT(node->useCount > 0); // are there other objects waiting? @@ -356,14 +356,12 @@ void QNetworkAccessCache::releaseEntry(const QByteArray &key) void QNetworkAccessCache::removeEntry(const QByteArray &key) { - NodeHash::Iterator it = hash.find(key); - if (it == hash.end()) { - qWarning("QNetworkAccessCache::removeEntry: trying to remove key '%s' that is not in cache", - key.constData()); + Node *node = hash.value(key); + if (!node) { + qWarning("QNetworkAccessCache::removeEntry: trying to remove key '%s' that is not in cache", key.constData()); return; } - Node *node = &it.value(); if (unlinkEntry(key)) updateTimer(); if (node->useCount > 1) @@ -372,6 +370,7 @@ void QNetworkAccessCache::removeEntry(const QByteArray &key) node->object->key.clear(); hash.remove(node->key); + delete node; } QT_END_NAMESPACE diff --git a/src/network/access/qnetworkaccesscache_p.h b/src/network/access/qnetworkaccesscache_p.h index 69ea649a8a..9f7001d044 100644 --- a/src/network/access/qnetworkaccesscache_p.h +++ b/src/network/access/qnetworkaccesscache_p.h @@ -71,7 +71,7 @@ class QNetworkAccessCache: public QObject Q_OBJECT public: struct Node; - typedef QHash<QByteArray, Node> NodeHash; + typedef QHash<QByteArray, Node *> NodeHash; class CacheableObject { diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index e7e6e6b1a4..bafbbb8fae 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1230,12 +1230,10 @@ void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quin if (sslConfiguration != QSslConfiguration::defaultConfiguration()) request.setSslConfiguration(sslConfiguration); - // There is no way to enable SPDY/HTTP2 via a request, so we need to check - // the ssl configuration whether SPDY/HTTP2 is allowed here. + // There is no way to enable HTTP2 via a request, so we need to check + // the ssl configuration whether HTTP2 is allowed here. if (sslConfiguration.allowedNextProtocols().contains(QSslConfiguration::ALPNProtocolHTTP2)) request.setAttribute(QNetworkRequest::Http2AllowedAttribute, true); - else if (sslConfiguration.allowedNextProtocols().contains(QSslConfiguration::NextProtocolSpdy3_0)) - request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true); request.setPeerVerifyName(peerName); get(request); diff --git a/src/network/access/qnetworkaccessmanager.h b/src/network/access/qnetworkaccessmanager.h index 6f7f90ce14..db843b2ee7 100644 --- a/src/network/access/qnetworkaccessmanager.h +++ b/src/network/access/qnetworkaccessmanager.h @@ -56,7 +56,6 @@ class QIODevice; class QAbstractNetworkCache; class QAuthenticator; class QByteArray; -template<typename T> class QList; class QNetworkCookie; class QNetworkCookieJar; class QNetworkReply; diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 2a9d281256..bb65660ba8 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -775,9 +775,6 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq if (newHttpRequest.attribute(QNetworkRequest::HttpPipeliningAllowedAttribute).toBool()) httpRequest.setPipeliningAllowed(true); - if (request.attribute(QNetworkRequest::SpdyAllowedAttribute).toBool()) - httpRequest.setSPDYAllowed(true); - if (request.attribute(QNetworkRequest::Http2AllowedAttribute).toBool()) httpRequest.setHTTP2Allowed(true); @@ -969,7 +966,7 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq QSharedPointer<char>(), delegate->incomingContentLength, delegate->removedContentLength, - delegate->isSpdyUsed); + delegate->isHttp2Used); replyDownloadData(delegate->synchronousDownloadData); httpError(delegate->incomingErrorCode, delegate->incomingErrorDetail); } else { @@ -981,7 +978,7 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq QSharedPointer<char>(), delegate->incomingContentLength, delegate->removedContentLength, - delegate->isSpdyUsed); + delegate->isHttp2Used); replyDownloadData(delegate->synchronousDownloadData); } @@ -1256,7 +1253,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte QSharedPointer<char> db, qint64 contentLength, qint64 removedContentLength, - bool spdyWasUsed) + bool h2Used) { Q_Q(QNetworkReplyHttpImpl); Q_UNUSED(contentLength); @@ -1282,16 +1279,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte } q->setAttribute(QNetworkRequest::HttpPipeliningWasUsedAttribute, pu); - const QVariant http2Allowed = request.attribute(QNetworkRequest::Http2AllowedAttribute); - const QVariant http2Direct = request.attribute(QNetworkRequest::Http2DirectAttribute); - if ((http2Allowed.isValid() && http2Allowed.toBool()) - || (http2Direct.isValid() && http2Direct.toBool())) { - q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, spdyWasUsed); - q->setAttribute(QNetworkRequest::SpdyWasUsedAttribute, false); - } else { - q->setAttribute(QNetworkRequest::SpdyWasUsedAttribute, spdyWasUsed); - q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, false); - } + q->setAttribute(QNetworkRequest::Http2WasUsedAttribute, h2Used); // reconstruct the HTTP header QList<QPair<QByteArray, QByteArray> > headerMap = hm; diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 6cd56499c5..33526bb7d5 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -272,18 +272,6 @@ QT_BEGIN_NAMESPACE The QNetworkSession ConnectInBackground property will be set according to this attribute. - \value SpdyAllowedAttribute - Requests only, type: QMetaType::Bool (default: false) - Indicates whether the QNetworkAccessManager code is - allowed to use SPDY with this request. This applies only - to SSL requests, and depends on the server supporting SPDY. - Obsolete, use Http2 instead of Spdy. - - \value SpdyWasUsedAttribute - Replies only, type: QMetaType::Bool - Indicates whether SPDY was used for receiving - this reply. Obsolete, use Http2 instead of Spdy. - \value Http2AllowedAttribute Requests only, type: QMetaType::Bool (default: false) Indicates whether the QNetworkAccessManager code is @@ -295,12 +283,6 @@ QT_BEGIN_NAMESPACE Indicates whether HTTP/2 was used for receiving this reply. (This value was introduced in 5.9.) - \value HTTP2AllowedAttribute - Obsolete alias for Http2AllowedAttribute. - - \value HTTP2WasUsedAttribute - Obsolete alias for Http2WasUsedAttribute. - \value EmitAllUploadProgressSignalsAttribute Requests only, type: QMetaType::Bool (default: false) Indicates whether all upload signals should be emitted. diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h index 66b9a43e01..035b5b378a 100644 --- a/src/network/access/qnetworkrequest.h +++ b/src/network/access/qnetworkrequest.h @@ -89,18 +89,10 @@ public: DownloadBufferAttribute, // internal SynchronousRequestAttribute, // internal BackgroundRequestAttribute, -#if QT_DEPRECATED_SINCE(5, 15) - SpdyAllowedAttribute, - SpdyWasUsedAttribute, -#endif // QT_DEPRECATED_SINCE(5, 15) EmitAllUploadProgressSignalsAttribute = BackgroundRequestAttribute + 3, FollowRedirectsAttribute, Http2AllowedAttribute, Http2WasUsedAttribute, -#if QT_DEPRECATED_SINCE(5, 15) - HTTP2AllowedAttribute Q_DECL_ENUMERATOR_DEPRECATED_X("Use Http2AllowedAttribute") = Http2AllowedAttribute, - HTTP2WasUsedAttribute Q_DECL_ENUMERATOR_DEPRECATED_X("Use Http2WasUsedAttribute"), -#endif // QT_DEPRECATED_SINCE(5, 15) OriginalContentLengthAttribute, RedirectPolicyAttribute, Http2DirectAttribute, diff --git a/src/network/access/qspdyprotocolhandler_p.h b/src/network/access/qspdyprotocolhandler_p.h deleted file mode 100644 index 14e2ff388a..0000000000 --- a/src/network/access/qspdyprotocolhandler_p.h +++ /dev/null @@ -1,232 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 BlackBerry Limited. All rights reserved. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSPDYPROTOCOLHANDLER_H -#define QSPDYPROTOCOLHANDLER_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the Network Access API. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// - -#include <QtNetwork/private/qtnetworkglobal_p.h> -#include <private/qabstractprotocolhandler_p.h> -#include <QtNetwork/qnetworkreply.h> -#include <private/qbytedata_p.h> - -#include <zlib.h> - -QT_REQUIRE_CONFIG(http); - -#if !defined(QT_NO_SSL) - -QT_BEGIN_NAMESPACE - -class QHttpNetworkRequest; - -#ifndef HttpMessagePair -typedef QPair<QHttpNetworkRequest, QHttpNetworkReply*> HttpMessagePair; -#endif - -class QSpdyProtocolHandler : public QObject, public QAbstractProtocolHandler { - Q_OBJECT -public: - QSpdyProtocolHandler(QHttpNetworkConnectionChannel *channel); - ~QSpdyProtocolHandler(); - - enum DataFrameFlag { - DataFrame_FLAG_FIN = 0x01, - DataFrame_FLAG_COMPRESS = 0x02 - }; - - Q_DECLARE_FLAGS(DataFrameFlags, DataFrameFlag) - - enum ControlFrameFlag { - ControlFrame_FLAG_FIN = 0x01, - ControlFrame_FLAG_UNIDIRECTIONAL = 0x02 - }; - - Q_DECLARE_FLAGS(ControlFrameFlags, ControlFrameFlag) - - enum SETTINGS_Flag { - FLAG_SETTINGS_CLEAR_SETTINGS = 0x01 - }; - - Q_DECLARE_FLAGS(SETTINGS_Flags, SETTINGS_Flag) - - enum SETTINGS_ID_Flag { - FLAG_SETTINGS_PERSIST_VALUE = 0x01, - FLAG_SETTINGS_PERSISTED = 0x02 - }; - - Q_DECLARE_FLAGS(SETTINGS_ID_Flags, SETTINGS_ID_Flag) - - virtual void _q_receiveReply() override; - virtual void _q_readyRead() override; - virtual bool sendRequest() override; - -private slots: - void _q_uploadDataReadyRead(); - void _q_replyDestroyed(QObject*); - void _q_uploadDataDestroyed(QObject *); - -private: - - enum FrameType { - FrameType_SYN_STREAM = 1, - FrameType_SYN_REPLY = 2, - FrameType_RST_STREAM = 3, - FrameType_SETTINGS = 4, - FrameType_PING = 6, - FrameType_GOAWAY = 7, - FrameType_HEADERS = 8, - FrameType_WINDOW_UPDATE = 9, - FrameType_CREDENTIAL // has a special type - }; - - enum StatusCode { - StatusCode_PROTOCOL_ERROR = 1, - StatusCode_INVALID_STREAM = 2, - StatusCode_REFUSED_STREAM = 3, - StatusCode_UNSUPPORTED_VERSION = 4, - StatusCode_CANCEL = 5, - StatusCode_INTERNAL_ERROR = 6, - StatusCode_FLOW_CONTROL_ERROR = 7, - StatusCode_STREAM_IN_USE = 8, - StatusCode_STREAM_ALREADY_CLOSED = 9, - StatusCode_INVALID_CREDENTIALS = 10, - StatusCode_FRAME_TOO_LARGE = 11 - }; - - enum SETTINGS_ID { - SETTINGS_UPLOAD_BANDWIDTH = 1, - SETTINGS_DOWNLOAD_BANDWIDTH = 2, - SETTINGS_ROUND_TRIP_TIME = 3, - SETTINGS_MAX_CONCURRENT_STREAMS = 4, - SETTINGS_CURRENT_CWND = 5, - SETTINGS_DOWNLOAD_RETRANS_RATE = 6, - SETTINGS_INITIAL_WINDOW_SIZE = 7, - SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE = 8 - }; - - enum GOAWAY_STATUS { - GOAWAY_OK = 0, - GOAWAY_PROTOCOL_ERROR = 1, - GOAWAY_INTERNAL_ERROR = 11 - }; - - enum RST_STREAM_STATUS_CODE { - RST_STREAM_PROTOCOL_ERROR = 1, - RST_STREAM_INVALID_STREAM = 2, - RST_STREAM_REFUSED_STREAM = 3, - RST_STREAM_UNSUPPORTED_VERSION = 4, - RST_STREAM_CANCEL = 5, - RST_STREAM_INTERNAL_ERROR = 6, - RST_STREAM_FLOW_CONTROL_ERROR = 7, - RST_STREAM_STREAM_IN_USE = 8, - RST_STREAM_STREAM_ALREADY_CLOSED = 9, - RST_STREAM_INVALID_CREDENTIALS = 10, - RST_STREAM_FRAME_TOO_LARGE = 11 - }; - - quint64 bytesAvailable() const; - bool readNextChunk(qint64 length, char *sink); - - void sendControlFrame(FrameType type, ControlFrameFlags flags, const char *data, quint32 length); - - void sendSYN_STREAM(const HttpMessagePair &pair, qint32 streamID, - qint32 associatedToStreamID); - void sendRST_STREAM(qint32 streamID, RST_STREAM_STATUS_CODE statusCode); - void sendPING(quint32 pingID); - - bool uploadData(qint32 streamID); - Q_INVOKABLE void sendWINDOW_UPDATE(qint32 streamID, quint32 deltaWindowSize); - - qint64 sendDataFrame(qint32 streamID, DataFrameFlags flags, quint32 length, - const char *data); - - QByteArray composeHeader(const QHttpNetworkRequest &request); - bool uncompressHeader(const QByteArray &input, QByteArray *output); - - void handleControlFrame(const QByteArray &frameHeaders); - void handleDataFrame(const QByteArray &frameHeaders); - - void handleSYN_STREAM(char, quint32, const QByteArray &frameData); - void handleSYN_REPLY(char flags, quint32, const QByteArray &frameData); - void handleRST_STREAM(char flags, quint32 length, const QByteArray &frameData); - void handleSETTINGS(char flags, quint32 length, const QByteArray &frameData); - void handlePING(char, quint32 length, const QByteArray &frameData); - void handleGOAWAY(char flags, quint32, const QByteArray &frameData); - void handleHEADERS(char flags, quint32, const QByteArray &frameData); - void handleWINDOW_UPDATE(char, quint32, const QByteArray &frameData); - - qint32 generateNextStreamID(); - void parseHttpHeaders(char flags, const QByteArray &frameData); - - void replyFinished(QHttpNetworkReply *httpReply, qint32 streamID); - void replyFinishedWithError(QHttpNetworkReply *httpReply, qint32 streamID, - QNetworkReply::NetworkError errorCode, const char *errorMessage); - - qint32 m_nextStreamID; - QHash<quint32, HttpMessagePair> m_inFlightStreams; - qint32 m_maxConcurrentStreams; - quint32 m_initialWindowSize; - QByteDataBuffer m_spdyBuffer; - bool m_waitingForCompleteStream; - z_stream m_deflateStream; - z_stream m_inflateStream; - QHash<QObject *, qint32> m_streamIDs; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::DataFrameFlags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::ControlFrameFlags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::SETTINGS_Flags) -Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::SETTINGS_ID_Flags) - -QT_END_NAMESPACE - -#endif // !defined(QT_NO_SSL) - -#endif // QSPDYPROTOCOLHANDLER_H diff --git a/src/network/bearer/bearer.pri b/src/network/bearer/bearer.pri index d58d5ec168..bcb7a5971e 100644 --- a/src/network/bearer/bearer.pri +++ b/src/network/bearer/bearer.pri @@ -6,11 +6,14 @@ HEADERS += bearer/qnetworkconfiguration.h \ bearer/qnetworkconfigmanager_p.h \ bearer/qnetworkconfiguration_p.h \ bearer/qnetworksession_p.h \ + bearer/qnetworksession_impl_p.h \ bearer/qbearerengine_p.h \ + bearer/qbearerengine_impl_p.h \ bearer/qbearerplugin_p.h \ bearer/qsharednetworksession_p.h SOURCES += bearer/qnetworksession.cpp \ + bearer/qnetworksession_impl.cpp \ bearer/qnetworkconfigmanager.cpp \ bearer/qnetworkconfiguration.cpp \ bearer/qnetworkconfigmanager_p.cpp \ diff --git a/src/network/bearer/qbearerengine_impl_p.h b/src/network/bearer/qbearerengine_impl_p.h new file mode 100644 index 0000000000..4221b73276 --- /dev/null +++ b/src/network/bearer/qbearerengine_impl_p.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBEARERENGINE_IMPL_H +#define QBEARERENGINE_IMPL_H + +#include <QtNetwork/private/qbearerengine_p.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +class Q_NETWORK_EXPORT QBearerEngineImpl : public QBearerEngine +{ + Q_OBJECT + +public: + enum ConnectionError { + InterfaceLookupError = 0, + ConnectError, + OperationNotSupported, + DisconnectionError, + }; + + QBearerEngineImpl(QObject *parent = nullptr) : QBearerEngine(parent) {} + ~QBearerEngineImpl() {} + + virtual void connectToId(const QString &id) = 0; + virtual void disconnectFromId(const QString &id) = 0; + + virtual QString getInterfaceFromId(const QString &id) = 0; + + virtual QNetworkSession::State sessionStateForId(const QString &id) = 0; + + virtual quint64 bytesWritten(const QString &) { return Q_UINT64_C(0); } + virtual quint64 bytesReceived(const QString &) { return Q_UINT64_C(0); } + virtual quint64 startTime(const QString &) { return Q_UINT64_C(0); } + +Q_SIGNALS: + void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); +}; + +QT_END_NAMESPACE + +Q_DECLARE_METATYPE(QBearerEngineImpl::ConnectionError) + +#endif // QT_NO_BEARERMANAGEMENT + +#endif // QBEARERENGINE_IMPL_H diff --git a/src/network/bearer/qnetworksession_impl.cpp b/src/network/bearer/qnetworksession_impl.cpp new file mode 100644 index 0000000000..45a00b45fd --- /dev/null +++ b/src/network/bearer/qnetworksession_impl.cpp @@ -0,0 +1,439 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// see comment in ../platformdefs_win.h. +#define WIN32_LEAN_AND_MEAN 1 + +#include "qnetworksession_impl_p.h" +#include "qbearerengine_impl_p.h" + +#include <QtNetwork/qnetworksession.h> +#include <QtNetwork/private/qnetworkconfigmanager_p.h> + +#include <QtCore/qdatetime.h> +#include <QtCore/qdebug.h> +#include <QtCore/qmutex.h> +#include <QtCore/qstringlist.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +static QBearerEngineImpl *getEngineFromId(const QString &id) +{ + QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); + if (priv) { + const auto engines = priv->engines(); + for (QBearerEngine *engine : engines) { + QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine); + if (engineImpl && engineImpl->hasIdentifier(id)) + return engineImpl; + } + } + + return nullptr; +} + +class QNetworkSessionManagerPrivate : public QObject +{ + Q_OBJECT + +public: + QNetworkSessionManagerPrivate(QObject *parent = nullptr) : QObject(parent) {} + ~QNetworkSessionManagerPrivate() {} + + inline void forceSessionClose(const QNetworkConfiguration &config) + { emit forcedSessionClose(config); } + +Q_SIGNALS: + void forcedSessionClose(const QNetworkConfiguration &config); +}; + +Q_GLOBAL_STATIC(QNetworkSessionManagerPrivate, sessionManager); + +void QNetworkSessionPrivateImpl::syncStateWithInterface() +{ + connect(sessionManager(), SIGNAL(forcedSessionClose(QNetworkConfiguration)), + this, SLOT(forcedSessionClose(QNetworkConfiguration))); + + opened = false; + isOpen = false; + state = QNetworkSession::Invalid; + lastError = QNetworkSession::UnknownSessionError; + + qRegisterMetaType<QBearerEngineImpl::ConnectionError>(); + + switch (publicConfig.type()) { + case QNetworkConfiguration::InternetAccessPoint: + activeConfig = publicConfig; + engine = getEngineFromId(activeConfig.identifier()); + if (engine) { + qRegisterMetaType<QNetworkConfigurationPrivatePointer>(); + connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)), + this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)), + Qt::QueuedConnection); + connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), + Qt::QueuedConnection); + } + break; + case QNetworkConfiguration::ServiceNetwork: + serviceConfig = publicConfig; + // Defer setting engine and signals until open(). + Q_FALLTHROUGH(); + case QNetworkConfiguration::UserChoice: + // Defer setting serviceConfig and activeConfig until open(). + Q_FALLTHROUGH(); + default: + engine = nullptr; + } + + networkConfigurationsChanged(); +} + +void QNetworkSessionPrivateImpl::open() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else if (!isOpen) { + if ((activeConfig.state() & QNetworkConfiguration::Discovered) != QNetworkConfiguration::Discovered) { + lastError = QNetworkSession::InvalidConfigurationError; + state = QNetworkSession::Invalid; + emit stateChanged(state); + emit QNetworkSessionPrivate::error(lastError); + return; + } + opened = true; + + if ((activeConfig.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active && + (activeConfig.state() & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { + state = QNetworkSession::Connecting; + emit stateChanged(state); + + engine->connectToId(activeConfig.identifier()); + } + + isOpen = (activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active; + if (isOpen) + emit quitPendingWaitsForOpened(); + } +} + +void QNetworkSessionPrivateImpl::close() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else if (isOpen) { + opened = false; + isOpen = false; + emit closed(); + } +} + +void QNetworkSessionPrivateImpl::stop() +{ + if (serviceConfig.isValid()) { + lastError = QNetworkSession::OperationNotSupportedError; + emit QNetworkSessionPrivate::error(lastError); + } else { + if ((activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { + state = QNetworkSession::Closing; + emit stateChanged(state); + + engine->disconnectFromId(activeConfig.identifier()); + + sessionManager()->forceSessionClose(activeConfig); + } + + opened = false; + isOpen = false; + emit closed(); + } +} + +void QNetworkSessionPrivateImpl::migrate() +{ +} + +void QNetworkSessionPrivateImpl::accept() +{ +} + +void QNetworkSessionPrivateImpl::ignore() +{ +} + +void QNetworkSessionPrivateImpl::reject() +{ +} + +#ifndef QT_NO_NETWORKINTERFACE +QNetworkInterface QNetworkSessionPrivateImpl::currentInterface() const +{ + if (!engine || state != QNetworkSession::Connected || !publicConfig.isValid()) + return QNetworkInterface(); + + QString iface = engine->getInterfaceFromId(activeConfig.identifier()); + if (iface.isEmpty()) + return QNetworkInterface(); + return QNetworkInterface::interfaceFromName(iface); +} +#endif + +QVariant QNetworkSessionPrivateImpl::sessionProperty(const QString &key) const +{ + if (key == QLatin1String("AutoCloseSessionTimeout")) { + if (engine && engine->requiresPolling() && + !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { + return sessionTimeout >= 0 ? sessionTimeout * 10000 : -1; + } + } + + return QVariant(); +} + +void QNetworkSessionPrivateImpl::setSessionProperty(const QString &key, const QVariant &value) +{ + if (key == QLatin1String("AutoCloseSessionTimeout")) { + if (engine && engine->requiresPolling() && + !(engine->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces)) { + int timeout = value.toInt(); + if (timeout >= 0) { + connect(engine, SIGNAL(updateCompleted()), + this, SLOT(decrementTimeout()), Qt::UniqueConnection); + sessionTimeout = timeout / 10000; // convert to poll intervals + } else { + disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); + sessionTimeout = -1; + } + } + } +} + +QString QNetworkSessionPrivateImpl::errorString() const +{ + switch (lastError) { + case QNetworkSession::UnknownSessionError: + return tr("Unknown session error."); + case QNetworkSession::SessionAbortedError: + return tr("The session was aborted by the user or system."); + case QNetworkSession::OperationNotSupportedError: + return tr("The requested operation is not supported by the system."); + case QNetworkSession::InvalidConfigurationError: + return tr("The specified configuration cannot be used."); + case QNetworkSession::RoamingError: + return tr("Roaming was aborted or is not possible."); + default: + break; + } + + return QString(); +} + +QNetworkSession::SessionError QNetworkSessionPrivateImpl::error() const +{ + return lastError; +} + +quint64 QNetworkSessionPrivateImpl::bytesWritten() const +{ + if (engine && state == QNetworkSession::Connected) + return engine->bytesWritten(activeConfig.identifier()); + return Q_UINT64_C(0); +} + +quint64 QNetworkSessionPrivateImpl::bytesReceived() const +{ + if (engine && state == QNetworkSession::Connected) + return engine->bytesReceived(activeConfig.identifier()); + return Q_UINT64_C(0); +} + +quint64 QNetworkSessionPrivateImpl::activeTime() const +{ + if (state == QNetworkSession::Connected && startTime != Q_UINT64_C(0)) + return QDateTime::currentSecsSinceEpoch() - startTime; + return Q_UINT64_C(0); +} + +QNetworkSession::UsagePolicies QNetworkSessionPrivateImpl::usagePolicies() const +{ + return currentPolicies; +} + +void QNetworkSessionPrivateImpl::setUsagePolicies(QNetworkSession::UsagePolicies newPolicies) +{ + if (newPolicies != currentPolicies) { + currentPolicies = newPolicies; + emit usagePoliciesChanged(currentPolicies); + } +} + +void QNetworkSessionPrivateImpl::updateStateFromServiceNetwork() +{ + QNetworkSession::State oldState = state; + + const auto configs = serviceConfig.children(); + for (const QNetworkConfiguration &config : configs) { + if ((config.state() & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) + continue; + + if (activeConfig != config) { + if (engine) { + disconnect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError))); + } + + activeConfig = config; + engine = getEngineFromId(activeConfig.identifier()); + + if (engine) { + connect(engine, SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), + this, SLOT(connectionError(QString,QBearerEngineImpl::ConnectionError)), + Qt::QueuedConnection); + } + emit newConfigurationActivated(); + } + + state = QNetworkSession::Connected; + if (state != oldState) + emit stateChanged(state); + + return; + } + + if (serviceConfig.children().isEmpty()) + state = QNetworkSession::NotAvailable; + else + state = QNetworkSession::Disconnected; + + if (state != oldState) + emit stateChanged(state); +} + +void QNetworkSessionPrivateImpl::updateStateFromActiveConfig() +{ + if (!engine) + return; + + QNetworkSession::State oldState = state; + state = engine->sessionStateForId(activeConfig.identifier()); + + bool oldActive = isOpen; + isOpen = (state == QNetworkSession::Connected) ? opened : false; + + if (!oldActive && isOpen) + emit quitPendingWaitsForOpened(); + if (oldActive && !isOpen) + emit closed(); + + if (oldState != state) + emit stateChanged(state); +} + +void QNetworkSessionPrivateImpl::networkConfigurationsChanged() +{ + if (serviceConfig.isValid()) + updateStateFromServiceNetwork(); + else + updateStateFromActiveConfig(); + + if (engine) + startTime = engine->startTime(activeConfig.identifier()); +} + +void QNetworkSessionPrivateImpl::configurationChanged(QNetworkConfigurationPrivatePointer config) +{ + if (serviceConfig.isValid() && + (config->id == serviceConfig.identifier() || config->id == activeConfig.identifier())) { + updateStateFromServiceNetwork(); + } else if (config->id == activeConfig.identifier()) { + updateStateFromActiveConfig(); + } +} + +void QNetworkSessionPrivateImpl::forcedSessionClose(const QNetworkConfiguration &config) +{ + if (activeConfig == config) { + opened = false; + isOpen = false; + + emit closed(); + + lastError = QNetworkSession::SessionAbortedError; + emit QNetworkSessionPrivate::error(lastError); + } +} + +void QNetworkSessionPrivateImpl::connectionError(const QString &id, QBearerEngineImpl::ConnectionError error) +{ + if (activeConfig.identifier() == id) { + networkConfigurationsChanged(); + switch (error) { + case QBearerEngineImpl::OperationNotSupported: + lastError = QNetworkSession::OperationNotSupportedError; + opened = false; + break; + case QBearerEngineImpl::InterfaceLookupError: + case QBearerEngineImpl::ConnectError: + case QBearerEngineImpl::DisconnectionError: + default: + lastError = QNetworkSession::UnknownSessionError; + } + + emit QNetworkSessionPrivate::error(lastError); + } +} + +void QNetworkSessionPrivateImpl::decrementTimeout() +{ + if (--sessionTimeout <= 0) { + disconnect(engine, SIGNAL(updateCompleted()), this, SLOT(decrementTimeout())); + sessionTimeout = -1; + close(); + } +} + +QT_END_NAMESPACE + +#include "qnetworksession_impl.moc" + +#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/network/bearer/qnetworksession_impl_p.h b/src/network/bearer/qnetworksession_impl_p.h new file mode 100644 index 0000000000..b174760152 --- /dev/null +++ b/src/network/bearer/qnetworksession_impl_p.h @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNETWORKSESSION_IMPL_H +#define QNETWORKSESSION_IMPL_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qbearerengine_impl_p.h" + +#include <QtNetwork/private/qnetworkconfigmanager_p.h> +#include <QtNetwork/private/qnetworksession_p.h> + +#ifndef QT_NO_BEARERMANAGEMENT + +QT_BEGIN_NAMESPACE + +class QBearerEngineImpl; + +class Q_NETWORK_EXPORT QNetworkSessionPrivateImpl : public QNetworkSessionPrivate +{ + Q_OBJECT + +public: + QNetworkSessionPrivateImpl() + : engine(nullptr), startTime(0), lastError(QNetworkSession::UnknownSessionError), sessionTimeout(-1), currentPolicies(QNetworkSession::NoPolicy), opened(false) + {} + ~QNetworkSessionPrivateImpl() + {} + + //called by QNetworkSession constructor and ensures + //that the state is immediately updated (w/o actually opening + //a session). Also this function should take care of + //notification hooks to discover future state changes. + void syncStateWithInterface() override; + +#ifndef QT_NO_NETWORKINTERFACE + QNetworkInterface currentInterface() const override; +#endif + QVariant sessionProperty(const QString& key) const override; + void setSessionProperty(const QString& key, const QVariant& value) override; + + void open() override; + void close() override; + void stop() override; + void migrate() override; + void accept() override; + void ignore() override; + void reject() override; + + QString errorString() const override; //must return translated string + QNetworkSession::SessionError error() const override; + + quint64 bytesWritten() const override; + quint64 bytesReceived() const override; + quint64 activeTime() const override; + + QNetworkSession::UsagePolicies usagePolicies() const override; + void setUsagePolicies(QNetworkSession::UsagePolicies) override; + +private Q_SLOTS: + void networkConfigurationsChanged(); + void configurationChanged(QNetworkConfigurationPrivatePointer config); + void forcedSessionClose(const QNetworkConfiguration &config); + void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); + void decrementTimeout(); + +private: + void updateStateFromServiceNetwork(); + void updateStateFromActiveConfig(); + +private: + QBearerEngineImpl *engine; + + quint64 startTime; + + QNetworkSession::SessionError lastError; + + int sessionTimeout; + QNetworkSession::UsagePolicies currentPolicies; + + bool opened; +}; + +QT_END_NAMESPACE + +#endif // QT_NO_BEARERMANAGEMENT + +#endif // QNETWORKSESSION_IMPL_H diff --git a/src/network/configure.cmake b/src/network/configure.cmake new file mode 100644 index 0000000000..086acc5e72 --- /dev/null +++ b/src/network/configure.cmake @@ -0,0 +1,453 @@ + + +#### Inputs + + + +#### Libraries + +qt_find_package(Libproxy PROVIDED_TARGETS PkgConfig::Libproxy) +qt_find_package(OpenSSL PROVIDED_TARGETS OpenSSL::SSL) +# openssl_headers +qt_config_compile_test(openssl_headers + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L +# error OpenSSL >= 1.1.0 is required +#endif +#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) +# error OpenSSL was reported as >= 1.1.0 but is missing required features, possibly it's libressl which is unsupported +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ + + /* END TEST: */ + return 0; +} +") + +qt_find_package(OpenSSL PROVIDED_TARGETS OpenSSL::SSL) +# openssl +qt_config_compile_test(openssl + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#include <openssl/opensslv.h> +#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L +# error OpenSSL >= 1.1.0 is required +#endif +#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES) +# error OpenSSL was reported as >= 1.1.0 but is missing required features, possibly it's libressl which is unsupported +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +SSL_free(SSL_new(0)); + /* END TEST: */ + return 0; +} +") + +qt_find_package(GSSAPI PROVIDED_TARGETS GSSAPI::GSSAPI) + + +#### Tests + +# getifaddrs +qt_config_compile_test(getifaddrs + LABEL "getifaddrs()" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <ifaddrs.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +ifaddrs *list; +getifaddrs(&list); +freeifaddrs(list); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# ipv6ifname +qt_config_compile_test(ipv6ifname + LABEL "IPv6 ifname" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +char buf[IFNAMSIZ]; +if_nametoindex(\"eth0\"); +if_indextoname(1, buf); +if_freenameindex(if_nameindex()); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# linux-netlink +qt_config_compile_test(linux_netlink + LABEL "Linux AF_NETLINK sockets" + CODE +" +#include <asm/types.h> +#include <linux/netlink.h> +#include <linux/rtnetlink.h> +#include <sys/socket.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +struct rtattr rta = { }; +struct ifinfomsg ifi = {}; +struct ifaddrmsg ifa = {}; +struct ifa_cacheinfo ci; +ci.ifa_prefered = ci.ifa_valid = 0; +(void)RTM_NEWLINK; (void)RTM_NEWADDR; +(void)IFLA_ADDRESS; (void)IFLA_IFNAME; +(void)IFA_ADDRESS; (void)IFA_LABEL; (void)IFA_CACHEINFO; +(void)(IFA_F_SECONDARY | IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR); + /* END TEST: */ + return 0; +} +") + +# sctp +qt_config_compile_test(sctp + LABEL "SCTP support" + CODE +" +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netinet/sctp.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +sctp_initmsg sctpInitMsg; +socklen_t sctpInitMsgSize = sizeof(sctpInitMsg); +(void) socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP); +(void) getsockopt(-1, SOL_SCTP, SCTP_INITMSG, &sctpInitMsg, &sctpInitMsgSize); + /* END TEST: */ + return 0; +} +"# FIXME: use: unmapped library: network +) + +# dtls +qt_config_compile_test(dtls + LABEL "DTLS support in OpenSSL" + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#if defined(OPENSSL_NO_DTLS) || !defined(DTLS1_2_VERSION) +# error OpenSSL without DTLS support +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ + + /* END TEST: */ + return 0; +} +") + +# ocsp +qt_config_compile_test(ocsp + LABEL "OCSP stapling support in OpenSSL" + LIBRARIES + OpenSSL::SSL + CODE +" +#include <openssl/ssl.h> +#include <openssl/ocsp.h> +#if defined(OPENSSL_NO_OCSP) || defined(OPENSSL_NO_TLSEXT) +# error OpenSSL without OCSP stapling +#endif +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ + + /* END TEST: */ + return 0; +} +") + +# netlistmgr +qt_config_compile_test(netlistmgr + LABEL "Network List Manager" + CODE +" +#include <netlistmgr.h> +#include <wrl/client.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +using namespace Microsoft::WRL; +ComPtr<INetworkListManager> networkListManager; +ComPtr<IConnectionPoint> connectionPoint; +ComPtr<IConnectionPointContainer> connectionPointContainer; +networkListManager.As(&connectionPointContainer); +connectionPointContainer->FindConnectionPoint(IID_INetworkConnectionEvents, &connectionPoint); + /* END TEST: */ + return 0; +} +"# FIXME: qmake: LIBS += -lOle32 +) + + + +#### Features + +qt_feature("corewlan" PUBLIC PRIVATE + LABEL "CoreWLan" + CONDITION libs.corewlan OR FIXME + EMIT_IF APPLE +) +qt_feature_definition("corewlan" "QT_NO_COREWLAN" NEGATE VALUE "1") +qt_feature("getifaddrs" PUBLIC + LABEL "getifaddrs()" + CONDITION TEST_getifaddrs +) +qt_feature_definition("getifaddrs" "QT_NO_GETIFADDRS" NEGATE VALUE "1") +qt_feature("ipv6ifname" PUBLIC + LABEL "IPv6 ifname" + CONDITION TEST_ipv6ifname +) +qt_feature_definition("ipv6ifname" "QT_NO_IPV6IFNAME" NEGATE VALUE "1") +qt_feature("libproxy" PRIVATE + LABEL "libproxy" + AUTODETECT OFF + CONDITION Libproxy_FOUND +) +qt_feature("linux-netlink" PRIVATE + LABEL "Linux AF_NETLINK" + CONDITION LINUX AND TEST_linux_netlink +) +qt_feature("openssl" PRIVATE + LABEL "OpenSSL" + CONDITION QT_FEATURE_openssl_runtime OR QT_FEATURE_openssl_linked + ENABLE false +) +qt_feature_definition("openssl" "QT_NO_OPENSSL" NEGATE) +qt_feature_config("openssl" QMAKE_PUBLIC_QT_CONFIG) +qt_feature("openssl-runtime" + AUTODETECT NOT WINRT AND NOT WASM + CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND TEST_openssl_headers + ENABLE INPUT_openssl STREQUAL 'yes' OR INPUT_openssl STREQUAL 'runtime' + DISABLE INPUT_openssl STREQUAL 'no' OR INPUT_openssl STREQUAL 'linked' OR INPUT_ssl STREQUAL 'no' +) +qt_feature("openssl-linked" PRIVATE + LABEL " Qt directly linked to OpenSSL" + AUTODETECT OFF + CONDITION NOT QT_FEATURE_securetransport AND NOT QT_FEATURE_schannel AND TEST_openssl + ENABLE INPUT_openssl STREQUAL 'linked' +) +qt_feature_definition("openssl-linked" "QT_LINKED_OPENSSL") +qt_feature("securetransport" PUBLIC + LABEL "SecureTransport" + CONDITION APPLE AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' ) + DISABLE INPUT_securetransport STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' +) +qt_feature_definition("securetransport" "QT_SECURETRANSPORT") +qt_feature("schannel" PUBLIC + LABEL "Schannel" + CONDITION INPUT_schannel STREQUAL 'yes' AND WIN32 AND NOT WINRT AND ( INPUT_openssl STREQUAL '' OR INPUT_openssl STREQUAL 'no' ) + DISABLE INPUT_schannel STREQUAL 'no' OR INPUT_ssl STREQUAL 'no' +) +qt_feature_definition("schannel" "QT_SCHANNEL") +qt_feature("ssl" PUBLIC + LABEL "SSL" + CONDITION WINRT OR QT_FEATURE_securetransport OR QT_FEATURE_openssl OR QT_FEATURE_schannel +) +qt_feature_definition("ssl" "QT_NO_SSL" NEGATE VALUE "1") +qt_feature("dtls" PUBLIC + SECTION "Networking" + LABEL "DTLS" + PURPOSE "Provides a DTLS implementation" + CONDITION QT_FEATURE_openssl AND QT_FEATURE_udpsocket AND TEST_dtls +) +qt_feature("ocsp" PUBLIC + SECTION "Networking" + LABEL "OCSP-stapling" + PURPOSE "Provides OCSP stapling support" + CONDITION QT_FEATURE_opensslv11 AND TEST_ocsp +) +qt_feature("opensslv11" PUBLIC + LABEL "OpenSSL 1.1" + CONDITION QT_FEATURE_openssl +) +qt_feature("sctp" PUBLIC + LABEL "SCTP" + AUTODETECT OFF + CONDITION TEST_sctp +) +qt_feature_definition("sctp" "QT_NO_SCTP" NEGATE VALUE "1") +qt_feature("system-proxies" PRIVATE + LABEL "Use system proxies" +) +qt_feature("ftp" PUBLIC + SECTION "Networking" + LABEL "FTP" + PURPOSE "Provides support for the File Transfer Protocol in QNetworkAccessManager." + AUTODETECT OFF + CONDITION QT_FEATURE_textdate +) +qt_feature_definition("ftp" "QT_NO_FTP" NEGATE VALUE "1") +qt_feature("http" PUBLIC + SECTION "Networking" + LABEL "HTTP" + PURPOSE "Provides support for the Hypertext Transfer Protocol in QNetworkAccessManager." + CONDITION QT_FEATURE_thread +) +qt_feature_definition("http" "QT_NO_HTTP" NEGATE VALUE "1") +qt_feature("udpsocket" PUBLIC + SECTION "Networking" + LABEL "QUdpSocket" + PURPOSE "Provides access to UDP sockets." +) +qt_feature_definition("udpsocket" "QT_NO_UDPSOCKET" NEGATE VALUE "1") +qt_feature("networkproxy" PUBLIC + SECTION "Networking" + LABEL "QNetworkProxy" + PURPOSE "Provides network proxy support." +) +qt_feature_definition("networkproxy" "QT_NO_NETWORKPROXY" NEGATE VALUE "1") +qt_feature("socks5" PUBLIC + SECTION "Networking" + LABEL "SOCKS5" + PURPOSE "Provides SOCKS5 support in QNetworkProxy." + CONDITION QT_FEATURE_networkproxy +) +qt_feature_definition("socks5" "QT_NO_SOCKS5" NEGATE VALUE "1") +qt_feature("networkinterface" PUBLIC + SECTION "Networking" + LABEL "QNetworkInterface" + PURPOSE "Supports enumerating a host's IP addresses and network interfaces." + CONDITION NOT WASM +) +qt_feature_definition("networkinterface" "QT_NO_NETWORKINTERFACE" NEGATE VALUE "1") +qt_feature("networkdiskcache" PUBLIC + SECTION "Networking" + LABEL "QNetworkDiskCache" + PURPOSE "Provides a disk cache for network resources." + CONDITION QT_FEATURE_temporaryfile +) +qt_feature_definition("networkdiskcache" "QT_NO_NETWORKDISKCACHE" NEGATE VALUE "1") +qt_feature("bearermanagement" PUBLIC + SECTION "Networking" + LABEL "Bearer management (deprecated)" + PURPOSE "Provides bearer management for the network stack." + CONDITION QT_FEATURE_thread AND QT_FEATURE_library AND QT_FEATURE_networkinterface AND QT_FEATURE_properties +) +qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE VALUE "1") +qt_feature_definition("bearermanagement" "QT_NO_BEARERMANAGEMENT" NEGATE) +qt_feature("localserver" PUBLIC + SECTION "Networking" + LABEL "QLocalServer" + PURPOSE "Provides a local socket based server." + CONDITION QT_FEATURE_temporaryfile +) +qt_feature_definition("localserver" "QT_NO_LOCALSERVER" NEGATE VALUE "1") +qt_feature("dnslookup" PUBLIC + SECTION "Networking" + LABEL "QDnsLookup" + PURPOSE "Provides API for DNS lookups." +) +qt_feature("gssapi" PUBLIC + SECTION "Networking" + LABEL "GSSAPI" + PURPOSE "Enable SPNEGO authentication through GSSAPI" + CONDITION NOT WIN32 AND GSSAPI_FOUND +) +qt_feature_definition("gssapi" "QT_NO_GSSAPI" NEGATE VALUE "1") +qt_feature("sspi" PUBLIC + SECTION "Networking" + LABEL "SSPI" + PURPOSE "Enable NTLM/SPNEGO authentication through SSPI" + CONDITION WIN32 AND NOT WINRT +) +qt_feature_definition("sspi" "QT_NO_SSPI" NEGATE VALUE "1") +qt_feature("netlistmgr" PRIVATE + SECTION "Networking" + LABEL "Network List Manager" + PURPOSE "Use Network List Manager to keep track of network connectivity" + CONDITION WIN32 AND TEST_netlistmgr +) +qt_feature("topleveldomain" PUBLIC + SECTION "Networking" + LABEL "qTopLevelDomain()" + PURPOSE "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie." +) +qt_configure_add_summary_section(NAME "Qt Network") +qt_configure_add_summary_entry( + ARGS "corewlan" + CONDITION APPLE +) +qt_configure_add_summary_entry(ARGS "getifaddrs") +qt_configure_add_summary_entry(ARGS "ipv6ifname") +qt_configure_add_summary_entry(ARGS "libproxy") +qt_configure_add_summary_entry( + ARGS "linux-netlink" + CONDITION LINUX +) +qt_configure_add_summary_entry( + ARGS "securetransport" + CONDITION APPLE +) +qt_configure_add_summary_entry( + ARGS "schannel" + CONDITION WIN32 AND NOT WINRT +) +qt_configure_add_summary_entry(ARGS "openssl") +qt_configure_add_summary_entry(ARGS "openssl-linked") +qt_configure_add_summary_entry(ARGS "opensslv11") +qt_configure_add_summary_entry(ARGS "dtls") +qt_configure_add_summary_entry(ARGS "ocsp") +qt_configure_add_summary_entry(ARGS "ftp") +qt_configure_add_summary_entry(ARGS "sctp") +qt_configure_add_summary_entry(ARGS "system-proxies") +qt_configure_add_summary_entry(ARGS "gssapi") +qt_configure_end_summary_section() # end of "Qt Network" section +qt_configure_add_report_entry( + TYPE NOTE + MESSAGE "When linking against OpenSSL, you can override the default library names through OPENSSL_LIBS. For example: OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked" + CONDITION NOT ANDROID AND QT_FEATURE_openssl_linked AND OpenSSL_FOUND.source NOT = 0 AND INPUT_openssl.prefix STREQUAL '' AND INPUT_openssl.libs STREQUAL '' AND INPUT_openssl.libs.debug STREQUAL '' OR FIXME +) +qt_configure_add_report_entry( + TYPE WARNING + MESSAGE "Some of libproxy's plugins may use incompatible Qt versions. Some platforms and distributions ship libproxy with plugins, such as config_kde4.so, that are linked against old versions of Qt, and libproxy loads these plugins automatically when initialized. If Qt is not in a namespace, that loading causes a crash. Even if the systems on which you build and test have no such plugins, your users' systems may have them. We therefore recommend that you combine -libproxy with -qtnamespace when configuring Qt." + CONDITION QT_FEATURE_libproxy AND INPUT_qt_namespace STREQUAL '' +) diff --git a/src/network/configure.json b/src/network/configure.json index d3e5009f45..d6be41128a 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -343,6 +343,7 @@ "label": "FTP", "purpose": "Provides support for the File Transfer Protocol in QNetworkAccessManager.", "section": "Networking", + "autoDetect": false, "condition": "features.textdate", "output": [ "publicFeature", "feature" ] }, @@ -430,6 +431,12 @@ "section": "Networking", "condition": "config.win32 && tests.netlistmgr", "output": [ "privateFeature" ] + }, + "topleveldomain": { + "label": "qTopLevelDomain()", + "purpose": "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.", + "section": "Networking", + "output": [ "publicFeature" ] } }, @@ -446,15 +453,7 @@ For example: { "type": "warning", "condition": "features.libproxy && input.qt_namespace == ''", - "message": "Some of libproxy's plugins may use incompatible Qt versions. - - Some platforms and distributions ship libproxy with plugins, such - as config_kde4.so, that are linked against old versions of Qt; and - libproxy loads these plugins automatically when initialized. If Qt - is not in a namespace, that loading causes a crash. Even if the - systems on which you build and test have no such plugins, your - users' systems may have them. We therefore recommend that you - combine -libproxy with -qtnamespace when configuring Qt." + "message": "Some of libproxy's plugins may use incompatible Qt versions. Some platforms and distributions ship libproxy with plugins, such as config_kde4.so, that are linked against old versions of Qt; and libproxy loads these plugins automatically when initialized. If Qt is not in a namespace, that loading causes a crash. Even if the systems on which you build and test have no such plugins, your users' systems may have them. We therefore recommend that you combine -libproxy with -qtnamespace when configuring Qt." } ], @@ -488,6 +487,7 @@ For example: "opensslv11", "dtls", "ocsp", + "ftp", "sctp", "system-proxies", "gssapi" diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri index 110d9f56bf..7dd5b1d97e 100644 --- a/src/network/kernel/kernel.pri +++ b/src/network/kernel/kernel.pri @@ -26,6 +26,13 @@ SOURCES += kernel/qauthenticator.cpp \ kernel/qnetworkinterface.cpp \ kernel/qnetworkproxy.cpp + +qtConfig(topleveldomain) { + HEADERS += kernel/qurltlds_p.h \ + kernel/qtldurl_p.h + SOURCES += kernel/qtldurl.cpp +} + qtConfig(ftp) { HEADERS += kernel/qurlinfo_p.h SOURCES += kernel/qurlinfo.cpp diff --git a/src/network/kernel/qnetworkinterface.h b/src/network/kernel/qnetworkinterface.h index 4caedaa38f..c65ea58860 100644 --- a/src/network/kernel/qnetworkinterface.h +++ b/src/network/kernel/qnetworkinterface.h @@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE class QDeadlineTimer; -template<typename T> class QList; class QNetworkAddressEntryPrivate; class Q_NETWORK_EXPORT QNetworkAddressEntry diff --git a/src/network/kernel/qtldurl.cpp b/src/network/kernel/qtldurl.cpp new file mode 100644 index 0000000000..c2f7d1de26 --- /dev/null +++ b/src/network/kernel/qtldurl.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qglobal.h> + +#include <QtNetwork/private/qtnetworkglobal_p.h> + +#if QT_CONFIG(topleveldomain) + +#include "qplatformdefs.h" +#include "qurl.h" +#include "private/qurltlds_p.h" +#include "private/qtldurl_p.h" +#include "QtCore/qstring.h" +#include "QtCore/qvector.h" + +QT_BEGIN_NAMESPACE + +enum TLDMatchType { + ExactMatch, + SuffixMatch, + ExceptionMatch, +}; + +static bool containsTLDEntry(QStringView entry, TLDMatchType match) +{ + const QStringView matchSymbols[] = { + u"", + u"*", + u"!", + }; + const auto symbol = matchSymbols[match]; + int index = qt_hash(entry, qt_hash(symbol)) % tldCount; + + // select the right chunk from the big table + short chunk = 0; + uint chunkIndex = tldIndices[index], offset = 0; + while (chunk < tldChunkCount && tldIndices[index] >= tldChunks[chunk]) { + chunkIndex -= tldChunks[chunk]; + offset += tldChunks[chunk]; + chunk++; + } + + // check all the entries from the given index + while (chunkIndex < tldIndices[index+1] - offset) { + const auto utf8 = tldData[chunk] + chunkIndex; + if ((symbol.isEmpty() || QLatin1Char(*utf8) == symbol) && entry == QString::fromUtf8(utf8 + symbol.size())) + return true; + chunkIndex += qstrlen(utf8) + 1; // +1 for the ending \0 + } + return false; +} + +/*! + \internal + + Return the top-level-domain per Qt's copy of the Mozilla public suffix list of + \a domain. +*/ + +Q_NETWORK_EXPORT QString qTopLevelDomain(const QString &domain) +{ + const QString domainLower = domain.toLower(); + QVector<QStringRef> sections = domainLower.splitRef(QLatin1Char('.'), Qt::SkipEmptyParts); + if (sections.isEmpty()) + return QString(); + + QString level, tld; + for (int j = sections.count() - 1; j >= 0; --j) { + level.prepend(QLatin1Char('.') + sections.at(j)); + if (qIsEffectiveTLD(level.rightRef(level.size() - 1))) + tld = level; + } + return tld; +} + +/*! + \internal + + Return true if \a domain is a top-level-domain per Qt's copy of the Mozilla public suffix list. +*/ + +Q_NETWORK_EXPORT bool qIsEffectiveTLD(const QStringRef &domain) +{ + // for domain 'foo.bar.com': + // 1. return if TLD table contains 'foo.bar.com' + // 2. else if table contains '*.bar.com', + // 3. test that table does not contain '!foo.bar.com' + + if (containsTLDEntry(domain, ExactMatch)) // 1 + return true; + + const int dot = domain.indexOf(QLatin1Char('.')); + if (dot < 0) // Actual TLD: may be effective if the subject of a wildcard rule: + return containsTLDEntry(QString(QLatin1Char('.') + domain), SuffixMatch); + if (containsTLDEntry(domain.mid(dot), SuffixMatch)) // 2 + return !containsTLDEntry(domain, ExceptionMatch); // 3 + return false; +} + +QT_END_NAMESPACE + +#endif diff --git a/src/network/kernel/qtldurl_p.h b/src/network/kernel/qtldurl_p.h new file mode 100644 index 0000000000..a6948cfd48 --- /dev/null +++ b/src/network/kernel/qtldurl_p.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTLDURL_P_H +#define QTLDURL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qDecodeDataUrl. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtNetwork/private/qtnetworkglobal_p.h> +#include "QtCore/qurl.h" +#include "QtCore/qstring.h" + +QT_REQUIRE_CONFIG(topleveldomain); + +QT_BEGIN_NAMESPACE + +Q_NETWORK_EXPORT QString qTopLevelDomain(const QString &domain); +Q_NETWORK_EXPORT bool qIsEffectiveTLD(const QStringRef &domain); +inline bool qIsEffectiveTLD(const QString &domain) +{ + return qIsEffectiveTLD(QStringRef(&domain)); +} + +QT_END_NAMESPACE + +#endif // QDATAURL_P_H diff --git a/src/network/kernel/qurltlds_p.h b/src/network/kernel/qurltlds_p.h new file mode 100644 index 0000000000..1257c0e6e1 --- /dev/null +++ b/src/network/kernel/qurltlds_p.h @@ -0,0 +1,14467 @@ +// License: MPL 2.0/GPL 2.0/LGPL 3 +// +// The contents of this file are subject to the Mozilla Public License Version +// 2.0 (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the +// License. +// +// The Original Code is the Public Suffix List. +// +// The Initial Developer of the Original Code is +// Jo Hermans <jo.hermans@gmail.com>. +// Portions created by the Initial Developer are Copyright (C) 2007 +// the Initial Developer. All Rights Reserved. +// +// Contributor(s): +// Ruben Arakelyan <ruben@wackomenace.co.uk> +// Gervase Markham <gerv@gerv.net> +// Pamela Greene <pamg.bugs@gmail.com> +// David Triendl <david@triendl.name> +// Jothan Frakes <jothan@gmail.com> +// The kind representatives of many TLD registries +// +// Alternatively, the contents of this file may be used under the terms of +// either the GNU General Public License Version 2 or later (the "GPL"), or +// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +// in which case the provisions of the GPL or the LGPL are applicable instead +// of those above. If you wish to allow use of your version of this file only +// under the terms of either the GPL or the LGPL, and not to allow others to +// use your version of this file under the terms of the MPL, indicate your +// decision by deleting the provisions above and replace them with the notice +// and other provisions required by the GPL or the LGPL. If you do not delete +// the provisions above, a recipient may use your version of this file under +// the terms of any one of the MPL, the GPL or the LGPL. +// + +#ifndef QURLTLD_P_H +#define QURLTLD_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access and Core framework. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#include <QtNetwork/private/qtnetworkglobal_p.h> + +QT_BEGIN_NAMESPACE + +// note to maintainer: +// this file should be updated before each release -> +// for instructions see the program at +// util/corelib/qurl-generateTLDs/ + +static const quint16 tldCount = 8830; +static const quint32 tldIndices[] = { +0, +16, +28, +45, +45, +45, +78, +78, +106, +128, +169, +202, +220, +237, +237, +260, +260, +270, +270, +281, +302, +302, +302, +302, +328, +337, +369, +369, +382, +382, +396, +409, +422, +422, +422, +422, +439, +454, +472, +506, +506, +506, +506, +552, +552, +565, +565, +570, +604, +604, +604, +604, +618, +636, +641, +656, +656, +656, +660, +670, +670, +670, +674, +674, +707, +714, +768, +792, +815, +821, +873, +873, +883, +883, +893, +893, +893, +893, +899, +899, +909, +917, +925, +949, +949, +962, +962, +962, +975, +1011, +1011, +1048, +1064, +1064, +1064, +1071, +1085, +1085, +1113, +1149, +1157, +1157, +1157, +1176, +1176, +1176, +1176, +1191, +1212, +1217, +1228, +1256, +1256, +1256, +1274, +1274, +1301, +1354, +1386, +1386, +1430, +1450, +1450, +1450, +1450, +1450, +1472, +1472, +1491, +1491, +1500, +1500, +1531, +1531, +1539, +1551, +1561, +1588, +1588, +1603, +1620, +1640, +1640, +1650, +1650, +1680, +1680, +1680, +1680, +1680, +1685, +1704, +1704, +1704, +1710, +1722, +1722, +1722, +1732, +1732, +1754, +1754, +1769, +1791, +1803, +1803, +1803, +1809, +1809, +1845, +1866, +1900, +1912, +1912, +1919, +1935, +1935, +1944, +1944, +1944, +1944, +1951, +1970, +1970, +1998, +1998, +2012, +2017, +2017, +2017, +2022, +2030, +2030, +2036, +2060, +2065, +2065, +2088, +2118, +2157, +2177, +2177, +2177, +2193, +2202, +2219, +2219, +2219, +2219, +2219, +2229, +2229, +2229, +2229, +2229, +2229, +2238, +2238, +2238, +2238, +2238, +2238, +2238, +2252, +2273, +2291, +2291, +2295, +2295, +2308, +2308, +2308, +2313, +2353, +2353, +2353, +2353, +2378, +2378, +2397, +2397, +2402, +2416, +2434, +2459, +2466, +2473, +2491, +2513, +2513, +2513, +2518, +2526, +2526, +2541, +2557, +2566, +2566, +2583, +2599, +2610, +2610, +2625, +2643, +2643, +2676, +2711, +2711, +2728, +2728, +2738, +2738, +2746, +2746, +2759, +2792, +2792, +2812, +2812, +2820, +2831, +2831, +2837, +2864, +2884, +2915, +2919, +2919, +2919, +2925, +2932, +2960, +2960, +2964, +2983, +3007, +3037, +3046, +3046, +3062, +3071, +3092, +3100, +3100, +3143, +3143, +3143, +3167, +3167, +3167, +3167, +3167, +3174, +3183, +3192, +3201, +3221, +3221, +3253, +3269, +3286, +3310, +3310, +3324, +3336, +3336, +3336, +3336, +3352, +3391, +3391, +3420, +3426, +3441, +3441, +3441, +3448, +3466, +3466, +3481, +3493, +3526, +3526, +3551, +3558, +3558, +3583, +3583, +3583, +3583, +3620, +3620, +3620, +3626, +3646, +3646, +3690, +3729, +3736, +3736, +3776, +3798, +3818, +3836, +3857, +3857, +3880, +3880, +3890, +3908, +3908, +3908, +3917, +3933, +3933, +3933, +3955, +3955, +3968, +3982, +3999, +3999, +4006, +4024, +4059, +4059, +4059, +4075, +4092, +4092, +4108, +4138, +4138, +4138, +4138, +4138, +4165, +4171, +4177, +4184, +4202, +4222, +4222, +4238, +4261, +4268, +4268, +4287, +4293, +4306, +4312, +4326, +4383, +4401, +4413, +4448, +4453, +4476, +4512, +4522, +4559, +4575, +4575, +4575, +4575, +4575, +4593, +4652, +4652, +4652, +4652, +4675, +4685, +4685, +4696, +4727, +4739, +4739, +4746, +4746, +4767, +4779, +4799, +4799, +4805, +4805, +4812, +4812, +4826, +4846, +4846, +4862, +4868, +4887, +4887, +4887, +4887, +4887, +4915, +4933, +4950, +4968, +4972, +4985, +4985, +4985, +4985, +4997, +5003, +5003, +5019, +5019, +5028, +5053, +5059, +5059, +5059, +5059, +5078, +5078, +5091, +5124, +5151, +5180, +5220, +5220, +5239, +5263, +5274, +5274, +5288, +5303, +5313, +5330, +5347, +5384, +5384, +5401, +5407, +5423, +5423, +5423, +5429, +5451, +5474, +5496, +5518, +5530, +5540, +5540, +5562, +5591, +5597, +5597, +5614, +5618, +5647, +5657, +5657, +5657, +5679, +5696, +5696, +5705, +5712, +5735, +5735, +5764, +5764, +5764, +5764, +5764, +5772, +5776, +5791, +5806, +5812, +5833, +5853, +5873, +5873, +5891, +5903, +5916, +5916, +5916, +5936, +5954, +5964, +5964, +5975, +5975, +5985, +6020, +6043, +6056, +6056, +6056, +6067, +6067, +6077, +6077, +6083, +6092, +6101, +6111, +6132, +6149, +6155, +6159, +6159, +6217, +6226, +6226, +6226, +6286, +6286, +6286, +6298, +6336, +6336, +6336, +6392, +6392, +6401, +6425, +6433, +6444, +6466, +6483, +6493, +6493, +6505, +6516, +6540, +6547, +6547, +6564, +6564, +6604, +6604, +6604, +6612, +6612, +6633, +6633, +6633, +6660, +6681, +6681, +6681, +6681, +6699, +6756, +6768, +6799, +6817, +6817, +6838, +6838, +6838, +6853, +6875, +6875, +6875, +6887, +6887, +6893, +6893, +6893, +6933, +6933, +6940, +6947, +6969, +6983, +6983, +6983, +6983, +7017, +7017, +7024, +7024, +7042, +7051, +7058, +7058, +7066, +7066, +7066, +7092, +7092, +7092, +7092, +7092, +7116, +7132, +7132, +7139, +7172, +7205, +7205, +7217, +7217, +7217, +7225, +7225, +7225, +7236, +7247, +7258, +7258, +7265, +7276, +7317, +7322, +7362, +7382, +7382, +7382, +7387, +7387, +7387, +7387, +7387, +7387, +7415, +7474, +7486, +7486, +7495, +7511, +7524, +7549, +7581, +7591, +7591, +7591, +7591, +7598, +7598, +7634, +7643, +7668, +7668, +7675, +7697, +7697, +7697, +7706, +7773, +7804, +7814, +7814, +7828, +7828, +7828, +7828, +7848, +7848, +7865, +7884, +7899, +7906, +7924, +7924, +7955, +8003, +8020, +8034, +8073, +8073, +8073, +8073, +8073, +8073, +8073, +8083, +8098, +8120, +8137, +8144, +8144, +8175, +8186, +8186, +8210, +8217, +8217, +8217, +8217, +8244, +8249, +8249, +8249, +8249, +8267, +8267, +8267, +8267, +8280, +8280, +8280, +8302, +8330, +8357, +8357, +8388, +8424, +8424, +8444, +8451, +8468, +8484, +8500, +8500, +8500, +8518, +8518, +8518, +8518, +8518, +8544, +8563, +8582, +8592, +8592, +8607, +8627, +8654, +8723, +8723, +8744, +8744, +8763, +8811, +8811, +8811, +8824, +8846, +8891, +8909, +8939, +8939, +8939, +8974, +8984, +8996, +8996, +8996, +9003, +9023, +9035, +9052, +9052, +9052, +9062, +9075, +9075, +9093, +9093, +9106, +9112, +9112, +9142, +9155, +9159, +9159, +9159, +9166, +9173, +9187, +9217, +9239, +9256, +9256, +9277, +9302, +9302, +9322, +9341, +9353, +9353, +9353, +9366, +9370, +9382, +9382, +9382, +9382, +9382, +9401, +9401, +9415, +9427, +9448, +9483, +9500, +9551, +9582, +9582, +9582, +9594, +9625, +9635, +9645, +9674, +9701, +9701, +9701, +9731, +9743, +9753, +9803, +9820, +9820, +9820, +9820, +9846, +9861, +9873, +9873, +9873, +9897, +9904, +9920, +9928, +9928, +9928, +9950, +9950, +9950, +9950, +9950, +9950, +9950, +9965, +9984, +9984, +9991, +9991, +10010, +10054, +10061, +10061, +10061, +10061, +10061, +10061, +10115, +10115, +10122, +10126, +10126, +10126, +10126, +10137, +10137, +10143, +10143, +10170, +10170, +10186, +10186, +10186, +10186, +10186, +10186, +10186, +10193, +10201, +10201, +10201, +10216, +10225, +10225, +10262, +10269, +10284, +10305, +10352, +10370, +10379, +10399, +10399, +10399, +10399, +10399, +10410, +10430, +10436, +10436, +10436, +10464, +10464, +10464, +10475, +10492, +10513, +10513, +10522, +10541, +10551, +10569, +10575, +10599, +10599, +10618, +10618, +10618, +10641, +10641, +10641, +10641, +10641, +10659, +10659, +10677, +10677, +10713, +10713, +10713, +10756, +10771, +10785, +10801, +10819, +10837, +10837, +10837, +10841, +10841, +10863, +10882, +10882, +10898, +10898, +10905, +10905, +10905, +10905, +10915, +10915, +10919, +10928, +10948, +10970, +10980, +10992, +10992, +11002, +11002, +11002, +11018, +11018, +11043, +11043, +11043, +11060, +11067, +11086, +11104, +11109, +11109, +11109, +11147, +11147, +11178, +11185, +11185, +11194, +11194, +11194, +11199, +11199, +11236, +11261, +11261, +11270, +11333, +11343, +11343, +11354, +11354, +11354, +11354, +11366, +11366, +11401, +11401, +11401, +11401, +11422, +11445, +11445, +11445, +11445, +11471, +11478, +11500, +11500, +11500, +11504, +11516, +11524, +11560, +11560, +11566, +11578, +11578, +11578, +11610, +11610, +11632, +11632, +11643, +11643, +11643, +11643, +11652, +11652, +11652, +11697, +11720, +11724, +11745, +11761, +11772, +11808, +11808, +11823, +11863, +11883, +11883, +11896, +11896, +11908, +11930, +11936, +11942, +11942, +11987, +12003, +12029, +12029, +12049, +12068, +12083, +12083, +12121, +12121, +12121, +12132, +12136, +12136, +12136, +12136, +12136, +12148, +12148, +12163, +12170, +12170, +12188, +12202, +12208, +12208, +12213, +12225, +12242, +12242, +12242, +12264, +12264, +12297, +12312, +12335, +12335, +12344, +12375, +12375, +12384, +12406, +12406, +12406, +12406, +12406, +12406, +12406, +12406, +12412, +12424, +12424, +12424, +12424, +12434, +12440, +12440, +12479, +12494, +12505, +12505, +12520, +12526, +12526, +12526, +12526, +12570, +12588, +12600, +12612, +12631, +12631, +12631, +12631, +12631, +12631, +12647, +12659, +12659, +12668, +12708, +12736, +12741, +12741, +12741, +12753, +12753, +12753, +12759, +12767, +12786, +12794, +12810, +12836, +12836, +12848, +12888, +12899, +12914, +12914, +12914, +12921, +12943, +12953, +12978, +12989, +12989, +12989, +13006, +13006, +13022, +13035, +13073, +13097, +13118, +13168, +13177, +13191, +13200, +13200, +13214, +13234, +13234, +13234, +13234, +13276, +13282, +13311, +13321, +13321, +13321, +13327, +13334, +13361, +13378, +13397, +13412, +13420, +13426, +13444, +13444, +13444, +13467, +13467, +13467, +13467, +13479, +13479, +13502, +13502, +13502, +13514, +13535, +13543, +13596, +13596, +13596, +13596, +13596, +13596, +13603, +13603, +13603, +13636, +13647, +13647, +13647, +13657, +13698, +13698, +13698, +13716, +13716, +13723, +13741, +13751, +13751, +13762, +13762, +13762, +13762, +13762, +13762, +13770, +13803, +13812, +13812, +13838, +13855, +13866, +13866, +13866, +13900, +13900, +13947, +13960, +13960, +13972, +13990, +13990, +14040, +14054, +14073, +14073, +14073, +14082, +14131, +14145, +14166, +14166, +14166, +14203, +14210, +14234, +14250, +14261, +14286, +14286, +14286, +14290, +14336, +14367, +14367, +14383, +14409, +14409, +14409, +14415, +14441, +14441, +14457, +14465, +14484, +14484, +14484, +14484, +14495, +14514, +14521, +14521, +14521, +14521, +14539, +14549, +14568, +14568, +14593, +14606, +14613, +14649, +14676, +14708, +14708, +14712, +14734, +14752, +14765, +14782, +14830, +14830, +14830, +14838, +14838, +14855, +14898, +14898, +14920, +14967, +14967, +14967, +14999, +15009, +15009, +15009, +15018, +15047, +15047, +15047, +15070, +15083, +15093, +15099, +15139, +15139, +15146, +15165, +15165, +15187, +15217, +15222, +15244, +15244, +15268, +15296, +15302, +15308, +15308, +15308, +15308, +15308, +15308, +15317, +15324, +15336, +15355, +15355, +15355, +15355, +15355, +15372, +15372, +15391, +15403, +15414, +15446, +15446, +15453, +15459, +15463, +15500, +15500, +15513, +15513, +15522, +15542, +15599, +15617, +15624, +15654, +15668, +15688, +15688, +15718, +15718, +15718, +15725, +15725, +15741, +15756, +15756, +15817, +15817, +15856, +15856, +15874, +15884, +15884, +15893, +15922, +15940, +15958, +15967, +15967, +15967, +15967, +15967, +15967, +15967, +15967, +15967, +15980, +15980, +15980, +16017, +16051, +16051, +16051, +16062, +16062, +16062, +16069, +16073, +16073, +16087, +16103, +16103, +16103, +16128, +16128, +16152, +16201, +16228, +16228, +16228, +16268, +16277, +16296, +16337, +16357, +16397, +16397, +16397, +16397, +16419, +16462, +16462, +16469, +16493, +16493, +16493, +16493, +16502, +16502, +16502, +16536, +16544, +16575, +16575, +16575, +16649, +16649, +16674, +16674, +16674, +16674, +16686, +16686, +16731, +16754, +16768, +16768, +16776, +16783, +16783, +16783, +16799, +16819, +16838, +16838, +16863, +16884, +16893, +16915, +16915, +16931, +16931, +16946, +16971, +16975, +17003, +17013, +17026, +17041, +17041, +17041, +17041, +17069, +17115, +17151, +17151, +17151, +17155, +17155, +17155, +17177, +17230, +17237, +17244, +17258, +17258, +17299, +17304, +17304, +17331, +17370, +17383, +17389, +17397, +17417, +17417, +17438, +17443, +17443, +17443, +17453, +17486, +17486, +17504, +17522, +17522, +17539, +17556, +17556, +17576, +17596, +17596, +17596, +17606, +17610, +17617, +17617, +17621, +17625, +17630, +17660, +17676, +17691, +17701, +17754, +17781, +17804, +17804, +17824, +17839, +17850, +17850, +17850, +17850, +17856, +17856, +17856, +17879, +17879, +17929, +17929, +17934, +17956, +17956, +17956, +17956, +17956, +17962, +17984, +18008, +18008, +18008, +18008, +18019, +18019, +18030, +18030, +18051, +18070, +18070, +18082, +18082, +18123, +18123, +18130, +18144, +18181, +18257, +18257, +18267, +18267, +18267, +18267, +18281, +18320, +18327, +18345, +18348, +18351, +18377, +18380, +18396, +18396, +18404, +18404, +18409, +18424, +18427, +18444, +18465, +18497, +18518, +18524, +18527, +18555, +18573, +18576, +18582, +18594, +18597, +18603, +18635, +18635, +18638, +18674, +18694, +18738, +18761, +18764, +18770, +18776, +18776, +18782, +18788, +18791, +18809, +18822, +18850, +18853, +18856, +18859, +18862, +18862, +18885, +18919, +18919, +18938, +18944, +18958, +18961, +18974, +18991, +19004, +19026, +19033, +19047, +19098, +19161, +19161, +19174, +19194, +19211, +19211, +19214, +19221, +19231, +19261, +19270, +19273, +19306, +19306, +19320, +19320, +19357, +19357, +19357, +19363, +19377, +19418, +19425, +19437, +19437, +19437, +19466, +19485, +19485, +19485, +19502, +19506, +19509, +19509, +19512, +19518, +19518, +19521, +19524, +19535, +19558, +19561, +19564, +19564, +19582, +19628, +19638, +19680, +19680, +19700, +19703, +19706, +19709, +19712, +19734, +19738, +19761, +19761, +19794, +19798, +19801, +19805, +19808, +19811, +19811, +19811, +19858, +19861, +19861, +19867, +19873, +19902, +19912, +19930, +19930, +19930, +19951, +19954, +19957, +19960, +19963, +19963, +19973, +20023, +20026, +20029, +20052, +20052, +20052, +20065, +20076, +20091, +20135, +20140, +20152, +20152, +20155, +20175, +20185, +20193, +20215, +20221, +20243, +20283, +20304, +20304, +20336, +20345, +20367, +20367, +20382, +20385, +20385, +20388, +20418, +20424, +20436, +20459, +20459, +20459, +20462, +20481, +20512, +20523, +20526, +20564, +20564, +20600, +20600, +20641, +20644, +20663, +20669, +20675, +20686, +20689, +20699, +20715, +20729, +20729, +20732, +20759, +20764, +20785, +20794, +20824, +20839, +20842, +20906, +20927, +20942, +20948, +20991, +21000, +21030, +21051, +21051, +21054, +21094, +21094, +21097, +21129, +21136, +21158, +21223, +21234, +21237, +21252, +21272, +21291, +21306, +21318, +21335, +21342, +21359, +21359, +21367, +21367, +21376, +21395, +21445, +21445, +21470, +21505, +21505, +21552, +21571, +21579, +21582, +21585, +21625, +21670, +21684, +21704, +21707, +21731, +21734, +21764, +21772, +21779, +21815, +21839, +21842, +21873, +21885, +21885, +21885, +21885, +21885, +21885, +21885, +21897, +21920, +21940, +21943, +21961, +21972, +21991, +21999, +21999, +22012, +22025, +22034, +22056, +22059, +22059, +22062, +22065, +22081, +22084, +22096, +22163, +22193, +22206, +22209, +22224, +22249, +22271, +22274, +22277, +22317, +22325, +22325, +22328, +22334, +22340, +22351, +22374, +22383, +22410, +22436, +22446, +22469, +22480, +22483, +22523, +22540, +22547, +22563, +22566, +22591, +22594, +22594, +22616, +22622, +22622, +22656, +22659, +22667, +22667, +22681, +22698, +22705, +22705, +22721, +22754, +22770, +22770, +22795, +22837, +22854, +22854, +22884, +22894, +22894, +22946, +22946, +22981, +22989, +22989, +23005, +23005, +23034, +23040, +23058, +23082, +23097, +23108, +23108, +23108, +23108, +23108, +23119, +23146, +23154, +23175, +23175, +23192, +23215, +23232, +23270, +23270, +23270, +23270, +23297, +23312, +23330, +23350, +23354, +23354, +23361, +23361, +23361, +23361, +23361, +23382, +23382, +23382, +23392, +23405, +23405, +23420, +23420, +23438, +23438, +23438, +23450, +23471, +23483, +23493, +23493, +23496, +23496, +23496, +23510, +23518, +23537, +23557, +23564, +23599, +23618, +23652, +23659, +23676, +23676, +23676, +23690, +23709, +23737, +23737, +23755, +23765, +23765, +23788, +23792, +23792, +23792, +23803, +23821, +23863, +23863, +23863, +23879, +23886, +23911, +23931, +23944, +23955, +23955, +23970, +23974, +23980, +24006, +24038, +24044, +24044, +24044, +24052, +24052, +24063, +24063, +24116, +24135, +24152, +24193, +24199, +24223, +24245, +24245, +24251, +24272, +24288, +24288, +24303, +24323, +24354, +24360, +24360, +24391, +24391, +24391, +24406, +24406, +24406, +24415, +24415, +24433, +24464, +24464, +24489, +24506, +24514, +24524, +24524, +24545, +24574, +24587, +24587, +24593, +24599, +24626, +24664, +24664, +24679, +24688, +24688, +24688, +24694, +24712, +24712, +24724, +24756, +24794, +24836, +24836, +24850, +24880, +24893, +24902, +24902, +24943, +24943, +24965, +24991, +25023, +25034, +25034, +25034, +25051, +25059, +25059, +25079, +25089, +25095, +25102, +25102, +25102, +25121, +25121, +25121, +25128, +25156, +25166, +25194, +25201, +25246, +25246, +25274, +25274, +25281, +25302, +25318, +25326, +25334, +25356, +25369, +25369, +25385, +25385, +25385, +25385, +25385, +25385, +25385, +25385, +25397, +25430, +25437, +25480, +25501, +25501, +25508, +25573, +25602, +25621, +25641, +25665, +25729, +25734, +25752, +25783, +25783, +25783, +25806, +25821, +25821, +25838, +25838, +25856, +25856, +25861, +25861, +25867, +25895, +25895, +25895, +25902, +25902, +25910, +25910, +25917, +25928, +25944, +25951, +25965, +25965, +25972, +25980, +25984, +25984, +25984, +26007, +26042, +26060, +26070, +26091, +26102, +26102, +26124, +26124, +26144, +26161, +26161, +26161, +26176, +26201, +26232, +26250, +26287, +26293, +26316, +26364, +26371, +26409, +26409, +26409, +26409, +26422, +26422, +26427, +26427, +26449, +26449, +26455, +26460, +26466, +26483, +26483, +26502, +26517, +26529, +26529, +26548, +26548, +26590, +26610, +26645, +26645, +26658, +26658, +26694, +26700, +26715, +26715, +26715, +26722, +26730, +26730, +26730, +26755, +26755, +26772, +26772, +26772, +26792, +26823, +26823, +26846, +26846, +26846, +26846, +26846, +26846, +26872, +26920, +26920, +26920, +26954, +26954, +26961, +26970, +26970, +26976, +26976, +27005, +27005, +27049, +27068, +27068, +27098, +27112, +27116, +27116, +27116, +27116, +27120, +27139, +27139, +27139, +27149, +27170, +27177, +27198, +27198, +27234, +27261, +27261, +27311, +27311, +27317, +27317, +27317, +27351, +27355, +27355, +27355, +27355, +27376, +27376, +27398, +27398, +27398, +27427, +27444, +27444, +27444, +27454, +27490, +27503, +27503, +27517, +27517, +27527, +27527, +27545, +27560, +27566, +27566, +27566, +27574, +27574, +27660, +27667, +27667, +27720, +27720, +27732, +27751, +27751, +27773, +27782, +27791, +27791, +27803, +27815, +27815, +27828, +27828, +27868, +27868, +27868, +27868, +27868, +27868, +27868, +27884, +27884, +27884, +27895, +27895, +27914, +27914, +27919, +27919, +27962, +27962, +27962, +28010, +28017, +28032, +28058, +28058, +28063, +28063, +28063, +28094, +28106, +28106, +28156, +28165, +28175, +28210, +28263, +28285, +28285, +28303, +28323, +28323, +28323, +28329, +28350, +28388, +28413, +28461, +28461, +28474, +28497, +28512, +28522, +28522, +28551, +28551, +28581, +28597, +28597, +28597, +28597, +28612, +28624, +28624, +28652, +28652, +28657, +28657, +28685, +28685, +28685, +28685, +28685, +28699, +28720, +28742, +28742, +28742, +28742, +28742, +28755, +28767, +28767, +28767, +28767, +28779, +28779, +28797, +28819, +28861, +28868, +28868, +28902, +28902, +28902, +28906, +28925, +28925, +28941, +28959, +28959, +28959, +28981, +28981, +28994, +28998, +28998, +29004, +29004, +29004, +29016, +29016, +29016, +29016, +29016, +29030, +29047, +29047, +29047, +29065, +29080, +29080, +29093, +29127, +29157, +29171, +29191, +29191, +29202, +29224, +29224, +29247, +29247, +29264, +29277, +29277, +29281, +29281, +29281, +29281, +29296, +29337, +29350, +29350, +29357, +29364, +29373, +29373, +29383, +29383, +29383, +29392, +29402, +29448, +29448, +29466, +29466, +29492, +29492, +29500, +29544, +29544, +29564, +29599, +29612, +29612, +29625, +29639, +29648, +29676, +29689, +29701, +29701, +29701, +29701, +29743, +29750, +29750, +29750, +29761, +29797, +29812, +29812, +29812, +29812, +29812, +29839, +29839, +29845, +29845, +29851, +29851, +29887, +29908, +29908, +29908, +29926, +29938, +29938, +29949, +29949, +29972, +29972, +29972, +29991, +29997, +29997, +29997, +29997, +30004, +30004, +30004, +30017, +30025, +30025, +30025, +30032, +30032, +30032, +30032, +30032, +30032, +30032, +30032, +30054, +30054, +30072, +30088, +30102, +30102, +30102, +30106, +30106, +30122, +30122, +30141, +30141, +30141, +30165, +30187, +30187, +30187, +30193, +30193, +30203, +30203, +30214, +30221, +30235, +30235, +30235, +30242, +30268, +30268, +30277, +30277, +30307, +30314, +30319, +30336, +30336, +30363, +30363, +30363, +30363, +30363, +30395, +30401, +30401, +30401, +30410, +30431, +30446, +30446, +30484, +30484, +30484, +30484, +30527, +30546, +30546, +30560, +30571, +30612, +30635, +30646, +30657, +30657, +30688, +30703, +30703, +30735, +30735, +30752, +30760, +30786, +30786, +30786, +30805, +30805, +30815, +30836, +30836, +30836, +30836, +30861, +30869, +30876, +30876, +30915, +30937, +30943, +30958, +30979, +30979, +30979, +30979, +30979, +30994, +31023, +31023, +31040, +31065, +31075, +31109, +31116, +31116, +31157, +31178, +31227, +31255, +31255, +31262, +31287, +31287, +31306, +31313, +31313, +31333, +31333, +31333, +31333, +31333, +31348, +31348, +31364, +31364, +31364, +31364, +31364, +31364, +31383, +31402, +31418, +31433, +31445, +31467, +31474, +31505, +31549, +31549, +31556, +31586, +31586, +31621, +31631, +31631, +31665, +31678, +31678, +31721, +31721, +31760, +31786, +31786, +31796, +31811, +31854, +31854, +31871, +31871, +31871, +31881, +31918, +31918, +31928, +31928, +31928, +31937, +31937, +31937, +31937, +31937, +31937, +31937, +31945, +31958, +31972, +31984, +31991, +31991, +32000, +32000, +32008, +32008, +32008, +32032, +32062, +32062, +32104, +32120, +32147, +32158, +32158, +32174, +32212, +32222, +32241, +32252, +32260, +32282, +32282, +32286, +32327, +32346, +32384, +32384, +32396, +32396, +32415, +32415, +32415, +32415, +32432, +32432, +32442, +32452, +32489, +32506, +32519, +32573, +32573, +32590, +32597, +32604, +32604, +32620, +32643, +32650, +32660, +32680, +32713, +32750, +32773, +32780, +32780, +32780, +32813, +32833, +32864, +32874, +32874, +32893, +32903, +32910, +32923, +32969, +32994, +32994, +33001, +33008, +33015, +33022, +33032, +33045, +33052, +33113, +33139, +33150, +33171, +33183, +33206, +33264, +33307, +33319, +33319, +33338, +33345, +33364, +33388, +33388, +33400, +33400, +33400, +33414, +33457, +33464, +33476, +33503, +33550, +33550, +33560, +33573, +33573, +33580, +33585, +33585, +33585, +33607, +33607, +33614, +33622, +33669, +33710, +33710, +33736, +33760, +33760, +33771, +33792, +33804, +33823, +33823, +33823, +33830, +33867, +33872, +33889, +33894, +33900, +33900, +33924, +33924, +33953, +33978, +33997, +34005, +34017, +34024, +34048, +34087, +34093, +34118, +34130, +34139, +34146, +34161, +34180, +34197, +34204, +34214, +34221, +34221, +34238, +34254, +34261, +34261, +34268, +34275, +34280, +34310, +34326, +34350, +34419, +34426, +34466, +34476, +34506, +34506, +34520, +34520, +34527, +34527, +34534, +34546, +34546, +34560, +34590, +34599, +34612, +34612, +34612, +34628, +34647, +34659, +34702, +34751, +34772, +34799, +34815, +34815, +34860, +34903, +34915, +34915, +34932, +34947, +34947, +34953, +34953, +34967, +34983, +34993, +35016, +35033, +35077, +35086, +35103, +35125, +35143, +35150, +35150, +35150, +35150, +35177, +35177, +35177, +35204, +35239, +35246, +35253, +35253, +35265, +35277, +35328, +35328, +35348, +35355, +35385, +35385, +35397, +35397, +35397, +35397, +35408, +35463, +35463, +35463, +35463, +35480, +35487, +35511, +35553, +35553, +35560, +35591, +35591, +35606, +35625, +35645, +35657, +35696, +35703, +35710, +35717, +35744, +35764, +35771, +35785, +35785, +35785, +35827, +35852, +35892, +35918, +35918, +35924, +35954, +35976, +35986, +35986, +36029, +36042, +36047, +36047, +36092, +36132, +36132, +36153, +36163, +36174, +36180, +36203, +36203, +36218, +36218, +36225, +36255, +36255, +36262, +36285, +36307, +36333, +36356, +36396, +36410, +36433, +36433, +36473, +36480, +36528, +36535, +36551, +36563, +36577, +36602, +36638, +36648, +36663, +36679, +36679, +36707, +36707, +36721, +36721, +36733, +36757, +36773, +36802, +36839, +36883, +36899, +36911, +36931, +36954, +36954, +36969, +37016, +37034, +37034, +37053, +37065, +37080, +37104, +37136, +37136, +37152, +37159, +37177, +37223, +37254, +37280, +37298, +37312, +37319, +37355, +37380, +37380, +37406, +37431, +37455, +37470, +37476, +37503, +37542, +37561, +37561, +37573, +37596, +37615, +37634, +37634, +37653, +37660, +37660, +37713, +37738, +37751, +37794, +37824, +37837, +37837, +37853, +37853, +37859, +37859, +37888, +37895, +37895, +37911, +37933, +37940, +37959, +37976, +37988, +38000, +38033, +38040, +38040, +38040, +38046, +38075, +38075, +38089, +38098, +38102, +38145, +38158, +38165, +38193, +38193, +38228, +38275, +38279, +38290, +38300, +38300, +38320, +38320, +38340, +38363, +38363, +38370, +38381, +38386, +38397, +38412, +38412, +38422, +38422, +38464, +38491, +38491, +38491, +38491, +38510, +38510, +38519, +38519, +38519, +38519, +38526, +38552, +38573, +38612, +38618, +38618, +38636, +38641, +38641, +38646, +38658, +38670, +38688, +38695, +38719, +38746, +38746, +38774, +38774, +38778, +38790, +38795, +38795, +38838, +38838, +38849, +38849, +38849, +38849, +38862, +38862, +38862, +38862, +38878, +38918, +38926, +38941, +38941, +38951, +38976, +38993, +38999, +39017, +39033, +39051, +39051, +39051, +39051, +39065, +39107, +39107, +39107, +39112, +39125, +39143, +39160, +39181, +39199, +39210, +39224, +39224, +39228, +39247, +39255, +39255, +39297, +39297, +39297, +39311, +39320, +39337, +39337, +39361, +39370, +39370, +39376, +39385, +39391, +39391, +39397, +39403, +39423, +39427, +39437, +39463, +39463, +39487, +39487, +39487, +39487, +39501, +39501, +39514, +39520, +39527, +39527, +39527, +39531, +39531, +39560, +39560, +39593, +39593, +39593, +39617, +39630, +39647, +39660, +39660, +39676, +39686, +39699, +39737, +39761, +39761, +39769, +39792, +39810, +39845, +39854, +39878, +39900, +39906, +39906, +39951, +39951, +39951, +39951, +39975, +40011, +40011, +40044, +40062, +40062, +40062, +40062, +40090, +40100, +40115, +40115, +40115, +40115, +40119, +40124, +40154, +40174, +40178, +40182, +40182, +40182, +40182, +40182, +40216, +40216, +40216, +40216, +40216, +40216, +40231, +40242, +40261, +40267, +40290, +40302, +40327, +40353, +40353, +40357, +40374, +40408, +40408, +40408, +40412, +40412, +40443, +40464, +40464, +40464, +40464, +40474, +40474, +40493, +40514, +40514, +40514, +40532, +40568, +40593, +40593, +40593, +40610, +40624, +40645, +40655, +40655, +40675, +40694, +40699, +40699, +40699, +40738, +40738, +40758, +40770, +40776, +40776, +40793, +40817, +40823, +40828, +40866, +40891, +40904, +40933, +40944, +40953, +40953, +40963, +40969, +40969, +40969, +40976, +40976, +40976, +40976, +40983, +40983, +40998, +40998, +41016, +41016, +41026, +41044, +41070, +41105, +41116, +41162, +41177, +41223, +41223, +41223, +41223, +41231, +41231, +41231, +41231, +41257, +41273, +41273, +41292, +41308, +41308, +41331, +41346, +41364, +41364, +41364, +41376, +41376, +41382, +41388, +41388, +41388, +41388, +41388, +41401, +41417, +41433, +41446, +41466, +41488, +41488, +41521, +41534, +41577, +41577, +41593, +41604, +41625, +41665, +41665, +41678, +41678, +41678, +41696, +41720, +41737, +41755, +41771, +41805, +41811, +41811, +41830, +41891, +41891, +41920, +41920, +41926, +41947, +41999, +41999, +41999, +41999, +42010, +42042, +42042, +42048, +42059, +42076, +42076, +42093, +42100, +42100, +42120, +42120, +42128, +42151, +42168, +42181, +42215, +42233, +42233, +42233, +42233, +42233, +42233, +42239, +42268, +42297, +42312, +42318, +42326, +42326, +42331, +42345, +42356, +42356, +42356, +42374, +42382, +42400, +42409, +42409, +42423, +42423, +42441, +42470, +42470, +42482, +42495, +42513, +42513, +42520, +42524, +42541, +42541, +42596, +42609, +42609, +42616, +42635, +42651, +42681, +42725, +42744, +42767, +42767, +42773, +42805, +42805, +42805, +42805, +42805, +42805, +42830, +42841, +42852, +42866, +42883, +42883, +42883, +42883, +42883, +42894, +42932, +42932, +42975, +42975, +43001, +43009, +43009, +43009, +43009, +43019, +43035, +43035, +43055, +43055, +43055, +43061, +43061, +43061, +43067, +43073, +43096, +43120, +43136, +43136, +43160, +43160, +43160, +43160, +43160, +43169, +43169, +43169, +43181, +43195, +43204, +43216, +43240, +43261, +43290, +43290, +43307, +43324, +43337, +43337, +43337, +43337, +43346, +43357, +43398, +43409, +43417, +43428, +43467, +43467, +43467, +43467, +43488, +43497, +43538, +43550, +43571, +43571, +43586, +43606, +43606, +43606, +43606, +43634, +43634, +43668, +43668, +43668, +43668, +43682, +43713, +43733, +43733, +43740, +43760, +43760, +43780, +43815, +43833, +43879, +43904, +43904, +43904, +43920, +43927, +43933, +43933, +43933, +43951, +43956, +43978, +43978, +43978, +44003, +44003, +44023, +44034, +44054, +44054, +44060, +44075, +44075, +44089, +44089, +44089, +44110, +44128, +44134, +44155, +44162, +44189, +44189, +44189, +44189, +44212, +44240, +44240, +44240, +44255, +44255, +44255, +44265, +44297, +44297, +44297, +44304, +44304, +44304, +44304, +44304, +44304, +44332, +44332, +44347, +44347, +44347, +44368, +44389, +44407, +44407, +44451, +44467, +44486, +44486, +44486, +44486, +44503, +44503, +44547, +44559, +44570, +44570, +44570, +44582, +44610, +44610, +44610, +44620, +44620, +44620, +44620, +44632, +44632, +44636, +44642, +44649, +44699, +44699, +44720, +44733, +44738, +44750, +44750, +44750, +44750, +44750, +44750, +44750, +44765, +44765, +44765, +44774, +44774, +44774, +44774, +44774, +44787, +44798, +44798, +44798, +44813, +44846, +44846, +44867, +44867, +44867, +44867, +44867, +44867, +44877, +44889, +44896, +44896, +44896, +44896, +44896, +44896, +44896, +44896, +44907, +44920, +44931, +44944, +44944, +44951, +44956, +44956, +44975, +44975, +44999, +45017, +45017, +45017, +45034, +45034, +45034, +45034, +45038, +45044, +45048, +45048, +45060, +45093, +45093, +45112, +45121, +45121, +45121, +45128, +45128, +45157, +45157, +45157, +45178, +45190, +45190, +45190, +45190, +45204, +45220, +45239, +45239, +45260, +45283, +45295, +45309, +45345, +45352, +45352, +45352, +45352, +45352, +45352, +45352, +45357, +45357, +45357, +45357, +45371, +45371, +45371, +45371, +45438, +45449, +45467, +45497, +45522, +45530, +45535, +45544, +45544, +45554, +45574, +45574, +45590, +45614, +45614, +45614, +45618, +45638, +45653, +45671, +45687, +45687, +45687, +45709, +45739, +45746, +45746, +45752, +45763, +45781, +45803, +45803, +45821, +45821, +45843, +45867, +45867, +45867, +45885, +45885, +45885, +45912, +45912, +45917, +45934, +45944, +45944, +45953, +45996, +46009, +46016, +46031, +46051, +46051, +46070, +46086, +46086, +46096, +46109, +46115, +46115, +46115, +46115, +46115, +46119, +46119, +46119, +46127, +46140, +46150, +46159, +46169, +46190, +46190, +46194, +46203, +46211, +46226, +46226, +46226, +46240, +46279, +46290, +46302, +46324, +46331, +46350, +46368, +46390, +46390, +46434, +46434, +46457, +46473, +46484, +46484, +46484, +46484, +46534, +46534, +46540, +46553, +46596, +46596, +46596, +46596, +46625, +46625, +46661, +46661, +46661, +46669, +46704, +46704, +46721, +46731, +46731, +46731, +46731, +46731, +46799, +46805, +46834, +46845, +46845, +46858, +46868, +46885, +46924, +46946, +46946, +46965, +46981, +46981, +46992, +46992, +46992, +46992, +46992, +47006, +47006, +47015, +47015, +47019, +47019, +47031, +47031, +47031, +47058, +47058, +47078, +47078, +47106, +47142, +47142, +47142, +47142, +47142, +47184, +47208, +47247, +47254, +47269, +47279, +47286, +47298, +47298, +47298, +47298, +47322, +47336, +47350, +47367, +47367, +47388, +47406, +47445, +47472, +47472, +47484, +47522, +47530, +47537, +47547, +47547, +47547, +47582, +47582, +47592, +47608, +47627, +47642, +47642, +47642, +47649, +47649, +47649, +47694, +47714, +47733, +47747, +47761, +47779, +47779, +47790, +47798, +47798, +47798, +47809, +47809, +47809, +47814, +47814, +47822, +47839, +47864, +47882, +47889, +47924, +47935, +47935, +47946, +47946, +47963, +47963, +47967, +47967, +47967, +47989, +47989, +48024, +48024, +48024, +48024, +48035, +48047, +48053, +48065, +48065, +48094, +48113, +48118, +48118, +48118, +48118, +48137, +48173, +48196, +48196, +48196, +48217, +48226, +48244, +48251, +48280, +48290, +48290, +48305, +48337, +48358, +48369, +48378, +48378, +48393, +48398, +48398, +48403, +48424, +48431, +48431, +48431, +48431, +48431, +48437, +48437, +48455, +48461, +48470, +48470, +48470, +48486, +48496, +48514, +48514, +48528, +48556, +48611, +48615, +48624, +48656, +48656, +48667, +48667, +48667, +48684, +48697, +48732, +48760, +48773, +48796, +48812, +48836, +48836, +48870, +48892, +48899, +48899, +48899, +48927, +48943, +48943, +48948, +48948, +48953, +48969, +48982, +49001, +49015, +49033, +49033, +49048, +49054, +49070, +49070, +49106, +49117, +49134, +49148, +49148, +49148, +49154, +49164, +49164, +49199, +49199, +49199, +49230, +49230, +49230, +49245, +49255, +49272, +49282, +49282, +49316, +49328, +49328, +49342, +49355, +49423, +49450, +49450, +49476, +49476, +49476, +49476, +49476, +49502, +49502, +49514, +49514, +49514, +49519, +49525, +49549, +49559, +49559, +49606, +49615, +49630, +49642, +49648, +49648, +49689, +49689, +49700, +49707, +49720, +49727, +49727, +49744, +49744, +49744, +49757, +49775, +49789, +49789, +49803, +49823, +49831, +49831, +49831, +49831, +49831, +49855, +49866, +49866, +49875, +49888, +49888, +49896, +49896, +49896, +49896, +49896, +49896, +49917, +49917, +49922, +49942, +49942, +49956, +49962, +49962, +49988, +50007, +50007, +50040, +50040, +50040, +50071, +50071, +50071, +50071, +50071, +50071, +50079, +50115, +50145, +50168, +50168, +50168, +50188, +50204, +50204, +50204, +50204, +50211, +50211, +50231, +50237, +50247, +50247, +50283, +50283, +50289, +50289, +50311, +50328, +50344, +50344, +50355, +50366, +50366, +50372, +50399, +50399, +50399, +50405, +50405, +50405, +50440, +50440, +50461, +50461, +50461, +50486, +50486, +50486, +50493, +50511, +50526, +50554, +50554, +50554, +50554, +50554, +50554, +50554, +50581, +50581, +50606, +50635, +50635, +50641, +50677, +50700, +50700, +50721, +50731, +50731, +50731, +50731, +50761, +50769, +50769, +50791, +50807, +50845, +50845, +50845, +50857, +50876, +50876, +50887, +50887, +50912, +50912, +50912, +50932, +50969, +50969, +51000, +51010, +51010, +51015, +51015, +51015, +51015, +51032, +51032, +51032, +51065, +51080, +51116, +51116, +51116, +51132, +51132, +51158, +51164, +51171, +51171, +51171, +51190, +51190, +51201, +51226, +51226, +51241, +51254, +51254, +51273, +51279, +51279, +51288, +51307, +51307, +51312, +51312, +51326, +51333, +51355, +51378, +51425, +51448, +51460, +51474, +51479, +51499, +51528, +51528, +51528, +51541, +51541, +51548, +51596, +51616, +51616, +51623, +51651, +51651, +51658, +51658, +51677, +51677, +51695, +51702, +51718, +51733, +51733, +51769, +51791, +51798, +51816, +51839, +51855, +51884, +51888, +51895, +51908, +51936, +51949, +51956, +51975, +51982, +51992, +51992, +51992, +51992, +51992, +52016, +52016, +52049, +52063, +52070, +52070, +52082, +52099, +52118, +52144, +52158, +52167, +52183, +52183, +52216, +52216, +52238, +52283, +52290, +52303, +52312, +52337, +52354, +52370, +52384, +52427, +52427, +52448, +52458, +52458, +52511, +52518, +52518, +52533, +52549, +52557, +52568, +52615, +52656, +52719, +52719, +52735, +52748, +52773, +52785, +52785, +52790, +52790, +52805, +52805, +52814, +52838, +52867, +52867, +52873, +52931, +52931, +52968, +52976, +52976, +52976, +52983, +52983, +53001, +53024, +53024, +53024, +53038, +53074, +53084, +53091, +53114, +53114, +53136, +53143, +53173, +53196, +53196, +53213, +53225, +53263, +53281, +53281, +53281, +53309, +53330, +53330, +53348, +53348, +53355, +53368, +53368, +53385, +53410, +53417, +53424, +53424, +53439, +53439, +53439, +53462, +53462, +53462, +53462, +53462, +53462, +53480, +53497, +53534, +53556, +53583, +53583, +53602, +53602, +53624, +53628, +53648, +53659, +53663, +53663, +53682, +53689, +53704, +53716, +53727, +53762, +53769, +53769, +53778, +53778, +53785, +53824, +53878, +53889, +53918, +53918, +53918, +53953, +53975, +53975, +53992, +54020, +54042, +54049, +54056, +54078, +54085, +54085, +54113, +54124, +54131, +54138, +54144, +54184, +54211, +54211, +54217, +54224, +54231, +54270, +54277, +54316, +54349, +54349, +54365, +54372, +54393, +54416, +54416, +54464, +54470, +54470, +54484, +54491, +54491, +54501, +54501, +54530, +54530, +54537, +54555, +54568, +54603, +54603, +54624, +54658, +54662, +54675, +54685, +54691, +54696, +54696, +54711, +54711, +54711, +54751, +54778, +54782, +54789, +54796, +54810, +54823, +54823, +54823, +54861, +54868, +54875, +54882, +54882, +54902, +54908, +54946, +54953, +54953, +54953, +54953, +54978, +54978, +54989, +55015, +55015, +55015, +55015, +55029, +55037, +55037, +55093, +55106, +55129, +55129, +55129, +55149, +55172, +55172, +55211, +55220, +55227, +55249, +55263, +55295, +55314, +55321, +55335, +55361, +55361, +55382, +55398, +55405, +55441, +55469, +55484, +55484, +55500, +55500, +55515, +55522, +55532, +55532, +55551, +55558, +55583, +55590, +55590, +55611, +55618, +55649, +55656, +55720, +55740, +55777, +55777, +55802, +55802, +55827, +55873, +55889, +55889, +55889, +55896, +55896, +55896, +55915, +55925, +55925, +55934, +55972, +55979, +55989, +55996, +55996, +55996, +56024, +56039, +56078, +56096, +56111, +56146, +56192, +56202, +56222, +56236, +56277, +56291, +56335, +56376, +56376, +56402, +56402, +56417, +56425, +56435, +56468, +56476, +56488, +56499, +56506, +56506, +56531, +56538, +56561, +56561, +56561, +56561, +56561, +56561, +56561, +56561, +56569, +56569, +56577, +56585, +56594, +56594, +56594, +56617, +56625, +56650, +56660, +56673, +56716, +56740, +56745, +56757, +56769, +56769, +56769, +56797, +56822, +56838, +56838, +56858, +56858, +56867, +56879, +56879, +56911, +56955, +56976, +57002, +57027, +57034, +57054, +57064, +57064, +57064, +57078, +57085, +57085, +57114, +57114, +57121, +57121, +57121, +57121, +57129, +57155, +57155, +57193, +57220, +57224, +57244, +57244, +57272, +57287, +57305, +57348, +57348, +57355, +57366, +57412, +57420, +57455, +57455, +57455, +57455, +57466, +57477, +57477, +57477, +57497, +57508, +57523, +57539, +57566, +57582, +57612, +57616, +57616, +57634, +57634, +57662, +57686, +57686, +57698, +57708, +57745, +57759, +57798, +57798, +57827, +57840, +57840, +57840, +57850, +57876, +57876, +57876, +57918, +57927, +57927, +57940, +57986, +57994, +58009, +58029, +58029, +58045, +58045, +58071, +58071, +58071, +58093, +58114, +58114, +58114, +58150, +58150, +58174, +58174, +58207, +58217, +58225, +58241, +58258, +58281, +58292, +58304, +58319, +58329, +58351, +58407, +58417, +58439, +58439, +58439, +58475, +58483, +58504, +58513, +58523, +58523, +58527, +58558, +58602, +58602, +58625, +58625, +58649, +58692, +58721, +58721, +58721, +58729, +58739, +58739, +58758, +58771, +58802, +58802, +58802, +58819, +58841, +58854, +58872, +58889, +58910, +58921, +58921, +58921, +58921, +58957, +58957, +58965, +58971, +58971, +58979, +58979, +58979, +59003, +59003, +59022, +59032, +59032, +59032, +59057, +59068, +59068, +59068, +59068, +59068, +59068, +59068, +59076, +59080, +59103, +59120, +59120, +59120, +59120, +59126, +59135, +59151, +59158, +59158, +59184, +59216, +59244, +59259, +59265, +59277, +59284, +59306, +59338, +59338, +59363, +59363, +59363, +59377, +59386, +59386, +59386, +59386, +59411, +59433, +59453, +59480, +59489, +59489, +59495, +59513, +59526, +59548, +59548, +59556, +59566, +59566, +59566, +59583, +59594, +59622, +59643, +59643, +59643, +59648, +59648, +59700, +59740, +59740, +59758, +59769, +59774, +59774, +59774, +59774, +59787, +59822, +59837, +59837, +59845, +59850, +59863, +59863, +59863, +59869, +59869, +59928, +59936, +59953, +59966, +59981, +59981, +59997, +60012, +60049, +60049, +60108, +60123, +60123, +60130, +60164, +60171, +60171, +60171, +60171, +60171, +60171, +60176, +60199, +60217, +60229, +60240, +60240, +60240, +60240, +60248, +60262, +60262, +60284, +60309, +60324, +60329, +60412, +60421, +60421, +60436, +60436, +60457, +60481, +60481, +60481, +60517, +60525, +60525, +60541, +60567, +60575, +60613, +60613, +60642, +60663, +60691, +60727, +60727, +60744, +60759, +60778, +60794, +60809, +60824, +60824, +60834, +60834, +60853, +60878, +60878, +60878, +60878, +60907, +60907, +60907, +60907, +60937, +60948, +60990, +60990, +61014, +61041, +61041, +61049, +61049, +61049, +61062, +61062, +61062, +61078, +61078, +61078, +61092, +61098, +61132, +61150, +61150, +61150, +61150, +61156, +61170, +61178, +61187, +61187, +61187, +61187, +61194, +61217, +61234, +61257, +61257, +61257, +61285, +61285, +61292, +61309, +61333, +61371, +61371, +61386, +61393, +61426, +61450, +61450, +61450, +61466, +61466, +61466, +61481, +61481, +61481, +61481, +61481, +61481, +61500, +61538, +61538, +61538, +61584, +61592, +61624, +61651, +61651, +61651, +61685, +61696, +61711, +61711, +61711, +61711, +61761, +61767, +61783, +61817, +61842, +61842, +61842, +61856, +61856, +61896, +61896, +61896, +61959, +61959, +61959, +61968, +61992, +62025, +62025, +62025, +62040, +62072, +62072, +62072, +62072, +62072, +62078, +62078, +62099, +62123, +62131, +62171, +62171, +62171, +62171, +62171, +62171, +62180, +62233, +62233, +62253, +62253, +62284, +62303, +62318, +62318, +62331, +62338, +62378, +62378, +62378, +62378, +62390, +62395, +62395, +62395, +62395, +62395, +62402, +62402, +62423, +62430, +62447, +62454, +62454, +62486, +62486, +62486, +62509, +62522, +62522, +62522, +62522, +62522, +62547, +62547, +62575, +62597, +62644, +62669, +62686, +62692, +62700, +62736, +62782, +62782, +62812, +62812, +62830, +62834, +62834, +62847, +62866, +62878, +62897, +62912, +62928, +62928, +62928, +62928, +62945, +62952, +62987, +62987, +63023, +63023, +63044, +63044, +63044, +63054, +63065, +63081, +63081, +63081, +63095, +63126, +63154, +63154, +63171, +63171, +63185, +63185, +63185, +63231, +63231, +63252, +63252, +63261, +63261, +63261, +63261, +63269, +63269, +63297, +63297, +63321, +63342, +63342, +63377, +63388, +63401, +63414, +63432, +63432, +63432, +63439, +63439, +63444, +63487, +63497, +63516, +63516, +63545, +63567, +63574, +63585, +63599, +63626, +63626, +63650, +63650, +63709, +63709, +63736, +63757, +63787, +63806, +63821, +63838, +63861, +63868, +63875, +63875, +63891, +63940, +63940, +63940, +63959, +63973, +63973, +64013, +64020, +64020, +64049, +64081, +64099, +64099, +64118, +64118, +64143, +64143, +64155, +64155, +64155, +64155, +64173, +64173, +64193, +64214, +64227, +64227, +64234, +64252, +64262, +64297, +64332, +64349, +64356, +64363, +64370, +64380, +64387, +64394, +64412, +64419, +64436, +64447, +64472, +64472, +64501, +64515, +64515, +64515, +64529, +64547, +64556, +64563, +64573, +64580, +64580, +64580, +64659, +64666, +64688, +64688, +64688, +64695, +64709, +64736, +64736, +64736, +64751, +64751, +64758, +64789, +64799, +64799, +64826, +64849, +64856, +64876, +64899, +64910, +64916, +64923, +64947, +64957, +64993, +65010, +65055, +65055, +65066, +65083, +65101, +65105, +65125, +65129, +65167, +65181, +65188, +65188, +65198, +65229, +65264, +65271, +65306, +65333, +65340, +65340, +65395, +65395, +65395, +65411, +65420, +65437, +65448, +65455, +65462, +65479, +65489, +65489, +65489, +65514, +65514, +65514, +65514, +65532, +65532, +65537, +65556, +65567, +65574, +65609, +65623, +65645, +65659, +65659, +65659, +65659, +65687, +65694, +65713, +65720, +65720, +65727, +65727, +65734, +65741, +65748, +65766, +65800, +65800, +65800, +65826, +65826, +65847, +65854, +65854, +65878, +65895, +65916, +65954, +65973, +66014, +66037, +66037, +66037, +66050, +66070, +66084, +66084, +66084, +66091, +66098, +66122, +66129, +66129, +66182, +66189, +66196, +66214, +66221, +66221, +66221, +66249, +66249, +66249, +66270, +66286, +66286, +66286, +66312, +66312, +66352, +66397, +66397, +66403, +66432, +66432, +66439, +66449, +66471, +66493, +66502, +66520, +66530, +66585, +66585, +66595, +66612, +66647, +66654, +66680, +66699, +66724, +66750, +66750, +66777, +66804, +66811, +66839, +66873, +66914, +66914, +66937, +66960, +66979, +67006, +67024, +67031, +67038, +67038, +67045, +67066, +67109, +67116, +67123, +67139, +67160, +67206, +67225, +67225, +67225, +67270, +67297, +67329, +67357, +67371, +67385, +67421, +67455, +67479, +67479, +67495, +67504, +67504, +67527, +67536, +67543, +67553, +67576, +67576, +67576, +67576, +67576, +67576, +67614, +67614, +67621, +67645, +67645, +67645, +67662, +67698, +67698, +67703, +67707, +67742, +67808, +67808, +67815, +67856, +67863, +67880, +67899, +67905, +67912, +67928, +67948, +67960, +67975, +67982, +67996, +68025, +68025, +68045, +68078, +68085, +68085, +68095, +68104, +68116, +68147, +68153, +68170, +68170, +68183, +68183, +68206, +68206, +68206, +68224, +68235, +68241, +68248, +68265, +68286, +68286, +68303, +68315, +68339, +68346, +68353, +68360, +68387, +68418, +68437, +68451, +68463, +68463, +68463, +68475, +68482, +68482, +68509, +68524, +68524, +68534, +68541, +68562, +68574, +68579, +68586, +68596, +68603, +68610, +68641, +68653, +68671, +68678, +68699, +68706, +68724, +68749, +68762, +68779, +68786, +68791, +68791, +68832, +68876, +68876, +68904, +68933, +68964, +68964, +68964, +68964, +68964, +68964, +68964, +68991, +68991, +69046, +69063, +69074, +69074, +69115, +69167, +69183, +69192, +69192, +69209, +69209, +69209, +69209, +69243, +69275, +69275, +69282, +69282, +69302, +69318, +69318, +69318, +69332, +69345, +69368, +69380, +69416, +69453, +69453, +69459, +69482, +69489, +69525, +69525, +69525, +69542, +69542, +69542, +69553, +69560, +69588, +69588, +69588, +69588, +69611, +69634, +69634, +69634, +69645, +69645, +69645, +69677, +69683, +69693, +69700, +69723, +69734, +69744, +69751, +69751, +69773, +69773, +69773, +69773, +69786, +69819, +69819, +69819, +69837, +69848, +69858, +69858, +69877, +69877, +69877, +69877, +69897, +69897, +69897, +69905, +69911, +69911, +69915, +69941, +69941, +69964, +69964, +69964, +69971, +69971, +69987, +70000, +70000, +70000, +70000, +70011, +70011, +70018, +70018, +70028, +70028, +70028, +70028, +70065, +70072, +70086, +70086, +70086, +70086, +70110, +70110, +70110, +70122, +70145, +70160, +70160, +70172, +70193, +70201, +70201, +70241, +70247, +70289, +70289, +70289, +70311, +70311, +70311, +70327, +70334, +70334, +70352, +70366, +70366, +70366, +70366, +70366, +70366, +70366, +70366, +70380, +70380, +70408, +70418, +70434, +70438, +70438, +70438, +70464, +70481, +70496, +70496, +70510, +70510, +70510, +70510, +70530, +70530, +70551, +70551, +70589, +70604, +70617, +70634, +70634, +70634, +70634, +70634, +70645, +70645, +70645, +70662, +70669, +70716, +70738, +70738, +70738, +70738, +70738, +70748, +70748, +70772, +70799, +70813, +70855, +70886, +70895, +70911, +70937, +70937, +70955, +70955, +70965, +70975, +70975, +70986, +71004, +71004, +71031, +71031, +71053, +71068, +71086, +71086, +71086, +71101, +71117, +71117, +71117, +71151, +71165, +71199, +71199, +71199, +71199, +71199, +71199, +71219, +71232, +71255, +71255, +71255, +71255, +71255, +71255, +71255, +71255, +71283, +71307, +71307, +71314, +71332, +71343, +71347, +71384, +71411, +71428, +71428, +71445, +71450, +71450, +71450, +71462, +71462, +71462, +71462, +71462, +71477, +71488, +71488, +71488, +71488, +71488, +71488, +71501, +71530, +71530, +71567, +71586, +71586, +71586, +71603, +71632, +71632, +71632, +71632, +71663, +71672, +71672, +71682, +71707, +71707, +71707, +71714, +71714, +71719, +71727, +71727, +71727, +71727, +71734, +71734, +71734, +71762, +71770, +71770, +71781, +71801, +71812, +71821, +71854, +71871, +71871, +71879, +71896, +71910, +71922, +71959, +71966, +71984, +71990, +72040, +72053, +72087, +72115, +72143, +72169, +72169, +72169, +72179, +72195, +72195, +72195, +72195, +72195, +72195, +72212, +72212, +72212, +72212, +72212, +72222, +72233, +72233, +72233, +72242, +72270, +72277, +72293, +72319, +72360, +72373, +72392, +72409, +72419, +72419, +72440, +72479, +72479, +72489, +72504, +72513, +72530, +72530, +72530, +72530, +72551, +72559, +72559, +72559, +72591, +72615, +72665, +72665, +72672, +72699, +72699, +72709, +72709, +72709, +72709, +72709, +72709, +72753, +72753, +72773, +72780, +72780, +72780, +72805, +72817, +72817, +72830, +72830, +72840, +72866, +72879, +72879, +72888, +72895, +72895, +72895, +72910, +72921, +72921, +72928, +72958, +72986, +72997, +73009, +73024, +73024, +73024, +73024, +73024, +73052, +73062, +73087, +73097, +73097, +73107, +73107, +73122, +73140, +73150, +73159, +73166, +73166, +73166, +73176, +73204, +73234, +73258, +73258, +73258, +73258, +73258, +73258, +73268, +73296, +73319, +73319, +73319, +73319, +73319, +73319, +73319, +73347, +73356, +73365, +73393, +73403, +73403, +73428, +73451, +73451, +73451, +73461, +73471, +73505, +73520, +73520, +73537, +73537, +73550, +73596, +73629, +73629, +73629, +73629, +73641, +73641, +73658, +73658, +73665, +73665, +73665, +73665, +73677, +73690, +73710, +73727, +73764, +73778, +73791, +73811, +73831, +73868, +73876, +73876, +73876, +73876, +73887, +73907, +73928, +73928, +73928, +73928, +73954, +73961, +73961, +73961, +73988, +73992, +74006, +74049, +74049, +74079, +74079, +74098, +74098, +74098, +74098, +74140, +74140, +74140, +74140, +74192, +74216, +74232, +74232, +74260, +74281, +74281, +74287, +74310, +74310, +74326, +74326, +74326, +74326, +74326, +74351, +74370, +74382, +74408, +74408, +74408, +74408, +74450, +74450, +74450, +74450, +74466, +74495, +74534, +74544, +74560, +74576, +74576, +74588, +74588, +74588, +74606, +74626, +74626, +74647, +74691, +74706, +74724, +74729, +74737, +74744, +74750, +74779, +74833, +74833, +74851, +74851, +74851, +74851, +74851, +74851, +74871, +74909, +74932, +74940, +74971, +74971, +74990, +74990, +75008, +75008, +75021, +75036, +75054, +75060, +75060, +75060, +75060, +75060, +75079, +75079, +75079, +75085, +75085, +75119, +75124, +75133, +75133, +75133, +75139, +75153, +75162, +75175, +75175, +75182, +75182, +75188, +75212, +75229, +75229, +75254, +75260, +75260, +75260, +75271, +75271, +75291, +75291, +75291, +75291, +75304, +75304, +75334, +75351, +75364, +75364, +75374, +75374, +75386, +75386, +75413, +75447, +75454, +75472, +75483, +75483, +75483, +75488, +75488, +75488, +75501, +75539, +75539, +75571, +75571, +75599, +75599, +75637, +75656, +75656, +75656, +75656, +75656, +75676, +75692, +75710, +75732, +75766, +75788, +75799, +75799, +75818, +75848, +75860, +75886, +75902, +75902, +75912, +75912, +75919, +75919, +75919, +75941, +75941, +75941, +75976, +75993, +75993, +76007, +76022, +76022, +76022, +76051, +76077, +76103, +76103, +76125, +76136, +76136, +76146, +76146, +76167, +76174, +76174, +76174, +76181, +76181, +76200, +76209, +76237, +76237, +76254, +76285, +76300, +76300, +76318, +76354, +76363, +76376, +76403, +76403, +76403, +76403, +76403, +76403, +76421, +76421, +76421, +76421, +76459, +76459, +76466, +76476, +76484, +76484, +76484, +76484, +76484, +76484, +76484, +76500, +76500, +76513, +76521, +76563, +76570, +76580, +76587, +76587, +76613, +76628, +76628, +76628, +76628, +76639, +76655, +76655, +76655, +76669, +76696, +76696, +76696, +76702, +76717, +76717, +76717, +76728, +76728, +76728, +76768, +76768, +76768, +76768, +76768, +76773, +76793, +76793, +76813, +76841, +76841, +76885, +76913, +76913, +76920, +76920, +76920, +76938, +76938, +76952, +76952, +76982, +76989, +76989, +76989, +76998, +77032, +77049, +77049, +77068, +77085, +77093, +77093, +77102, +77102, +77115, +77135, +77161, +77161, +77173, +77189, +77202, +77202, +77202, +77202, +77202, +77215, +77215, +77215, +77226, +77247, +77270, +77270, +77270, +77270, +77292, +77316, +77316, +77316, +77326, +77375, +77375, +77375, +77375, +77375, +77408, +77431, +77442, +77442, +77449, +77467, +77516, +77528, +77555, +77574, +77574, +77588, +77588, +77603, +77603, +77603, +77624, +77624, +77643, +77643, +77651, +77662, +77662, +77662, +77677, +77677, +77684, +77765, +77783, +77819, +77838, +77838, +77838, +77851, +77851, +77863, +77863, +77863, +77875, +77899, +77899, +77915, +77915, +77915, +77946, +77946, +77946, +77946, +77946, +77956, +77956, +77978, +77978, +77978, +77994, +77994, +77994, +78010, +78023, +78054, +78076, +78096, +78096, +78096, +78096, +78128, +78128, +78128, +78160, +78182, +78195, +78195, +78223, +78223, +78223, +78223, +78223, +78233, +78267, +78279, +78279, +78279, +78279, +78279, +78319, +78350, +78350, +78363, +78363, +78373, +78373, +78373, +78408, +78443, +78456, +78474, +78494, +78494, +78507, +78525, +78541, +78541, +78586, +78598, +78610, +78626, +78632, +78632, +78656, +78698, +78725, +78760, +78760, +78798, +78822, +78847, +78847, +78847, +78865, +78917, +78934, +78934, +78934, +78934, +78962, +78981, +78981, +78981, +78981, +78988, +79001, +79001, +79001, +79009, +79009, +79009, +79009, +79033, +79033, +79055, +79067, +79067, +79067, +79084, +79099, +79099, +79112, +79112, +79112, +79123, +79123, +79123, +79123, +79123, +79144, +79152, +79152, +79165, +79165, +79180, +79186, +79196, +79196, +79196, +79221, +79235, +79235, +79249, +79264, +79274, +79290, +79300, +79346, +79346, +79346, +79346, +79346, +79367, +79383, +79390, +79390, +79447, +79447, +79470, +79470, +79493, +79493, +79493, +79516, +79548, +79548, +79579, +79589, +79603, +79603, +79603, +79609, +79609, +79609, +79609, +79609, +79609, +79616, +79626, +79626, +79636, +79643, +79688, +79703, +79720, +79739, +79746, +79763, +79778, +79791, +79791, +79805, +79805, +79818, +79818, +79824, +79836, +79856, +79877, +79883, +79900, +79900, +79900, +79918, +79934, +79944, +79982, +79982, +80001, +80014, +80014, +80022, +80022, +80034, +80047, +80047, +80047, +80057, +80064, +80064, +80086, +80115, +80115, +80123, +80123, +80149, +80170, +80182, +80182, +80200, +80226, +80270, +80310, +80344, +80344, +80344, +80344, +80344, +80344, +80359, +80359, +80369, +80369, +80391, +80409, +80409, +80439, +80439, +80439, +80458, +80458, +80469, +80469, +80520, +80520, +80520, +80520, +80520, +80520, +80543, +80593, +80603, +80603, +80603, +80620, +80634, +80669, +80675, +80675, +80675, +80675, +80685, +80704, +80731, +80731, +80741, +80760, +80760, +80760, +80760, +80778, +80778, +80778, +80806, +80826, +80826, +80826, +80826, +80826, +80852, +80852, +80864, +80872, +80878, +80878, +80887, +80887, +80899, +80938, +80955, +80955, +80962, +80979, +80979, +80992, +80999, +81022, +81022, +81022, +81054, +81104, +81163, +81163, +81170, +81170, +81202, +81202, +81249, +81249, +81256, +81256, +81262, +81301, +81307, +81345, +81345, +81345, +81345, +81345, +81367, +81367, +81392, +81392, +81412, +81452, +81462, +81468, +81468, +81477, +81491, +81527, +81547, +81582, +81599, +81599, +81618, +81641, +81646, +81646, +81652, +81658, +81680, +81688, +81724, +81760, +81776, +81783, +81798, +81798, +81798, +81804, +81810, +81810, +81810, +81810, +81810, +81816, +81816, +81816, +81816, +81816, +81816, +81841, +81874, +81880, +81886, +81886, +81908, +81908, +81920, +81933, +81933, +81940, +81940, +81940, +81954, +81972, +81972, +82038, +82053, +82068, +82080, +82080, +82102, +82120, +82129, +82129, +82171, +82191, +82191, +82211, +82211, +82244, +82267, +82267, +82279, +82290, +82290, +82290, +82290, +82318, +82323, +82323, +82350, +82367, +82385, +82395, +82425, +82425, +82471, +82471, +82494, +82494, +82513, +82519, +82539, +82539, +82551, +82551, +82557, +82557, +82569, +82577, +82596, +82596, +82596, +82596, +82602, +82610, +82638, +82655, +82655, +82666, +82676, +82683, +82683, +82683, +82688, +82713, +82719, +82740, +82746, +82752, +82764, +82770, +82795, +82801, +82807, +82813, +82822, +82873, +82881, +82894, +82894, +82900, +82906, +82936, +82936, +82969, +82969, +82997, +82997, +83039, +83085, +83092, +83107, +83129, +83134, +83152, +83152, +83152, +83158, +83174, +83174, +83174, +83174, +83182, +83199, +83199, +83209, +83209, +83209, +83209, +83209, +83253, +83259, +83275, +83284, +83299, +83328, +83328, +83328, +83334, +83334, +83334, +83334, +83339, +83383, +83383, +83400, +83434, +83440, +83456, +83512, +83527, +83533, +83533, +83533, +83540, +83540, +83546, +83563, +83574, +83586, +83593, +83653, +83653, +83653, +83653, +83659, +83679, +83685, +83702, +83734, +83740, +83740, +83774, +83774, +83781, +83837, +83837, +83852, +83852, +83852, +83867, +83867, +83867, +83867, +83867, +83895, +83901, +83901, +83919, +83925, +83925, +83934, +83944, +83944, +83944, +83951, +83969, +83990, +83990, +84000, +84000, +84013, +84013, +84029, +84049, +84049, +84080, +84085, +84085, +84085, +84111, +84128, +84145, +84164, +84176, +84206, +84206, +84244, +84244, +84255, +84276, +84297, +84297, +84297, +84297, +84297, +84310, +84326, +84332, +84348, +84395, +84434, +84459, +84459, +84459, +84459, +84472, +84494, +84494, +84494, +84501, +84521, +84521, +84538, +84538, +84585, +84585, +84610, +84615, +84615, +84615, +84658, +84658, +84668, +84691, +84712, +84726, +84726, +84733, +84733, +84739, +84751, +84751, +84751, +84757, +84772, +84802, +84809, +84835, +84841, +84862, +84883, +84883, +84889, +84918, +84918, +84931, +84942, +84942, +84984, +84993, +85023, +85029, +85073, +85113, +85120, +85137, +85187, +85187, +85187, +85225, +85231, +85248, +85261, +85261, +85282, +85313, +85340, +85369, +85385, +85395, +85412, +85419, +85442, +85471, +85501, +85560, +85576, +85611, +85611, +85611, +85618, +85618, +85618, +85625, +85632, +85686, +85704, +85704, +85711, +85738, +85745, +85795, +85795, +85826, +85833, +85840, +85845, +85845, +85860, +85867, +85874, +85881, +85881, +85881, +85892, +85910, +85960, +85980, +86001, +86001, +86057, +86057, +86064, +86064, +86071, +86071, +86096, +86123, +86123, +86139, +86146, +86146, +86159, +86159, +86159, +86177, +86195, +86202, +86230, +86230, +86250, +86273, +86282, +86289, +86303, +86303, +86303, +86327, +86337, +86355, +86355, +86355, +86362, +86369, +86402, +86402, +86444, +86451, +86451, +86458, +86480, +86480, +86508, +86508, +86530, +86530, +86530, +86551, +86561, +86594, +86614, +86614, +86636, +86651, +86658, +86665, +86678, +86702, +86702, +86709, +86709, +86739, +86759, +86775, +86787, +86855, +86891, +86891, +86904, +86904, +86927, +86935, +86950, +86950, +86950, +86978, +86983, +86983, +86999, +86999, +87008, +87022, +87029, +87039, +87060, +87060, +87076, +87076, +87089, +87116, +87123, +87130, +87130, +87130, +87150, +87157, +87173, +87199, +87217, +87234, +87257, +87257, +87266, +87279, +87289, +87289, +87289, +87289, +87315, +87322, +87332, +87332, +87342, +87342, +87363, +87381, +87450, +87450, +87464, +87511, +87518, +87535, +87557, +87564, +87575, +87589, +87596, +87613, +87620, +87620, +87641, +87648, +87655, +87662, +87669, +87690, +87708, +87708, +87718, +87725, +87725, +87734, +87741, +87748, +87792, +87792, +87799, +87813, +87834, +87834, +87847, +87847, +87854, +87871, +87878, +87893, +87900, +87942, +87971, +88003, +88017, +88045, +88052, +88059, +88073, +88101, +88125, +88132, +88132, +88132, +88132, +88132, +88143, +88143, +88151, +88158, +88175, +88175, +88195, +88212, +88219, +88219, +88237, +88244, +88266, +88266, +88273, +88273, +88296, +88296, +88318, +88318, +88318, +88324, +88344, +88368, +88368, +88375, +88400, +88400, +88407, +88443, +88443, +88466, +88497, +88497, +88504, +88511, +88584, +88591, +88609, +88629, +88629, +88629, +88643, +88660, +88666, +88691, +88691, +88691, +88691, +88691, +88691, +88691, +88704, +88704, +88713, +88726, +88726, +88774, +88789, +88837, +88837, +88837, +88846, +88868, +88881, +88881, +88888, +88937, +88961, +88987, +89030, +89043, +89101, +89150, +89150, +89187, +89203, +89210, +89224, +89260, +89267, +89267, +89267, +89274, +89288, +89295, +89311, +89318, +89330, +89351, +89358, +89388, +89388, +89398, +89405, +89412, +89432, +89474, +89481, +89508, +89523, +89552, +89563, +89584, +89612, +89612, +89629, +89636, +89662, +89681, +89687, +89702, +89711, +89727, +89742, +89754, +89773, +89783, +89849, +89856, +89856, +89863, +89877, +89900, +89907, +89907, +89907, +89921, +89921, +89938, +89938, +89961, +89980, +90000, +90021, +90070, +90070, +90086, +90086, +90146, +90178, +90178, +90187, +90209, +90209, +90209, +90215, +90240, +90247, +90256, +90256, +90290, +90290, +90298, +90298, +90305, +90329, +90329, +90353, +90388, +90403, +90409, +90409, +90409, +90416, +90416, +90416, +90436, +90436, +90436, +90461, +90470, +90475, +90475, +90499, +90540, +90540, +90583, +90590, +90608, +90623, +90623, +90643, +90643, +90651, +90718, +90725, +90731, +90731, +90757, +90780, +90780, +90806, +90829, +90845, +90855, +90891, +90891, +90906, +90926, +90960, +90975, +90975, +90994, +91017, +91017, +91024, +91024, +91024, +91034, +91034, +91034, +91052, +91052, +91067, +91103, +91135, +91172, +91188, +91188, +91202, +91221, +91245, +91245, +91245, +91245, +91245, +91245, +91245, +91245, +91245, +91258, +91258, +91276, +91293, +91293, +91328, +91349, +91363, +91372, +91372, +91393, +91393, +91393, +91393, +91393, +91393, +91393, +91412, +91445, +91445, +91463, +91479, +91497, +91512, +91543, +91549, +91549, +91572, +91572, +91589, +91613, +91629, +91655, +91687, +91703, +91703, +91723, +91741, +91741, +91741, +91767, +91778, +91778, +91778, +91791, +91797, +91797, +91806, +91806, +91820, +91836, +91855, +91855, +91855, +91855, +91862, +91900, +91906, +91948, +91948, +91948, +91956, +91956, +91956, +91966, +91989, +91989, +92007, +92007, +92043, +92049, +92066, +92082, +92088, +92088, +92106, +92106, +92106, +92106, +92121, +92121, +92121, +92121, +92132, +92132, +92141, +92160, +92160, +92160, +92160, +92167, +92183, +92192, +92207, +92227, +92242, +92254, +92254, +92284, +92297, +92318, +92318, +92337, +92346, +92386, +92386, +92386, +92386, +92411, +92439, +92454, +92486, +92486, +92512, +92512, +92529, +92529, +92529, +92534, +92534, +92573, +92601, +92621, +92628, +92648, +92657, +92657, +92657, +92657, +92663, +92675, +92700, +92722, +92736, +92742, +92742, +92762, +92762, +92783, +92783, +92878, +92891, +92891, +92901, +92907, +92922, +92937, +92943, +92979, +92990, +93025, +93043, +93043, +93043, +93043, +93043, +93065, +93078, +93105, +93129, +93140, +93140, +93151, +93170, +93170, +93181, +93181, +93181, +93188, +93198, +93198, +93198, +93231, +93231, +93249, +93258, +93272, +93272, +93295, +93302, +93307, +93307, +93323, +93323, +93333, +93333, +93360, +93369, +93404, +93413, +93430, +93430, +93430, +93447, +93467, +93467, +93521, +93528, +93546, +93546, +93571, +93602, +93628, +93639, +93658, +93689, +93703, +93722, +93729, +93729, +93736, +93794, +93812, +93819, +93819, +93819, +93819, +93844, +93851, +93874, +93874, +93888, +93895, +93922, +93922, +93922, +93930, +93930, +93930, +93937, +93937, +93944, +93966, +93966, +93966, +93966, +93966, +93997, +94011, +94018, +94025, +94043, +94043, +94050, +94067, +94074, +94074, +94081, +94081, +94081, +94088, +94114, +94125, +94125, +94125, +94125, +94162, +94174, +94174, +94206, +94224, +94240, +94283, +94283, +94283, +94283, +94290, +94302, +94302, +94302, +94308, +94308, +94344, +94354, +94369, +94374, +94374, +94441, +94482, +94482, +94508, +94526, +94526, +94532, +94539, +94555, +94562, +94577, +94584, +94584, +94598, +94598, +94620, +94638, +94666, +94672, +94672, +94718, +94718, +94725, +94742, +94742, +94749, +94749, +94771, +94771, +94771, +94780, +94805, +94815, +94815, +94820, +94820, +94841, +94841, +94851, +94851, +94851, +94871, +94902, +94902, +94924, +94935, +94942, +94949, +94966, +94966, +94966, +94973, +94973, +94973, +94987, +94987, +94987, +95007, +95037, +95037, +95037, +95037, +95044, +95044, +95044, +95061, +95084, +95084, +95104, +95126, +95126, +95165, +95187, +95194, +95200, +95216, +95223, +95230, +95237, +95237, +95237, +95260, +95273, +95324, +95331, +95338, +95353, +95377, +95388, +95388, +95388, +95403, +95403, +95410, +95417, +95417, +95434, +95476, +95483, +95493, +95500, +95505, +95512, +95519, +95519, +95554, +95568, +95568, +95592, +95592, +95645, +95668, +95668, +95701, +95727, +95768, +95795, +95829, +95844, +95853, +95862, +95862, +95875, +95882, +95882, +95907, +95907, +95907, +95925, +95925, +95925, +95925, +95925, +95951, +95967, +95967, +96018, +96047, +96069, +96087, +96107, +96107, +96107, +96107, +96114, +96142, +96164, +96205, +96205, +96205, +96212, +96236, +96236, +96243, +96243, +96250, +96286, +96293, +96332, +96339, +96353, +96359, +96375, +96389, +96414, +96436, +96446, +96446, +96454, +96466, +96471, +96499, +96554, +96564, +96586, +96603, +96614, +96614, +96629, +96629, +96640, +96662, +96680, +96680, +96700, +96722, +96742, +96742, +96749, +96756, +96802, +96824, +96831, +96840, +96847, +96874, +96874, +96886, +96893, +96900, +96900, +96907, +96914, +96924, +96931, +96944, +96996, +97024, +97024, +97045, +97062, +97062, +97069, +97096, +97096, +97096, +97134, +97134, +97141, +97141, +97148, +97155, +97155, +97162, +97186, +97205, +97240, +97240, +97240, +97240, +97246, +97251, +97251, +97267, +97267, +97309, +97325, +97341, +97363, +97363, +97377, +97392, +97392, +97392, +97433, +97443, +97443, +97457, +97457, +97479, +97479, +97488, +97500, +97516, +97527, +97527, +97534, +97534, +97534, +97534, +97534, +97534, +97548, +97548, +97548, +97548, +97548, +97583, +97583, +97583, +97604, +97604, +97604, +97604, +97618, +97633, +97633, +97642, +97662, +97662, +97662, +97662, +97662, +97662, +97662, +97662, +97668, +97668, +97702, +97702, +97702, +97719, +97729, +97729, +97729, +97729, +97729, +97729, +97736, +97736, +97768, +97775, +97790, +97790, +97814, +97824, +97849, +97849, +97849, +97849, +97849, +97849, +97878, +97878, +97962, +97974, +97974, +97974, +98020, +98031, +98031, +98031, +98031, +98044, +98059, +98059, +98059, +98059, +98059, +98077, +98087, +98097, +98104, +98104, +98104, +98120, +98126, +98169, +98169, +98190, +98190, +98206, +98206, +98230, +98241, +98241, +98248, +98280, +98280, +98297, +98297, +98312, +98327, +98342, +98380, +98380, +98389, +98408, +98408, +98408, +98432, +98446, +98461, +98520, +98520, +98533, +98553, +98575, +98575, +98575, +98594, +98594, +98625, +98636, +98636, +98636, +98653, +98672, +98672, +98685, +98685, +98691, +98699, +98699, +98707, +98737, +98748, +98748, +98766, +98799, +98799, +98799, +98799, +98799, +98799, +98817, +98817, +98817, +98847, +98847, +98859, +98894, +98894, +98894, +98929, +98947, +98947, +98979, +98988, +99005, +99005, +99037, +99037, +99037, +99037, +99037, +99037, +99062, +99067, +99077, +99097, +99097, +99110, +99110, +99158, +99209, +99224, +99224, +99224, +99224, +99247, +99247, +99271, +99271, +99276, +99281, +99299, +99322, +99322, +99330, +99340, +99356, +99367, +99377, +99388, +99388, +99388, +99388, +99388, +99388, +99388, +99437, +99470, +99503, +99516, +99549, +99549, +99555, +99555, +99555, +99555, +99570, +99570, +99577, +99577, +99597, +99597, +99597, +99627, +99658, +99663, +99663, +99675, +99719, +99719, +99719, +99719, +99737, +99744, +99744, +99776, +99791, +99812, +99837, +99850, +99871, +99871, +99871, +99879, +99889, +99889, +99899, +99899, +99899, +99904, +99925, +99925, +99947, +99960, +99960, +99973, +99973, +100005, +100005, +100026, +100026, +100031, +100062, +100079, +100079, +100084, +100100, +100148, +100148, +100199, +100199, +100207, +100235, +100262, +100296, +100296, +100322, +100328, +100328, +100328, +100351, +100361, +100361, +100367, +100367, +100367, +100377, +100377, +100421, +100421, +100435, +100435, +100481, +100481, +100481, +100489, +100489, +100502, +100509, +100525, +100540, +100540, +100560, +100560, +100611, +100620, +100640, +100653, +100653, +100653, +100685, +100685, +100698, +100712, +100721, +100726, +100726, +100726, +100741, +100741, +100751, +100782, +100792, +100801, +100808, +100813, +100850, +100850, +100863, +100873, +100892, +100892, +100892, +100892, +100892, +100909, +100925, +100936, +100955, +100969, +100978, +100978, +100978, +101008, +101036, +101036, +101071, +101071, +101102, +101127, +101151, +101151, +101158, +101170, +101189, +101205, +101205, +101205, +101234, +101248, +101248, +101248, +101248, +101248, +101275, +101275, +101287, +101314, +101314, +101356, +101366, +101366, +101366, +101374, +101382, +101389, +101408, +101408, +101426, +101426, +101443, +101443, +101459, +101459, +101459, +101459, +101476, +101476, +101504, +101504, +101504, +101529, +101567, +101591, +101638, +101638, +101645, +101673, +101711, +101739, +101787, +101787, +101787, +101797, +101814, +101834, +101834, +101834, +101899, +101907, +101914, +101914, +101914, +101936, +101948, +101948, +101948, +101987, +101987, +101987, +101997, +102027, +102027, +102034, +102034, +102042, +102053, +102068, +102086, +102091, +102099, +102099, +102125, +102138, +102151, +102151, +102151, +102160, +102199, +102199, +102199, +102199, +102216, +102216, +102233, +102255, +102268, +102286, +102302, +102323, +102332, +102339, +102351, +102351, +102351, +102356, +102395, +102395, +102430, +102447, +102447, +102447, +102457, +102457, +102457, +102493, +102493, +102493, +102493, +102502, +102536, +102543, +102543, +102543, +102543, +102566, +102596, +102596, +102625, +102654, +102660, +102678, +102678, +102678, +102678, +102701, +102701, +102701, +102717, +102717, +102723, +102734, +102734, +102750, +102766, +102766, +102766, +102801, +102807, +102807, +102833, +102849, +102849, +102868, +102868, +102881, +102887, +102904, +102924, +102924, +102980, +102980, +103013, +103073, +103073, +103079, +103079, +103085, +103115, +103115, +103115, +103128, +103128, +103128, +103143, +103206, +103231, +103241, +103263, +103263, +103271, +103271, +103309, +103350, +103350, +103379, +103398, +103406, +103425, +103425, +103459, +103468, +103491, +103491, +103491, +103508, +103525, +103525, +103536, +103536, +103536, +103550, +103550, +103573, +103578, +103578, +103578, +103591, +103601, +103612, +103612, +103630, +103630, +103630, +103630, +103659, +103659, +103666, +103684, +103696, +103696, +103719, +103763, +103778, +103778, +103778, +103778, +103834, +103834, +103841, +103868, +103868 +}; + +static const char *tldData[] = { +"sakurai.nara.jp\0" +"filegear.me\0" +"maibara.shiga.jp\0" +"consultant.aero\0mykolaiv.ua\0visa\0" +"usarts.museum\0servebeer.com\0" +"eniwa.hokkaido.jp\0abb\0" +"abc\0s3.dualstack.eu-west-3.amazonaws.com\0" +"ichinomiya.aichi.jp\0lawyer\0za.bz\0" +"beardu.no\0fl\xc3\xa5.no\0" +"nishi.fukuoka.jp\0" +"sanagochi.tokushima.jp\0" +"genova.it\0" +"pescara.it\0" +"naustdal.no\0co.place\0" +"aurland.no\0vipsinaapp.com\0" +"samsclub\0" +"from-ms.com\0from-nc.com\0i234.me\0" +"moto\0origins\0" +"1337.pictures\0" +"iyo.ehime.jp\0" +"ddnsking.com\0" +"*.cns.joyent.com\0" +"veterinaire.fr\0" +"circus.museum\0aco\0" +"monza-brianza.it\0koganei.tokyo.jp\0" +"taranto.it\0chitose.hokkaido.jp\0hara.nagano.jp\0" +"yao.osaka.jp\0" +"*.bd\0" +"act.au\0meland.no\0\xec\x82\xbc\xec\x84\xb1\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" +"educator.aero\0" +"yahiko.niigata.jp\0" +"viva\0" +"kawagoe.mie.jp\0" +"ads\0" +"veneto.it\0" +"aeg\0" +"static.observableusercontent.com\0" +"\xe3\x82\xb3\xe3\x83\xa0\0" +"grp.lk\0austin.museum\0karasjohka.no\0sc.ug\0barsy.online\0" +"hachioji.tokyo.jp\0xerox\0" +"luster.no\0tinn.no\0vivo\0" +"sc.tz\0" +"*.ck\0m\xc3\xa1latvuopmi.no\0cisco\0app.os.fedoraproject.org\0" +"myjino.ru\0" +"community\0" +"sc.us\0" +"\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" +"weather\0" +"science\0" +"fukuroi.shizuoka.jp\0afl\0" +"suedtirol.it\0" +"blogsite.org\0" +"kuromatsunai.hokkaido.jp\0of.fashion\0" +"mo.cn\0zentsuji.kagawa.jp\0usa.oita.jp\0" +"frana.no\0\xd5\xb0\xd5\xa1\xd5\xb5\0" +"mormon\0" +"sch.zm\0office\0" +"krodsherad.no\0snillfjord.no\0" +"kamishihoro.hokkaido.jp\0oji.nara.jp\0" +"asso.re\0" +"kaita.hiroshima.jp\0" +"akita.akita.jp\0" +"mt.eu.org\0loginto.me\0" +"*.er\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"trentin-s\xc3\xbc""dtirol.it\0flickr\0" +"o.bg\0eigersund.no\0" +"research.aero\0b.se\0fhsk.se\0" +"hachirogata.akita.jp\0keisen.fukuoka.jp\0marriott\0reit\0" +"*.fk\0cc.or.us\0dyndns-office.com\0" +"saskatchewan.museum\0uzhgorod.ua\0investments\0" +"kanegasaki.iwate.jp\0" +"aig\0trycloudflare.com\0" +"bugatti\0cupcake.is\0" +"ngrok.io\0" +"int.eu.org\0securitytactics.com\0" +"arte.bo\0" +"ogi.saga.jp\0" +"s\xc3\xa1lat.no\0" +"ginowan.okinawa.jp\0citadel\0" +"usercontent.jp\0" +"hob\xc3\xb8l.no\0hermes\0" +"kitaura.miyazaki.jp\0" +"to.gov.br\0" +"lucca.it\0shintoku.hokkaido.jp\0" +"pccw\0" +"\xeb\x8b\xb7\xec\xbb\xb4\0now-dns.net\0" +"ga.us\0" +"am.br\0sp.it\0" +"raholt.no\0" +"is-an-entertainer.com\0" +"asso.nc\0natura\0" +"monzaedellabrianza.it\0" +"from-in.com\0" +"ci.it\0" +"shitara.aichi.jp\0saigawa.fukuoka.jp\0" +"fastly-terrarium.com\0" +"hashima.gifu.jp\0maniwa.okayama.jp\0" +"*.on-k3s.io\0" +"george\0" +"ninohe.iwate.jp\0" +"sejny.pl\0" +"walter\0" +"oslo.no\0bygland.no\0" +"*.jm\0badajoz.museum\0lanxess\0" +"cleverapps.io\0" +"gift\0" +"zone\0" +"roma.it\0" +"mo.it\0" +"barsy.bg\0dnsupdate.info\0" +"*.kh\0" +"toyosato.shiga.jp\0rent\0" +"nyny.museum\0is-a-musician.com\0" +"ntr.br\0aso.kumamoto.jp\0kouhoku.saga.jp\0" +"preservation.museum\0" +"akashi.hyogo.jp\0" +"barsy.ca\0" +"fastpanel.direct\0" +"utazas.hu\0" +"helsinki\0" +"is-a-chef.net\0" +"myphotos.cc\0barsy.de\0" +"kizu.kyoto.jp\0anz\0" +"aol\0" +"ostrowiec.pl\0" +"*.mm\0" +"rishirifuji.hokkaido.jp\0utazu.kagawa.jp\0" +"omi.niigata.jp\0khplay.nl\0" +"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" +"aarp\0" +"quebec.museum\0" +"cloudycluster.net\0" +"s\xc3\xa1l\xc3\xa1t.no\0\xe7\xb5\x84\xe7\xb9\x94.\xe9\xa6\x99\xe6\xb8\xaf\0" +"market\0" +"ltd.cy\0" +"ueno.gunma.jp\0app\0" +"gallery.museum\0yachts\0" +"*.np\0" +"asso.km\0" +"dyn-o-saur.com\0" +"oguchi.aichi.jp\0" +"barsy.eu\0" +"cc.gu.us\0website\0" +"otaki.nagano.jp\0" +"karacol.su\0" +"ontario.museum\0" +"hanamaki.iwate.jp\0" +"\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x90\xe0\xb8\x9a\xe0\xb8\xb2\xe0\xb8\xa5.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0bar\0" +"commune.am\0bbc\0north-kazakhstan.su\0" +"my.eu.org\0oya.to\0" +"finnoy.no\0" +"surgery\0" +"asso.mc\0*.pg\0" +"morotsuka.miyazaki.jp\0uzs.gov.pl\0" +"aoki.nagano.jp\0rest\0" +"pila.pl\0" +"sunndal.no\0" +"ok.us\0" +"kimino.wakayama.jp\0art\0bbt\0" +"dev-myqnapcloud.com\0" +"fortal.br\0miyashiro.saitama.jp\0" +"bcg\0" +"forex\0" +"zappos\0" +"mantova.it\0yasaka.nagano.jp\0" +"bcn\0" +"ltd.gi\0unj\xc3\xa1rga.no\0" +"lc.it\0iwata.shizuoka.jp\0" +"\xc3\xa1lt\xc3\xa1.no\0melhus.no\0vagsoy.no\0" +"discount\0" +"taira.toyama.jp\0" +"dedyn.io\0" +"omaezaki.shizuoka.jp\0" +"latrobe\0" +"navigation.aero\0web.bo\0vgs.no\0homeunix.org\0" +"adult.ht\0ogata.akita.jp\0" +"ltd.hk\0" +"barsy.in\0" +"barsy.io\0" +"bytom.pl\0" +"*.elb.amazonaws.com\0" +"7.bg\0monticello.museum\0vefsn.no\0" +"perspecta.cloud\0" +"web.co\0verdal.no\0" +"vi.it\0tsuiki.fukuoka.jp\0" +"sango.nara.jp\0" +"author.aero\0" +"dyndns-free.com\0" +"ichikawa.hyogo.jp\0nakanoto.ishikawa.jp\0" +"monza-e-della-brianza.it\0bet\0" +"tm.cy\0" +"knx-server.net\0" +"web.do\0" +"desa.id\0ma.leg.br\0" +"shinjo.nara.jp\0" +"sandcats.io\0" +"olbia-tempio.it\0hamatama.saga.jp\0" +"higashiyodogawa.osaka.jp\0" +"\xe5\x81\xa5\xe5\xba\xb7\0" +"nl.ca\0app.banzaicloud.io\0" +"plaza.museum\0divttasvuotna.no\0za.com\0" +"gmail\0" +"homesecuritymac.com\0" +"furniture.museum\0tiaa\0daplie.me\0shacknet.nu\0" +"minamata.kumamoto.jp\0yokoze.saitama.jp\0" +"camera\0" +"passenger-association.aero\0axa\0property\0" +"wakayama.jp\0\xe5\x9f\xbc\xe7\x8e\x89.jp\0" +"\xc3\xa1k\xc5\x8boluokta.no\0aws\0" +"oseto.nagasaki.jp\0" +"vaksdal.no\0nl.eu.org\0" +"*.ocs.customer-oci.com\0" +"k12.oh.us\0" +"rebun.hokkaido.jp\0" +"volda.no\0" +"tm.fr\0gov.nc.tr\0" +"ltd.lk\0shopitsite.com\0" +"temp-dns.com\0" +"\xe5\xba\x83\xe5\xb3\xb6.jp\0bid\0" +"lib.ri.us\0schule\0" +"cruise\0" +"!city.kawasaki.jp\0" +"cyber.museum\0o.se\0mo.us\0troitsk.su\0" +"forli-cesena.it\0" +"skedsmokorset.no\0" +"web.gu\0able\0bio\0" +"yabu.hyogo.jp\0tanabe.kyoto.jp\0" +"drud.io\0members.linode.com\0" +"hk.cn\0" +"sa.au\0" +"gsm.pl\0" +"homeoffice.gov.uk\0" +"biz\0\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" +"ascolipiceno.it\0" +"michigan.museum\0ltd.ng\0" +"web.id\0" +"bifuka.hokkaido.jp\0" +"tm.hu\0" +"nara.nara.jp\0" +"citic\0" +"val-daosta.it\0" +"lyngdal.no\0sor-varanger.no\0trana.no\0tynset.no\0""001www.com\0" +"tamamura.gunma.jp\0" +"*.dweb.link\0" +"toride.ibaraki.jp\0nagawa.nagano.jp\0" +"*.ye\0" +"kawaminami.miyazaki.jp\0" +"name\0us-west-2.elasticbeanstalk.com\0" +"mincom.tn\0" +"myasustor.com\0*.ocp.customer-oci.com\0" +"yazu.tottori.jp\0" +"endofinternet.org\0" +"sa.cr\0cesena-forli.it\0nakagawa.hokkaido.jp\0hannan.osaka.jp\0" +"reggio-emilia.it\0poker\0" +"k12.sc.us\0" +"bolivia.bo\0" +"bj.cn\0higashi.okinawa.jp\0hyatt\0" +"glug.org.uk\0" +"eu.org\0" +"is-not-certified.com\0" +"hashbang.sh\0" +"museet.museum\0chase\0" +"tours\0" +"degree\0" +"tm.km\0eng.pro\0" +"ota.gunma.jp\0in.net\0" +"kyuragi.saga.jp\0" +"style\0" +"sakata.yamagata.jp\0" +"nationalheritage.museum\0bms\0" +"joetsu.niigata.jp\0" +"web.lk\0ng.eu.org\0" +"nakama.fukuoka.jp\0" +"bmw\0" +"altoadige.it\0" +"zakopane.pl\0" +"ks.ua\0" +"tm.mc\0k12.md.us\0" +"broadway\0" +"kamisunagawa.hokkaido.jp\0" +"tm.mg\0" +"\xd9\x85\xd9\x88\xd8\xb1\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\xd9\x8a\xd8\xa7\0" +"hyllestad.no\0" +"ibigawa.gifu.jp\0misato.miyagi.jp\0" +"kids.museum\0resindevice.io\0" +"semine.miyagi.jp\0pinb.gov.pl\0" +"stjordalshalsen.no\0bom\0is-a-blogger.com\0" +"snasa.no\0ks.us\0boo\0" +"yuu.yamaguchi.jp\0web.nf\0" +"\xc3\xa5""fjord.no\0" +"web.ni\0africa\0" +"bot\0vistaprint\0" +"reklam.hu\0" +"df.gov.br\0church\0" +"hanggliding.aero\0" +"koga.fukuoka.jp\0nanbu.tottori.jp\0box\0" +"nakano.nagano.jp\0" +"tm.no\0" +"nogi.tochigi.jp\0" +"ox.rs\0" +"obanazawa.yamagata.jp\0" +"contemporaryart.museum\0" +"chikuma.nagano.jp\0cab\0" +"diskussionsbereich.de\0" +"brindisi.it\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0" +"bharti\0forsale\0ltd.ua\0" +"\xe5\xa4\xa7\xe9\x98\xaa.jp\0toba.mie.jp\0virgin\0" +"vi.us\0" +"fantasyleague.cc\0" +"cal\0" +"tecnologia.bo\0drammen.no\0cam\0" +"avocat.fr\0" +"natural.bo\0ltd.uk\0cba\0" +"udono.mie.jp\0car\0" +"cat\0imdb\0" +"web.pk\0" +"sa.it\0ojiya.niigata.jp\0" +"tm.pl\0mazowsze.pl\0republican\0" +"vaga.no\0" +"cbn\0" +"firmdale\0forum\0" +"oki.fukuoka.jp\0" +"nl.no\0" +"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0limited\0" +"cbs\0ferrari\0hs.zone\0" +"itoigawa.niigata.jp\0" +"friulivegiulia.it\0" +"from-mn.com\0" +"oita.oita.jp\0" +"firewall-gateway.de\0" +"futsu.nagasaki.jp\0" +"v\xc3\xa5g\xc3\xa5.no\0" +"unjarga.no\0" +"nt.edu.au\0" +"sumoto.kumamoto.jp\0chino.nagano.jp\0" +"pagespeedmobilizer.com\0" +"feste-ip.net\0" +"press.aero\0" +"meldal.no\0" +"tm.ro\0" +"grainger\0" +"cc.ca.us\0" +"\xe9\x9d\x99\xe5\xb2\xa1.jp\0" +"firewall-gateway.com\0" +"cesena-forl\xc3\xac.it\0" +"tm.se\0" +"ceb\0" +"suzu.ishikawa.jp\0shizuoka.shizuoka.jp\0yoshida.shizuoka.jp\0" +"sport.hu\0" +"showa.gunma.jp\0tomakomai.hokkaido.jp\0rybnik.pl\0myeffect.net\0" +"flakstad.no\0" +"akaiwa.okayama.jp\0wajiki.tokushima.jp\0" +"malatvuopmi.no\0ceo\0navy\0s3.ap-northeast-2.amazonaws.com\0" +"\xd0\xb1\xd0\xb3\0cfa\0" +"minamioguni.kumamoto.jp\0" +"vega.no\0" +"web.tj\0cfd\0" +"kunstunddesign.museum\0" +"pistoia.it\0vv.it\0" +"pueblo.bo\0" +"buy\0drud.us\0" +"messina.it\0" +"public.museum\0r\xc3\xb8ros.no\0" +"web.tr\0" +"satte.saitama.jp\0" +"minami.fukuoka.jp\0teshikaga.hokkaido.jp\0" +"careers\0" +"namsos.no\0ringebu.no\0" +"goto.nagasaki.jp\0pulawy.pl\0" +"cv.ua\0arkhangelsk.su\0" +"deals\0definima.io\0" +"shika.ishikawa.jp\0gushikami.okinawa.jp\0oguni.yamagata.jp\0" +"web.ve\0tips\0" +"cn-north-1.eb.amazonaws.com.cn\0" +"sande.vestfold.no\0" +"communication.museum\0" +"boleslawiec.pl\0" +"decorativearts.museum\0" +"cern\0""2ix.at\0" +"pu.it\0" +"trust.museum\0s3-us-west-2.amazonaws.com\0" +"clinic\0" +"biz.bb\0" +"gs.va.no\0is-slick.com\0" +"qsl.br\0biz.at\0" +"honbetsu.hokkaido.jp\0zachpomor.pl\0" +"biz.az\0" +"katsuragi.nara.jp\0" +"flora.no\0" +"2ix.ch\0" +"aero.tt\0" +"bilbao.museum\0levanger.no\0" +"naruto.tokushima.jp\0bzh\0" +"parti.se\0gratis\0" +"2ix.de\0" +"kushima.miyazaki.jp\0t3l3p0rt.net\0" +"stateofdelaware.museum\0lib.as.us\0" +"tananger.no\0" +"aero.mv\0" +"boxfuse.io\0" +"palermo.it\0" +"meraker.no\0" +"biz.cy\0" +"creditcard\0" +"web.za\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0biz.dk\0co.technology\0" +"\xd0\xb5\xd1\x8e\0" +"air.museum\0krager\xc3\xb8.no\0skedsmo.no\0tm.za\0" +"ichiba.tokushima.jp\0" +"immo\0" +"baths.museum\0virtuel.museum\0" +"andria-trani-barletta.it\0shiroishi.miyagi.jp\0arita.saga.jp\0" +"from-oh.com\0" +"tokke.no\0" +"sn.cn\0\xe5\xaf\x8c\xe5\xb1\xb1.jp\0" +"is-found.org\0" +"valled-aosta.it\0fbxos.fr\0" +"pasadena.museum\0is-an-actor.com\0" +"mielec.pl\0" +"biz.et\0" +"tawaramoto.nara.jp\0starostwo.gov.pl\0" +"fjell.no\0" +"kimitsu.chiba.jp\0fashion\0" +"biz.fj\0" +"comunica\xc3\xa7\xc3\xb5""es.museum\0" +"lomza.pl\0" +"*.alces.network\0ap-northeast-3.elasticbeanstalk.com\0webspace.rocks\0" +"komono.mie.jp\0hiraya.nagano.jp\0" +"k12.ca.us\0" +"kv\xc3\xa6nangen.no\0" +"donetsk.ua\0cc.va.us\0" +"frankfurt.museum\0" +"kotohira.kagawa.jp\0" +"openair.museum\0" +"biz.gl\0" +"adac\0togliatti.su\0" +"schoenbrunn.museum\0tree.museum\0" +"friuliveneziagiulia.it\0kurotaki.nara.jp\0beep.pl\0" +"az.us\0university\0" +"dontexist.net\0" +"software.aero\0dattoweb.com\0now-dns.org\0" +"edunet.tn\0" +"filegear-gb.me\0" +"sakuragawa.ibaraki.jp\0" +"in-addr.arpa\0com\0" +"eti.br\0" +"chiba.jp\0tanagura.fukushima.jp\0" +"cpa\0juegos\0" +"pagefrontapp.com\0hk.org\0" +"biz.id\0" +"rj.gov.br\0yamada.toyama.jp\0" +"m.bg\0" +"\xc3\xb8ystre-slidre.no\0" +"naval.museum\0" +"hofu.yamaguchi.jp\0dad\0" +"viking.museum\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"sarufutsu.hokkaido.jp\0buzz\0" +"hirata.fukushima.jp\0czeladz.pl\0" +"stj\xc3\xb8rdalshalsen.no\0askoy.no\0cbg.ru\0" +"is-a-bookkeeper.com\0" +"leg.br\0" +"\xc3\xb8ksnes.no\0loans\0" +"ito.shizuoka.jp\0" +"khmelnitskiy.ua\0" +"ikeda.hokkaido.jp\0" +"r\xc3\xa5holt.no\0tvedestrand.no\0" +"hidaka.wakayama.jp\0" +"biz.ki\0day\0fujitsu\0" +"mg.leg.br\0" +"handa.aichi.jp\0" +"fishing\0from-ri.com\0" +"ibaraki.ibaraki.jp\0intl.tn\0" +"tydal.no\0s3.dualstack.ap-southeast-1.amazonaws.com\0barsyonline.co.uk\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0dr\xc3\xb8""bak.no\0" +"crs\0csc\0obninsk.su\0" +"tachikawa.tokyo.jp\0\xe0\xb8\x98\xe0\xb8\xb8\xe0\xb8\xa3\xe0\xb8\x81\xe0\xb8\xb4\xe0\xb8\x88.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"lorenskog.no\0" +"hayakawa.yamanashi.jp\0" +"luxembourg.museum\0holtalen.no\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" +"fukaya.saitama.jp\0" +"missoula.museum\0vardo.no\0kpmg\0" +"trentino-suedtirol.it\0siteleaf.net\0" +"police.uk\0" +"ribeirao.br\0" +"biz.ls\0" +"nakatsugawa.gifu.jp\0" +"dsmynas.com\0" +"izumo.shimane.jp\0" +"kl\xc3\xa6""bu.no\0" +"\xe0\xb2\xad\xe0\xb2\xbe\xe0\xb2\xb0\xe0\xb2\xa4\0" +"takata.fukuoka.jp\0" +"\xe0\xac\xad\xe0\xac\xbe\xe0\xac\xb0\xe0\xac\xa4\0" +"macys\0" +"info\0kvinnherad.no\0barsy.mobi\0" +"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" +"dds\0" +"biz.mv\0" +"biz.mw\0" +"santoandre.br\0" +"biz.ni\0vagan.no\0jdevcloud.com\0" +"asahikawa.hokkaido.jp\0" +"giehtavuoatna.no\0" +"southcarolina.museum\0" +"trentinoaadige.it\0dealer\0" +"minami.tokushima.jp\0" +"k12.ks.us\0bargains\0" +"biz.nr\0\xd1\x80\xd1\x84\0" +"ddnsgeek.com\0" +"dev\0" +"dagestan.ru\0" +"tobishima.aichi.jp\0" +"fuso.aichi.jp\0" +"sinaapp.com\0" +"kurashiki.okayama.jp\0" +"groundhandling.aero\0bo.nordland.no\0" +"cloudaccess.host\0" +"beauxarts.museum\0sandnessjoen.no\0cc.mt.us\0cc.nd.us\0" +"oyamazaki.kyoto.jp\0szczecin.pl\0" +"dagestan.su\0" +"kawai.nara.jp\0okutama.tokyo.jp\0" +"mandal.no\0" +"no-ip.biz\0" +"tingvoll.no\0biz.pk\0k12.va.us\0" +"kikonai.hokkaido.jp\0biz.pl\0" +"nature.museum\0myqnapcloud.com\0" +"casacam.net\0" +"fuel.aero\0" +"kasamatsu.gifu.jp\0fujimi.saitama.jp\0biz.pr\0\xe5\xb9\xbf\xe4\xb8\x9c\0" +"fortworth.museum\0" +"hitachi\0cloud.goog\0hzc.io\0" +"motosu.gifu.jp\0" +"sauherad.no\0" +"wassamu.hokkaido.jp\0dhl\0" +"lab.ms\0" +"muroto.kochi.jp\0" +"metlife\0" +"shimabara.nagasaki.jp\0" +"loginline.site\0" +"shimamoto.osaka.jp\0" +"\xe5\x95\x86\xe5\x9f\x8e\0" +"hirado.nagasaki.jp\0" +"eisenbahn.museum\0bplaced.de\0qualifioapp.com\0" +"maison\0" +"kamoenai.hokkaido.jp\0miyoshi.tokushima.jp\0crown\0weber\0" +"lom.it\0" +"diy\0" +"golffan.us\0" +"ws.na\0" +"h\xc3\xb8ylandet.no\0ny.us\0\xe5\x9c\xa8\xe7\xba\xbf\0" +"biz.ss\0cc.ri.us\0" +"biz.tj\0" +"guam.gu\0" +"ustka.pl\0quest\0" +"cc.ar.us\0" +"plc.co.im\0civilization.museum\0biz.ua\0" +"biz.tr\0" +"on-aptible.com\0" +"biz.tt\0barsy.support\0" +"b\xc3\xa1id\xc3\xa1r.no\0s3-website.eu-west-2.amazonaws.com\0" +"tamayu.shimane.jp\0" +"is-by.us\0" +"yamato.fukushima.jp\0" +"tas.gov.au\0" +"shiraoka.saitama.jp\0" +"movie\0" +"omotego.fukushima.jp\0\xe5\xa8\xb1\xe4\xb9\x90\0" +"5.bg\0bible\0" +"kui.hiroshima.jp\0" +"issmarterthanyou.com\0" +"romsa.no\0" +"chikuho.fukuoka.jp\0" +"sa.gov.au\0" +"nagahama.shiga.jp\0" +"click\0" +"otaki.saitama.jp\0biz.vn\0" +"tsukui.kanagawa.jp\0" +"flesberg.no\0nesseby.no\0" +"notogawa.shiga.jp\0" +"usr.cloud.muni.cz\0" +"yamaga.kumamoto.jp\0wakuya.miyagi.jp\0" +"national.museum\0kongsvinger.no\0merseine.nu\0" +"dnp\0cistron.nl\0" +"accesscam.org\0" +"otsuki.kochi.jp\0" +"lom.no\0komforb.se\0" +"kitakami.iwate.jp\0" +"dog\0" +"r\xc3\xb8yrvik.no\0lib.ga.us\0" +"aikawa.kanagawa.jp\0" +"kamo.niigata.jp\0" +"waw.pl\0" +"goldpoint\0" +"dot\0" +"gs.tr.no\0" +"trentino-s-tirol.it\0" +"agents.aero\0k12.nv.us\0" +"rr.gov.br\0" +"my-vigor.de\0" +"hisamitsu\0" +"yahaba.iwate.jp\0" +"la-spezia.it\0oristano.it\0" +"s3.amazonaws.com\0" +"slz.br\0" +"z.bg\0brasil.museum\0" +"sasayama.hyogo.jp\0" +"m.se\0" +"fukuchi.fukuoka.jp\0uchinomi.kagawa.jp\0" +"oshima.yamaguchi.jp\0immobilien\0" +"biz.zm\0" +"skien.no\0" +"rich\0" +"hi.cn\0anpachi.gifu.jp\0ketrzyn.pl\0eat\0" +"berlin.museum\0jolster.no\0" +"dyroy.no\0" +"rs.gov.br\0sc.gov.br\0tajiri.osaka.jp\0arai.shizuoka.jp\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" +"flor\xc3\xb8.no\0" +"norddal.no\0" +"ternopil.ua\0" +"castres.museum\0symantec\0barsy.info\0" +"loppa.no\0cherkasy.ua\0" +"oto.fukuoka.jp\0hotmail\0" +"neustar\0scrapper-site.net\0" +"qc.com\0" +"furudono.fukushima.jp\0" +"eco\0" +"stargard.pl\0" +"etne.no\0" +"crotone.it\0reggio-calabria.it\0epson\0" +"smart\0" +"sorreisa.no\0" +"cng.br\0ashikaga.tochigi.jp\0land\0" +"ct.it\0manno.kagawa.jp\0" +"defense.tn\0" +"prato.it\0" +"juedisches.museum\0lib.ut.us\0is-a-teacher.com\0" +"kasugai.aichi.jp\0onion\0" +"edu\0" +"valle-d-aosta.it\0dtv\0" +"wallonie.museum\0" +"gwangju.kr\0" +"artsandcrafts.museum\0vossevangen.no\0" +"chintai\0photos\0" +"rokunohe.aomori.jp\0shimogo.fukushima.jp\0" +"cloudcontrolapp.com\0" +"touch.museum\0" +"time.museum\0" +"tokuyama.yamaguchi.jp\0" +"ak.us\0" +"ln.cn\0" +"ba.gov.br\0azumino.nagano.jp\0koza.wakayama.jp\0" +"egyptian.museum\0" +"hachinohe.aomori.jp\0final\0" +"katsushika.tokyo.jp\0" +"jogasz.hu\0gs.sf.no\0" +"konan.aichi.jp\0" +"kimobetsu.hokkaido.jp\0jelenia-gora.pl\0" +"\xc3\xa5seral.no\0" +"dvr\0" +"dali.museum\0" +"wpdevcloud.com\0" +"health\0" +"hiranai.aomori.jp\0" +"sula.no\0la.us\0" +"fm.br\0" +"chat\0" +"nesodden.no\0" +"toyama.toyama.jp\0" +"lexus\0is-uberleet.com\0" +"botany.museum\0fastvps-server.com\0" +"rn.gov.br\0gmbh\0" +"bjarkoy.no\0skjervoy.no\0" +"belau.pw\0" +"nagano.nagano.jp\0serveblog.net\0" +"busan.kr\0" +"hapmir.no\0from-vt.com\0" +"qc.ca\0" +"trentino.it\0" +"scjohnson\0" +"ro.im\0" +"balsfjord.no\0nes.akershus.no\0github.io\0" +"kanra.gunma.jp\0" +"lavagis.no\0" +"missile.museum\0" +"ro.it\0" +"ro.gov.br\0miura.kanagawa.jp\0osaki.miyagi.jp\0" +"copenhagen.museum\0" +"does-it.net\0" +"karasjok.no\0" +"mimata.miyazaki.jp\0" +"numata.gunma.jp\0" +"j\xc3\xb8lster.no\0" +"masoy.no\0" +"global.prod.fastly.net\0*.ex.ortsinfo.at\0" +"baidar.no\0sortland.no\0azure\0" +"kred\0" +"farm.museum\0" +"cheap\0" +"watches\0" +"ogasawara.tokyo.jp\0" +"nctu.me\0" +"midori.gunma.jp\0" +"tr.eu.org\0*.r.appspot.com\0" +"from-sd.com\0" +"samukawa.kanagawa.jp\0iwafune.tochigi.jp\0" +"lug.org.uk\0" +"himi.toyama.jp\0" +"unicom\0" +"nozawaonsen.nagano.jp\0" +"snaase.no\0" +"kamisu.ibaraki.jp\0\xe5\x98\x89\xe9\x87\x8c\0" +"sand\xc3\xb8y.no\0" +"fujioka.gunma.jp\0" +"takko.aomori.jp\0" +"north.museum\0" +"ikusaka.nagano.jp\0yoshinogari.saga.jp\0" +"*.dev.adobeaemcloud.com\0" +"higashi.fukushima.jp\0" +"lardal.no\0s3.dualstack.eu-central-1.amazonaws.com\0" +"belem.br\0" +"servegame.com\0" +"uni5.net\0" +"noda.chiba.jp\0" +"lib.ms.us\0lib.nc.us\0" +"countryestate.museum\0navuotna.no\0diamonds\0" +"vt.it\0" +"klabu.no\0r\xc3\xb8""d\xc3\xb8y.no\0cc.me.us\0" +"am.gov.br\0" +"edeka\0" +"ong.br\0" +"og.ao\0tula.su\0arvo.network\0" +"aquila.it\0\xe5\x8f\xb0\xe6\xb9\xbe\0" +"m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" +"\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" +"whoswho\0" +"fm.it\0" +"gos.pk\0africa.com\0" +"makinohara.shizuoka.jp\0" +"verbania.it\0" +"futtsu.chiba.jp\0aid.pl\0" +"sor-fron.no\0" +"aostavalley.it\0earth\0" +"amot.no\0" +"sukagawa.fukushima.jp\0tone.ibaraki.jp\0kami.miyagi.jp\0" +"london\0" +"aero\0flatanger.no\0ct.us\0softbank\0" +"ravenna.it\0" +"oksnes.no\0" +"trentino-s\xc3\xbc""dtirol.it\0nango.fukushima.jp\0" +"manchester.museum\0" +"eid.no\0" +"dell-ogliastra.it\0" +"statefarm\0" +"utwente.io\0" +"2038.io\0" +"psc.br\0fan\0custom.metacentrum.cz\0" +"plumbing\0" +"orsta.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"maizuru.kyoto.jp\0" +"z.se\0nj.us\0" +"funabashi.chiba.jp\0asago.hyogo.jp\0" +"shoo.okayama.jp\0higashine.yamagata.jp\0turen.tn\0" +"scrapping.cc\0" +"notaires.km\0" +"oguni.kumamoto.jp\0" +"kawaba.gunma.jp\0higashikagawa.kagawa.jp\0kuokgroup\0" +"hagebostad.no\0" +"kitaaiki.nagano.jp\0" +"raisa.no\0" +"miki.hyogo.jp\0mitsue.nara.jp\0higashiomi.shiga.jp\0" +"dontexist.org\0" +"cloud.metacentrum.cz\0" +"journalist.aero\0aknoluokta.no\0dating\0" +"\xe6\xbe\xb3\xe9\x96\x80\0" +"exhibition.museum\0fm.no\0" +"harima.hyogo.jp\0" +"leirvik.no\0" +"sayama.saitama.jp\0gda.pl\0" +"esq\0" +"aizuwakamatsu.fukushima.jp\0ise.mie.jp\0schmidt\0" +"sor-aurdal.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"federation.aero\0" +"ap.gov.br\0miyazu.kyoto.jp\0" +"hi.us\0" +"wodzislaw.pl\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"vallee-aoste.it\0" +"fusa.no\0" +"yoshimi.saitama.jp\0" +"sdn.gov.pl\0" +"siellak.no\0hamburg\0" +"cnt.br\0" +"nagai.yamagata.jp\0" +"lerdal.no\0" +"furukawa.miyagi.jp\0" +"hakata.fukuoka.jp\0abbott\0" +"pimienta.org\0" +"\xe8\xb0\xb7\xe6\xad\x8c\0" +"sciencesnaturelles.museum\0lib.wi.us\0" +"esan.hokkaido.jp\0ap.gov.pl\0" +"trysil.no\0airbus\0dattorelay.com\0" +"eus\0" +"tarumizu.kagoshima.jp\0" +"sherbrooke.museum\0" +"fastlylb.net\0" +"b\xc3\xa1hccavuotna.no\0" +"se.gov.br\0kumenan.okayama.jp\0mielno.pl\0ddns.net\0" +"aca.pro\0" +"r\xc3\xa1hkker\xc3\xa1vju.no\0" +"andria-barletta-trani.it\0yasugi.shimane.jp\0" +"og.it\0annaka.gunma.jp\0" +"services.aero\0transport.museum\0training\0\xeb\x8b\xb7\xeb\x84\xb7\0" +"alessandria.it\0fuji.shizuoka.jp\0" +"stockholm\0" +"store.nf\0" +"k12.nm.us\0east-kazakhstan.su\0" +"yamatsuri.fukushima.jp\0" +"alstahaug.no\0" +"landrover\0" +"tires\0" +"isernia.it\0kadena.okinawa.jp\0pup.gov.pl\0" +"mus.br\0" +"midatlantic.museum\0" +"sciencecenters.museum\0" +"yashio.saitama.jp\0playstation\0" +"k.bg\0" +"nakagawa.tokushima.jp\0" +"chippubetsu.hokkaido.jp\0" +"s3.ap-south-1.amazonaws.com\0" +"rehab\0" +"locus\0" +"\xc3\xb8yer.no\0" +"sos.pl\0" +"from-ne.com\0" +"shibukawa.gunma.jp\0" +"jerusalem.museum\0" +"gs.mr.no\0gjovik.no\0" +"kiwa.mie.jp\0" +"healthcare\0" +"bsb.br\0miyada.nagano.jp\0wroc.pl\0" +"\xe6\xbe\xb3\xe9\x97\xa8\0" +"vt.us\0" +"fit\0" +"s3.dualstack.eu-west-1.amazonaws.com\0" +"vevelstad.no\0" +"caa.aero\0" +"matsuda.kanagawa.jp\0" +"medical.museum\0sa-east-1.elasticbeanstalk.com\0dnshome.de\0" +"tanohata.iwate.jp\0" +"latino\0" +"yabuki.fukushima.jp\0museum.tt\0" +"dnsupdater.de\0" +"shikaoi.hokkaido.jp\0" +"musica.ar\0chikusei.ibaraki.jp\0" +"ngo.lk\0" +"maryland.museum\0" +"taketa.oita.jp\0" +"trentin-suedtirol.it\0kahoku.ishikawa.jp\0hayashima.okayama.jp\0" +"ce.it\0gotsu.shimane.jp\0nakano.tokyo.jp\0" +"shingu.fukuoka.jp\0" +"musica.bo\0" +"lighting\0" +"yamamoto.miyagi.jp\0sa.gov.pl\0" +"iveco\0from-wv.com\0" +"azurewebsites.net\0" +"hdfcbank\0" +"ide.kyoto.jp\0" +"civilisation.museum\0ngo.ng\0pgfog.com\0" +"takarazuka.hyogo.jp\0kita.osaka.jp\0" +"leksvik.no\0" +"inf.br\0" +"fly\0" +"nsupdate.info\0" +"oizumi.gunma.jp\0" +"2000.hu\0vik.no\0k12.ky.us\0" +"historyofscience.museum\0" +"kuriyama.hokkaido.jp\0higashimatsuyama.saitama.jp\0" +"chocolate.museum\0uk.eu.org\0" +"saijo.ehime.jp\0fujiyoshida.yamanashi.jp\0" +"delivery\0" +"miyoshi.saitama.jp\0" +"gliding.aero\0koebenhavn.museum\0orland.no\0" +"mashiki.kumamoto.jp\0" +"inf.cu\0balena-devices.com\0test-iserv.de\0" +"archaeological.museum\0" +"buzen.fukuoka.jp\0saka.hiroshima.jp\0android\0" +"ngo.ph\0" +"ulm.museum\0mydobiss.com\0" +"store.ve\0" +"chikujo.fukuoka.jp\0miyake.nara.jp\0" +"corsica\0" +"s3.cn-north-1.amazonaws.com.cn\0" +"tozsde.hu\0school.na\0holmestrand.no\0foo\0s3-website.us-east-2.amazonaws.com\0" +"farmstead.museum\0jewelry\0" +"vanylven.no\0" +"museumvereniging.museum\0phoenix.museum\0bu.no\0" +"nagasu.kumamoto.jp\0fox\0" +"tx.us\0noip.us\0" +"lviv.ua\0" +"target\0" +"g\xc3\xa1\xc5\x8bgaviika.no\0" +"isahaya.nagasaki.jp\0" +"fresenius\0reliance\0" +"berlevag.no\0bjerkreim.no\0" +"bolzano-altoadige.it\0" +"froya.no\0" +"inami.toyama.jp\0canon\0" +"school.nz\0tirol\0" +"tokai.aichi.jp\0" +"frog.museum\0porsgrunn.no\0" +"gal\0" +"fitness\0is-a-linux-user.org\0" +"\xe9\xab\x98\xe7\x9f\xa5.jp\0" +"homeunix.com\0" +"wroclaw.pl\0gap\0" +"res.in\0fukagawa.hokkaido.jp\0" +"certification.aero\0jorpeland.no\0game-host.org\0" +"forl\xc3\xac-cesena.it\0okegawa.saitama.jp\0" +"gay\0" +"akishima.tokyo.jp\0frl\0" +"muncie.museum\0evenassi.no\0vestby.no\0wellbeingzone.eu\0" +"vix.br\0" +"br.com\0" +"zj.cn\0rnrt.tn\0" +"isehara.kanagawa.jp\0takaharu.miyazaki.jp\0" +"vote\0" +"pilot.aero\0presidio.museum\0" +"ashibetsu.hokkaido.jp\0kawakami.nara.jp\0" +"\xc3\xa5krehamn.no\0" +"jetzt\0" +"ferrero\0" +"tabuse.yamaguchi.jp\0" +"wakayama.wakayama.jp\0" +"voto\0" +"museum.mv\0" +"museum.mw\0store.ro\0meteorapp.com\0" +"m\xc3\xa5lselv.no\0if.ua\0" +"tainai.niigata.jp\0" +"hanno.saitama.jp\0" +"dreamhosters.com\0" +"museum.no\0institute\0" +"minamiboso.chiba.jp\0" +"stokke.no\0" +"gdn\0" +"quebec\0" +"gea\0" +"ftr\0" +"3.bg\0" +"gotemba.shizuoka.jp\0warmia.pl\0" +"heritage.museum\0" +"ve.it\0store.st\0" +"museum.om\0" +"moroyama.saitama.jp\0kaneyama.yamagata.jp\0cloudns.biz\0" +"s3.eu-west-2.amazonaws.com\0" +"mat.br\0!city.sendai.jp\0" +"fujimino.saitama.jp\0" +"nordre-land.no\0" +"adm.br\0fun\0" +"en.it\0" +"gb.com\0dyndns-work.com\0" +"sande.m\xc3\xb8re-og-romsdal.no\0\xd0\xb1\xd0\xb5\xd0\xbb\0virtualserver.io\0" +"news\0" +"horokanai.hokkaido.jp\0" +"shoes\0" +"aridagawa.wakayama.jp\0" +"praxi\0dh.bytemark.co.uk\0" +"ybo.review\0" +"\xc3\xb8rland.no\0" +"panasonic\0gotdns.org\0" +"noda.iwate.jp\0next\0" +"ot.it\0pd.it\0" +"trentino-sued-tirol.it\0iizuka.fukuoka.jp\0" +"\xe5\x85\xab\xe5\x8d\xa6\0" +"inf.mk\0moscow\0" +"hekinan.aichi.jp\0yonabaru.okinawa.jp\0" +"chernovtsy.ua\0mk.ua\0from-ia.com\0is-very-evil.org\0ilovecollege.info\0dyn53.io\0" +"frosta.no\0" +"kirovograd.ua\0" +"oga.akita.jp\0\xe0\xb4\xad\xe0\xb4\xbe\xe0\xb4\xb0\xe0\xb4\xa4\xe0\xb4\x82\0\xe4\xba\x9a\xe9\xa9\xac\xe9\x80\x8a\0" +"ngo.za\0" +"uonuma.niigata.jp\0" +"ac\0" +"ad\0" +"ae\0\xe7\xb5\x84\xe7\xbb\x87.hk\0drayddns.com\0" +"af\0" +"ag\0kvanangen.no\0" +"ai\0x.bg\0" +"k.se\0" +"al\0nagasaki.jp\0" +"am\0" +"futurehosting.at\0" +"ao\0namsskogan.no\0fyi\0" +"obama.nagasaki.jp\0saiki.oita.jp\0" +"emergency.aero\0aq\0ba\0" +"ar\0bb\0" +"as\0" +"at\0higashiagatsuma.gunma.jp\0" +"au\0be\0iraq.museum\0" +"bf\0" +"aw\0bg\0" +"ax\0bh\0is.it\0" +"bi\0" +"az\0bj\0" +"intelligence.museum\0citi\0online\0" +"bm\0" +"bn\0valleaosta.it\0tottori.tottori.jp\0" +"bo\0santacruz.museum\0" +"kaisei.kanagawa.jp\0itoman.okinawa.jp\0swatch\0" +"ca\0pics\0diskstation.me\0" +"br\0" +"bs\0cc\0" +"bt\0cd\0" +"bv\0cf\0" +"bw\0cg\0" +"ch\0" +"by\0ci\0stjordal.no\0" +"bz\0matera.it\0" +"lillehammer.no\0lund.no\0city\0" +"cl\0" +"cm\0" +"cn\0" +"co\0" +"noip.me\0diskstation.eu\0" +"cr\0sicilia.it\0balsan-s\xc3\xbc""dtirol.it\0" +"bozen-s\xc3\xbc""dtirol.it\0" +"cu\0de\0" +"cv\0restaurant\0" +"cw\0" +"cx\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0" +"cy\0london.museum\0" +"cz\0dj\0sic.it\0" +"dk\0afamilycompany\0gle\0" +"trd.br\0" +"dm\0capitalone\0" +"cr.it\0shiriuchi.hokkaido.jp\0nyc.mn\0yandexcloud.net\0" +"do\0burghof.museum\0balestrand.no\0lancia\0de.com\0servesarcasm.com\0" +"remotewd.com\0" +"chikuhoku.nagano.jp\0" +"ec\0dallas.museum\0" +"ee\0" +"prd.fr\0" +"eg\0\xe5\x8f\xb0\xe7\x81\xa3\0" +"bizen.okayama.jp\0servebbs.net\0" +"lutsk.ua\0" +"dz\0" +"imageandsound.museum\0jessheim.no\0" +"cloudera.site\0" +"karlsoy.no\0barrell-of-knowledge.info\0" +"email\0" +"es\0fuoisku.no\0" +"et\0kuzumaki.iwate.jp\0odawara.kanagawa.jp\0" +"eu\0gmo\0" +"notaires.fr\0" +"fi\0coldwar.museum\0storj.farm\0" +"fj\0ohda.shimane.jp\0" +"fm\0mining.museum\0" +"gmx\0" +"fo\0" +"ga\0" +"fr\0gb\0" +"gd\0" +"ge\0" +"gf\0bpl.biz\0" +"gg\0bokn.no\0wmflabs.org\0" +"gh\0" +"gi\0" +"v\xc3\xa5ler.hedmark.no\0" +"gl\0barlettatraniandria.it\0hokuryu.hokkaido.jp\0" +"gm\0inf.ua\0" +"gn\0pesaro-urbino.it\0nishihara.kumamoto.jp\0" +"gp\0aomori.aomori.jp\0" +"gq\0" +"gr\0" +"gs\0" +"gt\0" +"skydiving.aero\0gu\0goo\0" +"gop\0" +"gw\0santabarbara.museum\0" +"gy\0fribourg.museum\0herokuapp.com\0" +"got\0" +"hk\0" +"gov\0" +"hm\0" +"hn\0" +"dinosaur.museum\0egersund.no\0osaka\0rackmaze.com\0" +"hr\0" +"ht\0id\0" +"hu\0ie\0" +"umi.fukuoka.jp\0joyo.kyoto.jp\0" +"orkdal.no\0" +"minano.saitama.jp\0" +"newyork.museum\0radio\0" +"il\0" +"im\0" +"in\0" +"io\0" +"iq\0prd.km\0" +"ir\0fujisato.akita.jp\0sukumo.kochi.jp\0gyeongnam.kr\0" +"is\0" +"it\0" +"je\0mx.na\0servehttp.com\0" +"rm.it\0\xe5\x85\xac\xe5\x8f\xb8\0" +"pointto.us\0" +"gold\0leczna.pl\0" +"americanantiques.museum\0booking\0spacekit.io\0" +"golf\0" +"orkanger.no\0" +"jo\0" +"jp\0akiruno.tokyo.jp\0" +"marker.no\0" +"name.hr\0" +"sn\xc3\xa5""ase.no\0prvcy.page\0" +"av.it\0" +"ke\0bananarepublic\0hbo\0" +"inashiki.ibaraki.jp\0kainan.tokushima.jp\0" +"kg\0adobeaemcloud.com\0" +"video.hu\0ki\0hobol.no\0lolipop.io\0" +"store.bb\0" +"logistics.aero\0prd.mg\0" +"km\0dnsdojo.org\0" +"kn\0" +"kp\0" +"la\0supply\0*.landing.myjino.ru\0" +"kr\0lb\0" +"lc\0cc.sd.us\0" +"name.et\0kiyama.saga.jp\0" +"kw\0" +"trentino-stirol.it\0" +"ky\0li\0illustration.museum\0java\0" +"name.fj\0kz\0" +"lk\0" +"tv.bb\0hitachiota.ibaraki.jp\0ntdll.top\0" +"gouv.fr\0kumejima.okinawa.jp\0agakhan\0" +"mihama.chiba.jp\0ritto.shiga.jp\0hicam.net\0" +"ma\0" +"okaya.nagano.jp\0lr\0" +"ls\0mc\0" +"lt\0md\0" +"lu\0me\0ping\0" +"lv\0" +"mg\0own.pm\0" +"mh\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa7\xb0\xe0\xa6\xa4\0" +"tv.bo\0ly\0pink\0" +"mk\0" +"tv.br\0yakumo.shimane.jp\0ml\0" +"goog\0" +"mn\0a.prod.fastly.net\0" +"mo\0nokia\0" +"ashiya.fukuoka.jp\0mp\0barefoot\0" +"mq\0na\0gs.aa.no\0" +"mr\0" +"plc.ly\0ms\0nc\0lib.ne.us\0s3-ap-northeast-1.amazonaws.com\0store.dk\0" +"yoshioka.gunma.jp\0mt\0" +"mu\0ne\0\xc3\xa5mot.no\0" +"mv\0nf\0" +"philadelphiaarea.museum\0mw\0ng\0lima-city.de\0" +"vr.it\0mx\0" +"name.cy\0my\0ni\0*.vps.myjino.ru\0" +"kawanishi.nara.jp\0mz\0" +"nl\0" +"freemasonry.museum\0*.spectrum.myjino.ru\0" +"no\0" +"gouv.ht\0prochowice.pl\0pa.leg.br\0" +"per.la\0" +"toyohashi.aichi.jp\0nr\0" +"isleofman.museum\0valley.museum\0\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"beskidy.pl\0" +"nu\0" +"otoyo.kochi.jp\0" +"name.eg\0grimstad.no\0" +"fujiidera.osaka.jp\0" +"app.render.com\0" +"nz\0etisalat\0" +"cr.ua\0apartments\0" +"\xe5\x85\xac\xe7\x9b\x8a\0" +"om\0\xe6\x95\x99\xe8\x82\xb2.\xe9\xa6\x99\xe6\xb8\xaf\0" +"hosting\0" +"nu.ca\0pa\0" +"esashi.hokkaido.jp\0" +"tcm.museum\0cc.wi.us\0s3-ca-central-1.amazonaws.com\0" +"pe\0dyn.home-webserver.de\0" +"gouv.bj\0jeonnam.kr\0pf\0lima-city.at\0" +"liguria.it\0takamatsu.kagawa.jp\0ph\0ostroleka.pl\0" +"silk.museum\0tennis\0" +"name.az\0" +"pk\0" +"pl\0" +"pm\0s3.dualstack.us-east-2.amazonaws.com\0" +"semboku.akita.jp\0pn\0democrat\0istanbul\0mattel\0" +"*.transurl.be\0" +"\xe5\xb2\xa9\xe6\x89\x8b.jp\0pb.leg.br\0" +"qa\0" +"wakkanai.hokkaido.jp\0pr\0" +"ps\0" +"abeno.osaka.jp\0wuoz.gov.pl\0pt\0" +"gouv.ci\0" +"per.nf\0" +"pw\0works\0mydatto.com\0hobby-site.org\0" +"taiki.hokkaido.jp\0world\0" +"py\0" +"kariwa.niigata.jp\0lima-city.ch\0" +"id.au\0yk.ca\0" +"griw.gov.pl\0" +"austrheim.no\0marketing\0" +"hokuto.yamanashi.jp\0" +"re\0" +"emilia-romagna.it\0" +"x.se\0nh.us\0" +"musashino.tokyo.jp\0" +"rentals\0" +"cymru.museum\0" +"capetown\0hiv\0" +"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" +"nakaniikawa.toyama.jp\0" +"ro\0" +"sa\0" +"sb\0" +"iris.arpa\0rs\0sc\0" +"sd\0" +"ru\0se\0reise\0" +"carrara-massa.it\0kamagaya.chiba.jp\0rifu.miyagi.jp\0ookuwa.nagano.jp\0" +"americana.museum\0rw\0sg\0hockey\0" +"wegrow.pl\0sh\0" +"si\0" +"sj\0for-the.biz\0" +"otago.museum\0gs.ol.no\0sk\0" +"kashiwara.osaka.jp\0sl\0" +"sm\0" +"sn\0" +"so\0fed.us\0s3.eu-central-1.amazonaws.com\0" +"amsw.nl\0" +"sr\0" +"ss\0tc\0" +"st\0td\0" +"su\0ebiz.tw\0" +"arao.kumamoto.jp\0sv\0tf\0" +"tv.im\0tg\0" +"abashiri.hokkaido.jp\0sx\0th\0" +"skole.museum\0sy\0lib.la.us\0" +"sz\0tj\0hkt\0" +"surgeonshall.museum\0tk\0" +"tl\0""64-b.it\0" +"tm\0" +"siena.it\0tv.it\0fujikawa.yamanashi.jp\0tn\0" +"to\0*.transurl.eu\0" +"ens.tn\0" +"ua\0paris.eu.org\0" +"tr\0" +"audnedaln.no\0*.on-rio.io\0" +"tt\0" +"saitama.saitama.jp\0tv\0" +"tw\0ug\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0synology-diskstation.de\0" +"tz\0" +"uk\0wang\0" +"labour.museum\0" +"caltanissetta.it\0" +"claims\0" +"va\0krasnodar.su\0" +"reggioemilia.it\0olsztyn.pl\0av.tr\0" +"hasvik.no\0us\0vc\0" +"seaport.museum\0plc.uk\0ve\0" +"morioka.iwate.jp\0locker\0*.bzz.dapps.earth\0" +"per.sg\0vg\0\xe5\xa4\xa7\xe6\x8b\xbf\0" +"uy\0vi\0lego\0u2-local.xnbay.com\0" +"laz.it\0uz\0" +"ce.gov.br\0lazio.it\0moriguchi.osaka.jp\0tarnobrzeg.pl\0" +"hanamigawa.chiba.jp\0pruszkow.pl\0vn\0" +"hyundai\0" +"stuff-4-sale.us\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0planetarium.museum\0" +"nu.it\0" +"vu\0googlecode.com\0" +"tsushima.nagasaki.jp\0wf\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" +"schaeffler\0" +"skierva.no\0" +"gob.ar\0hikari.yamaguchi.jp\0" +"priv.hu\0" +"nakadomari.aomori.jp\0" +"kakuda.miyagi.jp\0" +"ws\0cooking\0from-ma.com\0" +"nanmoku.gunma.jp\0" +"broadcast.museum\0ulvik.no\0netlify.com\0" +"servegame.org\0myiphost.com\0" +"hot\0swiftcover\0" +"i.bg\0gob.bo\0tv.na\0" +"ecn.br\0sosnowiec.pl\0" +"how\0" +"us.org\0" +"tokamachi.niigata.jp\0" +"k12.wy.us\0" +"gob.cl\0id.ir\0" +"suwa.nagano.jp\0" +"ogawara.miyagi.jp\0" +"zhytomyr.ua\0" +"trentinosuedtirol.it\0" +"from-il.com\0" +"allfinanz\0" +"yt\0" +"gildesk\xc3\xa5l.no\0" +"walmart\0" +"hopto.me\0hopto.org\0" +"miyawaka.fukuoka.jp\0" +"gob.do\0" +"kurume.fukuoka.jp\0koya.wakayama.jp\0" +"zm\0withyoutube.com\0" +"honai.ehime.jp\0hokuto.hokkaido.jp\0" +"gob.ec\0" +"otsuchi.iwate.jp\0" +"ibm\0*.otap.co\0" +"arakawa.saitama.jp\0" +"television.museum\0christmas\0" +"sondre-land.no\0zw\0" +"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0" +"aosta-valley.it\0\xd8\xb9\xd8\xb1\xd8\xa8\0" +"ice\0" +"cosenza.it\0" +"gob.es\0istmein.de\0" +"bs.it\0chikushino.fukuoka.jp\0yasu.shiga.jp\0" +"home.dyndns.org\0" +"red.sv\0" +"vic.edu.au\0sevastopol.ua\0" +"rimini.it\0\xe9\x95\xb7\xe5\xb4\x8e.jp\0" +"council.aero\0" +"incheon.kr\0" +"sue.fukuoka.jp\0" +"icu\0" +"id.lv\0" +"ushistory.museum\0odesa.ua\0" +"nasu.tochigi.jp\0name.vn\0priv.at\0" +"id.ly\0" +"firm.ht\0" +"barsy.club\0" +"izena.okinawa.jp\0tosu.saga.jp\0naklo.pl\0*.transurl.nl\0" +"oregontrail.museum\0" +"ujiie.tochigi.jp\0" +"linz.museum\0likescandy.com\0*.triton.zone\0" +"mi.it\0" +"delaware.museum\0politie\0" +"ind.br\0firm.in\0nowruz\0" +"tv.sd\0" +"airtraffic.aero\0aigo\0" +"gob.gt\0saarland\0" +"inagi.tokyo.jp\0" +"is-a-celticsfan.org\0" +"nagato.yamaguchi.jp\0oum.gov.pl\0" +"beats\0" +"bill.museum\0cn.com\0from-or.com\0" +"gob.hn\0name.tj\0" +"dovre.no\0" +"lib.nv.us\0guitars\0" +"kamikawa.hokkaido.jp\0pi.leg.br\0" +"chiyoda.tokyo.jp\0name.tr\0" +"samnanger.no\0ifm\0" +"name.tt\0" +"zapto.org\0" +"fedorainfracloud.org\0" +"kiryu.gunma.jp\0ochi.kochi.jp\0" +"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0" +"pb.ao\0" +"tv.tr\0" +"firm.co\0cc.na\0u2.xnbay.com\0" +"ogaki.gifu.jp\0nishiawakura.okayama.jp\0" +"or.at\0verisign\0" +"redstone\0" +"tv.tz\0" +"or.bi\0potager.org\0" +"iron.museum\0" +"bergamo.it\0nishihara.okinawa.jp\0" +"guernsey.museum\0firm.dk\0freeboxos.com\0" +"kiyosato.hokkaido.jp\0fujisawa.kanagawa.jp\0" +"wzmiuw.gov.pl\0" +"california.museum\0from-al.com\0" +"kagoshima.jp\0" +"cc.wv.us\0" +"forum.hu\0settlement.museum\0dontexist.com\0" +"sex.hu\0georgia.museum\0" +"kamakura.kanagawa.jp\0rmit\0" +"or.ci\0fylkesbibl.no\0from-sc.com\0" +"saotome.st\0" +"annefrank.museum\0" +"gouv.sn\0" +"hirokawa.fukuoka.jp\0" +"aejrie.no\0" +"or.cr\0" +"\xd2\x9b\xd0\xb0\xd0\xb7\0" +"agematsu.nagano.jp\0" +"emerck\0" +"ag.it\0\xe5\xae\xae\xe5\xb4\x8e.jp\0upow.gov.pl\0" +"ee.eu.org\0" +"belluno.it\0isa.kagoshima.jp\0" +"vuelos\0" +"toyonaka.osaka.jp\0higashichichibu.saitama.jp\0" +"riobranco.br\0okawa.kochi.jp\0" +"ind.gt\0" +"lib.sc.us\0bukhara.su\0" +"karatsu.saga.jp\0" +"name.qa\0" +"name.pr\0" +"culturalcenter.museum\0" +"familyds.net\0" +"joso.ibaraki.jp\0" +"oirm.gov.pl\0" +"uslivinghistory.museum\0jondal.no\0" +"imamat\0" +"name.na\0lifestyle\0dyn.ddnss.de\0tashkent.su\0" +"toyotomi.hokkaido.jp\0" +"gob.mx\0" +"gob.ni\0b\xc3\xa5tsfjord.no\0school.za\0dyndns-mail.com\0dyndns-remote.com\0" +"kawaguchi.saitama.jp\0name.mv\0" +"name.ng\0cuisinella\0" +"ind.in\0ogliastra.it\0" +"name.my\0mymailer.com.tw\0" +"nagasaki.nagasaki.jp\0kumagaya.saitama.jp\0kudamatsu.yamaguchi.jp\0" +"i.ng\0" +"yasuoka.nagano.jp\0" +"eu-west-1.elasticbeanstalk.com\0" +"shiga.jp\0ouchi.saga.jp\0" +"railway.museum\0" +"gamvik.no\0viajes\0" +"automotive.museum\0" +"1.bg\0" +"id.us\0" +"valle-aosta.it\0vc.it\0hu.net\0" +"gob.pa\0" +"courses\0" +"gob.pe\0" +"boomla.net\0" +"dyndns-wiki.com\0" +"soccer\0" +"health.museum\0" +"gob.pk\0" +"cricket\0" +"inc\0" +"takahama.aichi.jp\0i.ph\0" +"childrens.museum\0coupons\0ing\0cc.ua\0" +"tonaki.okinawa.jp\0" +"k12.ct.us\0" +"or.id\0town\0pe.leg.br\0" +"ind.kw\0ink\0" +"nf.ca\0virtual-user.de\0" +"localhost.daplie.me\0" +"inazawa.aichi.jp\0" +"geology.museum\0" +"int\0fukui.jp\0dnsdojo.net\0" +"name.mk\0sn\xc3\xa5sa.no\0cloud66.zone\0" +"campidanomedio.it\0" +"s3.dualstack.sa-east-1.amazonaws.com\0" +"mi.th\0" +"american.museum\0taipei\0" +"or.it\0kumano.hiroshima.jp\0chigasaki.kanagawa.jp\0" +"sydney\0" +"furubira.hokkaido.jp\0urawa.saitama.jp\0" +"ako.hyogo.jp\0" +"hair\0" +"kanna.gunma.jp\0sex.pl\0" +"or.jp\0" +"itau\0" +"dabur\0" +"name.jo\0bod\xc3\xb8.no\0" +"or.ke\0kvinesdal.no\0" +"otaki.chiba.jp\0" +"is-gone.com\0" +"transporte.bo\0toys\0" +"v.bg\0england.museum\0us.na\0nes.buskerud.no\0" +"ohtawara.tochigi.jp\0" +"gouv.km\0epilepsy.museum\0i.se\0mi.us\0" +"servebbs.org\0" +"ushuaia.museum\0mer\xc3\xa5ker.no\0rovno.ua\0" +"or.kr\0" +"indiana.museum\0" +"gob.sv\0" +"firm.ve\0" +"he.cn\0taki.mie.jp\0now.sh\0" +"ono.fukushima.jp\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0nico\0" +"go.gov.br\0mombetsu.hokkaido.jp\0" +"repair\0sandvikcoromant\0" +"komatsushima.tokushima.jp\0" +"s3.dualstack.ap-south-1.amazonaws.com\0spdns.org\0" +"nakatane.kagoshima.jp\0gouv.ml\0jcb\0" +"select\0" +"barum.no\0" +"or.na\0" +"bushey.museum\0is-a-llama.com\0" +"or.mu\0honefoss.no\0gob.ve\0pictures\0cyon.link\0" +"sasebo.nagasaki.jp\0" +"tosa.kochi.jp\0asahi.nagano.jp\0" +"aircraft.aero\0" +"jcp\0" +"ist\0" +"sorum.no\0ooguy.com\0" +"nagano.jp\0" +"sciencecenter.museum\0" +"mar.it\0" +"nombre.bo\0no-ip.info\0" +"gs.hl.no\0s3-eu-west-2.amazonaws.com\0" +"satsumasendai.kagoshima.jp\0" +"genoa.it\0yawata.kyoto.jp\0kiwi.nz\0azure-mobile.net\0" +"e4.cz\0" +"press.museum\0nissedal.no\0cc.tn.us\0" +"itv\0" +"ishinomaki.miyagi.jp\0" +"chonan.chiba.jp\0coach\0" +"aukra.no\0college\0vladimir.su\0" +"gonohe.aomori.jp\0" +"ro.eu.org\0" +"hidaka.hokkaido.jp\0bando.ibaraki.jp\0" +"freight.aero\0" +"firm.ro\0km.ua\0" +"vacations\0" +"cards\0contractors\0" +"daito.osaka.jp\0" +"or.pw\0" +"priv.pl\0" +"tsumagoi.gunma.jp\0higashiyama.kyoto.jp\0ind.tn\0*.compute.amazonaws.com.cn\0rackmaze.net\0" +"review\0" +"historisch.museum\0naturalhistorymuseum.museum\0dep.no\0" +"dyndns.info\0" +"matsubara.osaka.jp\0" +"shirataka.yamagata.jp\0" +"cc.nm.us\0" +"radom.pl\0" +"piedmont.it\0" +"rhcloud.com\0" +"songdalen.no\0" +"salem.museum\0k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0k12.vt.us\0" +"fi.cr\0pr.leg.br\0" +"pubtls.org\0" +"estate\0vladimir.ru\0" +"play\0" +"priv.no\0s3-website-us-east-1.amazonaws.com\0" +"pordenone.it\0kurate.fukuoka.jp\0kunisaki.oita.jp\0" +"\xc3\xa5l.no\0" +"miyagi.jp\0lgbt\0" +"lyngen.no\0americanexpress\0" +"nike\0" +"kitahata.saga.jp\0firm.nf\0or.th\0" +"jio\0firm.ng\0" +"student.aero\0media.hu\0meeres.museum\0rsc.cdn77.org\0" +"padua.it\0" +"si.eu.org\0" +"muko.kyoto.jp\0izumozaki.niigata.jp\0" +"s3.dualstack.eu-west-2.amazonaws.com\0is-a-soxfan.org\0" +"tomigusuku.okinawa.jp\0" +"nakamura.kochi.jp\0" +"riodejaneiro.museum\0" +"at.it\0" +"theater.museum\0or.ug\0" +"campania.it\0fukuchiyama.kyoto.jp\0club\0" +"medicina.bo\0wales.museum\0" +"iwanai.hokkaido.jp\0minamidaito.okinawa.jp\0or.tz\0" +"dynalias.net\0" +"naturalsciences.museum\0" +"toga.toyama.jp\0" +"k12.al.us\0" +"tec.ve\0services\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" +"priv.me\0or.us\0forgot.her.name\0" +"mitaka.tokyo.jp\0" +"genkai.saga.jp\0" +"kalmykia.su\0" +"aland.fi\0deloitte\0cn.eu.org\0" +"haus\0" +"louvre.museum\0pvt.k12.ma.us\0" +"konskowola.pl\0" +"education.tas.edu.au\0" +"ranzan.saitama.jp\0jll\0" +"kraanghke.no\0" +"nowaruda.pl\0" +"telebit.app\0" +"otobe.hokkaido.jp\0" +"catholic\0flynnhub.com\0" +"katsuura.chiba.jp\0higashiizumo.shimane.jp\0" +"insure\0" +"trainer.aero\0flekkefjord.no\0yahoo\0" +"jmp\0" +"sa.edu.au\0cc.ma.us\0" +"cymru\0sk.eu.org\0" +"erimo.hokkaido.jp\0" +"agrar.hu\0dnsalias.com\0" +"cloudns.asia\0" +"jnj\0" +"fi.it\0" +"kalmykia.ru\0" +"kuwana.mie.jp\0" +"workisboring.com\0" +"trentinostirol.it\0" +"ns.ca\0tolga.no\0" +"storfjord.no\0" +"vibo-valentia.it\0niihama.ehime.jp\0" +"architecture.museum\0recht.pro\0" +"parliament.nz\0" +"washingtondc.museum\0" +"square7.de\0" +"uw.gov.pl\0warszawa.pl\0" +"ragusa.it\0lukow.pl\0jot\0" +"po.it\0daejeon.kr\0" +"sykkylven.no\0" +"joy\0" +"lajolla.museum\0" +"anamizu.ishikawa.jp\0namerikawa.toyama.jp\0" +"neat-url.com\0" +"abo.pa\0" +"pro.az\0" +"mckinsey\0" +"komvux.se\0" +"media.pl\0" +"lur\xc3\xb8y.no\0" +"pro.br\0minoh.osaka.jp\0mizuho.tokyo.jp\0noho.st\0" +"ooshika.nagano.jp\0" +"trentinoa-adige.it\0\xe1\x83\x92\xe1\x83\x94\0" +"florist\0" +"gjerstad.no\0hammerfest.no\0abogado\0cy.eu.org\0" +"ru.eu.org\0se.eu.org\0" +"santamaria.br\0yoshikawa.saitama.jp\0" +"omaha.museum\0" +"stavanger.no\0" +"akdn\0observer\0" +"bykle.no\0" +"tahara.aichi.jp\0vapor.cloud\0" +"press\0ae.org\0" +"dscloud.biz\0" +"seranishi.hiroshima.jp\0shimoji.okinawa.jp\0" +"pro.cy\0" +"square7.ch\0" +"aremark.no\0karaganda.su\0barsy.co.uk\0" +"tome.miyagi.jp\0" +"amusement.aero\0pro.ec\0v.ua\0" +"bd.se\0" +"tt.im\0" +"gs.jan-mayen.no\0lib.ks.us\0cz.eu.org\0" +"hidaka.kochi.jp\0jeep\0" +"gu.us\0appspot.com\0" +"sh.cn\0ud.it\0" +"shimane.jp\0" +"higashiyoshino.nara.jp\0" +"entertainment.aero\0" +"lupin\0" +"pro.fj\0" +"ddnslive.com\0" +"edu.krd\0" +"off.ai\0" +"dk.eu.org\0pokrovsk.su\0" +"gaular.no\0netbank\0" +"sowa.ibaraki.jp\0" +"\xe5\x95\x86\xe5\xba\x97\0iki.fi\0" +"kfh\0" +"carraramassa.it\0" +"assabu.hokkaido.jp\0" +"*.compute.amazonaws.com\0" +"daegu.kr\0cloudapp.net\0" +"weibo\0" +"k12.ma.us\0" +"georgia.su\0" +"etc.br\0" +"os.hedmark.no\0" +"pro.ht\0" +"b\xc3\xa1jddar.no\0\xe5\x80\x8b\xe4\xba\xba.\xe9\xa6\x99\xe6\xb8\xaf\0" +"*.s5y.io\0" +"fuettertdasnetz.de\0dscloud.me\0" +"slg.br\0" +"g.bg\0" +"towada.aomori.jp\0" +"nogata.fukuoka.jp\0sklep.pl\0" +"jewelry.museum\0*.compute.estate\0" +"faith\0" +"graphics\0" +"gniezno.pl\0homedepot\0" +"n\xc3\xa6r\xc3\xb8y.no\0kia\0" +"portland.museum\0troandin.no\0kurgan.su\0" +"garden.museum\0gjemnes.no\0grong.no\0""4lima.de\0" +"nishitosa.kochi.jp\0" +"moonscale.net\0" +"eidskog.no\0" +"trani-andria-barletta.it\0voorloper.cloud\0" +"pvt.ge\0bonn.museum\0kim\0" +"webhop.biz\0" +"forsand.no\0" +"browsersafetymark.io\0de.eu.org\0" +"\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"takahama.fukui.jp\0malopolska.pl\0" +"hachijo.tokyo.jp\0" +"charity\0" +"sannan.hyogo.jp\0elblag.pl\0" +"force.museum\0audio\0" +"\xe7\xae\x87\xe4\xba\xba.hk\0" +"matsumae.hokkaido.jp\0" +"shimonoseki.yamaguchi.jp\0" +"windows\0" +"author\0" +"itano.tokushima.jp\0gangwon.kr\0""4lima.at\0" +"is-a-conservative.com\0" +"ca.it\0" +"lincoln.museum\0" +"ninomiya.kanagawa.jp\0" +"ciscofreak.com\0" +"kuroiso.tochigi.jp\0lowicz.pl\0" +"minamiise.mie.jp\0" +"insurance.aero\0mus.mi.us\0" +"dnsup.net\0" +"kunstsammlung.museum\0rennes\xc3\xb8y.no\0" +"gru.br\0" +"ishikawa.jp\0\xe6\xb2\x96\xe7\xb8\x84.jp\0mitou.yamaguchi.jp\0" +"online.museum\0pro.na\0" +"tsukiyono.gunma.jp\0fujishiro.ibaraki.jp\0""4lima.ch\0" +"science-fiction.museum\0plus\0" +"ass.km\0" +"pro.mv\0*.ex.futurecms.at\0" +"katashina.gunma.jp\0" +"otsuka\0" +"cloudcontrolled.com\0" +"inzai.chiba.jp\0" +"koge.tottori.jp\0" +"serveminecraft.net\0" +"is-a-therapist.com\0" +"konsulat.gov.pl\0" +"pharmaciens.km\0" +"hokkaido.jp\0" +"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0pro.om\0" +"anquan\0" +"lib.oh.us\0room\0sells-for-u.com\0" +"caxias.br\0seiyo.ehime.jp\0toyotsu.fukuoka.jp\0" +"xihuan\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0tranby.no\0pramerica\0" +"industria.bo\0andasuolo.no\0cc.mn.us\0" +"fbx-os.fr\0" +"onna.okinawa.jp\0kosai.shizuoka.jp\0" +"familyds.org\0" +"arts.museum\0eastafrica.museum\0\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" +"chesapeakebay.museum\0ca.na\0nittedal.no\0" +"embaixada.st\0cloud\0garden\0" +"microsoft\0" +"lucerne.museum\0" +"omura.nagasaki.jp\0chuo.yamanashi.jp\0pro.pr\0" +"chiyoda.gunma.jp\0" +"aseral.no\0" +"noshiro.akita.jp\0kakinoki.shimane.jp\0" +"olecko.pl\0" +"ddnss.de\0" +"bari.it\0" +"spydeberg.no\0" +"arezzo.it\0kpn\0" +"aarborte.no\0" +"emr.it\0" +"tychy.pl\0" +"jeju.kr\0" +"santafe.museum\0valle.no\0" +"forl\xc3\xac""cesena.it\0oyodo.nara.jp\0" +"fukushima.hokkaido.jp\0shimizu.hokkaido.jp\0" +"undersea.museum\0" +"saku.nagano.jp\0blogspot.vn\0" +"bus.museum\0" +"s\xc3\xb8ndre-land.no\0" +"tateyama.chiba.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0memset.net\0" +"ca.eu.org\0" +"shimonita.gunma.jp\0" +"net.eu.org\0" +"krd\0lat\0" +"myactivedirectory.com\0" +"law\0" +"hitachinaka.ibaraki.jp\0atami.shizuoka.jp\0" +"delmenhorst.museum\0" +"urayasu.chiba.jp\0kakegawa.shizuoka.jp\0" +"from-co.net\0" +"tsuwano.shimane.jp\0" +"itako.ibaraki.jp\0" +"\xe5\xbe\xb3\xe5\xb3\xb6.jp\0" +"alfaromeo\0" +"trentinoaltoadige.it\0sakawa.kochi.jp\0" +"starnberg.museum\0" +"yamaguchi.jp\0" +"r\xc3\xa5""de.no\0cc.al.us\0b-data.io\0myddns.rocks\0serveirc.com\0" +"is-very-good.org\0" +"pro.tt\0" +"com.ac\0" +"rotorcraft.aero\0" +"com.af\0shingu.hyogo.jp\0" +"com.ag\0" +"um.gov.pl\0" +"com.ai\0texas.museum\0" +"vibovalentia.it\0isesaki.gunma.jp\0" +"staging.onred.one\0homesecuritypc.com\0" +"com.al\0vall\xc3\xa9""eaoste.it\0" +"com.am\0" +"tagawa.fukuoka.jp\0anan.nagano.jp\0" +"com.ba\0bremanger.no\0" +"com.ar\0com.bb\0urbino-pesaro.it\0" +"lib.md.us\0" +"com.au\0rennesoy.no\0" +"torino.it\0" +"com.aw\0" +"com.bh\0va.it\0" +"com.bi\0savannahga.museum\0fage\0lds\0blogspot.re\0" +"com.az\0kashihara.nara.jp\0" +"pro.vn\0" +"com.bm\0" +"com.bn\0" +"com.bo\0" +"aomori.jp\0" +"hoylandet.no\0" +"com.br\0" +"com.bs\0sandoy.no\0s3-ap-northeast-2.amazonaws.com\0blogspot.ro\0" +"com.bt\0dazaifu.fukuoka.jp\0" +"revista.bo\0" +"kinokawa.wakayama.jp\0" +"blogspot.rs\0" +"sagamihara.kanagawa.jp\0" +"com.by\0com.ci\0athleta\0from-mo.com\0blogspot.ru\0blogspot.se\0" +"com.bz\0ichinomiya.chiba.jp\0settsu.osaka.jp\0" +"blogspot.sg\0" +"com.cm\0blogspot.si\0" +"com.cn\0" +"com.co\0blogspot.sk\0" +"creditunion\0olayangroup\0" +"blogspot.sn\0" +"com.cu\0com.de\0" +"hakodate.hokkaido.jp\0nishimera.miyazaki.jp\0" +"com.cw\0" +"blogspot.td\0" +"com.cy\0afjord.no\0tromso.no\0" +"hirono.fukushima.jp\0ebina.kanagawa.jp\0cnpy.gdn\0" +"macapa.br\0" +"com.dm\0ca.us\0" +"com.do\0" +"fail\0" +"com.ec\0jamison.museum\0" +"com.ee\0" +"juniper\0" +"com.eg\0comsec\0cd.eu.org\0cust.prod.thingdust.io\0" +"tsuno.kochi.jp\0ohira.miyagi.jp\0us.gov.pl\0" +"com.dz\0friulive-giulia.it\0" +"blogspot.tw\0blogspot.ug\0" +"alesund.no\0" +"yokosuka.kanagawa.jp\0" +"from-wi.com\0" +"medio-campidano.it\0" +"com.es\0" +"com.et\0furano.hokkaido.jp\0jeonbuk.kr\0" +"t.bg\0" +"weir\0blogspot.mr\0" +"g.se\0" +"xj.cn\0" +"com.fj\0oiso.kanagawa.jp\0" +"inuyama.aichi.jp\0blogspot.mx\0" +"l\xc3\xa4ns.museum\0blogspot.my\0" +"yamagata.nagano.jp\0" +"cruises\0" +"blogspot.nl\0" +"e12.ve\0" +"com.fr\0iijima.nagano.jp\0" +"va.no\0abbvie\0homelinux.com\0blogspot.no\0" +"gs.cn\0" +"com.ge\0home-webserver.de\0" +"uppo.gov.pl\0" +"sogne.no\0" +"com.gh\0" +"com.gi\0bestbuy\0" +"amami.kagoshima.jp\0" +"discovery.museum\0" +"com.gl\0" +"k12.gu.us\0" +"com.gn\0" +"com.gp\0ms.leg.br\0" +"conference.aero\0" +"com.gr\0" +"com.gt\0" +"com.gu\0" +"lidl\0" +"magazine.aero\0davvenj\xc3\xa1rga.no\0" +"daisen.akita.jp\0" +"com.gy\0ally\0blogspot.pe\0" +"art.br\0uryu.hokkaido.jp\0kikugawa.shizuoka.jp\0nanyo.yamagata.jp\0solar\0" +"com.hk\0" +"tozawa.yamagata.jp\0firewall-gateway.net\0" +"dnsfor.me\0" +"com.hn\0massa-carrara.it\0te.it\0" +"user.srcf.net\0" +"com.hr\0" +"com.ht\0" +"blogspot.qa\0" +"plants.museum\0" +"tohnosho.chiba.jp\0blogspot.pt\0" +"hdfc\0llc\0" +"cn.it\0career\0" +"com.im\0asnes.no\0" +"narashino.chiba.jp\0" +"com.io\0life\0" +"togo.aichi.jp\0numazu.shizuoka.jp\0mt.leg.br\0" +"com.iq\0eastcoast.museum\0sebastopol.ua\0cloud66.ws\0" +"matsuura.nagasaki.jp\0" +"parliament.cy\0com.is\0apple\0" +"minato.osaka.jp\0" +"echizen.fukui.jp\0shichikashuku.miyagi.jp\0llp\0" +"art.do\0fans\0is-a-bulls-fan.com\0blogspot.is\0" +"blogspot.it\0" +"zama.kanagawa.jp\0" +"acct.pro\0smile\0" +"stada\0" +"com.jo\0ryukyu\0" +"ureshino.mie.jp\0" +"wa.gov.au\0" +"art.dz\0mihara.kochi.jp\0" +"barcelona.museum\0" +"mt.it\0northwesternmutual\0blogspot.jp\0za.net\0" +"cc.de.us\0" +"sanjo.niigata.jp\0" +"com.kg\0atlanta.museum\0" +"kamigori.hyogo.jp\0" +"com.ki\0" +"fie.ee\0com.km\0blogsyte.com\0" +"kosuge.yamanashi.jp\0com.kp\0" +"com.la\0s3-ap-south-1.amazonaws.com\0" +"com.lb\0" +"com.lc\0" +"bjark\xc3\xb8y.no\0" +"blogspot.kr\0" +"com.kw\0australia.museum\0skanland.no\0apps.fbsbx.com\0" +"com.ky\0v\xc3\xa1rgg\xc3\xa1t.no\0" +"com.kz\0" +"com.lk\0malvik.no\0dynalias.org\0" +"blogspot.li\0" +"in-vpn.org\0" +"osakikamijima.hiroshima.jp\0iiyama.nagano.jp\0com.lr\0lol\0" +"com.lv\0ic.gov.pl\0" +"com.mg\0" +"blogspot.lt\0blogspot.md\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0com.ly\0blogspot.lu\0*.sys.qcx.io\0" +"com.mk\0" +"aizumisato.fukushima.jp\0com.ml\0" +"tomika.gifu.jp\0" +"com.mo\0blogspot.mk\0" +"fujieda.shizuoka.jp\0" +"com.na\0farm\0" +"kouzushima.tokyo.jp\0\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0lpl\0" +"com.ms\0" +"com.mt\0" +"com.mu\0" +"ono.hyogo.jp\0com.mv\0com.nf\0" +"com.mw\0com.ng\0va.us\0" +"com.mx\0" +"com.my\0com.ni\0" +"art.ht\0kamo.kyoto.jp\0kitayama.wakayama.jp\0" +"l-o-g-i-n.de\0blogspot.fi\0" +"izumiotsu.osaka.jp\0funagata.yamagata.jp\0" +"like\0beta.bounty-full.com\0" +"drive\0" +"rikuzentakata.iwate.jp\0com.nr\0" +"blog.bo\0webhosting.be\0" +"ri.it\0man\0" +"blog.br\0namie.fukushima.jp\0map\0blogspot.fr\0" +"forde.no\0mba\0" +"fast\0" +"nanae.hokkaido.jp\0tsurugi.ishikawa.jp\0dental\0" +"association.museum\0inderoy.no\0lenvik.no\0" +"com.om\0dyn-berlin.de\0" +"ac.leg.br\0" +"co.network\0" +"ar.it\0" +"com.pa\0washtenaw.mi.us\0" +"allstate\0gifts\0" +"com.pe\0" +"brescia.it\0com.pf\0blogspot.gr\0" +"com.ph\0" +"children.museum\0aramco\0" +"tondabayashi.osaka.jp\0" +"gj\xc3\xb8vik.no\0com.pk\0mypi.co\0" +"aogaki.hyogo.jp\0com.pl\0" +"ballooning.aero\0works.aero\0is-a-cpa.com\0" +"!city.kobe.jp\0" +"lind\xc3\xa5s.no\0blogspot.hk\0" +"halsa.no\0com.qa\0photography\0abkhazia.su\0" +"com.pr\0" +"gs.oslo.no\0br\xc3\xb8nn\xc3\xb8y.no\0com.ps\0myshopblocks.com\0" +"com.pt\0" +"columbia.museum\0" +"blogspot.hr\0" +"tuxfamily.org\0" +"kasukabe.saitama.jp\0amex\0" +"com.py\0limo\0blogspot.hu\0blogspot.ie\0" +"jl.cn\0ltd\0" +"dattolocal.com\0" +"kunohe.iwate.jp\0" +"hikone.shiga.jp\0urown.cloud\0" +"vald-aosta.it\0" +"blogspot.in\0" +"devices.resinstaging.io\0" +"tenkawa.nara.jp\0" +"com.re\0link\0safe\0blogspot.ba\0" +"trentin-sud-tirol.it\0hinode.tokyo.jp\0" +"sokndal.no\0from-ak.com\0couchpotatofries.org\0" +"asahi.toyama.jp\0" +"blogspot.be\0" +"moka.tochigi.jp\0med\0" +"associates\0blogspot.bg\0" +"hamburg.museum\0" +"fukuoka.jp\0kawazu.shizuoka.jp\0cool\0blogspot.bj\0" +"com.ro\0dyndns1.de\0" +"skierv\xc3\xa1.no\0com.sa\0" +"coop\0com.sb\0" +"gran.no\0com.sc\0" +"com.sd\0men\0thruhere.net\0" +"aetna\0com.se\0com.ru\0blogspot.ca\0" +"com.sg\0clinique\0" +"com.sh\0" +"lancashire.museum\0" +"tagajo.miyagi.jp\0sakaki.nagano.jp\0blogspot.cf\0" +"air-traffic-control.aero\0te.ua\0" +"adv.br\0com.sl\0blogspot.ch\0" +"k12.tn.us\0trading\0" +"udi.br\0com.sn\0" +"com.so\0" +"fg.it\0setagaya.tokyo.jp\0blogspot.cl\0" +"hemsedal.no\0servebbs.com\0" +"kommunalforbund.se\0com.ss\0" +"ayagawa.kagawa.jp\0com.st\0" +"nodebalancer.linode.com\0" +"com.sv\0for.men\0" +"cn.ua\0" +"akita.jp\0kasuga.fukuoka.jp\0" +"com.sy\0is-a-landscaper.com\0blogspot.de\0" +"com.tj\0blogspot.cv\0" +"mydatto.net\0" +"muenchen.museum\0com.tm\0" +"com.tn\0blogspot.cz\0" +"com.to\0blogspot.dk\0" +"eidfjord.no\0com.ua\0" +"com.tr\0" +"mino.gifu.jp\0ibara.okayama.jp\0izu.shizuoka.jp\0com.tt\0" +"newjersey.museum\0tuva.su\0" +"\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" +"mjondalen.no\0laakesvuemie.no\0com.tw\0com.ug\0" +"ogawa.nagano.jp\0travelchannel\0" +"h\xc3\xb8nefoss.no\0" +"dyndns-home.com\0" +"codes\0" +"palmsprings.museum\0oppdal.no\0" +"design\0" +"monzabrianza.it\0" +"rost.no\0com.vc\0\xe6\x94\xbf\xe5\x8a\xa1\0" +"art.pl\0" +"com.ve\0from-nj.com\0" +"omigawa.chiba.jp\0" +"hokksund.no\0" +"sorocaba.br\0" +"timekeeping.museum\0com.uy\0com.vi\0" +"com.uz\0" +"place\0" +"hiratsuka.kanagawa.jp\0com.vn\0" +"*.webhare.dev\0" +"galsa.no\0" +"mil\0" +"zoological.museum\0sund.no\0t.se\0mt.us\0nd.us\0" +"ora.gunma.jp\0" +"com.vu\0" +"ogano.saitama.jp\0piw.gov.pl\0" +"bulsan-sudtirol.it\0koga.ibaraki.jp\0" +"histoire.museum\0vikna.no\0githubusercontent.com\0" +"mit\0" +"nrw.museum\0" +"es.gov.br\0" +"gyokuto.kumamoto.jp\0" +"kitamoto.saitama.jp\0" +"bolt.hu\0western.museum\0" +"com.ws\0" +"skoczow.pl\0" +"sale\0" +"tochigi.jp\0" +"davvenjarga.no\0" +"k12.id.us\0" +"from-ct.com\0codespot.com\0official.academy\0" +"niigata.jp\0sakura.chiba.jp\0" +"tsubame.niigata.jp\0" +"stcgroup\0" +"art.sn\0" +"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0glitch.me\0" +"miyoshi.aichi.jp\0mlb\0" +"\xc3\xb8stre-toten.no\0q-a.eu.org\0blogspot.ae\0" +"tr.it\0" +"ichikawa.chiba.jp\0" +"erni\0" +"live\0" +"blogspot.al\0" +"blogspot.am\0" +"hinohara.tokyo.jp\0" +"\xe6\x9b\xb8\xe7\xb1\x8d\0" +"misato.saitama.jp\0bosch\0" +"helsinki.museum\0bnpparibas\0" +"malselv.no\0mma\0yolasite.com\0" +"mls\0" +"londrina.br\0" +"guge\0" +"com.zm\0ap-northeast-2.elasticbeanstalk.com\0" +"folldal.no\0" +"ri.us\0\xe9\xa3\x9f\xe5\x93\x81\0" +"bahccavuotna.no\0" +"abruzzo.it\0kumatori.osaka.jp\0grajewo.pl\0" +"goip.de\0" +"buyshouses.net\0" +"\xe4\xb8\x89\xe9\x87\x8d.jp\0" +"airguard.museum\0varoy.no\0" +"yoita.niigata.jp\0" +"ar.us\0" +"*.cryptonomic.net\0" +"aquarium.museum\0" +"saito.miyazaki.jp\0" +"meinforum.net\0" +"stream\0s3-website-us-west-2.amazonaws.com\0" +"pohl\0" +"hurum.no\0moe\0" +"takaishi.osaka.jp\0" +"arboretum.museum\0" +"kozagawa.wakayama.jp\0" +"hawaii.museum\0moi\0" +"mup.gov.pl\0" +"mayfirst.info\0" +"mom\0" +"hitachi.ibaraki.jp\0" +"sandvik\0" +"e.bg\0ostre-toten.no\0ch.eu.org\0ybo.science\0" +"homelinux.net\0" +"cc.oh.us\0" +"mov\0for-more.biz\0" +"catanzaro.it\0cieszyn.pl\0" +"mytis.ru\0" +"vn.ua\0" +"guardian\0" +"ac.ae\0" +"tr.no\0" +"gd.cn\0" +"knightpoint.systems\0" +"nab\0" +"lunner.no\0" +"urasoe.okinawa.jp\0isla.pr\0" +"kayabe.hokkaido.jp\0sarl\0" +"tarui.gifu.jp\0" +"ac.at\0emp.br\0" +"ac.be\0" +"adv.mz\0" +"nba\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0productions\0" +"eu-4.evennode.com\0synology-ds.de\0" +"imabari.ehime.jp\0iwi.nz\0" +"cherkassy.ua\0" +"kashiwa.chiba.jp\0" +"idv.hk\0mango\0" +"bounty-full.com\0" +"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0" +"s\xc3\xb8r-odal.no\0" +"\xe9\x95\xb7\xe9\x87\x8e.jp\0kuchinotsu.nagasaki.jp\0help\0" +"ac.ci\0condos\0extraspace\0" +"avianca\0" +"trentinos-tirol.it\0msd\0" +"motorcycle.museum\0" +"ac.cn\0bo.it\0shirakawa.fukushima.jp\0" +"bradesco\0" +"makurazaki.kagoshima.jp\0" +"moareke.no\0mypep.link\0" +"ac.cr\0" +"shishikui.tokushima.jp\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0" +"mihama.aichi.jp\0prof.pr\0" +"ac.cy\0vantaa.museum\0stufftoread.com\0" +"air-surveillance.aero\0elverum.no\0" +"misaki.okayama.jp\0" +"nakanojo.gunma.jp\0al.leg.br\0" +"patria.bo\0" +"sakai.fukui.jp\0" +"mtn\0" +"save\0" +"lu.it\0me.it\0tendo.yamagata.jp\0" +"chiropractic.museum\0" +"mtr\0" +"nec\0" +"andriatranibarletta.it\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0" +"linkyard.cloud\0" +"qbuser.com\0" +"yachiyo.ibaraki.jp\0" +"me.ke\0" +"ac.fj\0ogawa.saitama.jp\0" +"uk0.bigv.io\0" +"net\0univ.sn\0co.financial\0" +"oldnavy\0eu-3.evennode.com\0" +"new\0" +"tatsuno.hyogo.jp\0" +"rahkkeravju.no\0is-a-socialist.com\0" +"nfl\0" +"kiho.mie.jp\0showa.yamanashi.jp\0" +"vodka\0geekgalaxy.com\0" +"k12.vi.us\0" +"sf.no\0n\xc3\xa1vuotna.no\0" +"ac.gn\0fudai.iwate.jp\0" +"saxo\0servep2p.com\0" +"hasama.oita.jp\0nishikata.tochigi.jp\0" +"naturhistorisches.museum\0" +"futuremailing.at\0" +"k12.fl.us\0ngo\0" +"tatebayashi.gunma.jp\0" +"at.eu.org\0" +"on.ca\0assisi.museum\0" +"kokubunji.tokyo.jp\0" +"here\0" +"cookingchannel\0website.yandexcloud.net\0" +"hatogaya.saitama.jp\0" +"berg.no\0nhk\0" +"ac.id\0" +"noheji.aomori.jp\0" +"bearalv\xc3\xa1hki.no\0for.mom\0" +"pz.it\0" +"tube\0" +"misato.akita.jp\0global.ssl.fastly.net\0" +"karate.museum\0uklugs.org\0" +"ac.il\0mol.it\0" +"ac.im\0pittsburgh.museum\0guru\0" +"ac.in\0porn\0" +"gs.vf.no\0" +"k12.or.us\0" +"ac.ir\0" +"bir.ru\0" +"za.org\0" +"damnserver.com\0" +"eu-2.evennode.com\0" +"homesense\0" +"vercelli.it\0ac.jp\0" +"educational.museum\0alstom\0" +"mikasa.hokkaido.jp\0sado.niigata.jp\0" +"dyn-vpn.de\0" +"andriabarlettatrani.it\0post\0router.management\0" +"ac.ke\0hamar.no\0" +"otama.fukushima.jp\0minamiashigara.kanagawa.jp\0" +"oita.jp\0" +"kitahiroshima.hokkaido.jp\0" +"horology.museum\0" +"is-a-nascarfan.com\0" +"ac.kr\0a.run.app\0" +"matsumoto.kagoshima.jp\0" +"brand.se\0prime\0" +"virtueeldomein.nl\0" +"duckdns.org\0" +"ac.lk\0" +"tc.br\0" +"ac.ma\0shouji\0" +"onjuku.chiba.jp\0" +"ac.ls\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"pomorskie.pl\0" +"ac.me\0kr\xc3\xa5""anghke.no\0" +"shimotsuma.ibaraki.jp\0" +"tokushima.jp\0shikabe.hokkaido.jp\0" +"pixolino.com\0" +"livorno.it\0kira.aichi.jp\0onagawa.miyagi.jp\0" +"masaki.ehime.jp\0" +"camdvr.org\0" +"kembuchi.hokkaido.jp\0" +"ringsaker.no\0rv.ua\0is-a-hard-worker.com\0" +"appchizi.com\0" +"kitagawa.kochi.jp\0" +"ac.mu\0birthplace.museum\0" +"a.ssl.fastly.net\0" +"graz.museum\0ac.mw\0" +"miho.ibaraki.jp\0" +"group.aero\0ac.ni\0bostik\0insurance\0" +"ac.mz\0" +"hiraizumi.iwate.jp\0" +"environmentalconservation.museum\0eu-1.evennode.com\0myftp.org\0" +"naroy.no\0www.ro\0ftpaccess.cc\0" +"nb.ca\0" +"fuefuki.yamanashi.jp\0" +"bergbau.museum\0francaise.museum\0me.so\0delta\0tiffany\0" +"mywire.org\0" +"geometre-expert.fr\0sells-it.net\0" +"ac.nz\0" +"ravendb.me\0" +"kamitsue.oita.jp\0" +"arakawa.tokyo.jp\0" +"idv.tw\0" +"hellas.museum\0ac.pa\0" +"kyiv.ua\0" +"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0soni.nara.jp\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" +"*.sapporo.jp\0" +"k12.mn.us\0family\0myhome-server.de\0" +"sera.hiroshima.jp\0" +"me.tz\0" +"lierne.no\0me.uk\0lundbeck\0now\0" +"fukumitsu.toyama.jp\0download\0" +"3utilities.com\0" +"ac.pr\0" +"!www.ck\0" +"r.bg\0" +"tobe.ehime.jp\0" +"e.se\0me.us\0" +"sites.static.land\0" +"d.gv.vc\0" +"motegi.tochigi.jp\0" +"\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" +"qld.au\0villas\0" +"journalism.museum\0" +"chizu.tottori.jp\0ravendb.run\0" +"ha.cn\0im.it\0" +"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"hiroo.hokkaido.jp\0" +"lel.br\0" +"nra\0" +"kodaira.tokyo.jp\0" +"higashi.fukuoka.jp\0kawara.fukuoka.jp\0hikawa.shimane.jp\0" +"basel.museum\0" +"\xe7\x8f\xa0\xe5\xae\x9d\0" +"yakumo.hokkaido.jp\0" +"inder\xc3\xb8y.no\0obi\0" +"otofuke.hokkaido.jp\0frontdoor\0" +"heroy.more-og-romsdal.no\0ac.rs\0onrender.com\0" +"haboro.hokkaido.jp\0" +"enebakk.no\0ac.se\0ac.ru\0" +"ac.rw\0" +"asakuchi.okayama.jp\0calvinklein\0" +"ss.it\0yamashina.kyoto.jp\0" +"nrw\0uy.com\0" +"in-vpn.net\0" +"azerbaijan.su\0" +"soo.kagoshima.jp\0" +"ddr.museum\0" +"vda.it\0kyoto.jp\0fuchu.toyama.jp\0ac.th\0" +"cl.it\0hatsukaichi.hiroshima.jp\0ac.sz\0ac.tj\0" +"shingu.wakayama.jp\0boston\0" +"time.no\0" +"co.events\0" +"sano.tochigi.jp\0" +"inatsuki.fukuoka.jp\0" +"ac.ug\0" +"ac.tz\0" +"ac.uk\0" +"sassari.it\0ntt\0theater\0" +"crew.aero\0ullensvang.no\0" +"wazuka.kyoto.jp\0" +"yamanakako.yamanashi.jp\0" +"cc.dc.us\0" +"lubartow.pl\0" +"brunel.museum\0" +"jgora.pl\0" +"york.museum\0" +"friulivenezia-giulia.it\0" +"\xc3\xa5rdal.no\0lelux.site\0" +"cci.fr\0chungbuk.kr\0ac.vn\0off\0" +"tadaoka.osaka.jp\0" +"rochester.museum\0" +"\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" +"vanguard\0" +"budejju.no\0" +"wiih.gov.pl\0privatizehealthinsurance.net\0" +"erotica.hu\0" +"clubmed\0" +"*.awdev.ca\0" +"yugawa.fukushima.jp\0nagaoka.niigata.jp\0" +"yamanouchi.nagano.jp\0" +"lakas.hu\0" +"minakami.gunma.jp\0yoka.hyogo.jp\0gov.scot\0" +"nfshost.com\0" +"koshigaya.saitama.jp\0" +"ina.ibaraki.jp\0" +"is-an-anarchist.com\0" +"ciencia.bo\0traeumtgerade.de\0" +"riik.ee\0maritimo.museum\0""1kapp.com\0" +"spreadbetting\0" +"sanda.hyogo.jp\0ikeda.nagano.jp\0" +"franziskaner.museum\0" +"crd.co\0" +"nagareyama.chiba.jp\0" +"shimoda.shizuoka.jp\0" +"s3-website-sa-east-1.amazonaws.com\0" +"kasuya.fukuoka.jp\0" +"nyc\0s3.dualstack.ap-northeast-1.amazonaws.com\0" +"biella.it\0kosei.shiga.jp\0" +"groks-this.info\0" +"social\0" +"ac.za\0" +"riopreto.br\0rg.it\0" +"data\0" +"kawamata.fukushima.jp\0" +"date\0au.eu.org\0be.eu.org\0" +"*.hosting.myjino.ru\0" +"treviso.it\0" +"anthro.museum\0ac.zm\0" +"mr.no\0" +"ap.it\0parma.it\0" +"chuo.chiba.jp\0" +"is-an-accountant.com\0" +"sannohe.aomori.jp\0" +"ac.zw\0" +"trentinosud-tirol.it\0" +"\xe9\xa4\x90\xe5\x8e\x85\0" +"yoro.gifu.jp\0worse-than.tv\0" +"sardegna.it\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"mitsubishi\0is-certified.com\0" +"oe.yamagata.jp\0" +"lib.ca.us\0" +"aju.br\0shinkamigoto.nagasaki.jp\0" +"ar.com\0" +"veg\xc3\xa5rshei.no\0homelinux.org\0" +"whaling.museum\0" +"minamiaiki.nagano.jp\0" +"handson.museum\0ha.no\0" +"soma.fukushima.jp\0" +"kasuga.hyogo.jp\0ryuoh.shiga.jp\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"civilwar.museum\0" +"susono.shizuoka.jp\0" +"naie.hokkaido.jp\0" +"tachiarai.fukuoka.jp\0tokushima.tokushima.jp\0" +"birkenes.no\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" +"k\xc3\xa5""fjord.no\0" +"gunma.jp\0saroma.hokkaido.jp\0" +"bg.eu.org\0" +"one\0x443.pw\0" +"ong\0" +"fe.it\0" +"gok.pk\0" +"mifune.kumamoto.jp\0aguni.okinawa.jp\0ostrowwlkp.pl\0" +"laspezia.it\0onl\0scor\0" +"ringerike.no\0" +"scot\0" +"blogdns.org\0" +"yaotsu.gifu.jp\0" +"mortgage\0" +"cam.it\0actor\0" +"fhs.no\0ooo\0" +"tempioolbia.it\0" +"trader.aero\0cc.fl.us\0dyn-ip24.de\0" +"act.edu.au\0larvik.no\0" +"k12.ny.us\0" +"now-dns.top\0" +"vic.au\0" +"vpnplus.to\0" +"iz.hr\0durban\0" +"nationwide\0" +"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" +"nic.in\0" +"r.se\0" +"halden.no\0cc.pr.us\0" +"iveland.no\0tr\xc3\xb8gstad.no\0" +"trafficplex.cloud\0" +"sci.eg\0tec.mi.us\0" +"org\0" +"hn.cn\0" +"pay\0" +"dynserv.org\0" +"\xe6\x96\xb0\xe6\xbd\x9f.jp\0fujinomiya.shizuoka.jp\0" +"yatsuka.shimane.jp\0" +"gs.of.no\0" +"the.br\0" +"minamiawaji.hyogo.jp\0comcast\0" +"network\0soundcast.me\0" +"*.sendai.jp\0" +"chuo.osaka.jp\0" +"mallorca.museum\0" +"nanbu.yamanashi.jp\0" +"nikon\0map.fastly.net\0" +"money.museum\0hr.eu.org\0" +"sd.cn\0tp.it\0" +"stjohn.museum\0" +"yatsushiro.kumamoto.jp\0ouda.nara.jp\0" +"rogers\0" +"wien\0" +"seto.aichi.jp\0" +"gujo.gifu.jp\0mitoyo.kagawa.jp\0nishikawa.yamagata.jp\0malbork.pl\0ott\0" +"torsken.no\0" +"torahime.shiga.jp\0" +"engine.aero\0lib.va.us\0xfinity\0" +"yokoshibahikari.chiba.jp\0" +"tcp4.me\0" +"rsvp\0" +"clothing\0" +"dst.mi.us\0" +"chijiwa.nagasaki.jp\0" +"iki.nagasaki.jp\0" +"airforce\0operaunite.com\0" +"pet\0" +"is-with-theband.com\0" +"cesenaforli.it\0" +"entomology.museum\0" +"no.it\0ovh\0trust\0" +"naturalhistory.museum\0" +"potenza.it\0hosting-cluster.nl\0" +"\xe9\xa6\x99\xe6\xb8\xaf\0" +"kv.ua\0" +"basketball\0" +"k12.me.us\0staples\0" +"kushimoto.wakayama.jp\0" +"tsuruta.aomori.jp\0" +"karasuyama.tochigi.jp\0" +"database.museum\0for.one\0" +"static-access.net\0" +"politica.bo\0\xc3\xb8vre-eiker.no\0" +"c.bg\0" +"flog.br\0*.nom.br\0" +"in-brb.de\0" +"cc.nv.us\0" +"bulsan-s\xc3\xbc""dtirol.it\0phd\0eating-organic.net\0" +"leikanger.no\0" +"med.br\0" +"withgoogle.com\0" +"okuizumo.shimane.jp\0" +"chikugo.fukuoka.jp\0" +"dyndns.ddnss.de\0" +"cyon.site\0" +"ama.aichi.jp\0" +"bingo\0" +"pid\0" +"theatre\0" +"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" +"ruovat.no\0" +"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" +"vads\xc3\xb8.no\0" +"omihachiman.shiga.jp\0" +"pin\0" +"ip6.arpa\0" +"vlog.br\0" +"bo.telemark.no\0" +"suzuka.mie.jp\0" +"computer.museum\0russia.museum\0supplies\0" +"lezajsk.pl\0" +"med.ec\0wiki\0" +"qh.cn\0sakae.nagano.jp\0" +"med.ee\0" +"mihama.wakayama.jp\0" +"dyndns-server.com\0" +"tel.tr\0senseering.net\0" +"latina.it\0kuju.oita.jp\0tokashiki.okinawa.jp\0" +"yasuda.kochi.jp\0datsun\0" +"wildlife.museum\0" +"trieste.it\0" +"\xe6\xbb\x8b\xe8\xb3\x80.jp\0sakae.chiba.jp\0kikuchi.kumamoto.jp\0hgtv\0" +"irish\0" +"isa-geek.org\0" +"nasushiobara.tochigi.jp\0mikawa.yamagata.jp\0" +"kamaishi.iwate.jp\0vlaanderen\0" +"kozaki.chiba.jp\0setouchi.okayama.jp\0" +"qa2.com\0" +"curitiba.br\0fukushima.fukushima.jp\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0nic.tj\0" +"grozny.su\0" +"mizunami.gifu.jp\0kamikitayama.nara.jp\0nagatoro.saitama.jp\0*.stg.dev\0" +"black\0" +"mc.it\0rzeszow.pl\0workers.dev\0" +"l\xc3\xa1hppi.no\0" +"stadt.museum\0" +"szkola.pl\0" +"skiptvet.no\0wine\0" +"kobayashi.miyazaki.jp\0tonami.toyama.jp\0" +"pharmacy.museum\0lease\0" +"nhs.uk\0accountants\0" +"wakasa.fukui.jp\0" +"vicenza.it\0" +"brumunddal.no\0" +"gs.ah.no\0" +"pnc\0" +"no-ip.co.uk\0" +"ma.gov.br\0med.ht\0\xe7\xbe\xa4\xe9\xa6\xac.jp\0" +"hakusan.ishikawa.jp\0" +"minamimaki.nagano.jp\0\xe9\x9b\x86\xe5\x9b\xa2\0" +"usdecorativearts.museum\0from-va.com\0" +"shinshinotsu.hokkaido.jp\0fujimi.nagano.jp\0" +"wiki.bo\0nebraska.museum\0" +"fr.it\0shunan.yamaguchi.jp\0serveftp.net\0" +"lib.ee\0" +"wiki.br\0credit\0" +"grozny.ru\0" +"\xd0\xba\xd0\xbe\xd0\xbc\0" +"doomdns.org\0" +"brandywinevalley.museum\0" +"kita.tokyo.jp\0" +"mj\xc3\xb8ndalen.no\0" +"shirako.chiba.jp\0" +"sunagawa.hokkaido.jp\0" +"championship.aero\0" +"rikubetsu.hokkaido.jp\0hanyu.saitama.jp\0" +"mesaverde.museum\0amsterdam\0" +"v-info.info\0" +"rieti.it\0joboji.iwate.jp\0\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0" +"aure.no\0" +"direct\0" +"bievat.no\0" +"okayama.jp\0kawasaki.miyagi.jp\0seat\0" +"varese.it\0" +"b\xc3\xb8.telemark.no\0" +"hirosaki.aomori.jp\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0baby\0" +"bas.it\0" +"s3.dualstack.ca-central-1.amazonaws.com\0c.la\0" +"trentinsuedtirol.it\0" +"lewismiller.museum\0" +"anjo.aichi.jp\0" +"nic.za\0living\0" +"shinjo.okayama.jp\0" +"boehringer\0" +"compare\0" +"kaszuby.pl\0" +"dclk\0" +"game.tw\0" +"vall\xc3\xa9""edaoste.it\0" +"country\0is-a-patsfan.org\0" +"mizusawa.iwate.jp\0" +"med.ly\0" +"nikko.tochigi.jp\0linkyard-cloud.ch\0" +"pro\0mobile\0" +"arendal.no\0" +"r\xc3\xa1isa.no\0ru.com\0" +"pru\0" +"trentin-sued-tirol.it\0" +"yoichi.hokkaido.jp\0uto.kumamoto.jp\0" +"podhale.pl\0" +"ecologia.bo\0" +"green\0" +"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"portal.museum\0schweiz.museum\0" +"okuma.fukushima.jp\0" +"seek\0" +"travelersinsurance\0" +"9guacu.br\0soja.okayama.jp\0sp.leg.br\0" +"scientist.aero\0wanggou\0" +"rankoshi.hokkaido.jp\0" +"ventures\0" +"tadotsu.kagawa.jp\0" +"med.om\0" +"mitsuke.niigata.jp\0kg.kr\0pub\0" +"termez.su\0" +"med.pa\0frogans\0" +"umaji.kochi.jp\0unnan.shimane.jp\0" +"farmequipment.museum\0" +"tottori.jp\0" +"rissa.no\0" +"readthedocs.io\0" +"prod\0" +"prof\0" +"gjerdrum.no\0barclays\0" +"med.pl\0" +"aa.no\0" +"sd.us\0redumbrella\0" +"mp.br\0" +"cc.ut.us\0" +"sayama.osaka.jp\0" +"b\xc3\xa6rum.no\0" +"obira.hokkaido.jp\0" +"loginline.dev\0" +"verran.no\0organic\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" +"inagawa.hyogo.jp\0matsushima.miyagi.jp\0at-band-camp.net\0" +"pwc\0" +"zagan.pl\0" +"haugesund.no\0company\0technology\0" +"biev\xc3\xa1t.no\0" +"tokai.ibaraki.jp\0" +"mayfirst.org\0" +"siracusa.it\0yaizu.shizuoka.jp\0ruhr\0" +"rivne.ua\0k12.mt.us\0security\0" +"taku.saga.jp\0" +"rennebu.no\0from-dc.com\0" +"choshi.chiba.jp\0" +"il.eu.org\0nh-serv.co.uk\0" +"coloradoplateau.museum\0kommune.no\0" +"matsubushi.saitama.jp\0" +"med.sa\0" +"shibecha.hokkaido.jp\0med.sd\0" +"firebaseapp.com\0" +"p.bg\0" +"c.se\0" +"bato.tochigi.jp\0" +"isa-geek.com\0" +"okoppe.hokkaido.jp\0" +"servepics.com\0" +"tsunan.niigata.jp\0" +"sabae.fukui.jp\0" +"go.ci\0" +"kosaka.akita.jp\0" +"kanmaki.nara.jp\0kamikawa.saitama.jp\0" +"webhop.org\0" +"kijo.miyazaki.jp\0" +"aktyubinsk.su\0" +"go.cr\0" +"ris\xc3\xb8r.no\0" +"leangaviika.no\0hu.eu.org\0ie.eu.org\0" +"higashiyamato.tokyo.jp\0netflix\0" +"luroy.no\0wi.us\0" +"powiat.pl\0" +"dynamic-dns.info\0" +"fujixerox\0" +"tatsuno.nagano.jp\0ikaruga.nara.jp\0" +"from-fl.com\0" +"pors\xc3\xa1\xc5\x8bgu.no\0" +"shima.mie.jp\0" +"s3-external-1.amazonaws.com\0s3-website.ap-northeast-2.amazonaws.com\0" +"realestate.pl\0kmpsp.gov.pl\0" +"ta.it\0sko.gov.pl\0sopot.pl\0" +"*.compute-1.amazonaws.com\0" +"town.museum\0" +"band\0" +"ol.no\0" +"bz.it\0bibai.hokkaido.jp\0" +"directory\0" +"asmatart.museum\0humanities.museum\0kongsberg.no\0" +"other.nf\0" +"cog.mi.us\0bank\0" +"florence.it\0" +"space\0" +"livinghistory.museum\0k12.ar.us\0lib.tn.us\0" +"nsw.edu.au\0" +"gb.net\0" +"space.museum\0" +"berlin\0" +"kaga.ishikawa.jp\0" +"dscloud.mobi\0" +"tomobe.ibaraki.jp\0" +"\xe6\x94\xbf\xe5\xba\x9c.\xe9\xa6\x99\xe6\xb8\xaf\0" +"celtic.museum\0" +"kamisato.saitama.jp\0" +"bentley\0" +"chihayaakasaka.osaka.jp\0" +"gjesdal.no\0" +"gs.rl.no\0" +"ando.nara.jp\0" +"dentist\0" +"ancona.it\0accountant\0" +"arab\0" +"contemporary.museum\0" +"aeroclub.aero\0" +"go.id\0" +"jinsekikogen.hiroshima.jp\0" +"bnr.la\0from-pr.com\0" +"skj\xc3\xa5k.no\0singles\0quicksytes.com\0" +"higashinaruse.akita.jp\0zuerich\0" +"muni.il\0" +"british.museum\0kvitsoy.no\0voagat.no\0" +"go.it\0inawashiro.fukushima.jp\0" +"direct.quickconnect.to\0" +"huissier-justice.fr\0" +"backplaneapp.io\0" +"\xe4\xbd\x9b\xe5\xb1\xb1\0" +"indianmarket.museum\0" +"go.jp\0" +"algard.no\0" +"webredirect.org\0outsystemscloud.com\0" +"go.ke\0" +"moscow.museum\0flowers\0" +"doctor\0lublin.pl\0" +"corvette.museum\0" +"draydns.de\0" +"volkswagen\0" +"re.it\0" +"her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" +"go.kr\0" +"pubol.museum\0cust.dev.thingdust.io\0" +"systems\0versicherung\0" +"an.it\0yachimata.chiba.jp\0" +"tattoo\0" +"kujukuri.chiba.jp\0" +"alabama.museum\0" +"ashiya.hyogo.jp\0blogdns.net\0" +"tas.edu.au\0finearts.museum\0" +"sande.more-og-romsdal.no\0" +"pomorze.pl\0principe.st\0tatar\0" +"re.kr\0" +"s3-fips-us-gov-west-1.amazonaws.com\0" +"kasumigaura.ibaraki.jp\0" +"miyazaki.miyazaki.jp\0" +"byen.site\0" +"schlesisches.museum\0gr.eu.org\0" +"capital\0" +"tamakawa.fukushima.jp\0" +"maritime.museum\0" +"uenohara.yamanashi.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa4\0" +"is-leet.com\0" +"nakagawa.nagano.jp\0" +"opoczno.pl\0" +"miasta.pl\0blogspot.co.at\0" +"family.museum\0dubai\0" +"kunitomi.miyazaki.jp\0cloudaccess.net\0" +"nagaokakyo.kyoto.jp\0global\0red\0" +"lib.nm.us\0" +"8.bg\0" +"stuff-4-sale.org\0" +"perso.ht\0haibara.shizuoka.jp\0ren\0" +"vladikavkaz.ru\0" +"misawa.aomori.jp\0ashoro.hokkaido.jp\0" +"qvc\0from-me.org\0" +"luzern.museum\0cechire.com\0" +"fc.it\0" +"uk.com\0" +"atsugi.kanagawa.jp\0" +"wsa.gov.pl\0" +"berkeley.museum\0fedje.no\0" +"vladikavkaz.su\0" +"bydgoszcz.pl\0" +"shinonsen.hyogo.jp\0" +"go.pw\0" +"cc.wa.us\0" +"hioki.kagoshima.jp\0" +"deal\0" +"campobasso.it\0" +"gov.ac\0" +"fukushima.jp\0hotel.tz\0" +"gov.ae\0is-a-player.com\0" +"gov.af\0tamano.okayama.jp\0tokorozawa.saitama.jp\0" +"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0ras.ru\0" +"nm.cn\0pi.it\0" +"go.dyndns.org\0" +"loan\0" +"sexy\0virtualuser.de\0" +"gov.al\0es.kr\0\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" +"khakassia.su\0" +"gov.ba\0" +"gov.ar\0gov.bb\0kaminoyama.yamagata.jp\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" +"gov.as\0jan-mayen.no\0" +"gov.au\0" +"gov.bf\0carbonia-iglesias.it\0" +"gov.bh\0" +"gov.az\0r.cdn77.net\0" +"\xe5\xb7\xa5\xe8\xa1\x8c\0nhlfan.net\0" +"gov.bm\0" +"gov.bn\0lecco.it\0" +"norfolk.museum\0" +"aurskog-holand.no\0holt\xc3\xa5len.no\0p.se\0" +"gov.br\0iwate.iwate.jp\0" +"gov.bs\0" +"gov.bt\0gov.cd\0ril\0" +"\xd9\x82\xd8\xb7\xd8\xb1\0dyndns-blog.com\0" +"otari.nagano.jp\0" +"andebu.no\0commbank\0rio\0oy.lc\0" +"rip\0" +"gov.by\0" +"gov.bz\0nadex\0" +"show.aero\0capebreton.museum\0" +"gov.cl\0go.th\0" +"gov.cm\0" +"gov.cn\0hl.cn\0go.tj\0" +"gov.co\0" +"mg.gov.br\0" +"gov.cu\0gs.nt.no\0leka.no\0" +"zoology.museum\0naturbruksgymn.se\0" +"gov.cx\0\xd0\xbc\xd0\xba\xd0\xb4\0" +"gov.cy\0" +"go.ug\0wv.us\0" +"karumai.iwate.jp\0" +"gov.dm\0konyvelo.hu\0" +"namegata.ibaraki.jp\0go.tz\0" +"gov.do\0pri.ee\0" +"tgory.pl\0" +"pantheonsite.io\0" +"arts.co\0gov.ec\0lib.ky.us\0temasek\0" +"gov.ee\0carrier.museum\0" +"kitami.hokkaido.jp\0dyndns.biz\0blogspot.co.id\0" +"gov.eg\0" +"tn.it\0tjmaxx\0" +"showtime\0" +"gov.dz\0takaoka.toyama.jp\0" +"army\0from-ks.com\0" +"yamazoe.nara.jp\0" +"square.museum\0" +"campinagrande.br\0en-root.fr\0blogspot.co.il\0" +"hirogawa.wakayama.jp\0" +"kaluga.su\0" +"fuossko.no\0altervista.org\0s3-sa-east-1.amazonaws.com\0" +"gov.et\0" +"konan.shiga.jp\0" +"ann-arbor.mi.us\0" +"nara.jp\0" +"sogndal.no\0" +"gov.fj\0tokoname.aichi.jp\0from-la.net\0sytes.net\0" +"detroit.museum\0and\xc3\xb8y.no\0loten.no\0fin.ci\0" +"trentino-sud-tirol.it\0nakamichi.yamanashi.jp\0*.in.futurecms.at\0" +"oshima.tokyo.jp\0" +"in-berlin.de\0" +"matsukawa.nagano.jp\0loft\0" +"blackfriday\0" +"arpa\0" +"gov.ge\0ismaili\0" +"press.cy\0" +"gov.gh\0wanouchi.gifu.jp\0" +"wa.edu.au\0gov.gi\0cody.museum\0" +"ninja\0" +"\xe6\x84\x9b\xe5\xaa\x9b.jp\0sanuki.kagawa.jp\0iheya.okinawa.jp\0swiebodzin.pl\0" +"fst.br\0gov.gn\0przeworsk.pl\0myftp.biz\0" +"toshiba\0" +"gov.gr\0" +"date.fukushima.jp\0" +"fin.ec\0gov.gu\0hotel.lk\0" +"oshu.iwate.jp\0" +"gov.gy\0vaapste.no\0us-4.evennode.com\0" +"zapto.xyz\0" +"gov.hk\0" +"kasai.hyogo.jp\0jobs.tt\0" +"jpmorgan\0isa-geek.net\0" +"sec.ps\0" +"nonoichi.ishikawa.jp\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0" +"os.hordaland.no\0\xd0\xbc\xd0\xbe\xd0\xbd\0" +"lib.or.us\0\xe6\x96\xb0\xe9\x97\xbb\0" +"ipifony.net\0" +"a.bg\0gov.ie\0history.museum\0spy.museum\0" +"motoyama.kochi.jp\0" +"hattfjelldal.no\0motorcycles\0" +"shizukuishi.iwate.jp\0" +"gov.il\0bolzano.it\0" +"gov.in\0" +"uz.ua\0hughes\0" +"gov.iq\0k12.wa.us\0" +"gov.ir\0iwanuma.miyagi.jp\0" +"gov.is\0" +"gov.it\0" +"chofu.tokyo.jp\0" +"tank.museum\0h\xc3\xa1pmir.no\0" +"gov.jo\0kharkiv.ua\0" +"!city.sapporo.jp\0" +"bmoattachments.org\0*.platformsh.site\0" +"kawanehon.shizuoka.jp\0" +"asda\0alpha-myqnapcloud.com\0" +"\xc3\xa5s.no\0eidsberg.no\0" +"gov.kg\0skodje.no\0arte\0" +"sap\0" +"gov.ki\0s\xc3\xb8rreisa.no\0" +"caserta.it\0" +"sas\0" +"gov.km\0co.business\0" +"gov.kn\0" +"village.museum\0" +"gov.kp\0dell\0" +"gov.la\0sbi\0" +"nakai.kanagawa.jp\0gov.lb\0to.leg.br\0" +"gov.lc\0" +"partners\0" +"gov.kw\0" +"kamikoani.akita.jp\0funahashi.toyama.jp\0" +"accident-prevention.aero\0gov.ky\0sca\0us-3.evennode.com\0" +"gov.kz\0scb\0" +"gov.lk\0historical.museum\0sbs\0" +"mutsuzawa.chiba.jp\0mibu.tochigi.jp\0" +"hotel.hu\0serveftp.org\0" +"gov.ma\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" +"kitakata.miyazaki.jp\0gov.lr\0" +"gov.ls\0hemnes.no\0bbva\0" +"gov.lt\0" +"gov.me\0" +"gov.lv\0\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" +"gov.mg\0" +"gov.ly\0attorney\0protonet.io\0" +"gorizia.it\0" +"gov.mk\0" +"gov.ml\0" +"omega\0" +"sennan.osaka.jp\0oyama.tochigi.jp\0gov.mn\0" +"gov.mo\0s\xc3\xb8mna.no\0lib.ct.us\0" +"today\0" +"gov.mr\0" +"gov.ms\0" +"biratori.hokkaido.jp\0kasama.ibaraki.jp\0" +"gov.mu\0" +"viterbo.it\0gov.mv\0wielun.pl\0selfip.net\0" +"gov.mw\0gov.ng\0is-a-candidate.org\0" +"gov.my\0roros.no\0" +"gov.mz\0" +"ed.ao\0society.museum\0" +"shinanomachi.nagano.jp\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0fujikawaguchiko.yamanashi.jp\0demon.nl\0" +"hl.no\0" +"pyatigorsk.ru\0" +"gov.nr\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0" +"yuzawa.niigata.jp\0reisen\0run\0" +"poa.br\0" +"lib.mn.us\0arts.ve\0" +"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0" +"beeldengeluid.museum\0habmer.no\0ses\0" +"suisse.museum\0gov.om\0" +"shimamaki.hokkaido.jp\0wios.gov.pl\0" +"sew\0" +"cuneo.it\0sex\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0" +"tmall\0" +"asia\0" +"ed.ci\0sveio.no\0" +"cesenaforl\xc3\xac.it\0niiza.saitama.jp\0gov.ph\0" +"abudhabi\0us-2.evennode.com\0" +"sfr\0" +"gov.pk\0" +"gov.pl\0" +"royken.no\0rwe\0" +"ed.cr\0gov.pn\0" +"gov.qa\0ivano-frankivsk.ua\0bloxcms.com\0" +"gov.pr\0" +"gov.ps\0" +"gov.pt\0" +"hanawa.fukushima.jp\0" +"tn.us\0" +"takasago.hyogo.jp\0mishima.shizuoka.jp\0" +"gov.py\0" +"odessa.ua\0blogspot.co.uk\0" +"karm\xc3\xb8y.no\0" +"honjo.saitama.jp\0perso.sn\0" +"shop.ht\0pv.it\0" +"shop.hu\0" +"bellevue.museum\0s3-website-ap-northeast-1.amazonaws.com\0" +"asahi.mie.jp\0" +"watch-and-clock.museum\0" +"tokigawa.saitama.jp\0" +"solund.no\0desi\0mycd.eu\0" +"info.gu\0us-east-1.elasticbeanstalk.com\0" +"perso.tn\0" +"gov.sa\0" +"ariake.saga.jp\0gov.sb\0" +"gov.rs\0gov.sc\0" +"como.it\0takagi.nagano.jp\0gov.sd\0" +"gov.ru\0forumz.info\0" +"search\0" +"gov.rw\0gov.sg\0" +"ohkura.yamagata.jp\0gov.sh\0" +"kiyokawa.kanagawa.jp\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0wales\0" +"gov.sl\0" +"movimiento.bo\0scotland.museum\0nm.us\0" +"info.ht\0yawatahama.ehime.jp\0" +"info.hu\0gov.so\0" +"mansions.museum\0" +"arts.ro\0gov.ss\0" +"gov.st\0" +"presse.km\0" +"environment.museum\0" +"gov.sx\0" +"gov.sy\0us-1.evennode.com\0" +"gov.tj\0" +"bieszczady.pl\0gov.tl\0" +"gov.tm\0" +"info.et\0valle-daosta.it\0gov.tn\0" +"gov.to\0" +"higashihiroshima.hiroshima.jp\0daigo.ibaraki.jp\0iizuna.nagano.jp\0" +"stryn.no\0gov.ua\0ski\0" +"takatori.nara.jp\0hita.oita.jp\0gov.tr\0" +"info.fj\0kagawa.jp\0gov.tt\0" +"minamiyamashiro.kyoto.jp\0" +"gov.tw\0shriram\0eu-west-2.elasticbeanstalk.com\0" +"yoshino.nara.jp\0" +"gov.uk\0" +"shiojiri.nagano.jp\0" +"suldal.no\0" +"love\0sky\0" +"tsugaru.aomori.jp\0mihara.hiroshima.jp\0" +"gov.vc\0" +"presse.ml\0" +"gov.ve\0" +"osakasayama.osaka.jp\0broker\0" +"servequake.com\0" +"iglesias-carbonia.it\0zushi.kanagawa.jp\0" +"sb.ua\0homeftp.org\0" +"valledaosta.it\0" +"agro.bo\0erotika.hu\0donostia.museum\0" +"taishin.fukushima.jp\0kep.tr\0gov.vn\0webhop.net\0" +"casino.hu\0" +"iitate.fukushima.jp\0" +"ullensaker.no\0" +"meguro.tokyo.jp\0b.ssl.fastly.net\0info.cx\0" +"crafts.museum\0" +"barletta-trani-andria.it\0hongo.hiroshima.jp\0" +"judygarland.museum\0os\xc3\xb8yro.no\0onyourside\0" +"deporte.bo\0blogspot.co.ke\0" +"lib.vt.us\0yoga\0" +"arts.nf\0" +"us.eu.org\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0ed.jp\0kwpsp.gov.pl\0" +"info.ec\0" +"myfritz.net\0" +"edugit.org\0" +"fin.tn\0" +"trani-barletta-andria.it\0" +"gov.ws\0" +"kawachinagano.osaka.jp\0" +"info.bb\0" +"info.at\0" +"info.au\0" +"frontier\0" +"britishcolumbia.museum\0" +"info.az\0" +"stat.no\0br\xc3\xb8nn\xc3\xb8ysund.no\0" +"palmas.br\0" +"leirfjord.no\0" +"friulivgiulia.it\0higashisumiyoshi.osaka.jp\0" +"info.bo\0kopervik.no\0spa\0" +"fiat\0" +"kvits\xc3\xb8y.no\0" +"blockbuster\0" +"vestre-toten.no\0ashgabad.su\0" +"nakatombetsu.hokkaido.jp\0" +"n.bg\0gov.za\0soy\0" +"a.se\0press.se\0ma.us\0" +"cc.pa.us\0" +"campinas.br\0" +"okinoshima.shimane.jp\0lancaster\0" +"info.co\0gateway.museum\0shaw\0lima-city.rocks\0" +"uwajima.ehime.jp\0tab\0" +"windmill.museum\0lib.al.us\0" +"otaru.hokkaido.jp\0\xe6\x89\x8b\xe8\xa1\xa8\0" +"gov.zm\0" +"mizumaki.fukuoka.jp\0" +"drobak.no\0" +"loginline.app\0" +"\xe8\x87\xba\xe7\x81\xa3\0" +"production.aero\0leadpages.co\0" +"gov.zw\0" +"rade.no\0" +"debian.net\0blogspot.co.nz\0" +"greta.fr\0oarai.ibaraki.jp\0umig.gov.pl\0" +"medizinhistorisches.museum\0" +"tax\0" +"is-a-republican.com\0" +"americanart.museum\0holdings\0" +"ostroda.pl\0srl\0" +"batsfjord.no\0fido\0" +"kamifurano.hokkaido.jp\0ichinoseki.iwate.jp\0" +"hs.run\0" +"stranda.no\0" +"saobernardo.br\0so.it\0kochi.kochi.jp\0gdansk.pl\0" +"szex.hu\0" +"chirurgiens-dentistes-en-france.fr\0" +"homeip.net\0" +"pub.sa\0tci\0" +"akkeshi.hokkaido.jp\0" +"can.museum\0" +"ch.it\0targi.pl\0" +"sweetpepper.org\0" +"ericsson\0office-on-the.net\0" +"rugby\0fr.eu.org\0" +"suginami.tokyo.jp\0swidnica.pl\0" +"stc\0" +"is-very-sweet.org\0" +"h\xc3\xb8yanger.no\0nedre-eiker.no\0" +"bmd.br\0omiya.saitama.jp\0" +"gets-it.net\0" +"ed.pw\0tdk\0" +"ryugasaki.ibaraki.jp\0obuse.nagano.jp\0" +"ovre-eiker.no\0" +"nahari.kochi.jp\0\xe0\xb9\x80\xe0\xb8\x99\xe0\xb9\x87\xe0\xb8\x95.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"\xe0\xb8\xad\xe0\xb8\x87\xe0\xb8\x84\xe0\xb9\x8c\xe0\xb8\x81\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"gildeskal.no\0" +"ponpes.id\0" +"sm\xc3\xb8la.no\0blogspot.com.cy\0" +"mn.it\0mitake.gifu.jp\0mysecuritycamera.net\0" +"cc.co.us\0" +"ballangen.no\0" +"shakotan.hokkaido.jp\0nishinomiya.hyogo.jp\0tel\0" +"tickets\0" +"awaji.hyogo.jp\0" +"philadelphia.museum\0" +"blogspot.com.ee\0" +"lanbib.se\0blogspot.com.eg\0" +"samegawa.fukushima.jp\0" +"press.ma\0tonsberg.no\0" +"trentino-aadige.it\0muika.niigata.jp\0" +"friuli-veneziagiulia.it\0" +"onojo.fukuoka.jp\0blogspot.com.ar\0" +"dd-dns.de\0" +"brother\0" +"blogspot.com.au\0" +"ham-radio-op.net\0" +"masfjorden.no\0cc.ne.us\0" +"catania.it\0" +"nikolaev.ua\0" +"uozu.toyama.jp\0" +"fr\xc3\xa6na.no\0" +"narusawa.yamanashi.jp\0" +"spjelkavik.no\0selje.no\0est-mon-blogueur.com\0from-hi.com\0" +"of.london\0" +"matta-varjjat.no\0shia\0" +"aibetsu.hokkaido.jp\0blogspot.com.br\0" +"to.work\0" +"zlg.br\0koto.shiga.jp\0" +"balat.no\0" +"is.gov.pl\0" +"thd\0" +"dyndns-web.com\0blogspot.com.by\0" +"yoshida.saitama.jp\0minami-alps.yamanashi.jp\0" +"frosinone.it\0df.leg.br\0" +"!city.nagoya.jp\0realtor\0" +"s3-us-west-1.amazonaws.com\0blogspot.com.co\0" +"tono.iwate.jp\0redirectme.net\0" +"genting\0" +"marche.it\0" +"nishiwaki.hyogo.jp\0" +"austevoll.no\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0yokkaichi.mie.jp\0" +"education.museum\0" +"rc.it\0in-the-band.net\0" +"gorge.museum\0" +"misasa.tottori.jp\0" +"s\xc3\xb8r-varanger.no\0" +"mishima.fukushima.jp\0" +"svelvik.no\0" +"assn.lk\0juif.museum\0k12.pa.us\0glade\0" +"kaas.gg\0" +"al.it\0" +"channel\0" +"floro.no\0myfirewall.org\0" +"niepce.museum\0film\0" +"\xe4\xbd\x90\xe8\xb3\x80.jp\0" +"games.hu\0blogspot.com.es\0" +"floripa.br\0" +"info.ve\0" +"tjx\0" +"webcam\0azimuth.network\0" +"flynnhosting.net\0" +"kr.it\0" +"cc.as.us\0" +"info.vn\0shop.th\0" +"\xd9\x83\xd9\x88\xd9\x85\0" +"urn.arpa\0community-pro.de\0" +"fujisawa.iwate.jp\0hino.tokyo.jp\0" +"newport.museum\0overhalla.no\0" +"ami.ibaraki.jp\0" +"promo\0" +"katowice.pl\0" +"joburg\0" +"takanezawa.tochigi.jp\0" +"amsterdam.museum\0blogspot.co.za\0" +"uvic.museum\0sarpsborg.no\0" +"tamaki.mie.jp\0" +"ipiranga\0" +"6.bg\0essex.museum\0\xe5\x95\x86\xe6\xa0\x87\0" +"fukuyama.hiroshima.jp\0" +"gulen.no\0nflfan.org\0" +"turystyka.pl\0on-the-web.tv\0" +"cc.ky.us\0" +"dance\0" +"!city.yokohama.jp\0" +"charter.aero\0" +"utsunomiya.tochigi.jp\0" +"info.tn\0" +"k12.tx.us\0" +"opole.pl\0info.tr\0" +"edu.eu.org\0" +"togakushi.nagano.jp\0info.tt\0" +"gentapps.com\0shop.ro\0" +"shop\0" +"ozu.ehime.jp\0nirasaki.yamanashi.jp\0info.tz\0memorial\0" +"city.hu\0k12.co.us\0lib.wy.us\0from-tx.com\0" +"al.no\0homedns.org\0" +"prudential\0" +"show\0" +"h\xc3\xa4kkinen.fi\0" +"date.hokkaido.jp\0u.channelsdvr.net\0" +"science.museum\0" +"bauhaus\0" +"maif\0" +"r\xc3\xa6lingen.no\0" +"pg.it\0" +"jab.br\0saikai.nagasaki.jp\0shioya.tochigi.jp\0legnica.pl\0top\0" +"info.ro\0" +"iwama.ibaraki.jp\0" +"fire\0ddns.me\0" +"shop.pl\0\xe6\x8b\x9b\xe8\x81\x98\0" +"info.sd\0exposed\0" +"sibenik.museum\0" +"iwakura.aichi.jp\0ishigaki.okinawa.jp\0" +"toyone.aichi.jp\0minamitane.kagoshima.jp\0kunitachi.tokyo.jp\0" +"tselinograd.su\0" +"secure\0" +"komoro.nagano.jp\0yaese.okinawa.jp\0" +"\xd0\xbe\xd1\x80\xd0\xb3\0" +"jobs\0" +"kisarazu.chiba.jp\0fish\0" +"n.se\0mn.us\0\xe4\xb8\xad\xe4\xbf\xa1\0" +"wskr.gov.pl\0" +"nalchik.ru\0" +"info.pk\0" +"info.pl\0nowtv\0" +"hashimoto.wakayama.jp\0" +"is-a-personaltrainer.com\0" +"aisai.aichi.jp\0" +"audi\0" +"gz.cn\0friuli-venezia-giulia.it\0kameyama.mie.jp\0chungnam.kr\0starachowice.pl\0info.pr\0" +"for.sale\0" +"betainabox.com\0" +"presse.ci\0nalchik.su\0" +"iwate.jp\0ayabe.kyoto.jp\0" +"ap-southeast-2.elasticbeanstalk.com\0" +"pisz.pl\0" +"blogspot.com.mt\0" +"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0misconfused.org\0" +"agro.pl\0" +"info.na\0ubs\0blogspot.com.ng\0my-wan.de\0" +"svalbard.no\0valer.ostfold.no\0" +"minowa.nagano.jp\0trv\0" +"halloffame.museum\0v\xc3\xa5gan.no\0" +"trentinosudtirol.it\0info.mv\0info.nf\0" +"ohira.tochigi.jp\0" +"info.ni\0voting\0" +"aioi.hyogo.jp\0beer\0" +"\xc4\x8d\xc3\xa1hcesuolo.no\0" +"tamba.hyogo.jp\0" +"reviews\0toyota\0" +"\xc3\xb8rsta.no\0" +"aurskog-h\xc3\xb8land.no\0" +"kaizuka.osaka.jp\0info.nr\0" +"rovigo.it\0nemuro.hokkaido.jp\0" +"hiroshima.jp\0nagiso.nagano.jp\0" +"gotdns.com\0" +"piacenza.it\0rishiri.hokkaido.jp\0ng.school\0" +"minamisanriku.miyagi.jp\0" +"from-wy.com\0basicserver.io\0" +"info.la\0" +"ino.kochi.jp\0" +"indigena.bo\0tui\0" +"nabari.mie.jp\0" +"baidu\0" +"verm\xc3\xb6gensberater\0blogspot.com.tr\0" +"foundation.museum\0" +"al.us\0" +"\xe6\x89\x8b\xe6\x9c\xba\0\xe7\xbd\x91\xe5\x9d\x80\0" +"info.ls\0" +"ehime.jp\0" +"gen.in\0" +"southwest.museum\0kr.ua\0" +"ogimi.okinawa.jp\0" +"house.museum\0k12.mi.us\0" +"kanoya.kagoshima.jp\0schwarz\0" +"nom.ad\0" +"tvs\0we.bs\0nom.ae\0" +"nyuzen.toyama.jp\0nom.af\0" +"nom.ag\0s3-us-gov-west-1.amazonaws.com\0" +"express\0nom.ai\0" +"vision\0" +"finland.museum\0thingdustdata.com\0" +"goshiki.hyogo.jp\0nom.al\0" +"bomlo.no\0\xd9\x85\xd8\xb5\xd8\xb1\0" +"honjo.akita.jp\0" +"shibata.niigata.jp\0" +"info.ke\0hole.no\0kerrylogistics\0lefrak\0" +"pharmacien.fr\0morimachi.shizuoka.jp\0rj.leg.br\0" +"info.ki\0" +"barueri.br\0yamakita.kanagawa.jp\0" +"l\xc3\xb8""dingen.no\0dyndns-ip.com\0" +"katsuragi.wakayama.jp\0homeftp.net\0" +"selfip.org\0" +"oharu.aichi.jp\0" +"mihama.fukui.jp\0tomiya.miyagi.jp\0omachi.nagano.jp\0" +"video\0" +"narita.chiba.jp\0" +"civilaviation.aero\0academy.museum\0" +"bozen-sudtirol.it\0nom.cl\0" +"nom.co\0agency\0" +"divtasvuodna.no\0chrome\0glass\0ufcfan.org\0" +"onomichi.hiroshima.jp\0tobetsu.hokkaido.jp\0shimodate.ibaraki.jp\0" +"cc.ia.us\0" +"hida.gifu.jp\0kartuzy.pl\0" +"costume.museum\0plantation.museum\0" +"shiso.hyogo.jp\0" +"s3-ap-southeast-2.amazonaws.com\0" +"bi.it\0" +"yamagata.yamagata.jp\0" +"jewishart.museum\0gen.ng\0" +"lincoln\0" +"oracle\0silk\0certmgr.org\0blogspot.com.uy\0" +"smola.no\0" +"shimokitayama.nara.jp\0adachi.tokyo.jp\0\xda\x80\xd8\xa7\xd8\xb1\xd8\xaa\0legal\0" +"mashike.hokkaido.jp\0" +"grosseto.it\0katsuyama.fukui.jp\0" +"broker.aero\0nom.es\0" +"odate.akita.jp\0" +"for-some.biz\0" +"reg.dk\0" +"hakuba.nagano.jp\0toda.saitama.jp\0gen.nz\0" +"js.cn\0lo.it\0" +"sina\0" +"nom.fr\0" +"international\0nom.gd\0" +"nom.ge\0" +"suifu.ibaraki.jp\0" +"sakura\0" +"dynamisches-dns.de\0freeddns.org\0" +"kiyosu.aichi.jp\0nom.gl\0" +"vinnytsia.ua\0" +"sjc.br\0motobu.okinawa.jp\0" +"kanazawa.ishikawa.jp\0nom.gt\0" +"foodnetwork\0mc.eu.org\0" +"shiiba.miyazaki.jp\0blackbaudcdn.net\0ptplus.fit\0" +"paderborn.museum\0osen.no\0" +"ukiha.fukuoka.jp\0" +"gripe\0" +"16-b.it\0" +"qld.gov.au\0barrel-of-knowledge.info\0" +"higashishirakawa.gifu.jp\0kadogawa.miyazaki.jp\0" +"aizubange.fukushima.jp\0nom.hn\0" +"ayase.kanagawa.jp\0" +"uno\0" +"bible.museum\0" +"ujitawara.kyoto.jp\0" +"from-ky.com\0" +"tsukuba.ibaraki.jp\0" +"bristol.museum\0" +"taishi.osaka.jp\0" +"murata.miyagi.jp\0" +"nom.im\0" +"yuza.yamagata.jp\0center\0uol\0\xe6\x85\x88\xe5\x96\x84\0" +"balsan-sudtirol.it\0isshiki.aichi.jp\0" +"kudoyama.wakayama.jp\0" +"lt.eu.org\0" +"sondrio.it\0" +"memorial.museum\0" +"kicks-ass.net\0" +"de.us\0tunes\0is-a-anarchist.com\0" +"nx.cn\0pt.it\0midori.chiba.jp\0" +"tsuruga.fukui.jp\0" +"chuo.tokyo.jp\0" +"cranbrook.museum\0kvam.no\0selbu.no\0from-id.com\0" +"deatnu.no\0ups\0nom.ke\0" +"frogn.no\0" +"and.mom\0" +"nom.km\0mysecuritycamera.org\0" +"kviteseid.no\0tran\xc3\xb8y.no\0" +"terni.it\0gen.tr\0best\0" +"asahi.chiba.jp\0kibichuo.okayama.jp\0" +"osteroy.no\0" +"consulado.st\0" +"uhren.museum\0" +"yn.cn\0shizuoka.jp\0" +"nom.li\0" +"auto\0" +"higashikawa.hokkaido.jp\0okayama.okayama.jp\0" +"lib.ar.us\0" +"kainan.wakayama.jp\0" +"def.br\0trentino-altoadige.it\0" +"site\0linkitools.space\0" +"foz.br\0" +"\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" +"cdn77-ssl.net\0" +"baseball.museum\0gloppen.no\0" +"nom.mg\0ambulance.museum\0" +"historicalsociety.museum\0mansion.museum\0strand.no\0infiniti\0" +"club.aero\0k12.ia.us\0nom.mk\0" +"shikokuchuo.ehime.jp\0" +"s3-eu-central-1.amazonaws.com\0" +"mukawa.hokkaido.jp\0" +"wafflecell.com\0" +"watari.miyagi.jp\0" +"sydney.museum\0esurance\0" +"mie.jp\0" +"nom.nc\0" +"is-a-lawyer.com\0" +"massacarrara.it\0miyama.mie.jp\0shiogama.miyagi.jp\0" +"nom.ni\0dvrcam.info\0" +"*.dapps.earth\0" +"nachikatsuura.wakayama.jp\0*.telebit.xyz\0" +"alipay\0" +"cooperativa.bo\0mangyshlak.su\0" +"kumamoto.kumamoto.jp\0suwalki.pl\0" +"sellsyourhome.org\0" +"evje-og-hornnes.no\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0nom.nu\0" +"enterprises\0" +"is-a-designer.com\0" +"stpetersburg.museum\0" +"kumano.mie.jp\0ath.cx\0" +"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" +"nom.pa\0" +"kure.hiroshima.jp\0" +"es.eu.org\0" +"matsuyama.ehime.jp\0minami.kyoto.jp\0" +"net.ac\0nom.pe\0is-into-cartoons.com\0" +"wloclawek.pl\0vet\0" +"net.ae\0" +"net.af\0" +"net.ag\0" +"*.lcl.dev\0" +"net.ai\0" +"nom.pl\0" +"fauske.no\0sola.no\0" +"net.al\0" +"net.am\0nesset.no\0" +"on.fashion\0" +"technology.museum\0nom.qa\0" +"net.ba\0davvesiida.no\0club.tw\0" +"net.ar\0net.bb\0" +"net.au\0nom.pw\0" +"anan.tokushima.jp\0" +"gs.st.no\0" +"net.bh\0" +"k12.nh.us\0" +"net.az\0" +"net.bm\0asker.no\0b\xc3\xa1hcavuotna.no\0grue.no\0lilly\0is-a-painter.com\0freedesktop.org\0" +"net.bn\0" +"net.bo\0info.zm\0\xe7\xbd\x91\xe7\xab\x99\0" +"net.br\0" +"net.bs\0nom.re\0" +"net.bt\0trentinsud-tirol.it\0" +"l.bg\0myvnc.com\0" +"net.ci\0" +"net.bz\0rr.leg.br\0mymediapc.net\0" +"marine.ru\0" +"net.cm\0nom.ro\0serveftp.com\0" +"net.cn\0yokote.akita.jp\0" +"net.co\0" +"carboniaiglesias.it\0" +"v\xc3\xa6r\xc3\xb8y.no\0zara\0nom.rs\0" +"twmail.net\0" +"dr.na\0" +"\xe4\xb8\x96\xe7\x95\x8c\0" +"net.cu\0oystre-slidre.no\0" +"padova.it\0" +"net.cw\0vig\0builtwithdark.com\0nom.si\0" +"machida.tokyo.jp\0" +"net.cy\0s3-website.eu-central-1.amazonaws.com\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0" +"natori.miyagi.jp\0" +"net.dm\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0" +"vin\0" +"net.do\0app.lmpm.com\0" +"vip\0" +"archaeology.museum\0salat.no\0passagens\0" +"eng.br\0nom.st\0" +"net.ec\0" +"osoyro.no\0" +"nishi.osaka.jp\0oyabe.toyama.jp\0" +"net.eg\0research.museum\0lugs.org.uk\0" +"nom.tj\0" +"s3-website-eu-west-1.amazonaws.com\0" +"net.dz\0rs.leg.br\0sc.leg.br\0" +"nom.tm\0" +"cultural.museum\0historisches.museum\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa5\x8d\0" +"kokonoe.oita.jp\0" +"cc.in.us\0" +"oirase.aomori.jp\0" +"adygeya.su\0" +"net.et\0" +"nom.ug\0" +"emiliaromagna.it\0" +"tr\xc3\xa6na.no\0" +"net.fj\0takasaki.gunma.jp\0" +"hirakata.osaka.jp\0", + +"diet\0" +"mordovia.su\0nom.vc\0" +"tourism.tn\0" +"taobao\0" +"bihoro.hokkaido.jp\0instantcloud.cn\0" +"net.ge\0nom.vg\0" +"kamitonda.wakayama.jp\0" +"net.gg\0nom.uy\0" +"williamsburg.museum\0flights\0" +"net.gl\0" +"chattanooga.museum\0" +"net.gn\0" +"net.gp\0" +"net.gr\0" +"fet.no\0" +"net.gt\0" +"net.gu\0uber.space\0" +"shisui.chiba.jp\0moriya.ibaraki.jp\0" +"net.gy\0corporation.museum\0" +"net.hk\0is-a-geek.com\0" +"odo.br\0" +"net.hn\0nisshin.aichi.jp\0" +"msk.ru\0xnbay.com\0" +"takazaki.miyazaki.jp\0" +"from-de.com\0is-a-financialadvisor.com\0" +"tomari.hokkaido.jp\0" +"localhistory.museum\0mk.eu.org\0adygeya.ru\0" +"net.ht\0net.id\0tokyo.jp\0" +"apps.lair.io\0" +"pa.gov.br\0ba.leg.br\0" +"g\xc3\xa1ivuotna.no\0" +"net.il\0" +"net.im\0" +"vet.br\0net.in\0novara.it\0" +"msk.su\0" +"net.iq\0muenster.museum\0cc.ms.us\0cc.nc.us\0mordovia.ru\0" +"net.ir\0" +"net.is\0" +"neyagawa.osaka.jp\0" +"net.je\0" +"mediocampidano.it\0venice.it\0" +"rauma.no\0mydrobo.com\0" +"kadoma.osaka.jp\0" +"net.jo\0nordkapp.no\0nom.za\0" +"s3-website-ap-southeast-1.amazonaws.com\0" +"!city.kitakyushu.jp\0kofu.yamanashi.jp\0makeup\0" +"dr.tr\0" +"app.os.stg.fedoraproject.org\0" +"net.kg\0" +"pb.gov.br\0" +"pe.ca\0net.ki\0rygge.no\0" +"rn.leg.br\0wedeploy.sh\0" +"cc.wy.us\0" +"asahi.yamagata.jp\0" +"gen.mi.us\0" +"ibaraki.jp\0ogose.saitama.jp\0nichinan.tottori.jp\0net.kn\0" +"\xe6\x84\x9b\xe7\x9f\xa5.jp\0" +"net.la\0lib.id.us\0" +"pol.dz\0shichinohe.aomori.jp\0net.lb\0" +"net.lc\0" +"trento.it\0miasa.nagano.jp\0" +"jprs\0mein-iserv.de\0" +"ra.it\0takatsuki.osaka.jp\0" +"net.kw\0volkenkunde.museum\0" +"net.ky\0work\0readmyblog.org\0" +"uchihara.ibaraki.jp\0net.kz\0" +"net.lk\0" +"\xe7\x86\x8a\xe6\x9c\xac.jp\0unazuki.toyama.jp\0" +"it.ao\0cahcesuolo.no\0lifeinsurance\0" +"higashikagura.hokkaido.jp\0ama.shimane.jp\0" +"vao.it\0togane.chiba.jp\0" +"net.ma\0amfam\0fi.eu.org\0" +"miyazaki.jp\0net.lr\0" +"net.ls\0lu.eu.org\0me.eu.org\0" +"takayama.gunma.jp\0" +"net.me\0" +"net.lv\0" +"amazon\0" +"net.ly\0alaska.museum\0" +"tohma.hokkaido.jp\0seika.kyoto.jp\0ro.leg.br\0" +"net.mk\0" +"net.ml\0" +"volvo\0lpages.co\0" +"takikawa.hokkaido.jp\0" +"net.mo\0grandrapids.museum\0sweden.museum\0oh.us\0" +"kinko.kagoshima.jp\0" +"net.ms\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0spdns.eu\0myforum.community\0" +"aizumi.tokushima.jp\0net.mt\0" +"net.mu\0labor.museum\0moskenes.no\0" +"net.mv\0net.nf\0dynathome.net\0" +"net.mw\0net.ng\0" +"taa.it\0net.mx\0" +"utah.museum\0net.my\0net.ni\0vard\xc3\xb8.no\0" +"bologna.it\0uki.kumamoto.jp\0net.mz\0" +"hol.no\0vestre-slidre.no\0" +"diskstation.org\0" +"anani.br\0" +"\xe5\xa4\xa7\xe5\x88\x86.jp\0zgorzelec.pl\0" +"catering\0" +"net.nr\0" +"lv.eu.org\0" +"stalowa-wola.pl\0expert\0" +"nanporo.hokkaido.jp\0net.nz\0wif.gov.pl\0" +"pol.ht\0" +"net.om\0travelers\0\xd1\x80\xd1\x83\xd1\x81\0" +"nakagyo.kyoto.jp\0" +"net.pa\0lib.ma.us\0realty\0chimkent.su\0" +"4.bg\0" +"wed\0" +"plurinacional.bo\0froland.no\0net.pe\0" +"tj.cn\0trentins\xc3\xbc""d-tirol.it\0niimi.okayama.jp\0kaminokawa.tochigi.jp\0" +"net.ph\0" +"harvestcelebration.museum\0judaica.museum\0" +"airtel\0" +"rad\xc3\xb8y.no\0net.pk\0" +"net.pl\0static.land\0" +"sm.ua\0" +"net.pn\0" +"gotpantheon.com\0" +"trentins\xc3\xbc""dtirol.it\0" +"net.qa\0cyou\0" +"net.pr\0""32-b.it\0" +"net.ps\0" +"net.pt\0jp.net\0" +"baltimore.museum\0ralingen.no\0" +"indianapolis.museum\0" +"*.elb.amazonaws.com.cn\0am.leg.br\0" +"net.py\0" +"k12.de.us\0" +"repl.run\0" +"kirkenes.no\0" +"yurihonjo.akita.jp\0rzgw.gov.pl\0" +"lotte\0" +"savona.it\0rocher\0" +"yufu.oita.jp\0" +"slask.pl\0cloudeity.net\0" +"marylhurst.museum\0" +"laquila.it\0" +"lotto\0" +"hiphop\0" +"association.aero\0" +"pe.it\0wada.nagano.jp\0" +"noto.ishikawa.jp\0" +"s\xc3\xb8rfold.no\0" +"tourism.pl\0flir\0monster\0" +"net.sa\0" +"net.sb\0" +"net.sc\0" +"toyoura.hokkaido.jp\0net.sd\0" +"k12.ok.us\0is-a-geek.org\0net.ru\0" +"tmp.br\0winb.gov.pl\0" +"net.rw\0net.sg\0" +"net.sh\0skin\0" +"from-md.com\0" +"net.sl\0" +"hasami.nagasaki.jp\0support\0" +"aaa.pro\0net.so\0" +"lindas.no\0" +"bhz.br\0" +"y.bg\0net.ss\0spdns.de\0" +"net.st\0dish\0" +"l.se\0" +"pfizer\0" +"marshalls\0" +"net.th\0" +"net.sy\0" +"iwaizumi.iwate.jp\0pe.kr\0net.tj\0" +"*.stolos.io\0" +"sakado.saitama.jp\0" +"net.tm\0" +"naples.it\0net.tn\0win\0" +"net.to\0" +"tonosho.kagawa.jp\0" +"vf.no\0net.ua\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0" +"gx.cn\0net.tr\0" +"paragliding.aero\0" +"net.tt\0" +"ltda\0" +"ing.pa\0net.tw\0simple-url.com\0wedeploy.me\0" +"trentinoalto-adige.it\0shiranuka.hokkaido.jp\0" +"maebashi.gunma.jp\0gdynia.pl\0" +"langevag.no\0net.uk\0k12.il.us\0" +"sodegaura.chiba.jp\0psse.gov.pl\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0net.vc\0dynns.com\0" +"hjelmeland.no\0net.ve\0ca-central-1.elasticbeanstalk.com\0" +"ibaraki.osaka.jp\0" +"ivanovo.su\0" +"community.museum\0f\xc3\xb8rde.no\0net.uy\0net.vi\0" +"napoli.it\0matsudo.chiba.jp\0namikata.ehime.jp\0net.uz\0" +"krokstadelva.no\0" +"engineer\0" +"net.vn\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" +"kusu.oita.jp\0takahata.yamagata.jp\0" +"historichouses.museum\0kr.eu.org\0" +"net.vu\0" +"steam.museum\0h\xc3\xa5.no\0" +"cs.it\0ap.leg.br\0" +"kicks-ass.org\0" +"dnsalias.net\0" +"monmouth.museum\0voyage\0" +"yamagata.jp\0" +"ap-northeast-1.elasticbeanstalk.com\0" +"hakone.kanagawa.jp\0kumiyama.kyoto.jp\0" +"my.id\0" +"government.aero\0net.ws\0" +"int.ar\0" +"sandnessj\xc3\xb8""en.no\0wme\0dyn.cosidns.de\0" +"yachiyo.chiba.jp\0" +"telebit.io\0" +"int.az\0" +"lib.fl.us\0is-a-rockstar.com\0" +"int.bo\0barsyonline.com\0" +"elk.pl\0development.run\0" +"varggat.no\0" +"pi.gov.br\0shinichi.hiroshima.jp\0" +"linde\0" +"se.leg.br\0" +"int.ci\0" +"nishiaizu.fukushima.jp\0" +"b\xc3\xa1l\xc3\xa1t.no\0" +"online.th\0" +"co.com\0" +"int.co\0net.za\0mine.nu\0" +"shell.museum\0" +"shimada.shizuoka.jp\0freeboxos.fr\0" +"vm.bytemark.co.uk\0" +"mmafan.biz\0" +"tysvar.no\0" +"\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0net.zm\0" +"arna.no\0rightathome\0" +"asti.it\0" +"0e.vc\0" +"wow\0" +"nishinoomote.kagoshima.jp\0" +"chiryu.aichi.jp\0pol.tr\0" +"\xd1\x81\xd1\x80\xd0\xb1\0" +"microlight.aero\0" +"ohi.fukui.jp\0" +"selfip.biz\0" +"chanel\0" +"\xe4\xba\xac\xe9\x83\xbd.jp\0" +"minamiuonuma.niigata.jp\0definima.net\0" +"circle\0" +"gamo.shiga.jp\0" +"rn.it\0shikatsu.aichi.jp\0" +"oster\xc3\xb8y.no\0" +"miyakonojo.miyazaki.jp\0" +"textile.museum\0" +"getmyip.com\0" +"tsuruoka.yamagata.jp\0" +"winners\0" +"risor.no\0us-east-2.elasticbeanstalk.com\0" +"bg.it\0" +"s3.dualstack.ap-southeast-2.amazonaws.com\0" +"nakagusuku.okinawa.jp\0" +"freiburg.museum\0" +"abr.it\0" +"sugito.saitama.jp\0" +"theworkpc.com\0" +"taifun-dns.de\0" +"montreal.museum\0sumy.ua\0wtc\0" +"ybo.faith\0" +"hareid.no\0rocks\0" +"wtf\0" +"yosemite.museum\0\xe5\x95\x86\xe6\xa5\xad.tw\0" +"uruma.okinawa.jp\0" +"h\xc3\xa6gebostad.no\0" +"vaporcloud.io\0" +"newhampshire.museum\0" +"war.museum\0bloomberg\0" +"int.is\0eu-west-3.elasticbeanstalk.com\0" +"alwaysdata.net\0" +"amber.museum\0" +"gobo.wakayama.jp\0" +"troms\xc3\xb8.no\0" +"map.fastlylb.net\0" +"mod.gi\0" +"tw.cn\0vs.it\0takayama.nagano.jp\0hino.tottori.jp\0" +"chernigov.ua\0cc.md.us\0" +"pe.gov.br\0" +"noboribetsu.hokkaido.jp\0" +"artgallery.museum\0sochi.su\0" +"wolterskluwer\0" +"encyclopedic.museum\0pilots.museum\0of.work\0" +"kamikawa.hyogo.jp\0kinghost.net\0" +"lenug.su\0" +"milan.it\0mutual\0" +"isteingeek.de\0wedeploy.io\0" +"int.la\0sk\xc3\xa1nit.no\0" +"richardli\0" +"barsy.net\0" +"eurovision\0" +"ravendb.community\0" +"salud.bo\0art.museum\0energy\0" +"int.lk\0bahcavuotna.no\0" +"fuchu.tokyo.jp\0" +"dnipropetrovsk.ua\0" +"obama.fukui.jp\0" +"of.by\0lib.gu.us\0" +"nishiarita.saga.jp\0for-better.biz\0" +"dc.us\0lasalle\0" +"pr.it\0higashimatsushima.miyagi.jp\0" +"chikuzen.fukuoka.jp\0" +"in-butter.de\0" +"tranibarlettaandria.it\0" +"yanaizu.fukushima.jp\0int.mv\0" +"int.mw\0stage.nodeart.io\0" +"int.ni\0" +"ebino.miyazaki.jp\0" +"askvoll.no\0" +"xin\0" +"stockholm.museum\0mosj\xc3\xb8""en.no\0shiksha\0" +"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0okazaki.aichi.jp\0" +"manx.museum\0y.se\0" +"homegoods\0\xd7\xa7\xd7\x95\xd7\x9d\0" +"host\0" +"from-ga.com\0" +"val-d-aosta.it\0" +"farsund.no\0" +"is-saved.org\0" +"maringa.br\0yamada.fukuoka.jp\0" +"omi.nagano.jp\0nerima.tokyo.jp\0olayan\0" +"is-an-engineer.com\0" +"glogow.pl\0report\0" +"sk.ca\0durham.museum\0donna.no\0" +"flanders.museum\0florida.museum\0" +"goodyear\0" +"pa.gov.pl\0" +"customer.speedpartner.de\0" +"int.pt\0" +"meet\0" +"alta.no\0" +"aip.ee\0" +"itami.hyogo.jp\0ota.tokyo.jp\0" +"jur.pro\0" +"grondar.za\0" +"yokaichiba.chiba.jp\0" +"twmail.org\0" +"kochi.jp\0" +"union.aero\0vinnica.ua\0armenia.su\0" +"eiheiji.fukui.jp\0" +"caravan\0" +"sel.no\0firestone\0" +"kuji.iwate.jp\0" +"from-ca.com\0" +"toya.hokkaido.jp\0kagamino.okayama.jp\0" +"url.tw\0" +"shiroishi.saga.jp\0" +"rodeo\0" +"biei.hokkaido.jp\0takasu.hokkaido.jp\0koryo.nara.jp\0" +"journal.aero\0" +"kasahara.gifu.jp\0tomioka.gunma.jp\0" +"avocat.pro\0paroch.k12.ma.us\0" +"abu.yamaguchi.jp\0klodzko.pl\0" +"kiev.ua\0int.ru\0selfip.com\0" +"mazury.pl\0" +"stalbans.museum\0" +"astronomy.museum\0" +"health.nz\0" +"l\xc3\xa6rdal.no\0" +"konin.pl\0" +"leitungsen.de\0myravendb.com\0" +"int.tj\0" +"columbus.museum\0" +"nomi.ishikawa.jp\0seoul.kr\0" +"computerhistory.museum\0stord.no\0cleaning\0" +"lplfinancial\0" +"here-for-more.info\0" +"myoko.niigata.jp\0" +"lima.zone\0" +"j.bg\0settlers.museum\0" +"eco.br\0minamifurano.hokkaido.jp\0int.tt\0" +"pr.gov.br\0" +"miniserver.com\0" +"baseball\0" +"minnesota.museum\0" +"nesna.no\0progressive\0" +"banamex\0" +"westfalen.museum\0is-a-nurse.com\0" +"chosei.chiba.jp\0orx.biz\0" +"scienceandindustry.museum\0us-east-1.amazonaws.com\0" +"int.ve\0" +"salvador.br\0ikeda.fukui.jp\0" +"\xe9\xb3\xa5\xe5\x8f\x96.jp\0" +"toyokawa.aichi.jp\0kotoura.tottori.jp\0int.vn\0" +"futaba.fukushima.jp\0" +"eu.com\0" +"sayo.hyogo.jp\0bielawa.pl\0" +"v\xc3\xa5gs\xc3\xb8y.no\0" +"t\xc3\xb8nsberg.no\0" +"gitlab.io\0" +"inabe.mie.jp\0co.education\0" +"fam.pk\0fl.us\0" +"cc.il.us\0" +"jdf.br\0" +"pacific.museum\0" +"perugia.it\0" +"abc.br\0" +"n\xc3\xa5\xc3\xa5mesjevuemie.no\0k12.ri.us\0" +"kanuma.tochigi.jp\0poznan.pl\0" +"of.no\0meme\0" +"ah.cn\0bt.it\0" +"frei.no\0spb.ru\0" +"ferrara.it\0kusatsu.shiga.jp\0" +"barsy.pro\0" +"management\0is-a-geek.net\0" +"melbourne\0" +"horten.no\0" +"pr.us\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"ozora.hokkaido.jp\0" +"accenture\0" +"radio.br\0" +"spb.su\0" +"slupsk.pl\0" +"bruxelles.museum\0kafjord.no\0" +"himeshima.oita.jp\0limanowa.pl\0" +"kragero.no\0stj\xc3\xb8rdal.no\0" +"sirdal.no\0" +"friuliv-giulia.it\0\xe9\xa6\x99\xe5\xb7\x9d.jp\0" +"menu\0is-an-actress.com\0" +"kota.aichi.jp\0mihama.mie.jp\0" +"andoy.no\0" +"zgora.pl\0" +"living.museum\0gwiddle.co.uk\0" +"barsy.pub\0" +"shinyoshitomi.fukuoka.jp\0" +"fredrikstad.no\0markets\0" +"health.vn\0" +"l\xc3\xb8ten.no\0" +"kamogawa.chiba.jp\0shinto.gunma.jp\0" +"freebox-os.com\0" +"is-very-nice.org\0" +"gaivuotna.no\0" +"mochizuki.nagano.jp\0shinjo.yamagata.jp\0\xe8\x81\x94\xe9\x80\x9a\0" +"film.hu\0skanit.no\0*.moonscale.io\0" +"from-ar.com\0" +"bindal.no\0giving\0" +"coffee\0" +"from-wa.com\0" +"yamanashi.jp\0" +"catering.aero\0dp.ua\0" +"johana.toyama.jp\0" +"s3.dualstack.us-east-1.amazonaws.com\0" +"toon.ehime.jp\0" +"nannestad.no\0" +"takahagi.ibaraki.jp\0" +"stavern.no\0business\0" +"tochio.niigata.jp\0barclaycard\0\xe6\x94\xbf\xe5\xba\x9c\0" +"bodo.no\0" +"bryansk.su\0" +"shimizu.shizuoka.jp\0" +"cadaques.museum\0bike\0" +"cust.testing.thingdust.io\0" +"ggf.br\0" +"natuurwetenschappen.museum\0" +"xxx\0" +"l\xc3\xb8renskog.no\0" +"takehara.hiroshima.jp\0horonobe.hokkaido.jp\0" +"cremona.it\0nishiazai.shiga.jp\0" +"haebaru.okinawa.jp\0" +"yatomi.aichi.jp\0shibata.miyagi.jp\0hangout\0" +"pesarourbino.it\0kushiro.hokkaido.jp\0toyono.osaka.jp\0" +"shopping\0land-4-sale.us\0" +"kiyose.tokyo.jp\0" +"tsurugashima.saitama.jp\0xyz\0" +"is-a-libertarian.com\0" +"nv.us\0" +"kashiwazaki.niigata.jp\0" +"yame.fukuoka.jp\0" +"aver\xc3\xb8y.no\0namdalseid.no\0" +"koshu.yamanashi.jp\0" +"is-lost.org\0" +"toyama.jp\0haga.tochigi.jp\0" +"karpacz.pl\0\xd1\x83\xd0\xba\xd1\x80\0storage.yandexcloud.net\0" +"kaho.fukuoka.jp\0" +"vic.gov.au\0gratangen.no\0bing\0" +"shintomi.miyazaki.jp\0unzen.nagasaki.jp\0" +"k12.in.us\0" +"himeji.hyogo.jp\0" +"sandiego.museum\0" +"salangen.no\0" +"hasuda.saitama.jp\0" +"artanddesign.museum\0" +"elasticbeanstalk.com\0" +"kumamoto.jp\0sakai.osaka.jp\0kurobe.toyama.jp\0" +"bronnoysund.no\0" +"hagi.yamaguchi.jp\0" +"2.bg\0" +"contact\0" +"tienda\0" +"sx.cn\0" +"fundacio.museum\0tjeldsund.no\0" +"tako.chiba.jp\0tsukumi.oita.jp\0usuki.oita.jp\0fhapp.xyz\0" +"tsuno.miyazaki.jp\0" +"yotsukaido.chiba.jp\0" +"hembygdsforbund.museum\0s\xc3\xb8r-aurdal.no\0" +"cq.cn\0akagi.shimane.jp\0" +"krym.ua\0" +"otoineppu.hokkaido.jp\0czest.pl\0" +"komagane.nagano.jp\0" +"shikama.miyagi.jp\0" +"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" +"k12.dc.us\0luxe\0" +"kanonji.kagawa.jp\0" +"ah.no\0" +"fuchu.hiroshima.jp\0" +"kyoto\0" +"hoteles\0tatamotors\0point2this.com\0" +"xbox\0" +"fidelity\0" +"pc.it\0" +"my-gateway.de\0" +"dynu.net\0" +"s\xc3\xb8r-fron.no\0" +"physio\0" +"gv.ao\0" +"po.gov.pl\0freebox-os.fr\0" +"botanical.museum\0" +"mosjoen.no\0you\0nohost.me\0" +"gv.at\0" +"logoip.com\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.\xe9\xa6\x99\xe6\xb8\xaf\0miami\0" +"dnsalias.org\0" +"w.bg\0vennesla.no\0scholarships\0" +"ofunato.iwate.jp\0" +"bashkiria.ru\0" +"karmoy.no\0" +"design.aero\0" +"marburg.museum\0selfip.info\0" +"hazu.aichi.jp\0itayanagi.aomori.jp\0" +"ng.ink\0" +"ginoza.okinawa.jp\0" +"seljord.no\0" +"sncf\0" +"bashkiria.su\0" +"tsuyama.okayama.jp\0okinawa.okinawa.jp\0" +"toei.aichi.jp\0ichinohe.iwate.jp\0" +"hiji.oita.jp\0cancerresearch\0" +"trentinsued-tirol.it\0kamioka.akita.jp\0" +"boston.museum\0kddi\0" +"bungotakada.oita.jp\0" +"kristiansand.no\0" +"reggiocalabria.it\0" +"barcelona\0asso.eu.org\0" +"nagara.chiba.jp\0hidaka.saitama.jp\0" +"building.museum\0amica\0" +"dnsking.ch\0" +"kitaakita.akita.jp\0" +"arteducation.museum\0barsy.org\0" +"of.football\0" +"medecin.km\0zaporizhzhe.ua\0" +"kihoku.ehime.jp\0" +"bedzin.pl\0" +"pmn.it\0" +"soc.lk\0filegear-au.me\0" +"ogori.fukuoka.jp\0naka.hiroshima.jp\0" +"usculture.museum\0" +"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"cloudfront.net\0" +"gs.hm.no\0fr\xc3\xb8ya.no\0tysnes.no\0" +"pvh.br\0kounosu.saitama.jp\0" +"lib.vi.us\0is-a-techie.com\0" +"virginia.museum\0homes\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"maceio.br\0" +"yukuhashi.fukuoka.jp\0" +"hk.com\0" +"intuit\0" +"nakijin.okinawa.jp\0" +"woodside\0" +"kamiamakusa.kumamoto.jp\0yun\0" +"omuta.fukuoka.jp\0" +"wa.au\0user.party.eus\0in-dsl.de\0" +"pc.pl\0turek.pl\0" +"katagami.akita.jp\0" +"klepp.no\0realestate\0is-a-doctor.com\0" +"ilawa.pl\0" +"trondheim.no\0" +"shiki.saitama.jp\0ce.leg.br\0" +"tagami.niigata.jp\0" +"nishiokoppe.hokkaido.jp\0hizen.saga.jp\0" +"ppg.br\0" +"bergen.no\0" +"from.hr\0" +"figueres.museum\0" +"nordreisa.no\0" +"digital\0" +"pizza\0s3-website.ap-south-1.amazonaws.com\0" +"\xe7\xbd\x91\xe7\xbb\x9c\0" +"jp.eu.org\0" +"cri.br\0" +"fj.cn\0ishikawa.okinawa.jp\0" +"artdeco.museum\0" +"agdenes.no\0" +"pp.az\0avoues.fr\0" +"cinema.museum\0" +"verona.it\0kameoka.kyoto.jp\0" +"ut.us\0" +"asuke.aichi.jp\0" +"r\xc3\xb8yken.no\0" +"namegawa.saitama.jp\0minobu.yamanashi.jp\0" +"zero\0" +"miyako.iwate.jp\0zip\0" +"pavia.it\0venezia.it\0" +"conf.au\0\xe7\x82\xb9\xe7\x9c\x8b\0*.advisor.ws\0" +"county.museum\0forgot.his.name\0keymachine.de\0" +"hadano.kanagawa.jp\0olawa.pl\0" +"rec.br\0" +"steiermark.museum\0" +"oxford.museum\0" +"oceanographic.museum\0yombo.me\0" +"madrid\0" +"no-ip.ca\0" +"lapy.pl\0\xe0\xb8\xa8\xe0\xb8\xb6\xe0\xb8\x81\xe0\xb8\xa9\xe0\xb8\xb2.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"rec.co\0k12.ak.us\0" +"writesthisblog.com\0" +"kusatsu.gunma.jp\0" +"okinawa\0" +"cc.sc.us\0" +"my-router.de\0" +"chichibu.saitama.jp\0" +"control.aero\0oppeg\xc3\xa5rd.no\0" +"trogstad.no\0" +"onga.fukuoka.jp\0" +"lindesnes.no\0" +"aki.kochi.jp\0" +"karelia.su\0" +"kakamigahara.gifu.jp\0" +"botanicalgarden.museum\0" +"christiansburg.museum\0" +"food\0freetls.fastly.net\0" +"statebank\0" +"ena.gifu.jp\0achi.nagano.jp\0minamiizu.shizuoka.jp\0" +"lib.mt.us\0lib.nd.us\0svn-repos.de\0" +"iida.nagano.jp\0govt.nz\0" +"harstad.no\0" +"its.me\0" +"isen.kagoshima.jp\0" +"railroad.museum\0her\xc3\xb8y.nordland.no\0onthewifi.com\0" +"gyeonggi.kr\0" +"is-a-green.com\0webhop.info\0" +"trentinsudtirol.it\0" +"ina.nagano.jp\0" +"heguri.nara.jp\0" +"baghdad.museum\0rl.no\0" +"nt.au\0gop.pk\0lipsy\0" +"grocery\0" +"salerno.it\0" +"stor-elvdal.no\0" +"studio\0" +"monzaebrianza.it\0*.nagoya.jp\0hitachiomiya.ibaraki.jp\0yono.saitama.jp\0podzone.net\0" +"hitra.no\0nodum.co\0" +"kitadaito.okinawa.jp\0ikeda.osaka.jp\0" +"trading.aero\0nt.ca\0" +"construction\0" +"square7.net\0" +"coal.museum\0" +"mw.gov.pl\0zarow.pl\0ford\0" +"imizu.toyama.jp\0" +"nativeamerican.museum\0cc.ga.us\0" +"ownip.net\0" +"tsukigata.hokkaido.jp\0" +"nesoddtangen.no\0" +"urbinopesaro.it\0" +"vestvagoy.no\0" +"morena.br\0miyoshi.hiroshima.jp\0" +"express.aero\0nodum.io\0" +"iwatsuki.saitama.jp\0" +"kunigami.okinawa.jp\0ugim.gov.pl\0" +"gs.svalbard.no\0eidsvoll.no\0w.se\0" +"xz.cn\0geisei.kochi.jp\0" +"langev\xc3\xa5g.no\0" +"herad.no\0sells-for-less.com\0" +"ms.gov.br\0" +"aerodrome.aero\0loginline.services\0" +"szczytno.pl\0" +"sciencehistory.museum\0fyresdal.no\0honda\0" +"togitsu.nagasaki.jp\0pgafan.net\0" +"gyeongbuk.kr\0" +"foggia.it\0" +"us-gov-west-1.elasticbeanstalk.com\0" +"happou.akita.jp\0*.on-rancher.cloud\0" +"randaberg.no\0" +"seirou.niigata.jp\0" +"elburg.museum\0tushu\0" +"nord-fron.no\0" +"hirara.okinawa.jp\0" +"usgarden.museum\0" +"gangaviika.no\0us-west-1.elasticbeanstalk.com\0" +"nerdpol.ovh\0" +"blogdns.com\0" +"nagi.okayama.jp\0" +"gv.vc\0" +"cloud.fedoraproject.org\0" +"mt.gov.br\0dellogliastra.it\0kin.okinawa.jp\0" +"s3-eu-west-1.amazonaws.com\0" +"basilicata.it\0kunneppu.hokkaido.jp\0" +"godo.gifu.jp\0sakura.tochigi.jp\0cri.nz\0" +"feedback\0vana\0giize.com\0" +"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0williamhill\0" +"cologne\0twmail.cc\0" +"kanzaki.saga.jp\0\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0\xe0\xb8\x97\xe0\xb8\xab\xe0\xb8\xb2\xe0\xb8\xa3.\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"jefferson.museum\0" +"badaddja.no\0doesntexist.com\0" +"ichikai.tochigi.jp\0" +"rec.nf\0" +"chernihiv.ua\0" +"enna.it\0" +"tuscany.it\0s\xc3\xbc""dtirol.it\0" +"kitakata.fukushima.jp\0" +"narviika.no\0" +"sener\0barsy.shop\0" +"trolley.museum\0" +"shiftedit.io\0" +"medecin.fr\0" +"watchandclock.museum\0" +"run.app\0" +"fvg.it\0watch\0" +"shiwa.iwate.jp\0" +"paris\0" +"dynv6.net\0" +"tj\xc3\xb8me.no\0sohu\0jambyl.su\0" +"zao.miyagi.jp\0" +"babia-gora.pl\0" +"h.bg\0hsbc\0icbc\0" +"half.host\0" +"consulting.aero\0" +"wnext.app\0" +"childrensgarden.museum\0school.museum\0cc.ok.us\0" +"takanabe.miyazaki.jp\0" +"is-a-knight.org\0" +"agr.br\0" +"yugawara.kanagawa.jp\0tarama.okinawa.jp\0shinjuku.tokyo.jp\0" +"sakaiminato.tottori.jp\0" +"higashiizu.shizuoka.jp\0" +"pp.se\0pp.ru\0mlbfan.org\0" +"sakegawa.yamagata.jp\0vpndns.net\0" +"nosegawa.nara.jp\0se.net\0ru.net\0" +"k12.ga.us\0" +"ikeda.gifu.jp\0" +"wa.us\0" +"rec.ro\0" +"ac.gov.br\0" +"go.leg.br\0" +"fla.no\0" +"naoshima.kagawa.jp\0arida.wakayama.jp\0nome.pt\0" +"ambulance.aero\0" +"si.it\0tsu.mie.jp\0" +"\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" +"kaufen\0" +"teaches-yoga.com\0" +"hs.kr\0merckmsd\0" +"edgestack.me\0" +"conf.se\0pp.ua\0" +"steinkjer.no\0" +"nt.no\0" +"br.it\0cb.it\0" +"mill.museum\0domains\0" +"etajima.hiroshima.jp\0" +"store\0" +"yashiro.hyogo.jp\0" +"tysfjord.no\0tokyo\0" +"aya.miyazaki.jp\0" +"k12.az.us\0" +"trentin-sudtirol.it\0pippu.hokkaido.jp\0" +"ryokami.saitama.jp\0" +"neues.museum\0" +"amli.no\0" +"satx.museum\0" +"ine.kyoto.jp\0" +"lib.co.us\0" +"abarth\0" +"iwamizawa.hokkaido.jp\0" +"e164.arpa\0\xe5\x85\xac\xe5\x8f\xb8.\xe9\xa6\x99\xe6\xb8\xaf\0song\0" +"moss.no\0" +"equipment.aero\0qld.edu.au\0" +"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0de.cool\0" +"notodden.no\0" +"resistance.museum\0" +"sar.it\0kawagoe.saitama.jp\0" +"soundandvision.museum\0rec.ve\0filegear-ie.me\0" +"numata.hokkaido.jp\0shijonawate.osaka.jp\0" +"catholic.edu.au\0naamesjevuemie.no\0" +"sony\0is.eu.org\0" +"ybo.party\0" +"akrehamn.no\0lib.ny.us\0" +"sardinia.it\0koeln\0" +"tsuchiura.ibaraki.jp\0\xd8\xa8\xd8\xa7\xd8\xb1\xd8\xaa\0" +"cc.mo.us\0solutions\0" +"midsund.no\0" +"ap-south-1.elasticbeanstalk.com\0dyndns-at-home.com\0" +"rindal.no\0nt.ro\0sa.com\0" +"kawakami.nagano.jp\0kitagata.saga.jp\0otsu.shiga.jp\0" +"dynvpn.de\0" +"nankoku.kochi.jp\0" +"nsn.us\0c66.me\0" +"takahashi.okayama.jp\0koto.tokyo.jp\0" +"dn.ua\0" +"it.eu.org\0" +"yusui.kagoshima.jp\0" +"maintenance.aero\0narvik.no\0" +"mel\xc3\xb8y.no\0" +"koori.fukushima.jp\0" +"hyuga.miyazaki.jp\0" +"tksat.bo\0drangedal.no\0autos\0" +"akabira.hokkaido.jp\0" +"\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0is-a-liberal.com\0" +"surnadal.no\0" +"mail.pl\0" +"od.ua\0" +"agric.za\0" +"from-nm.com\0" +"niikappu.hokkaido.jp\0taiji.wakayama.jp\0" +"newmexico.museum\0" +"plo.ps\0" +"iide.yamagata.jp\0" +"saga.saga.jp\0" +"racing\0" +"kagoshima.kagoshima.jp\0" +"s3-ap-southeast-1.amazonaws.com\0" +"fussa.tokyo.jp\0cn-northwest-1.eb.amazonaws.com.cn\0" +"schools.nsw.edu.au\0parts\0eu-central-1.elasticbeanstalk.com\0" +"inc.hk\0" +"museum\0git-repos.de\0brasilia.me\0" +"tysv\xc3\xa6r.no\0party\0verm\xc3\xb6gensberatung\0barsy.site\0" +"\xe4\xb8\xad\xe5\x9b\xbd\0" +"co.ae\0" +"minamiminowa.nagano.jp\0wake.okayama.jp\0" +"co.ag\0" +"kuroishi.aomori.jp\0*.sensiosite.cloud\0" +"co.am\0hvaler.no\0gives\0" +"co.ao\0dyndns-at-work.com\0" +"state.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0" +"co.bb\0rep.kp\0group\0*.kunden.ortsinfo.at\0" +"in.eu.org\0" +"co.at\0" +"feira.br\0" +"herokussl.com\0" +"lig.it\0lodi.it\0shobara.hiroshima.jp\0" +"co.bi\0hasura-app.io\0" +"katori.chiba.jp\0user.aseinet.ne.jp\0" +"cambridge.museum\0" +"skjak.no\0lib.me.us\0" +"matsusaka.mie.jp\0co.bn\0" +"0.bg\0" +"co.ca\0" +"vb.it\0" +"nord-odal.no\0cc.ks.us\0" +"conf.lv\0" +"*.sch.uk\0software\0is-into-games.com\0" +"yamanashi.yamanashi.jp\0bialystok.pl\0" +"co.bw\0idrett.no\0" +"est.pr\0" +"co.ci\0rodoy.no\0" +"co.cl\0" +"co.cm\0" +"co.cr\0" +"srv.br\0yusuhara.kochi.jp\0" +"suli.hu\0stange.no\0loseyourip.com\0" +"co.cz\0" +"co.dk\0" +"clock.museum\0cc.vi.us\0" +"dsmynas.org\0" +"broke-it.net\0" +"gallup\0" +"xen.prgmr.com\0" +"yawara.ibaraki.jp\0" +"pa.it\0tosashimizu.kochi.jp\0izunokuni.shizuoka.jp\0edogawa.tokyo.jp\0" +"project.museum\0" +"kiso.nagano.jp\0" +"\xc3\xa5lesund.no\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" +"vallee-d-aoste.it\0" +"gs.tm.no\0" +"fortmissoula.museum\0k12.mo.us\0from-tn.com\0" +"cim.br\0lombardia.it\0" +"oshino.yamanashi.jp\0" +"chita.aichi.jp\0tomisato.chiba.jp\0" +"j\xc3\xb8rpeland.no\0modum.no\0" +"bern.museum\0" +"niteroi.br\0" +"chuo.fukuoka.jp\0uda.nara.jp\0" +"u.bg\0" +"h.se\0stackhero-network.com\0" +"fukudomi.saga.jp\0" +"usantiques.museum\0" +"teramo.it\0" +"media.museum\0is-a-caterer.com\0" +"co.gg\0gub.uy\0barsycenter.com\0eu.meteorapp.com\0" +"vang.no\0collegefan.org\0" +"kvafjord.no\0nov.ru\0" +"co.gl\0" +"madrid.museum\0gucci\0" +"docs\0sanofi\0" +"gallo\0" +"lans.museum\0" +"web.app\0" +"gs.nl.no\0crimea.ua\0" +"co.gy\0" +"coop.ht\0" +"slattum.no\0tranoy.no\0nov.su\0" +"vall\xc3\xa9""e-aoste.it\0" +"swidnik.pl\0" +"fitjar.no\0" +"\xe5\xbe\xae\xe5\x8d\x9a\0" +"game\0" +"co.id\0tenei.fukushima.jp\0" +"co.hu\0" +"yonezawa.yamagata.jp\0" +"bc.ca\0" +"sv.it\0" +"podzone.org\0" +"sharp\0" +"vlaanderen.museum\0\xe7\xbd\x91\xe5\xba\x97\0" +"co.il\0" +"co.im\0" +"co.in\0" +"bardu.no\0" +"chambagri.fr\0\xe5\xae\xae\xe5\x9f\x8e.jp\0yanagawa.fukuoka.jp\0yamaxun\0" +"ivgu.no\0" +"g12.br\0co.ir\0" +"co.it\0" +"co.je\0" +"al.gov.br\0yamagata.ibaraki.jp\0" +"coop.br\0london.cloudapps.digital\0" +"shimosuwa.nagano.jp\0auction\0" +"kakogawa.hyogo.jp\0ome.tokyo.jp\0mragowo.pl\0" +"c.cdn77.org\0*.customer-oci.com\0api.stdlib.com\0" +"uk.net\0" +"net-freaks.com\0" +"co.jp\0toyota.aichi.jp\0" +"blog\0" +"misato.shimane.jp\0" +"co.ke\0" +"soka.saitama.jp\0" +"free.hr\0" +"\xe8\xb4\xad\xe7\x89\xa9\0yodobashi\0" +"s\xc3\xb8rum.no\0" +"izumizaki.fukushima.jp\0co.kr\0better-than.tv\0" +"co.lc\0" +"kariya.aichi.jp\0" +"tjome.no\0" +"ainan.ehime.jp\0" +"dyndns-pics.com\0for-our.info\0" +"ne.jp\0" +"spot\0" +"parachuting.aero\0ne.ke\0\xe7\xb5\x84\xe7\xb9\x94.tw\0consulting\0" +"co.ma\0usa.museum\0" +"kagami.kochi.jp\0mugi.tokushima.jp\0" +"co.ls\0" +"minato.tokyo.jp\0" +"co.me\0assassination.museum\0paleo.museum\0hammarfeasta.no\0" +"*.futurecms.at\0" +"co.mg\0" +"caseih\0" +"ne.kr\0" +"bci.dnstrace.pro\0" +"psp.gov.pl\0" +"bahn.museum\0" +"kosher\0" +"botanicgarden.museum\0co.na\0k12.wi.us\0is-a-cubicle-slave.com\0" +"co.mu\0" +"embetsu.hokkaido.jp\0" +"co.mw\0" +"kitagata.gifu.jp\0" +"flight.aero\0co.ni\0hb.cldmail.ru\0" +"co.mz\0" +"ichikawamisato.yamanashi.jp\0co.nl\0" +"teo.br\0" +"sanfrancisco.museum\0tele.amune.org\0co.no\0groks-the.info\0" +"bearalvahki.no\0" +"kawaue.gifu.jp\0" +"k12.ec\0endoftheinternet.org\0" +"co.nz\0" +"ichihara.chiba.jp\0" +"co.om\0" +"uri.arpa\0" +"financial\0" +"luxury\0" +"oketo.hokkaido.jp\0" +"modalen.no\0orskog.no\0" +"k12.pr.us\0" +"kv\xc3\xa6""fjord.no\0" +"tunk.org\0nym.by\0" +"monash\0co.pl\0nym.bz\0" +"kashima.saga.jp\0co.pn\0discover\0" +"blue\0" +"kitashiobara.fukushima.jp\0" +"glas.museum\0free\0" +"yaita.tochigi.jp\0" +"leasing.aero\0games\0" +"contagem.br\0" +"co.pw\0pa.us\0azurecontainer.io\0" +"museumcenter.museum\0opencraft.hosting\0" +"properties\0" +"uchinada.ishikawa.jp\0" +"law.pro\0homelink.one\0" +"aparecida.br\0" +"workshop.museum\0" +"li.it\0" +"cc.az.us\0nym.ec\0" +"nanao.ishikawa.jp\0gorlice.pl\0community-pro.net\0" +"\xc3\xa5snes.no\0pharmacy\0shangrila\0\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0" +"valleedaoste.it\0lubin.pl\0" +"seki.gifu.jp\0" +"stuttgart.museum\0mini\0" +"tra.kp\0" +"estate.museum\0ne.pw\0" +"romskog.no\0co.rs\0" +"geelvinck.museum\0lacaixa\0alpha.bounty-full.com\0" +"mo-i-rana.no\0co.rw\0vegas\0" +"mint\0" +"dgca.aero\0kristiansund.no\0dielddanuorri.no\0" +"kozow.com\0" +"\xe6\x9d\xb1\xe4\xba\xac.jp\0walbrzych.pl\0" +"panama.museum\0alsace\0" +"alto-adige.it\0" +"k12.il\0" +"co.st\0" +"kvalsund.no\0" +"co.th\0" +"clinton.museum\0" +"shirakawa.gifu.jp\0co.sz\0co.tj\0" +"gon.pk\0" +"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0shiroi.chiba.jp\0" +"co.tm\0" +"kawatana.nagasaki.jp\0" +"mysecuritycamera.com\0" +"co.ua\0" +"kazo.saitama.jp\0blogsite.xyz\0" +"co.tt\0nym.gr\0" +"industries\0" +"colonialwilliamsburg.museum\0co.ug\0leclerc\0" +"turin.it\0" +"s3.ca-central-1.amazonaws.com\0" +"co.tz\0" +"interactive.museum\0co.uk\0nym.gy\0dray-dns.de\0" +"trentinos\xc3\xbc""dtirol.it\0yomitan.okinawa.jp\0" +"nym.hk\0" +"shibuya.tokyo.jp\0" +"lib.hi.us\0s3-website-ap-southeast-2.amazonaws.com\0" +"sekigahara.gifu.jp\0omitama.ibaraki.jp\0" +"co.us\0" +"pn.it\0kwp.gov.pl\0" +"org.ac\0co.ve\0" +"org.ae\0safety\0nym.ie\0" +"org.af\0kumakogen.ehime.jp\0gbiz\0" +"org.ag\0palace.museum\0co.vi\0" +"minamiechizen.fukui.jp\0co.uz\0" +"org.ai\0yalta.ua\0" +"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"valer.hedmark.no\0" +"org.al\0" +"org.am\0salzburg.museum\0" +"trentino-a-adige.it\0aoste.it\0" +"stathelle.no\0g\xc3\xa1ls\xc3\xa1.no\0ne.ug\0" +"sumoto.hyogo.jp\0yamatokoriyama.nara.jp\0otsuki.yamanashi.jp\0" +"org.ba\0builders\0" +"org.ar\0org.bb\0tajimi.gifu.jp\0ne.tz\0" +"org.au\0" +"org.bh\0" +"org.bi\0" +"org.az\0kami.kochi.jp\0aga.niigata.jp\0itabashi.tokyo.jp\0" +"u.se\0ne.us\0nagoya\0" +"org.bm\0" +"org.bn\0tsubata.ishikawa.jp\0" +"org.bo\0" +"friuli-v-giulia.it\0olbiatempio.it\0tempio-olbia.it\0" +"org.br\0kisofukushima.nagano.jp\0" +"org.bs\0" +"org.bt\0" +"\xce\xb5\xce\xbb\0" +"org.bw\0philips\0" +"fot.br\0" +"org.ci\0" +"org.bz\0" +"stordal.no\0" +"org.cn\0okinawa.jp\0" +"empresa.bo\0org.co\0bale.museum\0ski.no\0med.pro\0\xce\xb5\xcf\x85\0" +"sasaguri.fukuoka.jp\0" +"nym.la\0mo-siemens.io\0" +"eun.eg\0sologne.museum\0ieee\0ollo\0talk\0from-nh.com\0nym.lc\0" +"org.cu\0" +"org.cw\0" +"org.cy\0ibestad.no\0nym.li\0" +"imakane.hokkaido.jp\0nym.kz\0" +"taishi.hyogo.jp\0" +"org.dm\0" +"org.do\0co.za\0" +"ts.it\0witd.gov.pl\0" +"ekloges.cy\0org.ec\0" +"nym.lt\0" +"org.ee\0fhv.se\0nym.lu\0nym.me\0" +"org.eg\0loginline.io\0" +"recife.br\0soc.srcf.net\0" +"haram.no\0" +"org.dz\0" +"coop.rw\0co.zm\0" +"yura.wakayama.jp\0nym.mn\0" +"muosat.no\0" +"masuda.shimane.jp\0" +"org.es\0" +"org.et\0" +"co.zw\0s3.eu-west-3.amazonaws.com\0" +"anthropology.museum\0coastaldefence.museum\0" +"nym.mx\0" +"org.fj\0" +"cloudns.pro\0mypets.ws\0" +"modern.museum\0n\xc3\xb8tter\xc3\xb8y.no\0" +"landes.museum\0repl.co\0" +"nichinan.miyazaki.jp\0" +"onred.one\0" +"*.yokohama.jp\0aogashima.tokyo.jp\0" +"org.ge\0dni.us\0trade\0" +"org.gg\0radoy.no\0as.us\0" +"org.gh\0coop.tt\0" +"org.gi\0" +"nym.nz\0" +"marnardal.no\0" +"org.gl\0ascoli-piceno.it\0" +"org.gn\0" +"org.gp\0traniandriabarletta.it\0" +"bamble.no\0k12.nj.us\0" +"org.gr\0hospital\0" +"academia.bo\0" +"org.gt\0gojome.akita.jp\0marumori.miyagi.jp\0nishikatsura.yamanashi.jp\0" +"org.gu\0ingatlan.hu\0no-ip.org\0nym.pe\0" +"blogspot.com\0" +"org.gy\0evenes.no\0fh.se\0" +"coop.mv\0" +"org.hk\0coop.mw\0" +"org.hn\0nishiizu.shizuoka.jp\0" +"f.bg\0" +"ky.us\0pt.eu.org\0" +"cc.ny.us\0" +"org.ht\0nym.pt\0" +"org.hu\0" +"iserv.dev\0" +"townnews-staging.com\0" +"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"xs4all.space\0" +"org.il\0nakagawa.fukuoka.jp\0" +"org.im\0" +"org.in\0" +"org.iq\0youth.museum\0" +"org.ir\0" +"org.is\0sauda.no\0" +"not.br\0niigata.niigata.jp\0" +"org.je\0finn\xc3\xb8y.no\0" +"modena.it\0k12.tr\0" +"alvdal.no\0\xc3\xb8ygarden.no\0" +"res.aero\0" +"gehirn.ne.jp\0" +"mosvik.no\0" +"org.jo\0zhitomir.ua\0nym.ro\0" +"kinder\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0" +"lib.in.us\0" +"\xc3\xa5mli.no\0eaton.mi.us\0" +"yakage.okayama.jp\0" +"mil.ac\0org.kg\0jfk.museum\0posts-and-telecommunications.museum\0finance\0" +"mil.ae\0org.ki\0" +"hisayama.fukuoka.jp\0sekikawa.niigata.jp\0nissan\0" +"nym.sk\0" +"soeda.fukuoka.jp\0" +"org.km\0coop.py\0k12.vi\0" +"org.kn\0" +"bronnoy.no\0" +"mil.al\0org.kp\0" +"org.la\0" +"manaus.br\0org.lb\0" +"org.lc\0" +"mil.ba\0nissay\0nym.su\0" +"mil.ar\0" +"org.kw\0" +"nym.sx\0" +"org.ky\0" +"taka.hyogo.jp\0org.kz\0" +"org.lk\0muos\xc3\xa1t.no\0" +"lib.tx.us\0" +"mil.az\0" +"monza.it\0" +"org.ma\0" +"org.lr\0" +"mil.bo\0org.ls\0larsson.museum\0virtual.museum\0" +"org.me\0" +"mil.br\0org.lv\0" +"org.mg\0alt.za\0nym.tw\0" +"org.ly\0zt.ua\0" +"org.mk\0" +"\xe9\x9d\x92\xe6\xa3\xae.jp\0org.ml\0" +"mil.by\0" +"port.fr\0org.mn\0" +"org.mo\0" +"mil.cl\0watarai.mie.jp\0*.magentosite.cloud\0" +"coop.km\0org.na\0iamallama.com\0" +"mil.cn\0hamatonbetsu.hokkaido.jp\0" +"mil.co\0org.ms\0" +"kitagawa.miyazaki.jp\0org.mt\0" +"org.mu\0" +"org.mv\0" +"org.mw\0org.ng\0" +"takamori.kumamoto.jp\0org.mx\0" +"org.my\0org.ni\0loabat.no\0" +"org.mz\0" +"vestnes.no\0" +"bar.pro\0" +"org.nr\0" +"mil.do\0lib.ok.us\0" +"lillesand.no\0\xe4\xbf\xa1\xe6\x81\xaf\0" +"shingo.aomori.jp\0" +"mil.ec\0" +"losangeles.museum\0" +"org.nz\0" +"mil.eg\0rockart.museum\0" +"org.om\0" +"servecounterstrike.com\0" +"org.pa\0k12.ut.us\0taxi\0" +"ge.it\0" +"org.pe\0ddnsfree.com\0" +"yorii.saitama.jp\0org.pf\0" +"org.ph\0" +"and.museum\0center.museum\0" +"org.pk\0" +"seiro.niigata.jp\0org.pl\0augustow.pl\0" +"mil.fj\0osaka.jp\0org.pn\0" +"notteroy.no\0saltdal.no\0farmers\0" +"org.qa\0" +"org.pr\0" +"brussel.museum\0org.ps\0\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0kindle\0from-mi.com\0is-an-artist.com\0" +"org.pt\0" +"cartoonart.museum\0" +"friuli-ve-giulia.it\0" +"mil.ge\0org.py\0" +"ogawa.ibaraki.jp\0" +"ubank\0" +"mil.gh\0tsushima.aichi.jp\0" +"airport.aero\0" +"grane.no\0" +"meiwa.mie.jp\0" +"mil.gt\0abira.hokkaido.jp\0higashikurume.tokyo.jp\0" +"culture.museum\0" +"kyonan.chiba.jp\0sakahogi.gifu.jp\0ueda.nagano.jp\0" +"skaun.no\0" +"joinville.br\0sanok.pl\0" +"org.ro\0dy.fi\0" +"org.sa\0" +"mil.hn\0kani.gifu.jp\0shimotsuke.tochigi.jp\0org.sb\0" +"org.rs\0org.sc\0lib.sd.us\0" +"shinagawa.tokyo.jp\0org.sd\0" +"ethnology.museum\0org.se\0lamborghini\0org.ru\0" +"ad.jp\0bayern\0" +"aerobatic.aero\0exchange.aero\0fineart.museum\0org.rw\0org.sg\0" +"mil.id\0shimoichi.nara.jp\0nanjo.okinawa.jp\0org.sh\0" +"koka.shiga.jp\0wiw.gov.pl\0dsmynas.net\0" +"mozilla-iot.org\0" +"org.sl\0" +"mein-vigor.de\0" +"pug.it\0shimokawa.hokkaido.jp\0org.sn\0" +"org.so\0" +"mil.in\0" +"hof.no\0org.ss\0" +"org.st\0" +"mil.iq\0cc.ak.us\0" +"org.sv\0" +"mo\xc3\xa5reke.no\0" +"saitama.jp\0mypsx.net\0" +"org.sy\0" +"usui.fukuoka.jp\0org.sz\0org.tj\0" +"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" +"org.tm\0" +"org.tn\0" +"music.museum\0org.to\0" +"taxi.br\0toho.fukuoka.jp\0inami.wakayama.jp\0" +"org.ua\0" +"cagliari.it\0org.tr\0kitchen\0" +"mil.jo\0recipes\0" +"kaneyama.fukushima.jp\0org.tt\0" +"loab\xc3\xa1t.no\0" +"takinoue.hokkaido.jp\0" +"indian.museum\0org.tw\0org.ug\0" +"guovdageaidnu.no\0" +"ato.br\0" +"mil.kg\0org.uk\0doomdns.com\0" +"takashima.shiga.jp\0" +"ia.us\0" +"valleeaoste.it\0" +"cc.la.us\0" +"*.statics.cloud\0" +"mil.km\0komatsu\0" +"piemonte.it\0" +"org.vc\0cloudns.org\0" +"\xe7\xa6\x8f\xe4\xba\x95.jp\0" +"democracia.bo\0uscountryestate.museum\0org.ve\0health-carereform.com\0" +"mil.kr\0" +"ven.it\0" +"org.uy\0org.vi\0" +"komaki.aichi.jp\0org.uz\0" +"law.za\0" +"mil.kz\0org.vn\0" +"kamimine.saga.jp\0" +"tamatsukuri.ibaraki.jp\0" +"ardal.no\0lib.wa.us\0" +"oishida.yamagata.jp\0" +"engineer.aero\0org.vu\0" +"minokamo.gifu.jp\0matsumoto.nagano.jp\0from-az.net\0" +"kazuno.akita.jp\0" +"kanie.aichi.jp\0shinshiro.aichi.jp\0kashima.ibaraki.jp\0mil.lv\0" +"modelling.aero\0mil.mg\0beiarn.no\0" +"carrd.co\0" +"tabayama.yamanashi.jp\0" +"tools\0" +"musashimurayama.tokyo.jp\0" +"org.ws\0" +"nuoro.it\0" +"kurogi.fukuoka.jp\0ozu.kumamoto.jp\0" +"auspost\0" +"mil.mv\0" +"ski.museum\0mil.ng\0lv.ua\0" +"mil.my\0mil.ni\0k12.ne.us\0" +"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0shonai.fukuoka.jp\0mil.mz\0" +"filegear-jp.me\0" +"salon\0" +"mil.no\0" +"kannami.shizuoka.jp\0" +"farmers.museum\0fosnes.no\0" +"lecce.it\0" +"s.bg\0" +"f.se\0*.quipelements.com\0" +"amagasaki.hyogo.jp\0oi.kanagawa.jp\0mil.nz\0" +"niyodogawa.kochi.jp\0mamurogawa.yamagata.jp\0" +"org.za\0" +"moriyama.shiga.jp\0" +"station.museum\0" +"caa.li\0ui.nabu.casa\0" +"lier.no\0" +"eu.int\0valdaosta.it\0matsuzaki.shizuoka.jp\0higashimurayama.tokyo.jp\0" +"mil.pe\0" +"hb.cn\0" +"tanabe.wakayama.jp\0mil.ph\0" +"b\xc3\xb8.nordland.no\0org.zm\0" +"godaddy\0money\0balashov.su\0" +"misaki.osaka.jp\0mil.pl\0" +"khmelnytskyi.ua\0" +"kalisz.pl\0" +"ap-southeast-1.elasticbeanstalk.com\0" +"mil.qa\0kids.us\0" +"es.leg.br\0on-web.fr\0" +"org.zw\0cityeats\0space-to-rent.com\0" +"ina.saitama.jp\0" +"nayoro.hokkaido.jp\0" +"brussels.museum\0""4u.com\0" +"mil.py\0" +"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" +"midtre-gauldal.no\0" +"read-books.org\0" +"kamijima.ehime.jp\0flt.cloud.muni.cz\0" +"s\xc3\xb8gne.no\0is-a-photographer.com\0" +"friuli-vegiulia.it\0miyako.fukuoka.jp\0" +"bofa\0dyndns.org\0" +"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0" +"kahoku.yamagata.jp\0" +"jpn.com\0knowsitall.info\0" +"toki.gifu.jp\0" +"trapani.it\0school\0" +"k12.as.us\0mil.ru\0" +"mil.rw\0from-ok.com\0ditchyourip.com\0" +"ginan.gifu.jp\0mil.sh\0" +"miners.museum\0" +"iobb.net\0" +"yamatotakada.nara.jp\0" +"in.na\0sucks\0viking\0" +"rome.it\0zamami.okinawa.jp\0mil.st\0" +"ms.it\0from-ny.net\0" +"cc.ct.us\0us.com\0" +"jaworzno.pl\0build\0" +"odda.no\0mil.sy\0" +"kagamiishi.fukushima.jp\0mil.tj\0" +"in.ni\0" +"aviation.museum\0mil.tm\0" +"mil.to\0k12.la.us\0" +"daiwa.hiroshima.jp\0qpon\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0boats\0" +"mil.tr\0cloudfunctions.net\0" +"kunst.museum\0is-a-bruinsfan.org\0" +"bunkyo.tokyo.jp\0" +"hatoyama.saitama.jp\0" +"bajddar.no\0mil.tw\0" +"doshi.yamanashi.jp\0mil.tz\0" +"poltava.ua\0" +"ono.fukui.jp\0" +"sling\0" +"cc.nj.us\0" +"mil.vc\0beauty\0" +"ms.kr\0in.london\0" +"mil.ve\0from-ut.com\0" +"mil.uy\0" +"naka.ibaraki.jp\0pioneer\0*.platform.sh\0" +"st.no\0" +"gr.it\0ushiku.ibaraki.jp\0warabi.saitama.jp\0" +"gallery\0" +"osasco.br\0" +"*.oci.customer-oci.com\0" +"git-pages.rit.edu\0" +"lavangen.no\0engineering\0dnsdojo.com\0" +"gr.jp\0" +"hadsel.no\0col.ng\0" +"geek.nz\0test.tj\0" +"archi\0" +"bridgestone\0skype\0" +"denmark.museum\0" +"sandnes.no\0" +"cc.hi.us\0" +"takatsuki.shiga.jp\0" +"\xe6\x9c\xba\xe6\x9e\x84\0" +"creation.museum\0" +"realm.cz\0" +"filegear-de.me\0" +"balsan-suedtirol.it\0" +"trustee.museum\0" +"aq.it\0ba.it\0" +"susaki.kochi.jp\0tama.tokyo.jp\0" +"in.rs\0nis.za\0" +"trentino-sudtirol.it\0" +"izumisano.osaka.jp\0" +"gs.fm.no\0" +"iwaki.fukushima.jp\0nishigo.fukushima.jp\0" +"kyowa.akita.jp\0no-ip.net\0" +"nord-aurdal.no\0porsanger.no\0" +"tomi.nagano.jp\0" +"telekommunikation.museum\0mil.za\0" +"topology.museum\0analytics\0" +"bryne.no\0test.ru\0" +"bond\0" +"aeroport.fr\0fujikawa.shizuoka.jp\0in.th\0" +"ssl.origin.cdn77-secure.org\0" +"sobetsu.hokkaido.jp\0" +"mil.zm\0" +"imb.br\0poniatowa.pl\0" +"r\xc3\xb8st.no\0" +"in.ua\0" +"boavista.br\0" +"cust.disrec.thingdust.io\0" +"koriyama.fukushima.jp\0" +"gol.no\0mil.zw\0" +"lg.jp\0" +"futbol\0bounceme.net\0" +"nakayama.yamagata.jp\0" +"showa.fukushima.jp\0tsubetsu.hokkaido.jp\0kisosaki.mie.jp\0misugi.mie.jp\0taiwa.miyagi.jp\0computer\0" +"academy\0book\0" +"lib.nh.us\0" +"intel\0" +"dnsiskinky.com\0" +"isumi.chiba.jp\0" +"in.us\0" +"shibetsu.hokkaido.jp\0taito.tokyo.jp\0" +"cargo.aero\0" +"kawai.iwate.jp\0tateshina.nagano.jp\0" +"est-le-patron.com\0" +"gose.nara.jp\0gmina.pl\0" +"depot.museum\0" +"aichi.jp\0choyo.kumamoto.jp\0" +"from-mt.com\0from-nd.com\0" +"foundation\0" +"toscana.it\0" +"v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"*.0emm.com\0" +"travel\0" +"aquarelle\0" +"naganohara.gunma.jp\0dunlop\0ricoh\0" +"matsue.shimane.jp\0" +"cc.vt.us\0" +"*.kawasaki.jp\0" +"nikaho.akita.jp\0tsk.tr\0" +"edu.ac\0" +"raid\0" +"edu.af\0jampa.br\0" +"balsan.it\0" +"toyoake.aichi.jp\0equipment\0" +"brussels\0" +"edu.al\0gokase.miyazaki.jp\0wlocl.pl\0" +"giske.no\0" +"suzaka.nagano.jp\0" +"edu.ba\0ask\xc3\xb8y.no\0" +"edu.ar\0edu.bb\0nc.tr\0" +"uji.kyoto.jp\0agano.niigata.jp\0tateyama.toyama.jp\0star\0" +"edu.au\0" +"mima.tokushima.jp\0" +"edu.bh\0hamada.shimane.jp\0" +"edu.bi\0berlev\xc3\xa5g.no\0etnedal.no\0" +"edu.az\0kasaoka.okayama.jp\0" +"cloudns.eu\0" +"misato.wakayama.jp\0" +"edu.bm\0b\xc3\xb8mlo.no\0chernivtsi.ua\0" +"edu.bn\0co.krd\0" +"edu.bo\0kustanai.ru\0" +"tos.it\0" +"edu.br\0" +"edu.bs\0heroy.nordland.no\0vadso.no\0s.se\0ms.us\0nc.us\0nid.io\0" +"edu.bt\0firenze.it\0" +"qcx.io\0" +"edu.ci\0elvendrell.museum\0" +"edu.bz\0" +"emb.kw\0lib.az.us\0horse\0" +"exeter.museum\0" +"edu.cn\0" +"edu.co\0mex.com\0kustanai.su\0" +"rexroth\0" +"edu.cu\0" +"edu.cw\0" +"koshimizu.hokkaido.jp\0" +"edu.dm\0cincinnati.museum\0wy.us\0" +"bialowieza.pl\0" +"edu.do\0" +"jus.br\0" +"is-a-democrat.com\0" +"edu.ec\0" +"gosen.niigata.jp\0" +"edu.ee\0" +"edu.eg\0" +"edu.dz\0" +"averoy.no\0zaporizhzhia.ua\0" +"krasnik.pl\0" +"miyama.fukuoka.jp\0wajima.ishikawa.jp\0" +"film.museum\0" +"edu.es\0dynalias.com\0scrysec.com\0" +"edu.et\0cloudns.in\0" +"lea\xc5\x8bgaviika.no\0" +"cz.it\0iruma.saitama.jp\0toyota.yamaguchi.jp\0" +"bbs.tr\0" +"bplaced.com\0" +"shell\0" +"bozen-suedtirol.it\0takayama.gifu.jp\0" +"hurdal.no\0" +"ikawa.akita.jp\0" +"kiwi\0" +"accident-investigation.aero\0edu.ge\0oceanographique.museum\0cc.tx.us\0" +"jor.br\0mito.ibaraki.jp\0cloudapps.digital\0" +"edu.gh\0yamato.kanagawa.jp\0" +"edu.gi\0cloudns.cc\0" +"md.ci\0" +"edu.gl\0" +"bjugn.no\0orange\0" +"edu.gn\0" +"hobby-site.com\0" +"edu.gp\0" +"edu.gr\0dupont\0" +"edu.gt\0swinoujscie.pl\0" +"edu.gu\0fetsund.no\0" +"umbria.it\0sagae.yamagata.jp\0" +"lg.ua\0" +"edu.gy\0saintlouis.museum\0oygarden.no\0volyn.ua\0" +"edu.hk\0" +"esp.br\0molise.it\0" +"edu.hn\0" +"shirahama.wakayama.jp\0" +"gs.bu.no\0" +"edu.ht\0kyotango.kyoto.jp\0" +"lib.pa.us\0" +"d.bg\0" +"gc.ca\0chicago.museum\0" +"in-vpn.de\0" +"edu.in\0polkowice.pl\0" +"sciences.museum\0filegear-sg.me\0" +"edu.iq\0discourse.team\0" +"barreau.bj\0" +"edu.is\0" +"edu.it\0" +"is-into-cars.com\0" +"\xe4\xbc\x81\xe4\xb8\x9a\0" +"vindafjord.no\0" +"urakawa.hokkaido.jp\0" +"edu.jo\0roma.museum\0\xc3\xb8rskog.no\0" +"sld.do\0" +"mobi.gp\0hyogo.jp\0" +"edu.kg\0is-a-hunter.com\0" +"edu.ki\0applinzi.com\0" +"kawanishi.yamagata.jp\0" +"kutchan.hokkaido.jp\0kawanishi.hyogo.jp\0" +"edu.km\0giessen.museum\0" +"edu.kn\0" +"ab.ca\0" +"natal.br\0edu.kp\0" +"edu.la\0" +"edu.lb\0" +"edu.lc\0" +"goiania.br\0macerata.it\0" +"edu.kw\0pl.ua\0" +"honjyo.akita.jp\0hashikami.aomori.jp\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" +"edu.ky\0" +"edu.kz\0" +"edu.lk\0rana.no\0" +"bn.it\0kyowa.hokkaido.jp\0" +"in-dsl.org\0" +"kanan.osaka.jp\0" +"edu.lr\0" +"edu.ls\0" +"edu.me\0fjaler.no\0" +"nantan.kyoto.jp\0satosho.okayama.jp\0edu.lv\0" +"edu.mg\0" +"\xe5\x85\xb5\xe5\xba\xab.jp\0" +"edu.ly\0" +"fund\0" +"edu.mk\0" +"edu.ml\0" +"kawanabe.kagoshima.jp\0edu.mn\0sport\0" +"nsw.au\0edu.mo\0" +"design.museum\0lib.dc.us\0" +"edu.ms\0schokoladen.museum\0s3-eu-west-3.amazonaws.com\0" +"mutsu.aomori.jp\0edu.mt\0" +"jx.cn\0lt.it\0edu.mv\0mydissent.net\0" +"safety.aero\0edu.mw\0edu.ng\0" +"toyako.hokkaido.jp\0edu.mx\0kepno.pl\0adult\0" +"edu.my\0edu.ni\0\xe5\xae\xb6\xe9\x9b\xbb\0ua.rs\0" +"higashiosaka.osaka.jp\0edu.mz\0gent\0" +"skygearapp.com\0" +"fermo.it\0" +"exnet.su\0" +"hornindal.no\0" +"umb.it\0" +"edu.nr\0rnu.tn\0hasura.app\0" +"workinggroup.aero\0" +"kitanakagusuku.okinawa.jp\0" +"loyalist.museum\0" +"h\xc3\xa1""bmer.no\0edu.om\0from-nv.com\0saves-the-whales.com\0" +"bandai.fukushima.jp\0kutno.pl\0" +"folkebibl.no\0scapp.io\0" +"habikino.osaka.jp\0" +"edu.pa\0mytuleap.com\0" +"edu.pe\0" +"ishikari.hokkaido.jp\0edu.pf\0" +"molde.no\0study\0\xe9\x80\x9a\xe8\xb2\xa9\0" +"okawa.fukuoka.jp\0niki.hokkaido.jp\0edu.ph\0" +"edu.pk\0" +"sakai.ibaraki.jp\0edu.pl\0" +"edu.pn\0" +"bel.tr\0" +"versailles.museum\0edu.qa\0vologda.su\0" +"edu.pr\0" +"casadelamoneda.museum\0rollag.no\0edu.ps\0" +"edu.pt\0" +"castle.museum\0" +"lamer\0" +"doesntexist.org\0" +"freesite.host\0" +"edu.py\0is-into-anime.com\0" +"trentin-s\xc3\xbc""d-tirol.it\0" +"pl.eu.org\0" +"news.hu\0" +"syncloud.it\0" +"team\0" +"mashiko.tochigi.jp\0clan.rip\0" +"scienceandhistory.museum\0hjartdal.no\0lib.il.us\0samsung\0" +"travel.pl\0" +"wedding\0lebtimnetz.de\0" +"matsuno.ehime.jp\0" +"hamaroy.no\0" +"americanfamily\0" +"cloudns.us\0" +"rel.ht\0sakyo.kyoto.jp\0" +"collection.museum\0" +"oppegard.no\0audible\0" +"ishikawa.fukushima.jp\0" +"ltd.co.im\0dyr\xc3\xb8y.no\0" +"edu.sa\0" +"edu.sb\0" +"porsangu.no\0edu.rs\0edu.sc\0est-a-la-maison.com\0" +"edu.sd\0schokokeks.net\0" +"edu.ru\0" +"sampa.br\0" +"edu.sg\0" +"forlicesena.it\0podlasie.pl\0" +"psi.br\0tech\0" +"no.com\0" +"edu.sl\0" +"edu.sn\0" +"edu.so\0" +"pony.club\0" +"google\0" +"cloudns.club\0" +"university.museum\0edu.ss\0s3-us-east-2.amazonaws.com\0" +"murayama.yamagata.jp\0edu.st\0" +"toyo.kochi.jp\0edu.sv\0" +"newspaper.museum\0" +"edu.sy\0" +"iglesiascarbonia.it\0edu.tj\0" +"heimatunduhren.museum\0edu.tm\0maserati\0" +"edu.to\0" +"edu.ua\0" +"edu.tr\0" +"edu.tt\0" +"canada.museum\0utsira.no\0" +"vall\xc3\xa9""e-d-aoste.it\0" +"rakkestad.no\0edu.tw\0cafe\0apigee.io\0" +"phone\0" +"open\0" +"nishio.aichi.jp\0" +"saogonca.br\0lucania.it\0kishiwada.osaka.jp\0" +"lib.mi.us\0toray\0" +"yokawa.hyogo.jp\0" +"edu.vc\0bitballoon.com\0" +"sld.pa\0edu.ve\0" +"publ.pt\0tkmaxx\0" +"salvadordali.museum\0edu.uy\0casino\0gr.com\0" +"travel.tt\0" +"sosa.chiba.jp\0" +"izumi.osaka.jp\0edu.vn\0" +"bozen.it\0" +"murmansk.su\0" +"katano.osaka.jp\0" +"media.aero\0" +"edu.vu\0" +"is-a-guru.com\0" +"shimane.shimane.jp\0discourse.group\0" +"surrey.museum\0edu.ws\0" +"torino.museum\0" +"meiwa.gunma.jp\0" +"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" +"field.museum\0uwu.ai\0" +"lt.ua\0" +"bauern.museum\0k12.ms.us\0k12.nc.us\0" +"toyooka.hyogo.jp\0" +"al.eu.org\0" +"kr.com\0" +"profesional.bo\0lib.pr.us\0edu.za\0" +"rel.pl\0" +"q.bg\0logoip.de\0" +"d.se\0md.us\0hepforge.org\0" +"olkusz.pl\0" +"kerryhotels\0\xe3\x82\xa2\xe3\x83\x9e\xe3\x82\xbe\xe3\x83\xb3\0" +"moma.museum\0lib.ak.us\0edu.zm\0" +"antiques.museum\0granvin.no\0s3.us-east-2.amazonaws.com\0game-server.cc\0service.gov.uk\0" +"rawa-maz.pl\0" +"my-firewall.org\0applicationcloud.io\0ybo.trade\0" +"protection\0" +"agrigento.it\0" +"kr\xc3\xb8""dsherad.no\0" +"call\0crafting.xyz\0" +"enonic.io\0" +"\xe5\xb2\x90\xe9\x98\x9c.jp\0" +"hotels\0" +"kuki.saitama.jp\0" +"photo\0" +"miharu.fukushima.jp\0pcloud.host\0gliwice.pl\0" +"arq.br\0kita.kyoto.jp\0" +"owani.aomori.jp\0" +"sr.it\0yuasa.wakayama.jp\0" +"sorfold.no\0" +"n4t.co\0" +"cuiaba.br\0trentinosued-tirol.it\0" +"camp\0bplaced.net\0" +"omachi.saga.jp\0" +"*.uberspace.de\0" +"ikata.ehime.jp\0" +"communications.museum\0snoasa.no\0media\0" +"hemne.no\0" +"kazimierz-dolny.pl\0" +"cloudns.pw\0familyds.com\0" +"beppu.oita.jp\0" +"birdart.museum\0" +"higashitsuno.kochi.jp\0aisho.shiga.jp\0hamamatsu.shizuoka.jp\0" +"dlugoleka.pl\0" +"est-a-la-masion.com\0" +"ikoma.nara.jp\0auto.pl\0" +"customer.enonic.io\0" +"a\xc3\xa9roport.ci\0embroidery.museum\0" +"nextdirect\0" +"karikatur.museum\0" +"urausu.hokkaido.jp\0" +"kppsp.gov.pl\0" +"na.it\0" +"alibaba\0" +"ng.city\0" +"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0yonaguni.okinawa.jp\0" +"gausdal.no\0" +"kh.ua\0poivron.org\0" +"atsuma.hokkaido.jp\0nose.osaka.jp\0" +"seihi.nagasaki.jp\0" +"steigen.no\0hu.com\0awsmppl.com\0" +"hoyanger.no\0" +"tur.ar\0calabria.it\0takino.hyogo.jp\0" +"s3-website-us-west-1.amazonaws.com\0" +"zp.gov.pl\0mobi.tt\0" +"tsuru.yamanashi.jp\0\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" +"cc.nh.us\0" +"yamagata.gifu.jp\0" +"nieruchomosci.pl\0mobi.tz\0jaguar\0" +"tur.br\0hakui.ishikawa.jp\0" +"care\0" +"krakow.pl\0" +"oz.au\0oregon.museum\0" +"\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" +"nore-og-uvdal.no\0chtr.k12.ma.us\0internet-dns.de\0" +"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0murakami.niigata.jp\0iwade.wakayama.jp\0" +"googleapis.com\0" +"casa\0isa-hockeynut.com\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0cars\0yokohama\0" +"case\0" +"surf\0" +"lpusercontent.com\0" +"friuli-vgiulia.it\0cash\0" +"gifu.jp\0" +"lib.ia.us\0" +"dev.static.land\0" +"gleeze.com\0" +"*.kobe.jp\0" +"barsy.menu\0" +"sicily.it\0oamishirasato.chiba.jp\0sumida.tokyo.jp\0" +"gemological.museum\0\xc3\xa1laheadju.no\0" +"benevento.it\0obihiro.hokkaido.jp\0" +"servemp3.com\0" +"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0mobara.chiba.jp\0atm.pl\0" +"ao.it\0" +"dattolocal.net\0" +"idf.il\0" +"bulsan-suedtirol.it\0" +"cheltenham.museum\0\xc3\xa5lg\xc3\xa5rd.no\0" +"\xe5\xa5\x88\xe8\x89\xaf.jp\0asakawa.fukushima.jp\0" +"ggee\0" +"noticias.bo\0" +"lombardy.it\0moseushi.hokkaido.jp\0wolomin.pl\0" +"hikimi.shimane.jp\0" +"events\0" +"svizzera.museum\0is-very-bad.org\0" +"nysa.pl\0pictet\0" +"dolls.museum\0mobi.na\0" +"le.it\0lixil\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" +"alaheadju.no\0" +"shirosato.ibaraki.jp\0" +"mobi.ng\0" +"sp.gov.br\0" +"lebork.pl\0" +"teva\0" +"kawakita.ishikawa.jp\0" +"experts-comptables.fr\0" +"glass.museum\0" +"skjerv\xc3\xb8y.no\0" +"storage\0fedorapeople.org\0js.org\0" +"lib.nj.us\0syno-ds.de\0" +"9.bg\0" +"itakura.gunma.jp\0imari.saga.jp\0" +"lebesby.no\0il.us\0" +"page\0" +"channelsdvr.net\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0kherson.ua\0" +"sch.ae\0philately.museum\0yorkshire.museum\0furniture\0" +"myds.me\0" +"kouyama.kagoshima.jp\0nat.tn\0" +"tana.no\0no.eu.org\0navoi.su\0" +"yuki.ibaraki.jp\0agrinet.tn\0norton\0" +"mitane.akita.jp\0m\xc4\x81ori.nz\0" +"ikano\0" +"tara.saga.jp\0gotdns.ch\0" +"fairwinds\0" +"ck.ua\0" +"\xe5\x8d\x83\xe8\x91\x89.jp\0" +"takamori.nagano.jp\0tenri.nara.jp\0in-dsl.net\0" +"kobierzyce.pl\0" +"ebetsu.hokkaido.jp\0muroran.hokkaido.jp\0\xe6\x97\xb6\xe5\xb0\x9a\0" +"oyer.no\0" +"airline.aero\0" +"cal.it\0" +"military.museum\0" +"fukui.fukui.jp\0" +"bulsan.it\0so.gov.pl\0" +"kyotamba.kyoto.jp\0sakuho.nagano.jp\0nanto.toyama.jp\0" +"boutique\0" +"higashiura.aichi.jp\0" +"cloudns.info\0" +"udine.it\0asaminami.hiroshima.jp\0" +"gifu.gifu.jp\0" +"globo\0""12hp.de\0" +"aosta.it\0" +"mobi\0" +"suita.osaka.jp\0" +"milano.it\0" +"mobi.ke\0naumburg.museum\0\xe6\xb8\xb8\xe6\x88\x8f\0" +"puglia.it\0" +"meloy.no\0" +"bio.br\0" +"duck\0" +"shonai.yamagata.jp\0adobeaemcloud.net\0" +"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0" +"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" +"marugame.kagawa.jp\0" +"dominic.ua\0nexus\0" +"sumita.iwate.jp\0" +"nyc.museum\0" +"shimofusa.chiba.jp\0" +"cipriani\0moda\0" +"maori.nz\0" +"mulhouse.museum\0cpa.pro\0guide\0" +"owariasahi.aichi.jp\0""12hp.at\0" +"fukusaki.hyogo.jp\0asahi.ibaraki.jp\0" +"abiko.chiba.jp\0naha.okinawa.jp\0" +"asn.au\0xenapponazure.com\0" +"matsushige.tokushima.jp\0" +"coupon\0" +"from-pa.com\0" +"otake.hiroshima.jp\0" +"recreation.aero\0" +"tochigi.tochigi.jp\0dyndns.tv\0" +"is-a-chef.org\0" +"kamiichi.toyama.jp\0""12hp.ch\0" +"sc.cn\0to.it\0" +"homebuilt.aero\0rendalen.no\0" +"artcenter.museum\0convent.museum\0nz.eu.org\0" +"chieti.it\0" +"holiday\0" +"asso.fr\0" +"tas.au\0" +"okagaki.fukuoka.jp\0" +"gamagori.aichi.jp\0" +"togura.nagano.jp\0" +"uchiko.ehime.jp\0" +"tsuga.tochigi.jp\0" +"asso.gp\0kawajima.saitama.jp\0" +"mb.ca\0enterprisecloud.nu\0" +"karuizawa.nagano.jp\0wakasa.tottori.jp\0" +"nationalfirearms.museum\0" +"nakasatsunai.hokkaido.jp\0utashinai.hokkaido.jp\0" +"sch.id\0" +"jevnaker.no\0kerryproperties\0" +"kamiizumi.saitama.jp\0kai.yamanashi.jp\0" +"tromsa.no\0serveexchange.com\0" +"izumi.kagoshima.jp\0nobeoka.miyazaki.jp\0football\0" +"dyndns.ws\0" +"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0\xe7\xa7\xbb\xe5\x8a\xa8\0" +"wellbeingzone.co.uk\0" +"asso.ht\0kunimi.fukushima.jp\0amakusa.kumamoto.jp\0bungoono.oita.jp\0" +"youtube\0" +"sch.ir\0" +"axis.museum\0sigdal.no\0" +"tado.mie.jp\0" +"repbody.aero\0siljan.no\0cable-modem.org\0" +"education\0" +"r\xc3\xb8mskog.no\0unusualperson.com\0" +"sch.jo\0" +"roan.no\0" +"imperia.it\0" +"b.bg\0webhop.me\0" +"endofinternet.net\0" +"cbre\0" +"asso.bj\0" +"newholland\0weatherchannel\0" +"paris.museum\0" +"homeunix.net\0" +"barsy.me\0" +"b.br\0obu.aichi.jp\0yamanobe.yamagata.jp\0" +"fnd.br\0\xe6\xa0\x83\xe6\x9c\xa8.jp\0" +"oumu.hokkaido.jp\0" +"asso.ci\0is-a-chef.com\0" +"taiki.mie.jp\0" +"servehalflife.com\0" +"hichiso.gifu.jp\0" +"lesja.no\0freeddns.us\0" +"ulsan.kr\0" +"sch.lk\0" +"avellino.it\0" +"pars\0" +"campidano-medio.it\0munakata.fukuoka.jp\0" +"moriyoshi.akita.jp\0kashiba.nara.jp\0" +"publishproxy.com\0" +"sr.gov.pl\0" +"sch.ly\0house\0suzuki\0servehumour.com\0" +"cc.id.us\0" +"chirurgiens-dentistes.fr\0budapest\0" +"cya.gg\0" +"jewish.museum\0somna.no\0" +"miyota.nagano.jp\0fedex\0yandex\0" +"asso.dz\0iwakuni.yamaguchi.jp\0" +"sch.ng\0royrvik.no\0dvrdns.org\0" +"bl.it\0" +"askim.no\0penza.su\0" +"sc.ke\0is-a-student.com\0" +"hamura.tokyo.jp\0" +"total\0" +"kharkov.ua\0" +"lcube-server.de\0" +"hirono.iwate.jp\0" +"s3-website.eu-west-3.amazonaws.com\0" +"sc.kr\0" +"*.kitakyushu.jp\0\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" +"zp.ua\0lib.de.us\0" +"agriculture.museum\0" +"vegarshei.no\0" +"mb.it\0" +"lahppi.no\0isa.us\0" +"kawahara.tottori.jp\0" +"trentino-s\xc3\xbc""d-tirol.it\0nago.okinawa.jp\0asaka.saitama.jp\0" +"komatsu.ishikawa.jp\0kolobrzeg.pl\0" +"economia.bo\0d\xc3\xb8nna.no\0s3-website.ca-central-1.amazonaws.com\0" +"sc.ls\0" +"hm.no\0" +"far.br\0yamada.iwate.jp\0rns.tn\0" +"sch.qa\0swiss\0" +"komae.tokyo.jp\0" +"portlligat.museum\0boldlygoingnowhere.org\0ddnss.org\0synology.me\0" +"yonago.tottori.jp\0asn.lv\0" +"lib.mo.us\0" +"trentinos\xc3\xbc""d-tirol.it\0" +"saga.jp\0" +"kanagawa.jp\0shiraoi.hokkaido.jp\0seven\0" +"koeln.museum\0photography.museum\0cc.mi.us\0" +"filatelia.museum\0lodingen.no\0" +"yamato.kumamoto.jp\0" +"voss.no\0" +"kyotanabe.kyoto.jp\0" +"rio.br\0pisa.it\0akune.kagoshima.jp\0" +"exchange\0" +"trentino-alto-adige.it\0" +"sor-odal.no\0dvag\0" +"ube.yamaguchi.jp\0" +"bss.design\0" +"sandefjord.no\0" +"sch.sa\0ownprovider.com\0" +"read\0" +"sk\xc3\xa5nland.no\0" +"ug.gov.pl\0" +"lugansk.ua\0" +"dnepropetrovsk.ua\0" +"veterinaire.km\0kautokeino.no\0" +"sch.so\0" +"shari.hokkaido.jp\0" +"engerdal.no\0" +"omasvuotna.no\0barsy.uk\0" +"taketomi.okinawa.jp\0nishinoshima.shimane.jp\0" +"mad.museum\0aaa\0" +"s3.dualstack.ap-northeast-2.amazonaws.com\0likes-pie.com\0" +"\xed\x95\x9c\xea\xb5\xad\0" +"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0toshima.tokyo.jp\0" +}; + +static const quint16 tldChunkCount = 2; +static const quint32 tldChunks[] = {65532, 103868}; + +QT_END_NAMESPACE + +#endif // QURLTLD_P_H diff --git a/src/network/kernel/qurltlds_p.h.INFO b/src/network/kernel/qurltlds_p.h.INFO new file mode 100644 index 0000000000..33ccd458bf --- /dev/null +++ b/src/network/kernel/qurltlds_p.h.INFO @@ -0,0 +1,14 @@ +The file qurltlds_p.h is generated from the Public Suffix +List (see [1] and [2]), by the program residing at +util/corelib/qurl-generateTLDs in the Qt source tree. + +That program generates a character array and an index array from the +list to provide fast lookups of elements within C++. + +Those arrays in qurltlds_p.h are derived from the Public +Suffix List ([2]), which was originally provided by +Jo Hermans <jo.hermans@gmail.com>. + +---- +[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 +[2] homepage: http://publicsuffix.org/ diff --git a/src/network/network.pro b/src/network/network.pro index d8453e879c..d13b3b9248 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -15,7 +15,7 @@ msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x64000000 QMAKE_DOCS = $$PWD/doc/qtnetwork.qdocconf include(access/access.pri) -include(bearer/bearer.pri) +qtConfig(bearermanagement): include(bearer/bearer.pri) include(kernel/kernel.pri) include(socket/socket.pri) include(ssl/ssl.pri) @@ -38,6 +38,4 @@ MODULE_WINRT_CAPABILITIES = \ internetClientServer \ privateNetworkClientServer -MODULE_PLUGIN_TYPES = \ - bearer load(qt_module) diff --git a/src/network/socket/qabstractsocketengine.cpp b/src/network/socket/qabstractsocketengine.cpp index 54c7452c66..44139ff81d 100644 --- a/src/network/socket/qabstractsocketengine.cpp +++ b/src/network/socket/qabstractsocketengine.cpp @@ -274,3 +274,5 @@ int QAbstractSocketEngine::outboundStreamCount() const } QT_END_NAMESPACE + +#include "moc_qabstractsocketengine_p.cpp" diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 9de9b284c1..9b0460b184 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -866,3 +866,5 @@ QAbstractSocketEngine *QHttpSocketEngineHandler::createSocketEngine(qintptr, QOb QT_END_NAMESPACE #endif // !QT_NO_NETWORKPROXY + +#include "moc_qhttpsocketengine_p.cpp" diff --git a/src/network/socket/qlocalserver_p.h b/src/network/socket/qlocalserver_p.h index 92616e59ce..f331a3f10d 100644 --- a/src/network/socket/qlocalserver_p.h +++ b/src/network/socket/qlocalserver_p.h @@ -99,15 +99,18 @@ public: QMap<quintptr, QTcpSocket*> socketMap; #elif defined(Q_OS_WIN) struct Listener { - HANDLE handle; + Listener() = default; + HANDLE handle = nullptr; OVERLAPPED overlapped; - bool connected; + bool connected = false; + private: + Q_DISABLE_COPY(Listener) }; void setError(const QString &function); bool addListener(); - QList<Listener> listeners; + std::vector<std::unique_ptr<Listener>> listeners; HANDLE eventHandle; QWinEventNotifier *connectionEventNotifier; #else diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp index 2d71a7e730..6d92ebe93a 100644 --- a/src/network/socket/qlocalserver_win.cpp +++ b/src/network/socket/qlocalserver_win.cpp @@ -62,8 +62,8 @@ bool QLocalServerPrivate::addListener() { // The object must not change its address once the // contained OVERLAPPED struct is passed to Windows. - listeners << Listener(); - Listener &listener = listeners.last(); + listeners.push_back(std::make_unique<Listener>()); + auto &listener = listeners.back(); SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); @@ -175,7 +175,7 @@ bool QLocalServerPrivate::addListener() sa.lpSecurityDescriptor = pSD.data(); } - listener.handle = CreateNamedPipe( + listener->handle = CreateNamedPipe( reinterpret_cast<const wchar_t *>(fullServerName.utf16()), // pipe name PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, // read/write access PIPE_TYPE_BYTE | // byte type pipe @@ -187,32 +187,32 @@ bool QLocalServerPrivate::addListener() 3000, // client time-out &sa); - if (listener.handle == INVALID_HANDLE_VALUE) { + if (listener->handle == INVALID_HANDLE_VALUE) { setError(QLatin1String("QLocalServerPrivate::addListener")); - listeners.removeLast(); + listeners.pop_back(); return false; } if (worldSID) FreeSid(worldSID); - memset(&listener.overlapped, 0, sizeof(listener.overlapped)); - listener.overlapped.hEvent = eventHandle; + memset(&listener->overlapped, 0, sizeof(OVERLAPPED)); + listener->overlapped.hEvent = eventHandle; // Beware! ConnectNamedPipe will reset the eventHandle to non-signaled. // Callers of addListener must check all listeners for connections. - if (!ConnectNamedPipe(listener.handle, &listener.overlapped)) { + if (!ConnectNamedPipe(listener->handle, &listener->overlapped)) { switch (GetLastError()) { case ERROR_IO_PENDING: - listener.connected = false; + listener->connected = false; break; case ERROR_PIPE_CONNECTED: - listener.connected = true; + listener->connected = true; break; default: - CloseHandle(listener.handle); + CloseHandle(listener->handle); setError(QLatin1String("QLocalServerPrivate::addListener")); - listeners.removeLast(); + listeners.pop_back(); return false; } } else { @@ -284,12 +284,12 @@ void QLocalServerPrivate::_q_onNewConnection() // Testing shows that there is indeed absolutely no guarantee which listener gets // a client connection first, so there is no way around polling all of them. - for (int i = 0; i < listeners.size(); ) { - HANDLE handle = listeners[i].handle; - if (listeners[i].connected - || GetOverlappedResult(handle, &listeners[i].overlapped, &dummy, FALSE)) + for (size_t i = 0; i < listeners.size(); ) { + HANDLE handle = listeners[i]->handle; + if (listeners[i]->connected + || GetOverlappedResult(handle, &listeners[i]->overlapped, &dummy, FALSE)) { - listeners.removeAt(i); + listeners.erase(listeners.begin() + i); addListener(); @@ -319,8 +319,8 @@ void QLocalServerPrivate::closeServer() connectionEventNotifier->deleteLater(); connectionEventNotifier = 0; CloseHandle(eventHandle); - for (int i = 0; i < listeners.size(); ++i) - CloseHandle(listeners[i].handle); + for (size_t i = 0; i < listeners.size(); ++i) + CloseHandle(listeners[i]->handle); listeners.clear(); } diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 31628846dc..ad625b758e 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -1382,3 +1382,5 @@ void QNativeSocketEngine::setExceptionNotificationEnabled(bool enable) } QT_END_NAMESPACE + +#include "moc_qnativesocketengine_p.cpp" diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 4f866e4da0..6a9979a675 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1927,3 +1927,5 @@ QAbstractSocketEngine *QSocks5SocketEngineHandler::createSocketEngine(qintptr so } QT_END_NAMESPACE + +#include "moc_qsocks5socketengine_p.cpp" diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index beb03b646a..87b9a1b038 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -102,29 +102,16 @@ Q_LOGGING_CATEGORY(lcSsl, "qt.network.ssl"); \value IpAddressEntry An IP address entry; the entry contains an IP address entry that the certificate is valid for, introduced in Qt 5.13. - \note In Qt 4, this enum was called \c {AlternateNameEntryType}. That name - is deprecated in Qt 5. - \sa QSslCertificate::subjectAlternativeNames() */ /*! - \typedef QSsl::AlternateNameEntryType - \obsolete - - Use QSsl::AlternativeNameEntryType instead. -*/ - -/*! \enum QSsl::SslProtocol Describes the protocol of the cipher. - \value SslV3 SSLv3; not supported by QSslSocket. - \value SslV2 SSLv2; not supported by QSslSocket. \value TlsV1_0 TLSv1.0 \value TlsV1_0OrLater TLSv1.0 and later versions. This option is not available when using the WinRT backend due to platform limitations. - \value TlsV1 Obsolete, means the same as TlsV1_0 \value TlsV1_1 TLSv1.1. When using the WinRT backend this option will also enable TLSv1.0. \value TlsV1_1OrLater TLSv1.1 and later versions. This option is not available when using the WinRT backend due to platform limitations. \value TlsV1_2 TLSv1.2. When using the WinRT backend this option will also enable TLSv1.0 and TLSv1.1. @@ -137,7 +124,6 @@ Q_LOGGING_CATEGORY(lcSsl, "qt.network.ssl"); \value TlsV1_3OrLater TLSv1.3 and later versions. (Since Qt 5.12) \value UnknownProtocol The cipher's protocol cannot be determined. \value AnyProtocol Any supported protocol. This value is used by QSslSocket only. - \value TlsV1SslV3 Same as TlsV1_0. This enumerator is deprecated, use TlsV1_0 instead. \value SecureProtocols The default option, using protocols known to be secure. */ diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index b28c2a87b9..d0b417f9ed 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -72,25 +72,11 @@ namespace QSsl { IpAddressEntry }; -#if QT_DEPRECATED_SINCE(5,0) - typedef AlternativeNameEntryType AlternateNameEntryType; -#endif - enum SslProtocol { -#if QT_DEPRECATED_SINCE(5, 15) - SslV3, - SslV2, -#endif TlsV1_0 = 2, -#if QT_DEPRECATED_SINCE(5,0) - TlsV1 = TlsV1_0, -#endif TlsV1_1, TlsV1_2, AnyProtocol, -#if QT_DEPRECATED_SINCE(5, 15) - TlsV1SslV3, -#endif SecureProtocols = AnyProtocol + 2, TlsV1_0OrLater, diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 791dc7852f..aa2f8fed02 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -373,15 +373,6 @@ QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm) cons \sa subjectInfo() */ -#if QT_DEPRECATED_SINCE(5,0) -/*! - \fn QMultiMap<QSsl::AlternateNameEntryType, QString> QSslCertificate::alternateSubjectNames() const - \obsolete - - Use QSslCertificate::subjectAlternativeNames(); -*/ -#endif - /*! \fn QMultiMap<QSsl::AlternativeNameEntryType, QString> QSslCertificate::subjectAlternativeNames() const diff --git a/src/network/ssl/qsslcertificate.h b/src/network/ssl/qsslcertificate.h index b98c5cfcab..525642a809 100644 --- a/src/network/ssl/qsslcertificate.h +++ b/src/network/ssl/qsslcertificate.h @@ -130,10 +130,6 @@ public: QList<QByteArray> subjectInfoAttributes() const; QList<QByteArray> issuerInfoAttributes() const; -#if QT_DEPRECATED_SINCE(5,0) - QT_DEPRECATED inline QMultiMap<QSsl::AlternateNameEntryType, QString> - alternateSubjectNames() const { return subjectAlternativeNames(); } -#endif QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames() const; QDateTime effectiveDate() const; QDateTime expiryDate() const; diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index f5ce02807f..adff0a249f 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -54,7 +54,6 @@ const QSsl::SslOptions QSslConfigurationPrivate::defaultSslOptions = QSsl::SslOp |QSsl::SslOptionDisableSessionPersistence; const char QSslConfiguration::ALPNProtocolHTTP2[] = "h2"; -const char QSslConfiguration::NextProtocolSpdy3_0[] = "spdy/3"; const char QSslConfiguration::NextProtocolHttp1_1[] = "http/1.1"; /*! @@ -134,12 +133,6 @@ const char QSslConfiguration::NextProtocolHttp1_1[] = "http/1.1"; */ /*! - \variable QSslConfiguration::NextProtocolSpdy3_0 - \brief The value used for negotiating SPDY 3.0 during the Next - Protocol Negotiation. -*/ - -/*! \variable QSslConfiguration::NextProtocolHttp1_1 \brief The value used for negotiating HTTP 1.1 during the Next Protocol Negotiation. @@ -229,7 +222,9 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const d->nextNegotiatedProtocol == other.d->nextNegotiatedProtocol && d->nextProtocolNegotiationStatus == other.d->nextProtocolNegotiationStatus && d->dtlsCookieEnabled == other.d->dtlsCookieEnabled && - d->ocspStaplingEnabled == other.d->ocspStaplingEnabled; + d->ocspStaplingEnabled == other.d->ocspStaplingEnabled && + d->reportFromCallback == other.d->reportFromCallback && + d->missingCertIsFatal == other.d->missingCertIsFatal; } /*! @@ -274,7 +269,9 @@ bool QSslConfiguration::isNull() const d->nextAllowedProtocols.isEmpty() && d->nextNegotiatedProtocol.isNull() && d->nextProtocolNegotiationStatus == QSslConfiguration::NextProtocolNegotiationNone && - d->ocspStaplingEnabled == false); + d->ocspStaplingEnabled == false && + d->reportFromCallback == false && + d->missingCertIsFatal == false); } /*! @@ -1035,7 +1032,7 @@ QByteArray QSslConfiguration::nextNegotiatedProtocol() const Whether or not the negotiation succeeded can be queried through nextProtocolNegotiationStatus(). - \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), allowedNextProtocols(), QSslConfiguration::NextProtocolSpdy3_0, QSslConfiguration::NextProtocolHttp1_1 + \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), allowedNextProtocols(), QSslConfiguration::NextProtocolHttp1_1 */ #if QT_VERSION >= QT_VERSION_CHECK(6,0,0) void QSslConfiguration::setAllowedNextProtocols(const QList<QByteArray> &protocols) @@ -1053,7 +1050,7 @@ void QSslConfiguration::setAllowedNextProtocols(QList<QByteArray> protocols) server through the Next Protocol Negotiation (NPN) or Application-Layer Protocol Negotiation (ALPN) TLS extension, as set by setAllowedNextProtocols(). - \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), setAllowedNextProtocols(), QSslConfiguration::NextProtocolSpdy3_0, QSslConfiguration::NextProtocolHttp1_1 + \sa nextNegotiatedProtocol(), nextProtocolNegotiationStatus(), setAllowedNextProtocols(), QSslConfiguration::NextProtocolHttp1_1 */ QList<QByteArray> QSslConfiguration::allowedNextProtocols() const { @@ -1199,6 +1196,91 @@ bool QSslConfiguration::ocspStaplingEnabled() const return d->ocspStaplingEnabled; } +/*! + \since 6.0 + + Returns true if a verification callback will emit QSslSocket::handshakeInterruptedOnError() + early, before concluding the handshake. + + \note This function always returns false for all backends but OpenSSL. + + \sa setHandshakeMustInterruptOnError(), QSslSocket::handshakeInterruptedOnError(), QSslSocket::continueInterruptedHandshake() +*/ +bool QSslConfiguration::handshakeMustInterruptOnError() const +{ + return d->reportFromCallback; +} + +/*! + \since 6.0 + + If \a interrupt is true and the underlying backend supports this option, + errors found during certificate verification are reported immediately + by emitting QSslSocket::handshakeInterruptedOnError(). This allows + to stop the unfinished handshake and send a proper alert message to + a peer. No special action is required from the application in this case. + QSslSocket will close the connection after sending the alert message. + If the application after inspecting the error wants to continue the + handshake, it must call QSslSocket::continueInterruptedHandshake() + from its slot function. The signal-slot connection must be direct. + + \note When interrupting handshake is enabled, errors that would otherwise + be reported by QSslSocket::peerVerifyError() are instead only reported by + QSslSocket::handshakeInterruptedOnError(). + \note Even if the handshake was continued, these errors will be + reported when emitting QSslSocket::sslErrors() signal (and thus must + be ignored in the corresponding function slot). + + \sa handshakeMustInterruptOnError(), QSslSocket::handshakeInterruptedOnError(), QSslSocket::continueInterruptedHandshake() +*/ +void QSslConfiguration::setHandshakeMustInterruptOnError(bool interrupt) +{ +#if QT_CONFIG(openssl) + d->reportFromCallback = interrupt; +#else + Q_UNUSED(interrupt); + qCWarning(lcSsl, "This operation requires OpenSSL as TLS backend"); +#endif +} + +/*! + \since 6.0 + + Returns true if errors with code QSslError::NoPeerCertificate + cannot be ignored. + + \note Always returns false for all TLS backends but OpenSSL. + + \sa QSslSocket::ignoreSslErrors(), setMissingCertificateIsFatal() +*/ +bool QSslConfiguration::missingCertificateIsFatal() const +{ + return d->missingCertIsFatal; +} + +/*! + \since 6.0 + + If \a cannotRecover is true, and verification mode in use is + QSslSocket::VerifyPeer or QSslSocket::AutoVerifyPeer (for a + client-side socket), the missing peer's certificate would be + treated as an unrecoverable error that cannot be ignored. A proper + alert message will be sent to the peer before closing the connection. + + \note Only available if Qt was configured and built with OpenSSL backend. + + \sa QSslSocket::ignoreSslErrors(), QSslSocket::PeerVerifyMode, missingCertificateIsFatal() +*/ +void QSslConfiguration::setMissingCertificateIsFatal(bool cannotRecover) +{ +#if QT_CONFIG(openssl) + d->missingCertIsFatal = cannotRecover; +#else + Q_UNUSED(cannotRecover); + qCWarning(lcSsl, "Handling a missing certificate as a fatal error requires an OpenSSL backend"); +#endif // openssl +} + /*! \internal */ bool QSslConfigurationPrivate::peerSessionWasShared(const QSslConfiguration &configuration) { diff --git a/src/network/ssl/qsslconfiguration.h b/src/network/ssl/qsslconfiguration.h index 1c181121f4..1ce01dbee9 100644 --- a/src/network/ssl/qsslconfiguration.h +++ b/src/network/ssl/qsslconfiguration.h @@ -66,7 +66,6 @@ QT_BEGIN_NAMESPACE -template<typename T> class QList; class QSslCertificate; class QSslCipher; class QSslKey; @@ -174,6 +173,12 @@ public: static void setDefaultDtlsConfiguration(const QSslConfiguration &configuration); #endif // dtls + bool handshakeMustInterruptOnError() const; + void setHandshakeMustInterruptOnError(bool interrupt); + + bool missingCertificateIsFatal() const; + void setMissingCertificateIsFatal(bool cannotRecover); + void setOcspStaplingEnabled(bool enable); bool ocspStaplingEnabled() const; @@ -194,7 +199,6 @@ public: NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const; static const char ALPNProtocolHTTP2[]; - static const char NextProtocolSpdy3_0[]; static const char NextProtocolHttp1_1[]; private: diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index 83126bb9a0..6ee3490df6 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -149,6 +149,14 @@ public: const bool ocspStaplingEnabled = false; #endif +#if QT_CONFIG(openssl) + bool reportFromCallback = false; + bool missingCertIsFatal = false; +#else + const bool reportFromCallback = false; + const bool missingCertIsFatal = false; +#endif // openssl + // in qsslsocket.cpp: static QSslConfiguration defaultConfiguration(); static void setDefaultConfiguration(const QSslConfiguration &configuration); diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp index 0aa8a4f438..78e37460c8 100644 --- a/src/network/ssl/qsslcontext_openssl.cpp +++ b/src/network/ssl/qsslcontext_openssl.cpp @@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE // defined in qsslsocket_openssl.cpp: extern int q_X509Callback(int ok, X509_STORE_CTX *ctx); +extern "C" int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx); extern QString getErrorsFromOpenSsl(); #if QT_CONFIG(dtls) @@ -290,42 +291,31 @@ void QSslContext::initSslContext(QSslContext *sslContext, QSslSocket::SslMode mo bool unsupportedProtocol = false; bool isDtls = false; init_context: - if (sslContext->sslConfiguration.protocol() == QSsl::SslV2) { - // SSL 2 is no longer supported, but chosen deliberately -> error - sslContext->ctx = nullptr; - unsupportedProtocol = true; - } else if (sslContext->sslConfiguration.protocol() == QSsl::SslV3) { - // SSL 3 is no longer supported, but chosen deliberately -> error - sslContext->ctx = nullptr; - unsupportedProtocol = true; - } else { - switch (sslContext->sslConfiguration.protocol()) { - case QSsl::DtlsV1_0: - case QSsl::DtlsV1_0OrLater: - case QSsl::DtlsV1_2: - case QSsl::DtlsV1_2OrLater: + switch (sslContext->sslConfiguration.protocol()) { + case QSsl::DtlsV1_0: + case QSsl::DtlsV1_0OrLater: + case QSsl::DtlsV1_2: + case QSsl::DtlsV1_2OrLater: #if QT_CONFIG(dtls) - isDtls = true; - sslContext->ctx = q_SSL_CTX_new(client ? q_DTLS_client_method() : q_DTLS_server_method()); + isDtls = true; + sslContext->ctx = q_SSL_CTX_new(client ? q_DTLS_client_method() : q_DTLS_server_method()); #else // dtls - sslContext->ctx = nullptr; - unsupportedProtocol = true; - qCWarning(lcSsl, "DTLS protocol requested, but feature 'dtls' is disabled"); - + sslContext->ctx = nullptr; + unsupportedProtocol = true; + qCWarning(lcSsl, "DTLS protocol requested, but feature 'dtls' is disabled"); #endif // dtls - break; - case QSsl::TlsV1_3: - case QSsl::TlsV1_3OrLater: + break; + case QSsl::TlsV1_3: + case QSsl::TlsV1_3OrLater: #if !defined(TLS1_3_VERSION) - qCWarning(lcSsl, "TLS 1.3 is not supported"); - sslContext->ctx = nullptr; - unsupportedProtocol = true; - break; + qCWarning(lcSsl, "TLS 1.3 is not supported"); + sslContext->ctx = nullptr; + unsupportedProtocol = true; + break; #endif // TLS1_3_VERSION - default: - // The ssl options will actually control the supported methods - sslContext->ctx = q_SSL_CTX_new(client ? q_TLS_client_method() : q_TLS_server_method()); - } + default: + // The ssl options will actually control the supported methods + sslContext->ctx = q_SSL_CTX_new(client ? q_TLS_client_method() : q_TLS_server_method()); } if (!sslContext->ctx) { @@ -377,7 +367,6 @@ init_context: #endif // TLS1_3_VERSION break; // Ranges: - case QSsl::TlsV1SslV3: case QSsl::AnyProtocol: case QSsl::SecureProtocols: case QSsl::TlsV1_0OrLater: @@ -419,12 +408,6 @@ init_context: Q_UNREACHABLE(); break; #endif // TLS1_3_VERSION - case QSsl::SslV2: - case QSsl::SslV3: - // These protocols are not supported, and we handle - // them as an error (see the code above). - Q_UNREACHABLE(); - break; case QSsl::UnknownProtocol: break; } @@ -594,11 +577,20 @@ init_context: if (sslContext->sslConfiguration.peerVerifyMode() == QSslSocket::VerifyNone) { q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_NONE, nullptr); } else { - q_SSL_CTX_set_verify(sslContext->ctx, SSL_VERIFY_PEER, -#if QT_CONFIG(dtls) - isDtls ? dtlscallbacks::q_X509DtlsCallback : -#endif // dtls - q_X509Callback); + auto verificationCallback = + #if QT_CONFIG(dtls) + isDtls ? dtlscallbacks::q_X509DtlsCallback : + #endif // dtls + q_X509Callback; + + if (!isDtls && configuration.handshakeMustInterruptOnError()) + verificationCallback = q_X509CallbackDirect; + + auto verificationMode = SSL_VERIFY_PEER; + if (!isDtls && sslContext->sslConfiguration.missingCertificateIsFatal()) + verificationMode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; + + q_SSL_CTX_set_verify(sslContext->ctx, verificationMode, verificationCallback); } #ifdef TLS1_3_VERSION diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 8f1d5d377d..44dcbcec5a 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -228,6 +228,74 @@ */ /*! + \enum QAlertLevel + \brief Describes the level of an alert message + \relates QSslSocket + \since 6.0 + + \ingroup network + \ingroup ssl + \inmodule QtNetwork + + This enum describes the level of an alert message that was sent + or received. + + \value Warning Non-fatal alert message + \value Fatal Fatal alert message, the underlying backend will + handle such an alert properly and close the connection. + \value Unknown An alert of unknown level of severity. +*/ + +/*! + \enum QAlertType + \brief Enumerates possible codes that an alert message can have + \relates QSslSocket + \since 6.0 + + \ingroup network + \ingroup ssl + \inmodule QtNetwork + + See \l{https://tools.ietf.org/html/rfc8446#page-85}{RFC 8446, section 6} + for the possible values and their meaning. + + \value CloseNotify, + \value UnexpectedMessage + \value BadRecordMac + \value RecordOverflow + \value DecompressionFailure + \value HandshakeFailure + \value NoCertificate + \value BadCertificate + \value UnsupportedCertificate + \value CertificateRevoked + \value CertificateExpired + \value CertificateUnknown + \value IllegalParameter + \value UnknownCa + \value AccessDenied + \value DecodeError + \value DecryptError + \value ExportRestriction + \value ProtocolVersion + \value InsufficientSecurity + \value InternalError + \value InappropriateFallback + \value UserCancelled + \value NoRenegotiation + \value MissingExtension + \value UnsupportedExtension + \value CertificateUnobtainable + \value UnrecognizedName + \value BadCertificateStatusResponse + \value BadCertificateHashValue + \value UnknownPskIdentity + \value CertificateRequired + \value NoApplicationProtocol + \value UnknownAlertMessage +*/ + +/*! \fn void QSslSocket::encrypted() This signal is emitted when QSslSocket enters encrypted mode. After this @@ -323,6 +391,49 @@ */ /*! + \fn void QSslSocket::alertSent(QAlertLevel level, QAlertType type, const QString &description) + + QSslSocket emits this signal if an alert message was sent to a peer. \a level + describes if it was a warning or a fatal error. \a type gives the code + of the alert message. When a textual description of the alert message is + available, it is supplied in \a description. + + \note This signal is mostly informational and can be used for debugging + purposes, normally it does not require any actions from the application. + \note Not all backends support this functionality. + + \sa alertReceived(), QAlertLevel, QAlertType +*/ + +/*! + \fn void QSslSocket::alertReceived(QAlertLevel level, QAlertType type, const QString &description) + + QSslSocket emits this signal if an alert message was received from a peer. + \a level tells if the alert was fatal or it was a warning. \a type is the + code explaining why the alert was sent. When a textual description of + the alert message is available, it is supplied in \a description. + + \note The signal is mostly for informational and debugging purposes and does not + require any handling in the application. If the alert was fatal, underlying + backend will handle it and close the connection. + \note Not all backends support this functionality. + + \sa alertSent(), QAlertLevel, QAlertType +*/ + +/*! + \fn void QSslSocket::handshakeInterruptedOnError(const QSslError &error) + + QSslSocket emits this signal if a certificate verification error was + found and if early error reporting was enabled in QSslConfiguration. + An application is expected to inspect the \a error and decide if + it wants to continue the handshake, or abort it and send an alert message + to the peer. The signal-slot connection must be direct. + + \sa continueInterruptedHandshake(), sslErrors(), QSslConfiguration::setHandshakeMustInterruptOnError() +*/ + +/*! \fn void QSslSocket::newSessionTicketReceived() \since 5.15 @@ -993,7 +1104,10 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration) #if QT_CONFIG(ocsp) d->configuration.ocspStaplingEnabled = configuration.ocspStaplingEnabled(); #endif - +#if QT_CONFIG(openssl) + d->configuration.reportFromCallback = configuration.handshakeMustInterruptOnError(); + d->configuration.missingCertIsFatal = configuration.missingCertificateIsFatal(); +#endif // openssl // if the CA certificates were set explicitly (either via // QSslConfiguration::setCaCertificates() or QSslSocket::setCaCertificates(), // we cannot load the certificates on demand @@ -2083,6 +2197,23 @@ void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors) d->ignoreErrorsList = errors; } + +/*! + \since 6.0 + + If an application wants to conclude a handshake even after receiving + handshakeInterruptedOnError() signal, it must call this function. + This call must be done from a slot function attached to the signal. + The signal-slot connection must be direct. + + \sa handshakeInterruptedOnError(), QSslConfiguration::setHandshakeMustInterruptOnError() +*/ +void QSslSocket::continueInterruptedHandshake() +{ + Q_D(QSslSocket); + d->handshakeInterrupted = false; +} + /*! \internal */ @@ -2257,13 +2388,24 @@ void QSslSocketPrivate::init() */ bool QSslSocketPrivate::verifyProtocolSupported(const char *where) { - if (configuration.protocol == QSsl::SslV2 || configuration.protocol == QSsl::SslV3) { - qCWarning(lcSsl) << where << "Attempted to use an unsupported protocol."; + QLatin1String protocolName("DTLS"); + switch (configuration.protocol) { + case QSsl::UnknownProtocol: + // UnknownProtocol, according to our docs, is for cipher whose protocol is unknown. + // Should not be used when configuring QSslSocket. + protocolName = QLatin1String("UnknownProtocol"); + Q_FALLTHROUGH(); + case QSsl::DtlsV1_0: + case QSsl::DtlsV1_2: + case QSsl::DtlsV1_0OrLater: + case QSsl::DtlsV1_2OrLater: + qCWarning(lcSsl) << where << "QSslConfiguration with unexpected protocol" << protocolName; setErrorAndEmit(QAbstractSocket::SslInvalidUserDataError, QSslSocket::tr("Attempted to use an unsupported protocol.")); return false; + default: + return true; } - return true; } /*! @@ -2477,6 +2619,10 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri #if QT_CONFIG(ocsp) ptr->ocspStaplingEnabled = global->ocspStaplingEnabled; #endif +#if QT_CONFIG(openssl) + ptr->reportFromCallback = global->reportFromCallback; + ptr->missingCertIsFatal = global->missingCertIsFatal; +#endif } /*! diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 298e7aa6c8..e99c79a967 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -63,6 +63,49 @@ class QSslEllipticCurve; class QSslPreSharedKeyAuthenticator; class QOcspResponse; +enum class QAlertLevel { + Warning, + Fatal, + Unknown +}; + +enum class QAlertType { + CloseNotify, + UnexpectedMessage = 10, + BadRecordMac = 20, + RecordOverflow = 22, + DecompressionFailure = 30, // reserved + HandshakeFailure = 40, + NoCertificate = 41, // reserved + BadCertificate = 42, + UnsupportedCertificate = 43, + CertificateRevoked = 44, + CertificateExpired = 45, + CertificateUnknown = 46, + IllegalParameter = 47, + UnknownCa = 48, + AccessDenied = 49, + DecodeError = 50, + DecryptError = 51, + ExportRestriction = 60, // reserved + ProtocolVersion = 70, + InsufficientSecurity = 71, + InternalError = 80, + InappropriateFallback = 86, + UserCancelled = 90, + NoRenegotiation = 100, + MissingExtension = 109, + UnsupportedExtension = 110, + CertificateUnobtainable = 111, // reserved + UnrecognizedName = 112, + BadCertificateStatusResponse = 113, + BadCertificateHashValue = 114, // reserved + UnknownPskIdentity = 115, + CertificateRequired = 116, + NoApplicationProtocol = 120, + UnknownAlertMessage = 255 +}; + class QSslSocketPrivate; class Q_NETWORK_EXPORT QSslSocket : public QTcpSocket { @@ -204,6 +247,7 @@ public: static QString sslLibraryBuildVersionString(); void ignoreSslErrors(const QList<QSslError> &errors); + void continueInterruptedHandshake(); public Q_SLOTS: void startClientEncryption(); @@ -218,6 +262,9 @@ Q_SIGNALS: void encryptedBytesWritten(qint64 totalBytes); void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator); void newSessionTicketReceived(); + void alertSent(QAlertLevel level, QAlertType type, const QString &description); + void alertReceived(QAlertLevel level, QAlertType type, const QString &description); + void handshakeInterruptedOnError(const QSslError &error); protected: qint64 readData(char *data, qint64 maxlen) override; diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp index e0e065679d..fe1c43d992 100644 --- a/src/network/ssl/qsslsocket_mac.cpp +++ b/src/network/ssl/qsslsocket_mac.cpp @@ -496,10 +496,6 @@ QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const } switch (protocol) { - case kSSLProtocol2: - return QSsl::SslV2; - case kSSLProtocol3: - return QSsl::SslV3; case kTLSProtocol1: return QSsl::TlsV1_0; case kTLSProtocol11: @@ -657,23 +653,6 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSLCipherSuite(SSLCipherSui QSslCipher ciph; switch (cipher) { // Sorted as in CipherSuite.h (and groupped by their RFC) - case SSL_RSA_WITH_NULL_MD5: - ciph.d->name = QLatin1String("NULL-MD5"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_NULL_SHA: - ciph.d->name = QLatin1String("NULL-SHA"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_RC4_128_MD5: - ciph.d->name = QLatin1String("RC4-MD5"); - ciph.d->protocol = QSsl::SslV3; - break; - case SSL_RSA_WITH_RC4_128_SHA: - ciph.d->name = QLatin1String("RC4-SHA"); - ciph.d->protocol = QSsl::SslV3; - break; - // TLS addenda using AES, per RFC 3268 case TLS_RSA_WITH_AES_128_CBC_SHA: ciph.d->name = QLatin1String("AES128-SHA"); @@ -822,12 +801,8 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSLCipherSuite(SSLCipherSui ciph.d->isNull = false; // protocol - if (ciph.d->protocol == QSsl::SslV3) { - ciph.d->protocolString = QLatin1String("SSLv3"); - } else { - ciph.d->protocol = QSsl::TlsV1_2; - ciph.d->protocolString = QLatin1String("TLSv1.2"); - } + ciph.d->protocol = QSsl::TlsV1_2; + ciph.d->protocolString = QLatin1String("TLSv1.2"); const auto bits = ciph.d->name.splitRef(QLatin1Char('-')); if (bits.size() >= 2) { @@ -1106,22 +1081,6 @@ bool QSslSocketBackendPrivate::setSessionProtocol() { Q_ASSERT_X(context, Q_FUNC_INFO, "invalid SSL context (null)"); - // QSsl::SslV2 == kSSLProtocol2 is disabled in Secure Transport and - // always fails with errSSLIllegalParam: - // if (version < MINIMUM_STREAM_VERSION || version > MAXIMUM_STREAM_VERSION) - // return errSSLIllegalParam; - // where MINIMUM_STREAM_VERSION is SSL_Version_3_0, MAXIMUM_STREAM_VERSION is TLS_Version_1_2. - if (configuration.protocol == QSsl::SslV2) { - qCDebug(lcSsl) << "protocol QSsl::SslV2 is disabled"; - return false; - } - - // SslV3 is unsupported. - if (configuration.protocol == QSsl::SslV3) { - qCDebug(lcSsl) << "protocol QSsl::SslV3 is disabled"; - return false; - } - // SecureTransport has kTLSProtocol13 constant and also, kTLSProtocolMaxSupported. // Calling SSLSetProtocolVersionMax/Min with any of these two constants results // in errInvalidParam and a failure to set the protocol version. This means @@ -1162,13 +1121,6 @@ bool QSslSocketBackendPrivate::setSessionProtocol() qCDebug(lcSsl) << plainSocket << "requesting : any"; #endif err = SSLSetProtocolVersionMin(context, kTLSProtocol1); - } else if (configuration.protocol == QSsl::TlsV1SslV3) { - #ifdef QSSLSOCKET_DEBUG - qCDebug(lcSsl) << plainSocket << "requesting : SSLv3 - TLSv1.2"; - #endif - err = SSLSetProtocolVersionMin(context, kTLSProtocol1); - if (err == errSecSuccess) - err = SSLSetProtocolVersionMax(context, kTLSProtocol1); } else if (configuration.protocol == QSsl::SecureProtocols) { #ifdef QSSLSOCKET_DEBUG qCDebug(lcSsl) << plainSocket << "requesting : TLSv1 - TLSv1.2"; @@ -1213,8 +1165,6 @@ bool QSslSocketBackendPrivate::verifySessionProtocol() const bool protocolOk = false; if (configuration.protocol == QSsl::AnyProtocol) protocolOk = true; - else if (configuration.protocol == QSsl::TlsV1SslV3) - protocolOk = (sessionProtocol() == QSsl::TlsV1_0); else if (configuration.protocol == QSsl::SecureProtocols) protocolOk = (sessionProtocol() >= QSsl::TlsV1_0); else if (configuration.protocol == QSsl::TlsV1_0OrLater) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index e197ce6515..2419ec5e38 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -98,6 +98,123 @@ QT_BEGIN_NAMESPACE +namespace { + +QAlertLevel tlsAlertLevel(int value) +{ + if (const char *typeString = q_SSL_alert_type_string(value)) { + // Documented to return 'W' for warning, 'F' for fatal, + // 'U' for unknown. + switch (typeString[0]) { + case 'W': + return QAlertLevel::Warning; + case 'F': + return QAlertLevel::Fatal; + default:; + } + } + + return QAlertLevel::Unknown; +} + +QString tlsAlertDescription(int value) +{ + QString description = QLatin1String(q_SSL_alert_desc_string_long(value)); + if (!description.size()) + description = QLatin1String("no description provided"); + return description; +} + +QAlertType tlsAlertType(int value) +{ + // In case for some reason openssl gives us a value, + // which is not in our enum actually, we leave it to + // an application to handle (supposedly they have + // if or switch-statements). + return QAlertType(value & 0xff); +} + +} // Unnamed namespace + +extern "C" +{ + +void qt_AlertInfoCallback(const SSL *connection, int from, int value) +{ + // Passed to SSL_set_info_callback() + // https://www.openssl.org/docs/man1.1.1/man3/SSL_set_info_callback.html + + if (!connection) { +#ifdef QSSLSOCKET_DEBUG + qCWarning(lcSsl, "Invalid 'connection' parameter (nullptr)"); +#endif // QSSLSOCKET_DEBUG + return; + } + + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::socketOffsetInExData; + auto privateSocket = + static_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(connection, offset)); + if (!privateSocket) { + // SSL_set_ex_data can fail: +#ifdef QSSLSOCKET_DEBUG + qCWarning(lcSsl, "No external data (socket backend) found for parameter 'connection'"); +#endif // QSSLSOCKET_DEBUG + return; + } + + if (!(from & SSL_CB_ALERT)) { + // We only want to know about alerts (at least for now). + return; + } + + if (from & SSL_CB_WRITE) + privateSocket->alertMessageSent(value); + else + privateSocket->alertMessageReceived(value); +} + +int q_X509CallbackDirect(int ok, X509_STORE_CTX *ctx) +{ + // Passed to SSL_CTX_set_verify() + // https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify.html + // Returns 0 to abort verification, 1 to continue. + + // This is a new, experimental verification callback, reporting + // errors immediately and returning 0 or 1 depending on an application + // either ignoring or not ignoring verification errors as they come. + if (!ctx) { + qCWarning(lcSsl, "Invalid store context (nullptr)"); + return 0; + } + + if (!ok) { + // "Whenever a X509_STORE_CTX object is created for the verification of the + // peer's certificate during a handshake, a pointer to the SSL object is + // stored into the X509_STORE_CTX object to identify the connection affected. + // To retrieve this pointer the X509_STORE_CTX_get_ex_data() function can be + // used with the correct index." + SSL *ssl = static_cast<SSL *>(q_X509_STORE_CTX_get_ex_data(ctx, q_SSL_get_ex_data_X509_STORE_CTX_idx())); + if (!ssl) { + qCWarning(lcSsl, "No external data (SSL) found in X509 store object"); + return 0; + } + + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::socketOffsetInExData; + auto privateSocket = static_cast<QSslSocketBackendPrivate *>(q_SSL_get_ex_data(ssl, offset)); + if (!privateSocket) { + qCWarning(lcSsl, "No external data (QSslSocketBackendPrivate) found in SSL object"); + return 0; + } + + return privateSocket->emitErrorFromCallback(ctx); + } + return 1; +} + +} // extern "C" + Q_GLOBAL_STATIC(QRecursiveMutex, qt_opensslInitMutex) bool QSslSocketPrivate::s_libraryLoaded = false; @@ -266,11 +383,7 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(const SSL_CIPHER QString protoString = descriptionList.at(1).toString(); ciph.d->protocolString = protoString; ciph.d->protocol = QSsl::UnknownProtocol; - if (protoString == QLatin1String("SSLv3")) - ciph.d->protocol = QSsl::SslV3; - else if (protoString == QLatin1String("SSLv2")) - ciph.d->protocol = QSsl::SslV2; - else if (protoString == QLatin1String("TLSv1")) + if (protoString == QLatin1String("TLSv1")) ciph.d->protocol = QSsl::TlsV1_0; else if (protoString == QLatin1String("TLSv1.1")) ciph.d->protocol = QSsl::TlsV1_1; @@ -425,12 +538,15 @@ int q_X509Callback(int ok, X509_STORE_CTX *ctx) // Not found on store? Try SSL and its external data then. According to the OpenSSL's // documentation: // - // "Whenever a X509_STORE_CTX object is created for the verification of the peers certificate - // during a handshake, a pointer to the SSL object is stored into the X509_STORE_CTX object - // to identify the connection affected. To retrieve this pointer the X509_STORE_CTX_get_ex_data() - // function can be used with the correct index." + // "Whenever a X509_STORE_CTX object is created for the verification of the + // peer's certificate during a handshake, a pointer to the SSL object is + // stored into the X509_STORE_CTX object to identify the connection affected. + // To retrieve this pointer the X509_STORE_CTX_get_ex_data() function can be + // used with the correct index." + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::errorOffsetInExData; if (SSL *ssl = static_cast<SSL *>(q_X509_STORE_CTX_get_ex_data(ctx, q_SSL_get_ex_data_X509_STORE_CTX_idx()))) - errors = ErrorListPtr(q_SSL_get_ex_data(ssl, QSslSocketBackendPrivate::s_indexForSSLExtraData + 1)); + errors = ErrorListPtr(q_SSL_get_ex_data(ssl, offset)); } if (!errors) { @@ -476,20 +592,23 @@ void q_setDefaultDtlsCiphers(const QList<QSslCipher> &ciphers); long QSslSocketBackendPrivate::setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions) { long options; - if (protocol == QSsl::TlsV1SslV3) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::SecureProtocols) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::TlsV1_0OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3; - else if (protocol == QSsl::TlsV1_1OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1; - else if (protocol == QSsl::TlsV1_2OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1; - else if (protocol == QSsl::TlsV1_3OrLater) - options = SSL_OP_ALL|SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2; - else + switch (protocol) { + case QSsl::SecureProtocols: + case QSsl::TlsV1_0OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; + break; + case QSsl::TlsV1_1OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1; + break; + case QSsl::TlsV1_2OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1; + break; + case QSsl::TlsV1_3OrLater: + options = SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2; + break; + default: options = SSL_OP_ALL; + } // This option is disabled by default, so we need to be able to clear it if (sslOptions & QSsl::SslOptionDisableEmptyFragments) @@ -547,10 +666,7 @@ bool QSslSocketBackendPrivate::initSslContext() return false; } - if (configuration.protocol != QSsl::SslV2 && - configuration.protocol != QSsl::SslV3 && - configuration.protocol != QSsl::UnknownProtocol && - mode == QSslSocket::SslClientMode) { + if (configuration.protocol != QSsl::UnknownProtocol && mode == QSslSocket::SslClientMode) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName; if (tlsHostName.isEmpty()) @@ -1216,18 +1332,32 @@ bool QSslSocketBackendPrivate::startHandshake() if (inSetAndEmitError) return false; + pendingFatalAlert = false; + errorsReportedFromCallback = false; QVector<QSslErrorEntry> lastErrors; - q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, &lastErrors); + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + errorOffsetInExData, &lastErrors); + + // SSL_set_ex_data can fail, but see the callback's code - we handle this there. + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + socketOffsetInExData, this); + q_SSL_set_info_callback(ssl, qt_AlertInfoCallback); + int result = (mode == QSslSocket::SslClientMode) ? q_SSL_connect(ssl) : q_SSL_accept(ssl); - q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + 1, nullptr); + q_SSL_set_ex_data(ssl, s_indexForSSLExtraData + errorOffsetInExData, nullptr); + // Note, unlike errors as external data on SSL object, we do not unset + // a callback/ex-data if alert notifications are enabled: an alert can + // arrive after the handshake, for example, this happens when the server + // does not find a ClientCert or does not like it. - if (!lastErrors.isEmpty()) + if (!lastErrors.isEmpty() || errorsReportedFromCallback) storePeerCertificates(); - for (const auto ¤tError : qAsConst(lastErrors)) { - emit q->peerVerifyError(_q_OpenSSL_to_QSslError(currentError.code, - configuration.peerCertificateChain.value(currentError.depth))); - if (q->state() != QAbstractSocket::ConnectedState) - break; + + if (!errorsReportedFromCallback) { + for (const auto ¤tError : qAsConst(lastErrors)) { + emit q->peerVerifyError(_q_OpenSSL_to_QSslError(currentError.code, + configuration.peerCertificateChain.value(currentError.depth))); + if (q->state() != QAbstractSocket::ConnectedState) + break; + } } errorList << lastErrors; @@ -1251,6 +1381,10 @@ bool QSslSocketBackendPrivate::startHandshake() { const ScopedBool bg(inSetAndEmitError, true); setErrorAndEmit(QAbstractSocket::SslHandshakeFailedError, errorString); + if (pendingFatalAlert) { + trySendFatalAlert(); + pendingFatalAlert = false; + } } q->abort(); } @@ -1774,6 +1908,88 @@ bool QSslSocketBackendPrivate::checkOcspStatus() #endif // ocsp +void QSslSocketBackendPrivate::alertMessageSent(int value) +{ + Q_Q(QSslSocket); + + const auto level = tlsAlertLevel(value); + if (level == QAlertLevel::Fatal && !connectionEncrypted) { + // Note, this logic is handshake-time only: + pendingFatalAlert = true; + } + + emit q->alertSent(level, tlsAlertType(value), tlsAlertDescription(value)); +} + +void QSslSocketBackendPrivate::alertMessageReceived(int value) +{ + Q_Q(QSslSocket); + + emit q->alertReceived(tlsAlertLevel(value), tlsAlertType(value), tlsAlertDescription(value)); +} + +int QSslSocketBackendPrivate::emitErrorFromCallback(X509_STORE_CTX *ctx) +{ + // Returns 0 to abort verification, 1 to continue despite error (as + // OpenSSL expects from the verification callback). + Q_Q(QSslSocket); + + Q_ASSERT(ctx); + + using ScopedBool = QScopedValueRollback<bool>; + // While we are not setting, we are emitting and in general - + // we want to prevent accidental recursive startHandshake() + // calls: + const ScopedBool bg(inSetAndEmitError, true); + + X509 *x509 = q_X509_STORE_CTX_get_current_cert(ctx); + if (!x509) { + qCWarning(lcSsl, "Could not obtain the certificate (that failed to verify)"); + return 0; + } + const QSslCertificate certificate = QSslCertificatePrivate::QSslCertificate_from_X509(x509); + + const auto errorAndDepth = QSslErrorEntry::fromStoreContext(ctx); + const QSslError tlsError = _q_OpenSSL_to_QSslError(errorAndDepth.code, certificate); + + errorsReportedFromCallback = true; + handshakeInterrupted = true; + emit q->handshakeInterruptedOnError(tlsError); + + // Conveniently so, we also can access 'lastErrors' external data set + // in startHandshake, we store it for the case an application later + // wants to check errors (ignored or not): + const auto offset = QSslSocketBackendPrivate::s_indexForSSLExtraData + + QSslSocketBackendPrivate::errorOffsetInExData; + if (auto errorList = static_cast<QVector<QSslErrorEntry>*>(q_SSL_get_ex_data(ssl, offset))) + errorList->append(errorAndDepth); + + // An application is expected to ignore this error (by calling ignoreSslErrors) + // in its directly connected slot: + return !handshakeInterrupted; +} + +void QSslSocketBackendPrivate::trySendFatalAlert() +{ + Q_ASSERT(pendingFatalAlert); + + pendingFatalAlert = false; + QVarLengthArray<char, 4096> data; + int pendingBytes = 0; + while (plainSocket->isValid() && (pendingBytes = q_BIO_pending(writeBio)) > 0 + && plainSocket->openMode() != QIODevice::NotOpen) { + // Read encrypted data from the write BIO into a buffer. + data.resize(pendingBytes); + const int bioReadBytes = q_BIO_read(writeBio, data.data(), pendingBytes); + + // Write encrypted data from the buffer to the socket. + qint64 actualWritten = plainSocket->write(data.constData(), bioReadBytes); + if (actualWritten < 0) + return; + plainSocket->flush(); + } +} + void QSslSocketBackendPrivate::disconnectFromHost() { if (ssl) { @@ -1817,10 +2033,6 @@ QSsl::SslProtocol QSslSocketBackendPrivate::sessionProtocol() const int ver = q_SSL_version(ssl); switch (ver) { - case 0x2: - return QSsl::SslV2; - case 0x300: - return QSsl::SslV3; case 0x301: return QSsl::TlsV1_0; case 0x302: diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index 47ccf06e71..6c1ffb7237 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -131,6 +131,10 @@ public: SSL_SESSION *session; QVector<QSslErrorEntry> errorList; static int s_indexForSSLExtraData; // index used in SSL_get_ex_data to get the matching QSslSocketBackendPrivate + enum ExDataOffset { + errorOffsetInExData = 1, + socketOffsetInExData = 2 + }; bool inSetAndEmitError = false; @@ -158,6 +162,15 @@ public: bool checkOcspStatus(); #endif + void alertMessageSent(int encoded); + void alertMessageReceived(int encoded); + + int emitErrorFromCallback(X509_STORE_CTX *ctx); + void trySendFatalAlert(); + + bool pendingFatalAlert = false; + bool errorsReportedFromCallback = false; + // This decription will go to setErrorAndEmit(SslHandshakeError, ocspErrorDescription) QString ocspErrorDescription; // These will go to sslErrors() diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 84422e9c8f..93b1c8fbf9 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -156,6 +156,10 @@ DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return) DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return) +using info_callback = void (*) (const SSL *ssl, int type, int val); +DEFINEFUNC2(void, SSL_set_info_callback, SSL *ssl, ssl, info_callback cb, cb, return, return) +DEFINEFUNC(const char *, SSL_alert_type_string, int value, value, return nullptr, return) +DEFINEFUNC(const char *, SSL_alert_desc_string_long, int value, value, return nullptr, return) #ifdef TLS1_3_VERSION DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return) DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG) @@ -841,7 +845,9 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(OPENSSL_sk_value) RESOLVEFUNC(DH_get0_pqg) RESOLVEFUNC(SSL_CTX_set_options) - + RESOLVEFUNC(SSL_set_info_callback) + RESOLVEFUNC(SSL_alert_type_string) + RESOLVEFUNC(SSL_alert_desc_string_long) #ifdef TLS1_3_VERSION RESOLVEFUNC(SSL_CTX_set_ciphersuites) RESOLVEFUNC(SSL_set_psk_use_session_callback) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index f35e0ba22b..273a4f359a 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -735,6 +735,10 @@ int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); void *q_CRYPTO_malloc(size_t num, const char *file, int line); #define q_OPENSSL_malloc(num) q_CRYPTO_malloc(num, "", 0) +void q_SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); +const char *q_SSL_alert_type_string(int value); +const char *q_SSL_alert_desc_string_long(int value); + QT_END_NAMESPACE #endif diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 1abd18bb32..4b020b6a73 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -208,6 +208,7 @@ protected: bool paused; bool flushTriggered; QVector<QOcspResponse> ocspResponses; + bool handshakeInterrupted = false; }; #if QT_CONFIG(securetransport) || QT_CONFIG(schannel) diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp index e47fda17ab..c355abad73 100644 --- a/src/network/ssl/qsslsocket_schannel.cpp +++ b/src/network/ssl/qsslsocket_schannel.cpp @@ -226,12 +226,6 @@ DWORD toSchannelProtocol(QSsl::SslProtocol protocol) protocols = SP_PROT_TLS1_0 | SP_PROT_TLS1_1 | SP_PROT_TLS1_2; // @future Add TLS 1.3 when supported by Windows! break; - case QSsl::SslV2: - case QSsl::SslV3: - return DWORD(-1); // Not supported - case QSsl::TlsV1SslV3: - protocols = SP_PROT_TLS1_0; - break; case QSsl::TlsV1_0: protocols = SP_PROT_TLS1_0; break; diff --git a/src/network/ssl/qsslsocket_winrt.cpp b/src/network/ssl/qsslsocket_winrt.cpp index f3ca3dc257..5f5201fc82 100644 --- a/src/network/ssl/qsslsocket_winrt.cpp +++ b/src/network/ssl/qsslsocket_winrt.cpp @@ -230,13 +230,7 @@ void QSslSocketBackendPrivate::startClientEncryption() QSsl::SslProtocol protocol = q->protocol(); switch (q->protocol()) { - case QSsl::SslV2: - case QSsl::SslV3: - setErrorAndEmit(QAbstractSocket::SslInvalidUserDataError, - QStringLiteral("unsupported protocol")); - return; case QSsl::AnyProtocol: - case QSsl::TlsV1SslV3: protectionLevel = SocketProtectionLevel_Tls10; break; case QSsl::TlsV1_0: @@ -270,7 +264,7 @@ void QSslSocketBackendPrivate::startClientEncryption() } // Sync custom certificates - const QSet<QSslCertificate> caCertificates = configuration.caCertificates.toSet(); + const QSet<QSslCertificate> caCertificates(configuration.caCertificates.constBegin(), configuration.caCertificates.constEnd()); const QSet<QSslCertificate> newCertificates = caCertificates - previousCaCertificates; const QSet<QSslCertificate> oldCertificates = previousCaCertificates - caCertificates; g->syncCaCertificates(newCertificates, oldCertificates); @@ -393,7 +387,7 @@ void QSslSocketBackendPrivate::continueHandshake() hr = control2->get_IgnorableServerCertificateErrors(&ignoreList); Q_ASSERT_SUCCEEDED(hr); - QSet<QSslError> ignoreErrors = ignoreErrorsList.toSet(); + QSet<QSslError> ignoreErrors(ignoreErrorsList.constBegin(), ignoreErrorsList.constEnd()); for (int i = ChainValidationResult_Untrusted; i < ChainValidationResult_OtherErrors + 1; ++i) { // Populate the native ignore list - break to add, continue to skip switch (i) { @@ -596,7 +590,7 @@ HRESULT QSslSocketBackendPrivate::onSslUpgrade(IAsyncAction *action, AsyncStatus } } - sslErrors = errors.toList(); + sslErrors = QList<QSslError>(errors.constBegin(), errors.constEnd()); // Peer validation if (!configuration.peerCertificate.isNull()) { |