summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/syncqt.pl13
-rw-r--r--config.tests/.qmake.conf7
-rw-r--r--config.tests/win/msvc_version.cpp1
-rw-r--r--configure.pri10
-rw-r--r--doc/global/externalsites/external-resources.qdoc2
-rw-r--r--doc/global/qt-cpp-defines.qdocconf1
-rw-r--r--doc/global/template/style/offline-simple.css2
-rw-r--r--doc/global/template/style/offline.css14
-rw-r--r--doc/global/template/style/online.css12
-rw-r--r--examples/widgets/doc/src/calculator.qdoc2
-rw-r--r--examples/widgets/graphicsview/boxes/scene.cpp2
-rw-r--r--examples/widgets/tools/i18n/languagechooser.cpp4
-rw-r--r--examples/widgets/tools/plugandpaint/app/app.pro4
-rw-r--r--examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro2
-rw-r--r--examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro2
-rw-r--r--mkspecs/features/data/unix/findclasslist.pl2
-rw-r--r--mkspecs/features/default_pre.prf47
-rw-r--r--mkspecs/features/exclusive_builds.prf18
-rw-r--r--mkspecs/features/mac/default_post.prf2
-rw-r--r--mkspecs/features/mac/default_pre.prf2
-rw-r--r--mkspecs/features/mac/objective_c.prf2
-rw-r--r--mkspecs/features/mac/sdk.prf9
-rw-r--r--mkspecs/features/mac/toolchain.prf5
-rw-r--r--mkspecs/features/moc.prf2
-rw-r--r--mkspecs/features/qml_plugin.prf1
-rw-r--r--mkspecs/features/qpa/basicunixfontdatabase.prf3
-rw-r--r--mkspecs/features/qpa/genericunixfontdatabase.prf6
-rw-r--r--mkspecs/features/qt.prf7
-rw-r--r--mkspecs/features/qt_app.prf24
-rw-r--r--mkspecs/features/qt_configure.prf38
-rw-r--r--mkspecs/features/qt_helper_lib.prf26
-rw-r--r--mkspecs/features/qt_installs.prf2
-rw-r--r--mkspecs/features/qt_module.prf12
-rw-r--r--mkspecs/features/qt_module_headers.prf2
-rw-r--r--mkspecs/features/qt_module_pris.prf10
-rw-r--r--mkspecs/features/qt_plugin.prf1
-rw-r--r--mkspecs/features/qt_tool.prf1
-rw-r--r--mkspecs/features/testcase.prf4
-rw-r--r--mkspecs/features/toolchain.prf57
-rw-r--r--mkspecs/features/uikit/default_post.prf8
-rw-r--r--mkspecs/features/uikit/default_pre.prf33
-rw-r--r--mkspecs/features/uikit/resolve_config.prf4
-rw-r--r--mkspecs/features/uikit/sdk.prf12
-rw-r--r--qmake/doc/src/qmake-manual.qdoc6
-rw-r--r--qmake/generators/makefiledeps.cpp5
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp15
-rw-r--r--src/3rdparty/freetype/freetype.pro8
-rw-r--r--src/3rdparty/freetype_dependency.pri6
-rw-r--r--src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro6
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp8
-rw-r--r--src/3rdparty/harfbuzz_dependency.pri6
-rw-r--r--src/3rdparty/libpng/libpng.pro4
-rw-r--r--src/3rdparty/pcre/pcre.pro4
-rw-r--r--src/3rdparty/pcre_dependency.pri7
-rw-r--r--src/3rdparty/png_dependency.pri6
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java2
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java2
-rw-r--r--src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp4
-rw-r--r--src/corelib/codecs/QBKCODEC_LICENSE.txt24
-rw-r--r--src/corelib/codecs/QEUCJPCODEC_LICENSE.txt22
-rw-r--r--src/corelib/codecs/QEUCKRCODEC_LICENSE.txt22
-rw-r--r--src/corelib/codecs/QJISCODEC_LICENSE.txt22
-rw-r--r--src/corelib/codecs/QSJISCODEC_LICENSE.txt22
-rw-r--r--src/corelib/codecs/QTSCIICODEC_LICENSE.txt22
-rw-r--r--src/corelib/codecs/codecs.qdoc249
-rw-r--r--src/corelib/codecs/qt_attribution.json103
-rw-r--r--src/corelib/configure.json6
-rw-r--r--src/corelib/doc/src/containers.qdoc7
-rw-r--r--src/corelib/doc/src/eventsandfilters.qdoc2
-rw-r--r--src/corelib/global/global.pri6
-rw-r--r--src/corelib/global/qglobal.cpp6
-rw-r--r--src/corelib/global/qglobal.h2
-rw-r--r--src/corelib/global/qglobal_p.h5
-rw-r--r--src/corelib/global/qnamespace.h3
-rw-r--r--src/corelib/global/qnamespace.qdoc2
-rw-r--r--src/corelib/global/qversiontagging.h2
-rw-r--r--src/corelib/io/QTEMPORARYFILE_LICENSE.txt26
-rw-r--r--src/corelib/io/qfileinfo.cpp3
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp2
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents.mm2
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp4
-rw-r--r--src/corelib/io/qsettings_mac.cpp1
-rw-r--r--src/corelib/io/qstandardpaths_unix.cpp5
-rw-r--r--src/corelib/io/qt_attribution.json13
-rw-r--r--src/corelib/io/qurl.cpp32
-rw-r--r--src/corelib/io/qurltlds_p.h24151
-rw-r--r--src/corelib/io/qurltlds_p.h.INFO4
-rw-r--r--src/corelib/json/qjsondocument.cpp23
-rw-r--r--src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt29
-rw-r--r--src/corelib/kernel/kernel.pri2
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp2
-rw-r--r--src/corelib/kernel/qcrashhandler.cpp421
-rw-r--r--src/corelib/kernel/qt_attribution.json13
-rw-r--r--src/corelib/kernel/qtimer.cpp12
-rw-r--r--src/corelib/kernel/qtimer.h36
-rw-r--r--src/corelib/mimetypes/qmimeprovider.cpp4
-rw-r--r--src/corelib/mimetypes/qmimeprovider_p.h1
-rw-r--r--src/corelib/thread/qorderedmutexlocker_p.h4
-rw-r--r--src/corelib/tools/CLDR_LICENSE.txt31
-rw-r--r--src/corelib/tools/qalgorithms.h4
-rw-r--r--src/corelib/tools/qdatetime.cpp34
-rw-r--r--src/corelib/tools/qlocale.cpp24
-rw-r--r--src/corelib/tools/qlocale.qdoc20
-rw-r--r--src/corelib/tools/qregularexpression.cpp2
-rw-r--r--src/corelib/tools/qstring.cpp61
-rw-r--r--src/corelib/tools/qt_attribution.json13
-rw-r--r--src/corelib/tools/qtimezone.cpp24
-rw-r--r--src/corelib/tools/tools.pri2
-rw-r--r--src/dbus/qdbusabstractinterface.cpp14
-rw-r--r--src/dbus/qdbusserver.cpp2
-rw-r--r--src/gui/configure.json9
-rw-r--r--src/gui/gui.pro1
-rw-r--r--src/gui/image/image.pri2
-rw-r--r--src/gui/image/qiconloader_p.h17
-rw-r--r--src/gui/image/qimage.cpp2
-rw-r--r--src/gui/image/qimage_conversions.cpp4
-rw-r--r--src/gui/kernel/qclipboard.cpp5
-rw-r--r--src/gui/kernel/qguiapplication.cpp10
-rw-r--r--src/gui/kernel/qplatformscreen.cpp4
-rw-r--r--src/gui/kernel/qsurfaceformat.cpp12
-rw-r--r--src/gui/kernel/qwindowsysteminterface.cpp47
-rw-r--r--src/gui/kernel/qwindowsysteminterface.h12
-rw-r--r--src/gui/opengl/KHRONOS_LICENSE.txt20
-rw-r--r--src/gui/opengl/qopenglframebufferobject.cpp1
-rw-r--r--src/gui/opengl/qt_attribution.json32
-rw-r--r--src/gui/painting/qdrawhelper.cpp185
-rw-r--r--src/gui/painting/qdrawhelper_p.h2
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp53
-rw-r--r--src/gui/painting/qpainter.cpp3
-rw-r--r--src/gui/painting/qpathclipper.cpp21
-rw-r--r--src/gui/painting/qpdf.cpp13
-rw-r--r--src/gui/painting/qpdf_p.h2
-rw-r--r--src/gui/painting/qt_attribution.json14
-rw-r--r--src/gui/text/qcssparser.cpp9
-rw-r--r--src/gui/text/qfontdatabase.cpp25
-rw-r--r--src/gui/text/qfontengine_ft.cpp2
-rw-r--r--src/gui/text/text.pri2
-rw-r--r--src/network/access/http2/http2frames.cpp33
-rw-r--r--src/network/access/http2/http2frames_p.h35
-rw-r--r--src/network/access/http2/http2protocol_p.h4
-rw-r--r--src/network/access/http2/http2streams.cpp11
-rw-r--r--src/network/access/http2/http2streams_p.h25
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp372
-rw-r--r--src/network/access/qhttp2protocolhandler_p.h19
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp6
-rw-r--r--src/network/bearer/qnetworksession.cpp5
-rw-r--r--src/network/configure.json9
-rw-r--r--src/network/doc/src/external-resources.qdoc36
-rw-r--r--src/network/doc/src/qtnetwork.qdoc30
-rw-r--r--src/network/doc/src/ssl.qdoc9
-rw-r--r--src/network/socket/qabstractsocket.cpp4
-rw-r--r--src/network/socket/qnativesocketengine.cpp4
-rw-r--r--src/network/socket/qnativesocketengine_winrt.cpp40
-rw-r--r--src/network/socket/qnativesocketengine_winrt_p.h2
-rw-r--r--src/network/ssl/ssl.pri2
-rw-r--r--src/opengl/qgl.cpp11
-rw-r--r--src/platformheaders/nativecontexts/qeglnativecontext.h2
-rw-r--r--src/platformsupport/accessibility/accessibility.pri9
-rw-r--r--src/platformsupport/accessibility/accessibility.pro16
-rw-r--r--src/platformsupport/accessibility/qaccessiblebridgeutils.cpp4
-rw-r--r--src/platformsupport/accessibility/qaccessiblebridgeutils_p.h6
-rw-r--r--src/platformsupport/cglconvenience/cglconvenience.pri11
-rw-r--r--src/platformsupport/cglconvenience/cglconvenience.pro18
-rw-r--r--src/platformsupport/clipboard/clipboard.pri7
-rw-r--r--src/platformsupport/clipboard/clipboard.pro15
-rw-r--r--src/platformsupport/clipboard/qmacmime.mm5
-rw-r--r--src/platformsupport/devicediscovery/devicediscovery.pri13
-rw-r--r--src/platformsupport/devicediscovery/devicediscovery.pro25
-rw-r--r--src/platformsupport/eglconvenience/eglconvenience.pri32
-rw-r--r--src/platformsupport/eglconvenience/eglconvenience.pro43
-rw-r--r--src/platformsupport/eglconvenience/qeglconvenience_p.h2
-rw-r--r--src/platformsupport/eglconvenience/qeglpbuffer_p.h2
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcontext_p.h2
-rw-r--r--src/platformsupport/eglconvenience/qeglstreamconvenience_p.h2
-rw-r--r--src/platformsupport/eventdispatchers/eventdispatchers.pri21
-rw-r--r--src/platformsupport/eventdispatchers/eventdispatchers.pro32
-rw-r--r--src/platformsupport/fbconvenience/fbconvenience.pri11
-rw-r--r--src/platformsupport/fbconvenience/fbconvenience.pro24
-rw-r--r--src/platformsupport/fontdatabases/basic/basic.pri2
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/fontconfig.pri2
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h2
-rw-r--r--src/platformsupport/fontdatabases/fontdatabases.pri15
-rw-r--r--src/platformsupport/fontdatabases/fontdatabases.pro29
-rw-r--r--src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h8
-rw-r--r--src/platformsupport/fontdatabases/mac/coretext.pri2
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp (renamed from src/plugins/platforms/windows/qwindowsfontdatabase.cpp)94
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp (renamed from src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp)13
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h (renamed from src/plugins/platforms/windows/qwindowsfontdatabase_ft.h)13
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h (renamed from src/plugins/platforms/windows/qwindowsfontdatabase.h)29
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp (renamed from src/plugins/platforms/windows/qwindowsfontengine.cpp)26
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h (renamed from src/plugins/platforms/windows/qwindowsfontengine.h)5
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp (renamed from src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp)34
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h (renamed from src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h)11
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp (renamed from src/plugins/platforms/windows/qwindowsnativeimage.cpp)15
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h (renamed from src/plugins/platforms/windows/qwindowsnativeimage.h)13
-rw-r--r--src/platformsupport/fontdatabases/windows/windows.pri33
-rw-r--r--src/platformsupport/glxconvenience/glxconvenience.pri8
-rw-r--r--src/platformsupport/glxconvenience/glxconvenience.pro16
-rw-r--r--src/platformsupport/glxconvenience/qglxconvenience.cpp5
-rw-r--r--src/platformsupport/graphics/graphics.pri2
-rw-r--r--src/platformsupport/graphics/graphics.pro13
-rw-r--r--src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h2
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp2
-rw-r--r--src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp2
-rw-r--r--src/platformsupport/input/evdevtouch/evdevtouch.pri3
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp2
-rw-r--r--src/platformsupport/input/input.pro (renamed from src/platformsupport/input/input.pri)11
-rw-r--r--src/platformsupport/linuxaccessibility/application_p.h5
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp2
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor_p.h5
-rw-r--r--src/platformsupport/linuxaccessibility/bridge_p.h5
-rw-r--r--src/platformsupport/linuxaccessibility/cache_p.h5
-rw-r--r--src/platformsupport/linuxaccessibility/constant_mappings_p.h4
-rw-r--r--src/platformsupport/linuxaccessibility/linuxaccessibility.pri25
-rw-r--r--src/platformsupport/linuxaccessibility/linuxaccessibility.pro30
-rw-r--r--src/platformsupport/linuxaccessibility/struct_marshallers_p.h5
-rw-r--r--src/platformsupport/platformcompositor/platformcompositor.pri7
-rw-r--r--src/platformsupport/platformcompositor/platformcompositor.pro18
-rw-r--r--src/platformsupport/platformsupport.pro59
-rw-r--r--src/platformsupport/services/services.pri3
-rw-r--r--src/platformsupport/services/services.pro13
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h5
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h5
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h6
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp7
-rw-r--r--src/platformsupport/themes/themes.pri9
-rw-r--r--src/platformsupport/themes/themes.pro19
-rw-r--r--src/plugins/bearer/connman/connman.pro1
-rw-r--r--src/plugins/bearer/nativewifi/qnativewifiengine.cpp2
-rw-r--r--src/plugins/generic/evdevkeyboard/evdevkeyboard.pro2
-rw-r--r--src/plugins/generic/evdevkeyboard/main.cpp2
-rw-r--r--src/plugins/generic/evdevmouse/evdevmouse.pro2
-rw-r--r--src/plugins/generic/evdevmouse/main.cpp2
-rw-r--r--src/plugins/generic/evdevtablet/evdevtablet.pro2
-rw-r--r--src/plugins/generic/evdevtablet/main.cpp2
-rw-r--r--src/plugins/generic/evdevtouch/evdevtouch.pro2
-rw-r--r--src/plugins/generic/evdevtouch/main.cpp2
-rw-r--r--src/plugins/generic/libinput/libinput.pro2
-rw-r--r--src/plugins/generic/libinput/main.cpp2
-rw-r--r--src/plugins/generic/tslib/main.cpp2
-rw-r--r--src/plugins/generic/tslib/tslib.pro2
-rw-r--r--src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp1
-rw-r--r--src/plugins/platforms/android/android.pro9
-rw-r--r--src/plugins/platforms/android/androidjniaccessibility.cpp2
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp7
-rw-r--r--src/plugins/platforms/android/qandroideventdispatcher.h2
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp11
-rw-r--r--src/plugins/platforms/android/qandroidplatformfontdatabase.h2
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglcontext.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglcontext.h2
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglwindow.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.cpp4
-rw-r--r--src/plugins/platforms/bsdfb/bsdfb.pro10
-rw-r--r--src/plugins/platforms/bsdfb/qbsdfbintegration.cpp16
-rw-r--r--src/plugins/platforms/bsdfb/qbsdfbscreen.cpp4
-rw-r--r--src/plugins/platforms/bsdfb/qbsdfbscreen.h2
-rw-r--r--src/plugins/platforms/cocoa/cocoa.pro5
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoabackingstore.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm28
-rw-r--r--src/plugins/platforms/cocoa/qcocoamimetypes.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm2
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.h2
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm5
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.h2
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.mm15
-rw-r--r--src/plugins/platforms/direct2d/direct2d.pro7
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp6
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp4
-rw-r--r--src/plugins/platforms/directfb/directfb.pro8
-rw-r--r--src/plugins/platforms/directfb/qdirectfb_egl.cpp6
-rw-r--r--src/plugins/platforms/directfb/qdirectfbintegration.cpp6
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfscontext.cpp4
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfscontext_p.h2
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfscursor.cpp6
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp4
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsglobal_p.h2
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfshooks.cpp3
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsintegration.cpp28
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp2
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsscreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfswindow.cpp4
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfswindow_p.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp4
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp5
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro5
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro2
-rw-r--r--src/plugins/platforms/eglfs/eglfs-plugin.pro2
-rw-r--r--src/plugins/platforms/eglfs/eglfsdeviceintegration.pro16
-rw-r--r--src/plugins/platforms/haiku/haiku.pro4
-rw-r--r--src/plugins/platforms/haiku/qhaikuintegration.cpp2
-rw-r--r--src/plugins/platforms/integrity/integrity.pro7
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbintegration.cpp12
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbscreen.cpp4
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbscreen.h2
-rw-r--r--src/plugins/platforms/ios/ios.pro78
-rw-r--r--src/plugins/platforms/ios/kernel.pro77
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro22
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json3
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm64
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h (renamed from src/plugins/platforms/ios/qiosfileengineassetslibrary.h)29
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm (renamed from src/plugins/platforms/ios/qiosfileengineassetslibrary.mm)4
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h (renamed from src/plugins/platforms/ios/qiosfileenginefactory.h)4
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h42
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm66
-rw-r--r--src/plugins/platforms/ios/optional/optional.pro2
-rw-r--r--src/plugins/platforms/ios/qiosbackingstore.h2
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.mm2
-rw-r--r--src/plugins/platforms/ios/qiosfiledialog.h2
-rw-r--r--src/plugins/platforms/ios/qiosfiledialog.mm79
-rw-r--r--src/plugins/platforms/ios/qiosintegration.h7
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm14
-rw-r--r--src/plugins/platforms/ios/qiosoptionalplugininterface.h59
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm4
-rw-r--r--src/plugins/platforms/ios/qiostextinputoverlay.mm3
-rw-r--r--src/plugins/platforms/ios/qiostextresponder.mm3
-rw-r--r--src/plugins/platforms/ios/qiostheme.mm2
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.h2
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm2
-rw-r--r--src/plugins/platforms/ios/quiview.mm35
-rw-r--r--src/plugins/platforms/linuxfb/linuxfb.pro10
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp24
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp4
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbscreen.h2
-rw-r--r--src/plugins/platforms/minimal/minimal.pro6
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.cpp6
-rw-r--r--src/plugins/platforms/minimalegl/minimalegl.pro6
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.cpp9
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.h2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.cpp4
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.h2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglwindow.h1
-rw-r--r--src/plugins/platforms/mirclient/mirclient.pro10
-rw-r--r--src/plugins/platforms/mirclient/qmirclientglcontext.cpp2
-rw-r--r--src/plugins/platforms/mirclient/qmirclientinput.cpp1
-rw-r--r--src/plugins/platforms/mirclient/qmirclientintegration.cpp4
-rw-r--r--src/plugins/platforms/mirclient/qmirclientplatformservices.h4
-rw-r--r--src/plugins/platforms/mirclient/qmirclientscreen.cpp2
-rw-r--r--src/plugins/platforms/mirclient/qmirclienttheme.h2
-rw-r--r--src/plugins/platforms/offscreen/offscreen.pro5
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration.cpp6
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp2
-rw-r--r--src/plugins/platforms/openwfd/openwf.pro6
-rw-r--r--src/plugins/platforms/openwfd/qopenwfdintegration.cpp5
-rw-r--r--src/plugins/platforms/qnx/qnx.pro9
-rw-r--r--src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp1
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp2
-rw-r--r--src/plugins/platforms/vnc/qvnc.cpp3
-rw-r--r--src/plugins/platforms/vnc/qvncintegration.cpp14
-rw-r--r--src/plugins/platforms/vnc/qvncscreen.cpp4
-rw-r--r--src/plugins/platforms/vnc/qvncscreen.h2
-rw-r--r--src/plugins/platforms/vnc/vnc.pro10
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp2
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp24
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp1
-rw-r--r--src/plugins/platforms/windows/openglblacklists/default.json12
-rw-r--r--src/plugins/platforms/windows/qwindowsbackingstore.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsclipboard.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp3
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp6
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h6
-rw-r--r--src/plugins/platforms/windows/qwindowskeymapper.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp7
-rw-r--r--src/plugins/platforms/windows/windows.pri26
-rw-r--r--src/plugins/platforms/windows/windows.pro7
-rw-r--r--src/plugins/platforms/winrt/qwinrteglcontext.cpp4
-rw-r--r--src/plugins/platforms/winrt/qwinrtfontdatabase.h2
-rw-r--r--src/plugins/platforms/winrt/qwinrtintegration.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtwindow.cpp2
-rw-r--r--src/plugins/platforms/winrt/winrt.pro5
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri9
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h4
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp4
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro1
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp6
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro1
-rw-r--r--src/plugins/platforms/xcb/qxcbbackingstore.cpp16
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbmime.cpp9
-rw-r--r--src/plugins/platforms/xcb/qxcbsessionmanager.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp3
-rw-r--r--src/plugins/platforms/xcb/xcb-plugin.pro2
-rw-r--r--src/plugins/platforms/xcb/xcb-static/xcb-static.pro6
-rw-r--r--src/plugins/platforms/xcb/xcb_qpa_lib.pro15
-rw-r--r--src/plugins/platformthemes/gtk3/gtk3.pro2
-rw-r--r--src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp4
-rw-r--r--src/plugins/printsupport/cups/qppdprintdevice.cpp2
-rw-r--r--src/plugins/sqldrivers/db2/qsql_db2.cpp6
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp2
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog.cpp2
-rw-r--r--src/sql/kernel/qsqldriver.cpp1
-rw-r--r--src/src.pro9
-rw-r--r--src/testlib/qbenchmark.cpp1
-rw-r--r--src/testlib/qbenchmarkmeasurement.cpp2
-rw-r--r--src/testlib/qbenchmarkmeasurement_p.h36
-rw-r--r--src/testlib/qbenchmarktimemeasurers_p.h (renamed from src/corelib/kernel/qcrashhandler_p.h)51
-rw-r--r--src/testlib/qtestcase.qdoc6
-rw-r--r--src/testlib/testlib.pro1
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.pro2
-rw-r--r--src/tools/uic/uic.pro2
-rw-r--r--src/widgets/configure.json6
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp5
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.cpp14
-rw-r--r--src/widgets/doc/snippets/code/doc_src_styles.cpp2
-rw-r--r--src/widgets/doc/snippets/macmainwindow.mm4
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp2
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp4
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp4
-rw-r--r--src/widgets/graphicsview/qgraphicsview_p.h4
-rw-r--r--src/widgets/graphicsview/qgraphicswidget.cpp2
-rw-r--r--src/widgets/graphicsview/qgraphicswidget_p.cpp4
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp2
-rw-r--r--src/widgets/itemviews/qheaderview.cpp2
-rw-r--r--src/widgets/itemviews/qstyleditemdelegate.cpp2
-rw-r--r--src/widgets/itemviews/qtreeview.cpp2
-rw-r--r--src/widgets/kernel/qapplication.cpp9
-rw-r--r--src/widgets/kernel/qapplication_p.h20
-rw-r--r--src/widgets/kernel/qgesturemanager.cpp4
-rw-r--r--src/widgets/kernel/qt_widgets_pch.h2
-rw-r--r--src/widgets/kernel/qtooltip.cpp16
-rw-r--r--src/widgets/kernel/qwhatsthis.cpp6
-rw-r--r--src/widgets/kernel/qwidget.cpp201
-rw-r--r--src/widgets/kernel/qwidget.h4
-rw-r--r--src/widgets/kernel/qwidget_p.h21
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp14
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp2
-rw-r--r--src/widgets/styles/qcommonstyle.cpp10
-rw-r--r--src/widgets/styles/qfusionstyle.cpp2
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm8
-rw-r--r--src/widgets/styles/qmacstyle_mac_p.h2
-rw-r--r--src/widgets/styles/qpixmapstyle.cpp4
-rw-r--r--src/widgets/styles/qstylefactory.cpp4
-rw-r--r--src/widgets/styles/qstyleoption.cpp2
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp2
-rw-r--r--src/widgets/styles/qwindowsxpstyle.cpp36
-rw-r--r--src/widgets/styles/qwindowsxpstyle_p_p.h4
-rw-r--r--src/widgets/util/qflickgesture.cpp2
-rw-r--r--src/widgets/util/qscroller.cpp6
-rw-r--r--src/widgets/util/qscroller_mac.mm2
-rw-r--r--src/widgets/util/qscrollerproperties.cpp4
-rw-r--r--src/widgets/util/qsystemtrayicon.cpp2
-rw-r--r--src/widgets/util/qundostack.cpp27
-rw-r--r--src/widgets/util/qundostack.h1
-rw-r--r--src/widgets/widgets/qabstractscrollarea.cpp28
-rw-r--r--src/widgets/widgets/qabstractscrollarea_p.h4
-rw-r--r--src/widgets/widgets/qabstractslider.cpp2
-rw-r--r--src/widgets/widgets/qcalendarwidget.cpp6
-rw-r--r--src/widgets/widgets/qcombobox.cpp15
-rw-r--r--src/widgets/widgets/qdatetimeedit.cpp6
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.cpp2
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp10
-rw-r--r--src/widgets/widgets/qdockwidget.cpp8
-rw-r--r--src/widgets/widgets/qlineedit.cpp8
-rw-r--r--src/widgets/widgets/qmainwindow.cpp22
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp24
-rw-r--r--src/widgets/widgets/qmainwindowlayout_p.h4
-rw-r--r--src/widgets/widgets/qmdiarea.cpp8
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp6
-rw-r--r--src/widgets/widgets/qmenu.cpp203
-rw-r--r--src/widgets/widgets/qmenu_mac.mm6
-rw-r--r--src/widgets/widgets/qmenu_p.h22
-rw-r--r--src/widgets/widgets/qmenubar.cpp4
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp2
-rw-r--r--src/widgets/widgets/qpushbutton.cpp8
-rw-r--r--src/widgets/widgets/qpushbutton.h4
-rw-r--r--src/widgets/widgets/qpushbutton_p.h2
-rw-r--r--src/widgets/widgets/qrubberband.cpp8
-rw-r--r--src/widgets/widgets/qsizegrip.cpp18
-rw-r--r--src/widgets/widgets/qstatusbar.cpp4
-rw-r--r--src/widgets/widgets/qtabbar.cpp15
-rw-r--r--src/widgets/widgets/qtabbar_p.h4
-rw-r--r--src/widgets/widgets/qtextedit.cpp2
-rw-r--r--src/widgets/widgets/qtoolbar.cpp2
-rw-r--r--src/widgets/widgets/qtoolbararealayout.cpp7
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol.cpp2
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol_p.h8
-rw-r--r--src/widgets/widgets/qwidgetresizehandler.cpp4
-rw-r--r--sync.profile16
-rw-r--r--tests/auto/corelib/io/qfile/tst_qfile.cpp2
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp13
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp21
-rw-r--r--tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp2
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp16
-rw-r--r--tests/auto/corelib/tools/qdate/tst_qdate.cpp1
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp26
-rw-r--r--tests/auto/corelib/tools/qtime/tst_qtime.cpp3
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp6
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp20
-rw-r--r--tests/auto/gui/painting/qcolor/tst_qcolor.cpp4
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp21
-rw-r--r--tests/auto/gui/painting/qregion/tst_qregion.cpp6
-rw-r--r--tests/auto/gui/qopengl/tst_qopengl.cpp28
-rw-r--r--tests/auto/gui/text/qcssparser/tst_qcssparser.cpp1
-rw-r--r--tests/auto/gui/text/qfontdatabase/qfontdatabase.pro4
-rw-r--r--tests/auto/gui/text/qfontdatabase/testdata.qrc2
-rw-r--r--tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp69
-rw-r--r--tests/auto/network/access/http2/http2srv.cpp63
-rw-r--r--tests/auto/network/access/http2/http2srv.h4
-rw-r--r--tests/auto/network/access/http2/tst_http2.cpp148
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp14
-rw-r--r--tests/auto/opengl/qglthreads/tst_qglthreads.cpp2
-rw-r--r--tests/auto/other/lancelot/paintcommands.cpp4
-rw-r--r--tests/auto/other/macnativeevents/BLACKLIST3
-rw-r--r--tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro7
-rw-r--r--tests/auto/shared/resources/testfont_condensed.ttfbin0 -> 66512 bytes
-rw-r--r--tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp106
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp40
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp14
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp2
-rw-r--r--tests/auto/widgets/kernel/qaction/tst_qaction.cpp6
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp12
-rw-r--r--tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp59
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp13
-rw-r--r--tests/auto/widgets/util/qundostack/tst_qundostack.cpp144
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp4
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp2
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp2
-rw-r--r--tests/auto/widgets/widgets/qmenubar/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qmenubar/qmenubar.pro5
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp46
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm44
-rw-r--r--tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp12
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp2
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp6
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp2
-rw-r--r--tests/manual/lance/main.cpp2
-rw-r--r--tests/manual/qopenglcontext/qopenglcontext.pro2
-rw-r--r--tests/manual/qopenglcontext/qopenglcontextwindow.cpp2
-rw-r--r--tests/manual/textrendering/glyphshaping/main.cpp2
-rw-r--r--tools/configure/environment.cpp1
559 files changed, 17510 insertions, 14150 deletions
diff --git a/bin/syncqt.pl b/bin/syncqt.pl
index 8a49da3891..372aa2b331 100755
--- a/bin/syncqt.pl
+++ b/bin/syncqt.pl
@@ -217,8 +217,6 @@ sub classNames {
$$requires = "";
my $ihdrbase = basename($iheader);
- my $classname = $classnames{$ihdrbase};
- push @ret, split(/,/, $classname) if ($classname);
my $parsable = "";
if(open(F, "<$iheader")) {
@@ -928,6 +926,7 @@ foreach my $lib (@modules_to_sync) {
my $pri_install_classes = "";
my $pri_install_files = "";
my $pri_install_pfiles = "";
+ my $pri_install_ipfiles = "";
my $pri_install_qpafiles = "";
my $pri_injections = "";
my $pri_clean_files = "";
@@ -1042,7 +1041,11 @@ foreach my $lib (@modules_to_sync) {
&& $header =~ /_p\.h$/ && $subdir !~ /3rdparty/;
check_header($lib, $header, $iheader, $public_header, $private_header);
}
- my @classes = $public_header && (!$minimal && $is_qt) ? classNames($iheader, \$clean_header, \$requires) : ();
+ my @classes = ();
+ push @classes, classNames($iheader, \$clean_header, \$requires)
+ if (!$shadow && $public_header && !$minimal && $is_qt);
+ my $classname = $classnames{$header};
+ push @classes, split(/,/, $classname) if ($classname);
if($showonly) {
print "$header [$lib]\n";
foreach(@classes) {
@@ -1096,6 +1099,9 @@ foreach my $lib (@modules_to_sync) {
elsif ($qpa_header) {
$pri_install_qpafiles.= "$pri_install_iheader ";;
}
+ elsif ($shadow) {
+ $pri_install_ipfiles .= "$pri_install_iheader ";
+ }
else {
$pri_install_pfiles.= "$pri_install_iheader ";;
}
@@ -1240,6 +1246,7 @@ foreach my $lib (@modules_to_sync) {
$headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n";
$headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n";
$headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n";
+ $headers_pri_contents .= "SYNCQT.INJECTED_PRIVATE_HEADER_FILES = $pri_install_ipfiles\n";
$headers_pri_contents .= "SYNCQT.QPA_HEADER_FILES = $pri_install_qpafiles\n";
$headers_pri_contents .= "SYNCQT.CLEAN_HEADER_FILES = $pri_clean_files\n";
$headers_pri_contents .= "SYNCQT.INJECTIONS = $pri_injections\n";
diff --git a/config.tests/.qmake.conf b/config.tests/.qmake.conf
index 71e6817656..e8f6f09e9d 100644
--- a/config.tests/.qmake.conf
+++ b/config.tests/.qmake.conf
@@ -1,6 +1 @@
-mingw {
- TMPPATH = $$(INCLUDE)
- QMAKE_INCDIR_POST += $$split(TMPPATH, $$QMAKE_DIRLIST_SEP)
- TMPPATH = $$(LIB)
- QMAKE_LIBDIR_POST += $$split(TMPPATH, $$QMAKE_DIRLIST_SEP)
-}
+# This file exists only to detach the tests from the surroundings.
diff --git a/config.tests/win/msvc_version.cpp b/config.tests/win/msvc_version.cpp
new file mode 100644
index 0000000000..3d7232e8e2
--- /dev/null
+++ b/config.tests/win/msvc_version.cpp
@@ -0,0 +1 @@
+_MSC_FULL_VER
diff --git a/configure.pri b/configure.pri
index 7ec845375e..b69dbf3709 100644
--- a/configure.pri
+++ b/configure.pri
@@ -247,11 +247,12 @@ defineTest(qtConfTest_checkCompiler) {
$${1}.compilerId = "icc"
$${1}.compilerVersion = $$replace(version, "icpc version ([0-9.]+).*", "\\1")
} else: msvc {
- qtRunLoggedCommand("$$QMAKE_CXX /? 2>&1", version)|return(false)
+ command = $$QMAKE_CXX /EP /nologo $$source $$system_quote($$QMAKE_CONFIG_TESTS_DIR/win/msvc_version.cpp)
+ qtRunLoggedCommand("$$command", version)|return(false)
version = "$$version"
$${1}.compilerDescription = "MSVC"
$${1}.compilerId = "cl"
- $${1}.compilerVersion = $$replace(version, "^.*Compiler Version ([0-9.]+) for.*$", "\\1")
+ $${1}.compilerVersion = $$replace(version, "^.*([0-9]{2})([0-9]{2})([0-9]{5}).*$", "\\1.\\2.\\3")
} else {
return(false)
}
@@ -325,8 +326,9 @@ defineTest(qtConfOutput_qreal) {
defineTest(qtConfOutput_pkgConfig) {
!$${2}: return()
- PKG_CONFIG = $$eval($${currentConfig}.tests.pkg-config.pkgConfig)
- export(PKG_CONFIG)
+ PKG_CONFIG_EXECUTABLE = $$eval($${currentConfig}.tests.pkg-config.pkgConfig)
+ qtConfOutputVar(assign, "privatePro", "PKG_CONFIG_EXECUTABLE", $$PKG_CONFIG_EXECUTABLE)
+ export(PKG_CONFIG_EXECUTABLE)
# this method also exports PKG_CONFIG_(LIB|SYSROOT)DIR, so that tests using pkgConfig will work correctly
PKG_CONFIG_SYSROOT_DIR = $$eval($${currentConfig}.tests.pkg-config.pkgConfigSysrootDir)
!isEmpty(PKG_CONFIG_SYSROOT_DIR) {
diff --git a/doc/global/externalsites/external-resources.qdoc b/doc/global/externalsites/external-resources.qdoc
index b231bb1f4a..d9859ba295 100644
--- a/doc/global/externalsites/external-resources.qdoc
+++ b/doc/global/externalsites/external-resources.qdoc
@@ -474,7 +474,7 @@
*/
/*!
- \externalpage http://git.iksaif.net/?p=qsslkey-p11.git
+ \externalpage https://github.com/iksaif/qsslkey-p11
\title qsslkey example
*/
diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf
index 13e523411a..fe8b7fb87e 100644
--- a/doc/global/qt-cpp-defines.qdocconf
+++ b/doc/global/qt-cpp-defines.qdocconf
@@ -7,7 +7,6 @@ defines += Q_QDOC \
QT_KEYPAD_NAVIGATION \
QT_NO_EGL \
QT3_SUPPORT \
- Q_DEAD_CODE_FROM_QT4_.* \
Q_OS_.* \
Q_BYTE_ORDER \
QT_DEPRECATED \
diff --git a/doc/global/template/style/offline-simple.css b/doc/global/template/style/offline-simple.css
index 84d206b2d0..a805b924a3 100644
--- a/doc/global/template/style/offline-simple.css
+++ b/doc/global/template/style/offline-simple.css
@@ -1,4 +1,4 @@
-pre {
+pre, .LegaleseLeft {
background-color: #f0f0f0;
font-family: Courier, monospace;
font-weight: 600;
diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css
index 612c1087d5..e2081596c9 100644
--- a/doc/global/template/style/offline.css
+++ b/doc/global/template/style/offline.css
@@ -18,8 +18,12 @@ img {
height: auto;
}
-.content {
+.content .border img {
+ box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
+}
+.content .border .player {
+ box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
}
.content .indexboxcont li {
@@ -424,7 +428,7 @@ table styles
/* table with border alternative colours*/
-table, pre {
+table, pre, .LegaleseLeft {
-moz-border-radius: 7px 7px 7px 7px;
-webkit-border-radius: 7px 7px 7px 7px;
border-radius: 7px 7px 7px 7px;
@@ -481,6 +485,10 @@ table, pre {
margin: 0px
}
+.LegaleseLeft {
+ font-family: monospace;
+ white-space: pre-wrap;
+}
/* table bodless & white*/
.borderless {
@@ -543,7 +551,7 @@ ol.a > li{
text-align: left
}
-.cpp {
+.cpp, .LegaleseLeft {
display: block;
margin: 10px;
overflow: auto;
diff --git a/doc/global/template/style/online.css b/doc/global/template/style/online.css
index be278a27da..3c305f3ddb 100644
--- a/doc/global/template/style/online.css
+++ b/doc/global/template/style/online.css
@@ -1280,6 +1280,12 @@ li a.active {
margin-top:0.75em;
max-width:100%
}
+.context .border img {
+ box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
+ }
+.context .border .player {
+ box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5)
+ }
.context table {
vertical-align:initial
}
@@ -1364,7 +1370,7 @@ div.qt_commercial {
border-top:5px solid #5caa15;
margin-bottom:50px
}
-pre {
+pre, .LegaleseLeft {
background-color:#404244;
color:#fff;
display:block;
@@ -1375,6 +1381,10 @@ pre {
padding:25px;
margin-top:0.75em
}
+.mainContent .LegaleseLeft p {
+ color:#fff;
+ white-space: pre-wrap
+}
.copy_text {
background-color:#46a2da;
color:#fff;
diff --git a/examples/widgets/doc/src/calculator.qdoc b/examples/widgets/doc/src/calculator.qdoc
index 5af52a75c9..4ee1248e6c 100644
--- a/examples/widgets/doc/src/calculator.qdoc
+++ b/examples/widgets/doc/src/calculator.qdoc
@@ -261,7 +261,7 @@
\snippet widgets/calculator/calculator.cpp 20
- Like in \c additiveOperatorClicked(), we start by handing any
+ Like in \c additiveOperatorClicked(), we start by handling any
pending multiplicative and additive operators. Then we display \c
sumSoFar and reset the variable to zero. Resetting the variable
to zero is necessary to avoid counting the value twice.
diff --git a/examples/widgets/graphicsview/boxes/scene.cpp b/examples/widgets/graphicsview/boxes/scene.cpp
index a22ab5082f..9ac429c667 100644
--- a/examples/widgets/graphicsview/boxes/scene.cpp
+++ b/examples/widgets/graphicsview/boxes/scene.cpp
@@ -128,7 +128,7 @@ void ColorEdit::mousePressEvent(QMouseEvent *event)
QColorDialog dialog(color, 0);
dialog.setOption(QColorDialog::ShowAlphaChannel, true);
// The ifdef block is a workaround for the beta, TODO: remove when bug 238525 is fixed
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
dialog.setOption(QColorDialog::DontUseNativeDialog, true);
#endif
dialog.move(280, 120);
diff --git a/examples/widgets/tools/i18n/languagechooser.cpp b/examples/widgets/tools/i18n/languagechooser.cpp
index 9bdeec6613..83aafe6b8a 100644
--- a/examples/widgets/tools/i18n/languagechooser.cpp
+++ b/examples/widgets/tools/i18n/languagechooser.cpp
@@ -53,7 +53,7 @@
#include "languagechooser.h"
#include "mainwindow.h"
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
QT_BEGIN_NAMESPACE
extern void qt_mac_set_menubar_merge(bool merge);
QT_END_NAMESPACE
@@ -92,7 +92,7 @@ LanguageChooser::LanguageChooser(const QString& defaultLang, QWidget *parent)
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
qt_mac_set_menubar_merge(false);
#endif
diff --git a/examples/widgets/tools/plugandpaint/app/app.pro b/examples/widgets/tools/plugandpaint/app/app.pro
index e35203edf2..558d359e7d 100644
--- a/examples/widgets/tools/plugandpaint/app/app.pro
+++ b/examples/widgets/tools/plugandpaint/app/app.pro
@@ -15,8 +15,8 @@ SOURCES = main.cpp \
LIBS = -L../plugins
-macx-xcode:qtConfig(simulator_and_device) {
- LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_PLATFORM_SUFFIX_SETTING})$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})
+macx-xcode {
+ LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})
} else {
LIBS += -lpnp_basictools
if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
diff --git a/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro b/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro
index 8317019c10..f5ba95252c 100644
--- a/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro
+++ b/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro
@@ -14,4 +14,4 @@ target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target
CONFIG += install_ok # Do not cargo-cult this!
-uikit: CONFIG += debug_and_release simulator_and_device
+uikit: CONFIG += debug_and_release
diff --git a/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro b/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro
index 4716665d34..e137b04823 100644
--- a/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro
+++ b/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro
@@ -14,4 +14,4 @@ target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target
CONFIG += install_ok # Do not cargo-cult this!
-uikit: CONFIG += debug_and_release simulator_and_device
+uikit: CONFIG += debug_and_release
diff --git a/mkspecs/features/data/unix/findclasslist.pl b/mkspecs/features/data/unix/findclasslist.pl
index fb4357d0d4..b74b8b6a58 100644
--- a/mkspecs/features/data/unix/findclasslist.pl
+++ b/mkspecs/features/data/unix/findclasslist.pl
@@ -55,7 +55,7 @@ while (<STDIN>) {
my $comment = " /* $1 */";
while (my $line = <HDR>) {
# Match a struct or class declaration, but not a forward declaration
- $line =~ /^(?:struct|class) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next;
+ $line =~ /^(?:struct|class|namespace) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next;
print $comment if $comment;
printf " *%d%s*;\n", length $1, $1;
$comment = 0;
diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf
index b655f2e0ca..2d52525190 100644
--- a/mkspecs/features/default_pre.prf
+++ b/mkspecs/features/default_pre.prf
@@ -23,49 +23,4 @@ CONFIG = \
unset(today)
}
-isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
- #
- # Get default include and library paths from compiler
- #
- gcc {
- !equals(QMAKE_HOST.os, Windows) {
- cmd_prefix = "LC_ALL=C"
- cmd_suffix = "</dev/null >/dev/null"
- } else {
- cmd_prefix = "set LC_ALL=C&"
- cmd_suffix = "<NUL >NUL"
- }
- output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
- add_includes = false
- for (line, output) {
- line ~= s/^ *// # remove leading spaces
- contains(line, "LIBRARY_PATH=.*") {
- line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH=
- paths = $$split(line, $$QMAKE_DIRLIST_SEP)
- for (path, paths): \
- QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path)
- } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here:
- add_includes = true
- } else: contains(line, "End of search.*") {
- add_includes = false
- } else: $$add_includes {
- !contains(line, ".* \\(framework directory\\)"): \
- QMAKE_DEFAULT_INCDIRS += $$clean_path($$line)
- }
- }
- QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
- } else: msvc {
- LIB = $$getenv("LIB")
- QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP)
- INCLUDE = $$getenv("INCLUDE")
- QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP)
- }
-
- unix {
- isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include
- isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
- }
-
- !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
- !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
-}
+load(toolchain)
diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf
index 5d06198ae4..f40cc99172 100644
--- a/mkspecs/features/exclusive_builds.prf
+++ b/mkspecs/features/exclusive_builds.prf
@@ -1,12 +1,9 @@
-defineTest(addExclusiveBuilds) {
- lessThan(ARGC, 2): \
- error("addExclusiveBuilds() requires at least two arguments")
-
- !$$join(ARGS, _and_):!fix_output_dirs: \
+defineTest(addExclusiveBuildsProper) {
+ !$$1:!fix_output_dirs: \
return(true)
- for(build, ARGS) {
+ for(build, 2) {
isEmpty($${build}.name) {
$${build}.name = $$title($$build)
export($${build}.name)
@@ -20,7 +17,7 @@ defineTest(addExclusiveBuilds) {
export($${build}.dir_affix)
}
- $${build}.exclusive = $$ARGS
+ $${build}.exclusive = $$2
export($${build}.exclusive)
QMAKE_EXCLUSIVE_BUILDS += $$build
@@ -33,6 +30,13 @@ defineTest(addExclusiveBuilds) {
return(true)
}
+defineTest(addExclusiveBuilds) {
+ lessThan(ARGC, 2): \
+ error("addExclusiveBuilds() requires at least two arguments")
+
+ addExclusiveBuildsProper($$join(ARGS, _and_), $$ARGS)
+}
+
# Default directories to process
QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR
QMAKE_DIR_REPLACE_SANE += QGLTF_DIR
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
index c799487354..33dffe603e 100644
--- a/mkspecs/features/mac/default_post.prf
+++ b/mkspecs/features/mac/default_post.prf
@@ -66,7 +66,7 @@ macx-xcode {
QMAKE_MAC_XCODE_SETTINGS += only_active_arch
} else {
VALID_ARCHS =
- !simulator|simulator_and_device: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS
+ device|!simulator: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS
simulator: VALID_ARCHS += $$QMAKE_APPLE_SIMULATOR_ARCHS
single_arch: VALID_ARCHS = $$first(VALID_ARCHS)
diff --git a/mkspecs/features/mac/default_pre.prf b/mkspecs/features/mac/default_pre.prf
index 2064d976d7..e21e749ee9 100644
--- a/mkspecs/features/mac/default_pre.prf
+++ b/mkspecs/features/mac/default_pre.prf
@@ -1,4 +1,4 @@
-CONFIG = asset_catalogs sdk rez $$CONFIG
+CONFIG = asset_catalogs rez $$CONFIG
load(default_pre)
isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf
index b3b1d4be99..ed1ad8ad38 100644
--- a/mkspecs/features/mac/objective_c.prf
+++ b/mkspecs/features/mac/objective_c.prf
@@ -1,6 +1,7 @@
# Objective-C/C++ sources go in SOURCES, like all other sources
SOURCES += $$OBJECTIVE_SOURCES
+unset(OBJECTIVE_SOURCES)
# Strip C/C++ flags from QMAKE_OBJECTIVE_CFLAGS just in case
QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS
@@ -8,3 +9,4 @@ QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS
# Add Objective-C/C++ flags to C/C++ flags, the compiler can handle it
QMAKE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS
QMAKE_CXXFLAGS += $$QMAKE_OBJECTIVE_CFLAGS
+unset(QMAKE_OBJECTIVE_CFLAGS)
diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf
index bea46fa8cb..be885e52ee 100644
--- a/mkspecs/features/mac/sdk.prf
+++ b/mkspecs/features/mac/sdk.prf
@@ -54,24 +54,27 @@ for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_
tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET
watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET
- !simulator|simulator_and_device: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS
+ device|!simulator: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS
simulator: simulator_archs = $$QMAKE_APPLE_SIMULATOR_ARCHS
archs = $$device_archs $$simulator_archs
+ isEmpty(archs): \
+ error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture")
+
single_arch {
device_archs = $$first(device_archs)
simulator_archs = $$first(simulator_archs)
archs = $$first(archs)
}
- # If we're doing a simulator_and_device build, device and simulator architectures
+ # If we're doing a simulator and device build, device and simulator architectures
# use different paths and flags for the sysroot and deployment target switch, so we
# must multiplex them across multiple architectures using -Xarch. Otherwise we fall
# back to the simple path. This is not strictly necessary but results in cleaner
# command lines and makes it easier for people to override EXPORT_VALID_ARCHS to
# limit individual rules to a different set of architecture(s) from the overall
# build (such as machtest in QtCore).
- simulator_and_device {
+ simulator:device {
QMAKE_XARCH_CFLAGS =
QMAKE_XARCH_LFLAGS =
QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS
diff --git a/mkspecs/features/mac/toolchain.prf b/mkspecs/features/mac/toolchain.prf
new file mode 100644
index 0000000000..df191eb13c
--- /dev/null
+++ b/mkspecs/features/mac/toolchain.prf
@@ -0,0 +1,5 @@
+# Ensure that we process sdk.prf first, as it will update QMAKE_CXX,
+# which the default path determination uses.
+sdk: load(sdk)
+
+load(toolchain)
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index 20916f9035..35626e343f 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -79,7 +79,7 @@ moc_source.CONFIG = no_link moc_verify
moc_source.dependency_type = TYPE_C
moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC}
-moc_source.input = SOURCES OBJECTIVE_SOURCES
+moc_source.input = SOURCES
moc_source.name = MOC ${QMAKE_FILE_IN}
moc_source.depends += $$WIN_INCLUDETEMP $$moc_predefs.output
silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands
diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf
index 149b3cff56..7e12626db3 100644
--- a/mkspecs/features/qml_plugin.prf
+++ b/mkspecs/features/qml_plugin.prf
@@ -15,7 +15,6 @@ TEMPLATE = lib
CONFIG += plugin
if(win32|mac):!macx-xcode {
- qtConfig(simulator_and_device): CONFIG += simulator_and_device
qtConfig(debug_and_release): CONFIG += debug_and_release
qtConfig(build_all): CONFIG += build_all
}
diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf
deleted file mode 100644
index 72449c8f6b..0000000000
--- a/mkspecs/features/qpa/basicunixfontdatabase.prf
+++ /dev/null
@@ -1,3 +0,0 @@
-qtConfig(system-freetype) {
- QMAKE_USE_PRIVATE += freetype/linkonly
-}
diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf
deleted file mode 100644
index ef8384a245..0000000000
--- a/mkspecs/features/qpa/genericunixfontdatabase.prf
+++ /dev/null
@@ -1,6 +0,0 @@
-CONFIG += qpa/basicunixfontdatabase
-qtConfig(fontconfig) {
- DEFINES += Q_FONTCONFIGDATABASE
- QMAKE_USE_PRIVATE += fontconfig/linkonly
-}
-
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index e58e452620..07b7565f48 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -71,6 +71,7 @@ for(ever) {
MODULE_INCLUDES = $$eval(QT.$${QTLIB}.includes)
MODULE_LIBS = $$eval(QT.$${QTLIB}.libs)
MODULE_FRAMEWORKS = $$eval(QT.$${QTLIB}.frameworks)
+ MODULE_USES = $$eval(QT.$${QTLIB}.uses)
MODULE_CONFIG = $$eval(QT.$${QTLIB}.module_config)
isEmpty(MODULE_NAME) {
@@ -141,6 +142,7 @@ for(ever) {
}
}
}
+ QMAKE_USE$$var_sfx += $$MODULE_USES
# Add capabilities as defined by modules used in the project
winrt {
MODULE_WINRT_CAPABILITIES = $$eval(QT.$${QTLIB}.winrt_capabilities)
@@ -290,7 +292,8 @@ contains(TEMPLATE, .*app) {
autoplugs =
for (qtmod, qt_module_deps) {
for (ptype, QT.$${qtmod}.plugin_types) {
- isEmpty(QTPLUGIN.$$ptype) {
+ nptype = $$replace(ptype, [-/], _)
+ isEmpty(QTPLUGIN.$$nptype) {
for (plug, QT_PLUGINS) {
equals(QT_PLUGIN.$${plug}.TYPE, $$ptype) {
for (dep, QT_PLUGIN.$${plug}.EXTENDS) {
@@ -303,7 +306,7 @@ contains(TEMPLATE, .*app) {
}
}
} else {
- plug = $$eval(QTPLUGIN.$$ptype)
+ plug = $$eval(QTPLUGIN.$$nptype)
!equals(plug, -): \
autoplugs += $$plug
}
diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf
index 90135b00a3..87e32d6d42 100644
--- a/mkspecs/features/qt_app.prf
+++ b/mkspecs/features/qt_app.prf
@@ -36,3 +36,27 @@ INSTALLS += target
load(qt_targets)
load(qt_common)
+
+no_launch_target: return()
+
+load(resolve_target)
+launch.commands = $$shell_quote($$shell_path($$QMAKE_RESOLVED_TARGET))
+QMAKE_EXTRA_TARGETS += launch
+
+# Add environment for non-installed builds.
+QT_TOOL_NAME = target
+qtAddTargetEnv(launch.commands, QT)
+
+isEmpty(BUILDS)|build_pass {
+ launch.depends = first
+} else {
+ # For exclusive builds, run the app only once.
+ launch.CONFIG = recursive
+ launch.target = launch_all
+ launch.recurse_target = launch
+ launch.commands =
+
+ launch_first.depends = $$eval($$first(BUILDS).target)-launch
+ launch_first.target = launch
+ QMAKE_EXTRA_TARGETS += launch_first
+}
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index 9d870faeac..88f3166e3d 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -376,7 +376,7 @@ defineReplace(qtConfPkgConfig) {
$$host {
pkg_config = $$qtConfFindInPath("pkg-config")
} else {
- pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG"
+ pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG_EXECUTABLE"
}
return($$pkg_config)
@@ -557,18 +557,6 @@ defineReplace(qtConfLibraryArgs) {
return($$qmake_args)
}
-defineReplace(qtConfGetHexVersion) {
- version = $$split(1, '.')
- number =
- for(i, 0..2) {
- n = $$member(version, $$i)
- isEmpty(n): n = 0
- number += $$format_number($$n, obase=16 zeropad width=2)
- }
- number = "0x$$join(number)"
- return($$number)
-}
-
defineTest(qtConfExportLibrary) {
isEmpty(2): return()
!$$qtConfEvaluate($$eval($${1}.export)): return()
@@ -578,7 +566,6 @@ defineTest(qtConfExportLibrary) {
eval(libs = $$eval($${1}.libs))
eval(cflags = $$eval($${1}.cflags))
eval(includes = $$eval($${1}.includedir))
- version = $$eval($${1}.version)
# Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff.
defines =
@@ -606,14 +593,6 @@ defineTest(qtConfExportLibrary) {
$$eval($${1}.builds.$${b}))
!isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines)
!isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
- !isEmpty(version) {
- qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION, $$version)
- qtConfOutputSetDefine("privateHeader", "QT_LIBRARY_VERSION_$${2}", $$qtConfGetHexVersion($$version))
- version = $$split(version, '.')
- qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MAJOR, $$member(version, 0))
- qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MINOR, $$member(version, 1))
- qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_PATCH, $$member(version, 2))
- }
!isEmpty($${currentConfig}.module): \
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$2)
}
@@ -623,6 +602,8 @@ defineTest(qtConfHandleLibrary) {
defined($${lpfx}.result, var): return()
qtConfEnsureTestTypeDeps("library")
+ qtConfTestPrepare_compile($$lpfx)
+ use_args = $$eval($${lpfx}.literal_args)
qtConfLoadResult($${lpfx}, $$1) {
$$eval($${lpfx}.result): \
@@ -636,7 +617,6 @@ defineTest(qtConfHandleLibrary) {
result = false
for (s, $${lpfx}.sources._KEYS_) {
- qtLog("Trying source $$s of library $${1}.")
spfx = $${lpfx}.sources.$${s}
t = $$eval($${spfx}.type)
@@ -644,26 +624,30 @@ defineTest(qtConfHandleLibrary) {
!defined($$call, test): \
error("Library $${1} source $${s} has unknown type '$$t'")
+ qtLog("Trying source $$s (type $$t) of library $${1} ...")
+
!$$qtConfEvaluate($$eval($${spfx}.condition)) {
- qtLog("Source $$s of library $$1 failed condition.")
+ qtLog(" => source failed condition.")
next()
}
!$${call}($$spfx) {
- qtLog("Source $$s of library $$1 produced no result.")
+ qtLog(" => source produced no result.")
next()
}
# if the library defines a test, use it to verify the source.
!isEmpty($${lpfx}.test) {
- $${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx)
+ $${lpfx}.literal_args = $$use_args $$qtConfLibraryArgs($$spfx)
$${lpfx}.host = $$eval($${spfx}.host)
!qtConfTest_compile($$lpfx) {
- qtLog("Source $$s of library $$1 failed verification.")
+ qtLog(" => source failed verification.")
next()
}
}
+ qtLog(" => source accepted.")
+
$${lpfx}.cache += source
for (v, $$list(libs includes cflags version export)): \
$${lpfx}.cache += sources.$${s}.$${v}
diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf
index 8890866c64..07e4f48771 100644
--- a/mkspecs/features/qt_helper_lib.prf
+++ b/mkspecs/features/qt_helper_lib.prf
@@ -15,16 +15,40 @@ TEMPLATE = lib
CONFIG -= qt
QT = # In case qt is re-added.
+INCLUDEPATH += $$MODULE_INCLUDEPATH
+DEFINES += $$MODULE_DEFINES
+
CONFIG -= warning_clean # Don't presume 3rd party code to be clean
load(qt_common)
-qtConfig(simulator_and_device): CONFIG += simulator_and_device
qtConfig(debug_and_release): CONFIG += debug_and_release
qtConfig(build_all): CONFIG += build_all
DESTDIR = $$MODULE_BASE_OUTDIR/lib
DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin
+!build_pass {
+ MODULE = $$replace(TARGET, ^qt, )
+ MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_ext_$${MODULE}.pri
+ ucmodule = $$upper($$MODULE)
+
+ MODULE_PRI_CONT = \
+ "QMAKE_INCDIR_$${ucmodule} = $$val_escape(MODULE_INCLUDEPATH)" \
+ "QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)"
+ MODULE_LIBS = -L$$DESTDIR -l$$TARGET
+ debug_and_release {
+ win32: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}d
+ darwin: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}_debug
+ MODULE_PRI_CONT += \
+ "QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \
+ "QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_LIBS)"
+ } else {
+ MODULE_PRI_CONT += \
+ "QMAKE_LIBS_$${ucmodule} = $$val_escape(MODULE_LIBS)"
+ }
+ write_file($$MODULE_PRI, MODULE_PRI_CONT)|error()
+}
+
# In static builds of Qt, convenience libraries must be installed,
# as in this case they are not linked to the final library/plugin.
installed|if(!not_installed:qtConfig(static)): load(qt_installs)
diff --git a/mkspecs/features/qt_installs.prf b/mkspecs/features/qt_installs.prf
index 3a5dbb6274..0d3dfb6b93 100644
--- a/mkspecs/features/qt_installs.prf
+++ b/mkspecs/features/qt_installs.prf
@@ -36,7 +36,7 @@ qt_install_headers {
targ_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME
INSTALLS += targ_headers
- private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES
+ private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES
private_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
INSTALLS += private_headers
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index 46ec6bc4bf..954fdb2501 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -13,6 +13,11 @@ isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0)
isEmpty(VERSION): VERSION = $$MODULE_VERSION
isEmpty(VERSION): error("Module does not define version.")
+exists($$OUT_PWD/qt$${MODULE}-config.pri) {
+ include($$OUT_PWD/qt$${MODULE}-config.pri)
+ CONFIG += generated_privates
+}
+
# Compile as shared/DLL or static according to the option given to configure
# unless overridden. Host builds are always static
host_build|staticlib: CONFIG += static
@@ -79,15 +84,16 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu
# If Qt was configured with -debug-and-release then build the module the same way
# - unless this is a host library
!host_build:if(win32|mac):!macx-xcode {
- qtConfig(simulator_and_device): CONFIG += simulator_and_device
qtConfig(debug_and_release): CONFIG += debug_and_release
qtConfig(build_all): CONFIG += build_all
}
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
-QT += $$QT_FOR_PRIVATE
+QT_PRIVATE += $$QT_FOR_PRIVATE
unset(QT_FOR_PRIVATE)
+QMAKE_USE_PRIVATE += $$QMAKE_USE_FOR_PRIVATE
+unset(QMAKE_USE_FOR_PRIVATE)
!internal_module:CONFIG += create_cmake
@@ -114,7 +120,7 @@ lib_bundle {
FRAMEWORK_HEADERS.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES
FRAMEWORK_HEADERS.path = Headers
FRAMEWORK_PRIVATE_HEADERS.version = Versions
- FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES
+ FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES
FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private
FRAMEWORK_QPA_HEADERS.version = Versions
FRAMEWORK_QPA_HEADERS.files = $$SYNCQT.QPA_HEADER_FILES
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index 5a45007820..790a4ee29e 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -113,7 +113,7 @@ exists($$OUT_PWD/qt$${MODULE}-config.h) {
$$fwd_rel/qt$${MODULE}-config_p.h:$$MODULE_VERSION/$$MODULE_INCNAME/private/qt$${MODULE}-config_p.h
inst_rel = $$relative_path($$OUT_PWD, $$_PRO_FILE_PWD_)
SYNCQT.HEADER_FILES += $$inst_rel/qt$${MODULE}-config.h
- SYNCQT.PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h
+ SYNCQT.INJECTED_PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h
}
for (injection, SYNCQT.INJECTIONS) {
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index 9542a362d0..57160d11eb 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -35,9 +35,6 @@ else: \
MODULE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE_ID}.pri
MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
-exists($$OUT_PWD/qt$${MODULE}-config.pri): \
- include($$OUT_PWD/qt$${MODULE}-config.pri)
-
defineReplace(qtGetFeaturesForModule) {
enabled = $$unique(QT.$${1}.enabled_features)
disabled = $$unique(QT.$${1}.disabled_features)
@@ -60,8 +57,7 @@ defineReplace(qtExportLibsForModule) {
NAME = $$upper($$lib)
vars = \
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
- QMAKE_CFLAGS_$$NAME QMAKE_INCDIR_$$NAME QMAKE_$${NAME}_VERSION \
- QMAKE_$${NAME}_VERSION_MAJOR QMAKE_$${NAME}_VERSION_MINOR QMAKE_$${NAME}_VERSION_PATCH
+ QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
for (var, vars) {
!isEmpty($$var): \
result += "$$var = $$val_escape($$var)"
@@ -105,7 +101,7 @@ defineReplace(qtExportLibsForModule) {
else: \
module_config =
!isEmpty(MODULE_PLUGIN_TYPES): \
- module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /.*$, )"
+ module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /[^.]+\\.[^.]+$, )"
else: \
module_plugtypes =
!isEmpty(MODULE_MASTER_HEADER): \
@@ -134,6 +130,7 @@ defineReplace(qtExportLibsForModule) {
MODULE_PRI_CONT += \
"QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
$$module_rundep \
+ "QT.$${MODULE_ID}.uses =$$join(QMAKE_USE, " ", " ")" \
"QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
$$module_config \
"QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
@@ -164,6 +161,7 @@ defineReplace(qtExportLibsForModule) {
"QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \
"QT.$${MODULE}_private.frameworks =" \
"QT.$${MODULE}_private.depends = $$private_deps" \
+ "QT.$${MODULE}_private.uses =$$join(QMAKE_USE_FOR_PRIVATE, " ", " ")" \
"QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" \
$$qtGetFeaturesForModule($${MODULE}_private) \
"" \
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
index 2179c7ca22..265b4ea8a2 100644
--- a/mkspecs/features/qt_plugin.prf
+++ b/mkspecs/features/qt_plugin.prf
@@ -26,7 +26,6 @@ win32:CONFIG(shared, static|shared) {
tool_plugin {
!build_pass:qtConfig(debug_and_release): CONFIG += release
} else:if(win32|mac):!macx-xcode {
- qtConfig(simulator_and_device): CONFIG += simulator_and_device
qtConfig(debug_and_release): CONFIG += debug_and_release
qtConfig(build_all): CONFIG += build_all
}
diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf
index 93c952617d..4b73b4b8f7 100644
--- a/mkspecs/features/qt_tool.prf
+++ b/mkspecs/features/qt_tool.prf
@@ -9,6 +9,7 @@
# We mean it.
#
+CONFIG += no_launch_target
load(qt_app)
CONFIG += console
diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf
index e42343f434..06b29ea04b 100644
--- a/mkspecs/features/testcase.prf
+++ b/mkspecs/features/testcase.prf
@@ -1,4 +1,4 @@
-have_target {
+!have_target: return()
# qt_build_config.prf disables execptions for all Qt modules which don't
# explicitly turn it on again, while the qmake default is to build with
@@ -207,5 +207,3 @@ macx-xcode:bundle:isEmpty(QMAKE_BUNDLE_EXTENSION) {
QMAKE_BUNDLE_EXTENSION = .xctest
}
-} # have_target
-
diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf
new file mode 100644
index 0000000000..3f266dd2a4
--- /dev/null
+++ b/mkspecs/features/toolchain.prf
@@ -0,0 +1,57 @@
+
+defineReplace(qtMakeExpand) {
+ out = "$$1"
+ for(ever) {
+ m = $$replace(out, ".*\\$\\(EXPORT_([^)]+)\\).*", \\1)
+ equals(m, $$out): \
+ return($$out)
+ out = $$replace(out, "\\$\\(EXPORT_$$m\\)", $$eval($$m))
+ }
+}
+
+isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
+ #
+ # Get default include and library paths from compiler
+ #
+ gcc {
+ !equals(QMAKE_HOST.os, Windows) {
+ cmd_prefix = "LC_ALL=C"
+ cmd_suffix = "</dev/null >/dev/null"
+ } else {
+ cmd_prefix = "set LC_ALL=C&"
+ cmd_suffix = "<NUL >NUL"
+ }
+ output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$QMAKE_CXXFLAGS) -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
+ add_includes = false
+ for (line, output) {
+ line ~= s/^ *// # remove leading spaces
+ contains(line, "LIBRARY_PATH=.*") {
+ line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH=
+ paths = $$split(line, $$QMAKE_DIRLIST_SEP)
+ for (path, paths): \
+ QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path)
+ } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here:
+ add_includes = true
+ } else: contains(line, "End of search.*") {
+ add_includes = false
+ } else: $$add_includes {
+ !contains(line, ".* \\(framework directory\\)"): \
+ QMAKE_DEFAULT_INCDIRS += $$clean_path($$line)
+ }
+ }
+ QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
+ } else: msvc {
+ LIB = $$getenv("LIB")
+ QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP)
+ INCLUDE = $$getenv("INCLUDE")
+ QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP)
+ }
+
+ unix {
+ isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include
+ isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
+ }
+
+ !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
+ !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
+}
diff --git a/mkspecs/features/uikit/default_post.prf b/mkspecs/features/uikit/default_post.prf
index 49b2c3a2ee..0a2e4122f5 100644
--- a/mkspecs/features/uikit/default_post.prf
+++ b/mkspecs/features/uikit/default_post.prf
@@ -52,3 +52,11 @@ macx-xcode {
}
}
}
+
+!xcodebuild:equals(TEMPLATE, app):!isEmpty(QMAKE_INFO_PLIST) {
+ # Only link in photo library support if Info.plist contains
+ # NSPhotoLibraryUsageDescription. Otherwise it will be rejected from AppStore.
+ plist_path = $$absolute_path($$QMAKE_INFO_PLIST, $$_PRO_FILE_PWD_)
+ system("/usr/libexec/PlistBuddy -c 'Print NSPhotoLibraryUsageDescription' $$system_quote($$plist_path) &>/dev/null"): \
+ QTPLUGIN += qiosnsphotolibrarysupport
+}
diff --git a/mkspecs/features/uikit/default_pre.prf b/mkspecs/features/uikit/default_pre.prf
index 908828be18..00e29a5c8b 100644
--- a/mkspecs/features/uikit/default_pre.prf
+++ b/mkspecs/features/uikit/default_pre.prf
@@ -1,22 +1,25 @@
+sim_and_dev = false
+!isEmpty(QT_VERSION):qtConfig(simulator_and_device): \
+ sim_and_dev = true
-load(default_pre)
-
-!isEmpty(QT_VERSION) {
- qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \
- CONFIG += device $${device.sdk}
- qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
- CONFIG += simulator $${simulator.sdk}
+$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \
+ CONFIG += device $${device.sdk}
+$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
+ CONFIG += simulator $${simulator.sdk}
- qtConfig(simulator_and_device) {
- # For a simulator_and_device build all the config tests
- # are based on the device's ARM SDK, but we know that the simulator
- # is Intel and that we support SSE/SSE2.
- QT_CPU_FEATURES.$$QT_ARCH += sse sse2
- CONFIG += sse sse2
- DEFINES += QT_COMPILER_SUPPORTS_SSE2
- }
+$$sim_and_dev {
+ # For a simulator_and_device build all the config tests
+ # are based on the device's ARM SDK, but we know that the simulator
+ # is Intel and that we support SSE/SSE2.
+ QT_CPU_FEATURES.$$QT_ARCH += sse sse2
+ CONFIG += sse sse2
+ DEFINES += QT_COMPILER_SUPPORTS_SSE2
}
+unset(sim_and_dev)
+
+load(default_pre)
+
# Check for supported Xcode versions
lessThan(QMAKE_XCODE_VERSION, "4.3"): \
error("This mkspec requires Xcode 4.3 or later")
diff --git a/mkspecs/features/uikit/resolve_config.prf b/mkspecs/features/uikit/resolve_config.prf
index 868813dcbd..e3c9ae23a9 100644
--- a/mkspecs/features/uikit/resolve_config.prf
+++ b/mkspecs/features/uikit/resolve_config.prf
@@ -11,7 +11,7 @@ load(resolve_config)
!macx-xcode:xcodebuild {
# Switch the order to make sure that the first Makefile target is the right one
!qtConfig(simulator_and_device):contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
- addExclusiveBuilds(simulator, device)
+ addExclusiveBuildsProper(simulator_and_device, simulator device)
else: \
- addExclusiveBuilds(device, simulator)
+ addExclusiveBuildsProper(simulator_and_device, device simulator)
}
diff --git a/mkspecs/features/uikit/sdk.prf b/mkspecs/features/uikit/sdk.prf
index 0ab553f587..0bfc26211a 100644
--- a/mkspecs/features/uikit/sdk.prf
+++ b/mkspecs/features/uikit/sdk.prf
@@ -1,15 +1,3 @@
-
-# In case the user sets the SDK manually
-contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*) {
- !isEmpty(QT_VERSION):qtConfig(simulator_and_device): \
- error("Simulator is handled automatically for simulator_and_device")
-
- CONFIG += simulator $${simulator.sdk}
-}
-
-build_pass:!simulator_and_device:simulator: \
- QMAKE_MAC_SDK ~= s,^$${device.sdk},$${simulator.sdk},
-
load(sdk)
macx-xcode {
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index c1979c4bec..1cfe4c9979 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -1813,6 +1813,12 @@
which qmake will replace with the actual executable name. Other variables
include @ICON@, @TYPEINFO@, @LIBRARY@, and @SHORT_VERSION@.
+ If building for iOS, and the \c{.plist} file contains the key
+ \c NSPhotoLibraryUsageDescription, qmake will include an additional plugin
+ to the build that adds photo access support (to, e.g.,
+ \l{QFileDialog::setDirectory()}{QFile/QFileDialog}). See Info.plist
+ documentation from Apple for more information regarding this key.
+
\note Most of the time, the default \c{Info.plist} is good enough.
\section1 QMAKE_LFLAGS
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index 67c8219d4b..3140b045a1 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -46,6 +46,7 @@
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <limits.h>
#if defined(_MSC_VER) && _MSC_VER >= 1400
#include <share.h>
#endif
@@ -986,9 +987,11 @@ bool QMakeSourceFileInfo::findMocs(SourceFile *file)
continue;
int matchlen = 0, extralines = 0;
+ size_t needle_len = strlen(interesting[interest]);
+ Q_ASSERT(needle_len <= INT_MAX);
if (matchWhileUnsplitting(buffer, buffer_len, y,
interesting[interest],
- strlen(interesting[interest]),
+ static_cast<int>(needle_len),
&matchlen, &extralines)
&& y + matchlen < buffer_len
&& !isCWordChar(buffer[y + matchlen])) {
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 029092fdaa..1739f66453 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -374,14 +374,21 @@ void NmakeMakefileGenerator::init()
project->values("QMAKE_DISTCLEAN").append(tgt + ".lib");
}
if (project->isActiveConfig("debug_info")) {
- // Add the compiler's PDB file.
- QString pdbfile = var("OBJECTS_DIR") + project->first("TARGET") + ".vc.pdb";
+ QString pdbfile;
+ QString distPdbFile = tgt + ".pdb";
+ if (project->isActiveConfig("staticlib")) {
+ // For static libraries, the compiler's pdb file and the dist pdb file are the same.
+ pdbfile = distPdbFile;
+ } else {
+ // Use $${TARGET}.vc.pdb in the OBJECTS_DIR for the compiler and
+ // $${TARGET}.pdb (the default) for the linker.
+ pdbfile = var("OBJECTS_DIR") + project->first("TARGET") + ".vc.pdb";
+ }
QString escapedPdbFile = escapeFilePath(pdbfile);
project->values("QMAKE_CFLAGS").append("/Fd" + escapedPdbFile);
project->values("QMAKE_CXXFLAGS").append("/Fd" + escapedPdbFile);
project->values("QMAKE_CLEAN").append(pdbfile);
- // Add the linker's PDB file to the distclean target.
- project->values("QMAKE_DISTCLEAN").append(tgt + ".pdb");
+ project->values("QMAKE_DISTCLEAN").append(distPdbFile);
}
if (project->isActiveConfig("debug")) {
project->values("QMAKE_CLEAN").append(tgt + ".ilk");
diff --git a/src/3rdparty/freetype/freetype.pro b/src/3rdparty/freetype/freetype.pro
index 6d630d4190..5b1eb92e32 100644
--- a/src/3rdparty/freetype/freetype.pro
+++ b/src/3rdparty/freetype/freetype.pro
@@ -6,6 +6,8 @@ CONFIG += \
exceptions_off rtti_off warn_off \
installed
+MODULE_INCLUDEPATH += $$PWD/include
+
load(qt_helper_lib)
SOURCES += \
@@ -61,16 +63,12 @@ win32 {
INCLUDEPATH += $$PWD/builds/unix
}
-INCLUDEPATH += $$PWD/include
-
DEFINES += FT2_BUILD_LIBRARY
DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
include(../zlib_dependency.pri)
-QT_FOR_CONFIG += gui-private
-include($$OUT_PWD/../../gui/qtgui-config.pri)
DEFINES += FT_CONFIG_OPTION_USE_PNG
-include($$PWD/../png_dependency.pri)
+QMAKE_USE_PRIVATE += libpng
DEFINES += TT_CONFIG_OPTION_SUBPIXEL_HINTING
diff --git a/src/3rdparty/freetype_dependency.pri b/src/3rdparty/freetype_dependency.pri
deleted file mode 100644
index cf86b66efd..0000000000
--- a/src/3rdparty/freetype_dependency.pri
+++ /dev/null
@@ -1,6 +0,0 @@
-qtConfig(system-freetype) {
- QMAKE_USE_PRIVATE += freetype/nolink
-} else: qtConfig(freetype) {
- INCLUDEPATH += $$PWD/freetype/include
- LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtfreetype$$qtPlatformTargetSuffix()
-}
diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
index 5ec86bf78f..d135b8a9fd 100644
--- a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
+++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
@@ -1,10 +1,12 @@
-TARGET = qtharfbuzzng
+TARGET = qtharfbuzz
CONFIG += \
static \
hide_symbols \
exceptions_off rtti_off warn_off
+MODULE_INCLUDEPATH += $$PWD/include
+
load(qt_helper_lib)
# built-in shapers list configuration:
@@ -24,8 +26,6 @@ win32: DEFINES += HB_NO_WIN1256
#Workaround https://code.google.com/p/android/issues/detail?id=194631
android: DEFINES += _POSIX_C_SOURCE=200112L
-INCLUDEPATH += $$PWD/include
-
# Harfbuzz-NG inside Qt uses the Qt atomics (inline code only)
INCLUDEPATH += $$QT.core.includes
DEFINES += QT_NO_VERSION_TAGGING
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
index 30dde281e8..82977db5e7 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
@@ -156,12 +156,14 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast)
// ### wrong in rtl context!
case HB_Combining_BelowLeft:
p.y += offset;
+ // fall through
case HB_Combining_BelowLeftAttached:
p.x += attachmentRect.x - markMetrics.x;
p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y;
break;
case HB_Combining_Below:
p.y += offset;
+ // fall through
case HB_Combining_BelowAttached:
p.x += attachmentRect.x - markMetrics.x;
p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y;
@@ -170,28 +172,33 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast)
break;
case HB_Combining_BelowRight:
p.y += offset;
+ // fall through
case HB_Combining_BelowRightAttached:
p.x += attachmentRect.x + attachmentRect.width - markMetrics.width - markMetrics.x;
p.y += attachmentRect.y + attachmentRect.height - markMetrics.y;
break;
case HB_Combining_Left:
p.x -= offset;
+ // fall through
case HB_Combining_LeftAttached:
break;
case HB_Combining_Right:
p.x += offset;
+ // fall through
case HB_Combining_RightAttached:
break;
case HB_Combining_DoubleAbove:
// ### wrong in RTL context!
case HB_Combining_AboveLeft:
p.y -= offset;
+ // fall through
case HB_Combining_AboveLeftAttached:
p.x += attachmentRect.x - markMetrics.x;
p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
break;
case HB_Combining_Above:
p.y -= offset;
+ // fall through
case HB_Combining_AboveAttached:
p.x += attachmentRect.x - markMetrics.x;
p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
@@ -200,6 +207,7 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast)
break;
case HB_Combining_AboveRight:
p.y -= offset;
+ // fall through
case HB_Combining_AboveRightAttached:
p.x += attachmentRect.x + attachmentRect.width - markMetrics.x - markMetrics.width;
p.y += attachmentRect.y - markMetrics.y - markMetrics.height;
diff --git a/src/3rdparty/harfbuzz_dependency.pri b/src/3rdparty/harfbuzz_dependency.pri
deleted file mode 100644
index 5946f403c5..0000000000
--- a/src/3rdparty/harfbuzz_dependency.pri
+++ /dev/null
@@ -1,6 +0,0 @@
-qtConfig(system-harfbuzz) {
- QMAKE_USE_PRIVATE += harfbuzz
-} else: qtConfig(harfbuzz) {
- INCLUDEPATH += $$PWD/harfbuzz-ng/include
- LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtharfbuzzng$$qtPlatformTargetSuffix()
-}
diff --git a/src/3rdparty/libpng/libpng.pro b/src/3rdparty/libpng/libpng.pro
index ab6dd51e2b..577b61d833 100644
--- a/src/3rdparty/libpng/libpng.pro
+++ b/src/3rdparty/libpng/libpng.pro
@@ -1,4 +1,4 @@
-TARGET = qtpng
+TARGET = qtlibpng
CONFIG += \
static \
@@ -6,6 +6,8 @@ CONFIG += \
exceptions_off rtti_off warn_off \
installed
+MODULE_INCLUDEPATH = $$PWD
+
load(qt_helper_lib)
DEFINES += PNG_ARM_NEON_OPT=0
diff --git a/src/3rdparty/pcre/pcre.pro b/src/3rdparty/pcre/pcre.pro
index fad82b80b1..add4a932b3 100644
--- a/src/3rdparty/pcre/pcre.pro
+++ b/src/3rdparty/pcre/pcre.pro
@@ -5,12 +5,14 @@ CONFIG += \
hide_symbols \
exceptions_off rtti_off warn_off
+win32: MODULE_DEFINES += PCRE_STATIC
+MODULE_INCLUDEPATH += $$PWD
+
load(qt_helper_lib)
DEFINES += HAVE_CONFIG_H
# platform/compiler specific definitions
-win32: DEFINES += PCRE_STATIC
uikit|qnx|winrt: DEFINES += PCRE_DISABLE_JIT
SOURCES += \
diff --git a/src/3rdparty/pcre_dependency.pri b/src/3rdparty/pcre_dependency.pri
deleted file mode 100644
index f1355eabe6..0000000000
--- a/src/3rdparty/pcre_dependency.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-qtConfig(system-pcre) {
- QMAKE_USE_PRIVATE += pcre
-} else {
- win32: DEFINES += PCRE_STATIC
- INCLUDEPATH += $$PWD/pcre
- LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpcre$$qtPlatformTargetSuffix()
-}
diff --git a/src/3rdparty/png_dependency.pri b/src/3rdparty/png_dependency.pri
deleted file mode 100644
index 50711358a0..0000000000
--- a/src/3rdparty/png_dependency.pri
+++ /dev/null
@@ -1,6 +0,0 @@
-qtConfig(system-png) {
- QMAKE_USE_PRIVATE += libpng
-} else: qtConfig(png) {
- INCLUDEPATH += $$PWD/libpng
- LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpng$$qtPlatformTargetSuffix()
-}
diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java
index 2494035c60..ce0ce3abc7 100644
--- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java
+++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java
@@ -66,7 +66,7 @@ public class QtActivityLoader extends QtLoader {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
- Uri uri = Uri.parse("market://search?q=pname:org.kde.necessitas.ministro");
+ Uri uri = Uri.parse("market://details?id=org.kde.necessitas.ministro");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
m_activity.startActivityForResult(intent, MINISTRO_INSTALL_REQUEST_CODE);
} catch (Exception e) {
diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
index d281cb0996..aeac2448bb 100644
--- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
+++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
@@ -73,7 +73,7 @@ public abstract class QtLoader {
public final static int MINISTRO_INSTALL_REQUEST_CODE = 0xf3ee; // request code used to know when Ministro instalation is finished
public static final int MINISTRO_API_LEVEL = 5; // Ministro api level (check IMinistro.aidl file)
public static final int NECESSITAS_API_LEVEL = 2; // Necessitas api level used by platform plugin
- public static final int QT_VERSION = 0x050100; // This app requires at least Qt version 5.1.0
+ public static final int QT_VERSION = 0x050700; // This app requires at least Qt version 5.7.0
public static final String ERROR_CODE_KEY = "error.code";
public static final String ERROR_MESSAGE_KEY = "error.message";
diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
index 53772fe55a..d09c7658d4 100644
--- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
+++ b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
@@ -113,9 +113,9 @@ QSet<QString> dictionary = QtConcurrent::blockingFilteredReduced(strings, allLow
//! [7]
// keep only images with an alpha channel
QList<QImage> images = ...;
-QFuture<void> alphaImages = QtConcurrent::filter(strings, &QImage::hasAlphaChannel);
+QFuture<void> alphaImages = QtConcurrent::filter(images, &QImage::hasAlphaChannel);
-// keep only gray scale images
+// retrieve gray scale images
QList<QImage> images = ...;
QFuture<QImage> grayscaleImages = QtConcurrent::filtered(images, &QImage::isGrayscale);
diff --git a/src/corelib/codecs/QBKCODEC_LICENSE.txt b/src/corelib/codecs/QBKCODEC_LICENSE.txt
new file mode 100644
index 0000000000..1eb9e3b0d4
--- /dev/null
+++ b/src/corelib/codecs/QBKCODEC_LICENSE.txt
@@ -0,0 +1,24 @@
+Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen.
+Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su.
+Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt
new file mode 100644
index 0000000000..b1754cf198
--- /dev/null
+++ b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (C) 1999 Serika Kurusugawa, All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt
new file mode 100644
index 0000000000..81327f1bcb
--- /dev/null
+++ b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/QJISCODEC_LICENSE.txt b/src/corelib/codecs/QJISCODEC_LICENSE.txt
new file mode 100644
index 0000000000..b1754cf198
--- /dev/null
+++ b/src/corelib/codecs/QJISCODEC_LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (C) 1999 Serika Kurusugawa, All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/QSJISCODEC_LICENSE.txt b/src/corelib/codecs/QSJISCODEC_LICENSE.txt
new file mode 100644
index 0000000000..b1754cf198
--- /dev/null
+++ b/src/corelib/codecs/QSJISCODEC_LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (C) 1999 Serika Kurusugawa, All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/QTSCIICODEC_LICENSE.txt b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt
new file mode 100644
index 0000000000..c66ff21389
--- /dev/null
+++ b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (C) 2000 Hans Petter Bieker. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/codecs/codecs.qdoc b/src/corelib/codecs/codecs.qdoc
index e0f1c9b060..9364b7a989 100644
--- a/src/corelib/codecs/codecs.qdoc
+++ b/src/corelib/codecs/codecs.qdoc
@@ -55,35 +55,7 @@
\<anthony@thizlinux.com\> \<foka@debian.org\> to adapt the code
for Qt.
- \legalese
- Copyright (C) 2000 Ming-Che Chuang
- Copyright (C) 2002 James Su, Turbolinux Inc.
- Copyright (C) 2002 Anthony Fok, ThizLinux Laboratory Ltd.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codecs: Big5, Big5-HKSCS}
*/
/*!
@@ -124,36 +96,7 @@
Li18nux Big5 Standard Subgroup. See \l{http://www.autrijus.org/xml/}
for the various Big5 CharMapML tables.
- \legalese
- Copyright (C) 2000 Ming-Che Chuang
- Copyright (C) 2001, 2002 James Su, Turbolinux Inc.
- Copyright (C) 2002 WU Yi, HancomLinux Inc.
- Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codecs: Big5, Big5-HKSCS}
*/
/*!
@@ -171,37 +114,9 @@
Most of the code here was written by Serika Kurusugawa,
a.k.a. Junji Takagi, and is included in Qt with the author's
- permission and the grateful thanks of the Qt team. Here is
- the copyright statement for that code:
-
- \legalese
-
- Copyright (C) 1999 Serika Kurusugawa. All rights reserved.
+ permission and the grateful thanks of the Qt team.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS".
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: EUC-JP}
*/
/*!
@@ -217,34 +132,7 @@
contribution. The subsequent modifications are covered by
the usual copyright for Qt.
- \legalese
-
- Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: EUC-KR}
*/
/*!
@@ -292,37 +180,7 @@
A copy of the source Perl script is available at
\l{http://people.debian.org/~foka/gb18030/gen-qgb18030codec.pl}
- The copyright notice for their code follows:
-
- \legalese
- Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen.
- Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su.
- Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: GBK}
*/
/*!
@@ -381,37 +239,9 @@
Most of the code here was written by Serika Kurusugawa,
a.k.a. Junji Takagi, and is included in Qt with the author's
- permission and the grateful thanks of the Qt team. Here is
- the copyright statement for that code:
-
- \legalese
+ permission and the grateful thanks of the Qt team.
- Copyright (C) 1999 Serika Kurusugawa. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS".
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: ISO 2022-JP (JIS)}
*/
/*!
@@ -433,34 +263,7 @@
contribution. The subsequent modifications are covered by
the usual copyright for Qt.
- \legalese
-
- Copyright (C) 1999 Serika Kurusugawa. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS".
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: Shift-JIS}
*/
/*!
@@ -483,37 +286,7 @@
Most of the code was written by Hans Petter Bieker and is
included in Qt with the author's permission and the grateful
- thanks of the Qt team. Here is the copyright statement for
- the code as it was at the point of contribution. The
- subsequent modifications are covered by the usual copyright for
- Qt:
-
- \legalese
-
- Copyright (c) 2000 Hans Petter Bieker. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- \list 1
- \li Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- \li Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- \endlist
+ thanks of the Qt team.
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- \endlegalese
+ \sa{Text Codec: TSCII}
*/
diff --git a/src/corelib/codecs/qt_attribution.json b/src/corelib/codecs/qt_attribution.json
new file mode 100644
index 0000000000..41f644a030
--- /dev/null
+++ b/src/corelib/codecs/qt_attribution.json
@@ -0,0 +1,103 @@
+[
+ {
+ "Id": "qbig5codecs",
+ "Name": "Text Codecs: Big5, Big5-HKSCS",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qbig5codec.cpp",
+
+ "Description": "The Big5 codecs (QBig5Codec, QBig5hkscsCodec)
+provide conversion to and from the Big5 encodings.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QBIG5CODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 2000 Ming-Che Chuang
+Copyright (C) 2001, 2002 James Su, Turbolinux Inc.
+Copyright (C) 2002 WU Yi, HancomLinux Inc.
+Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd."
+},
+ {
+ "Id": "qeucjpcodec",
+ "Name": "Text Codec: EUC-JP",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qeucjpcodec.cpp",
+
+ "Description": "The EUC-JP text codec provides conversion to and from EUC-JP,
+the main legacy encoding for Unix machines in Japan.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QEUCJPCODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 1999 Serika Kurusugawa."
+ },
+ {
+ "Id": "qeuckrcodec",
+ "Name": "Text Codec: EUC-KR",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qeuckrcodec.cpp",
+
+ "Description": "The EUC-KR text codec provides conversion to and from EUC-KR, KR,
+the main legacy encoding for Unix machines in Korea.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QEUCKRCODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 1999-2000 Mizi Research Inc."
+ },
+ {
+ "Id": "qjiscodec",
+ "Name": "Text Codec: ISO 2022-JP (JIS)",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qjiscodec.cpp",
+
+ "Description": "The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QJISCODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 1999 Serika Kurusugawa."
+ },
+ {
+ "Id": "qsjiscodec",
+ "Name": "Text Codec: Shift-JIS",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qsjiscodec.cpp",
+
+ "Description": "The Shift-JIS text codec provides conversion to and from Shift-JIS.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QSJISCODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 1999 Serika Kurusugawa."
+ },
+ {
+ "Id": "qtsciicodec",
+ "Name": "Text Codec: TSCII",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core.",
+ "Path": "qtsciicodec.cpp",
+
+ "Description": "The TSCII text codec provides conversion to and from the Tamil TSCII
+encoding.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QTSCIICODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 2000 Hans Petter Bieker."
+ },
+ {
+ "Id": "qbkcodec",
+ "Name": "Text Codec: GBK",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
+ "Path": "qgb18030codec.cpp",
+
+ "Description": "The GBK codec provides conversion to and from the Chinese
+GB18030/GBK/GB2312 encoding.",
+ "License": "BSD 2-clause \"Simplified\" License",
+ "LicenseId": "BSD-2-Clause",
+ "LicenseFile": "QBKCODEC_LICENSE.txt",
+ "Copyright": "Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen.
+Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su.
+Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok."
+ }
+]
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index c1bd37fd0c..e7eb5fe482 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -61,7 +61,6 @@
"journald": {
"label": "journald",
"test": "unix/journald",
- "export": "",
"sources": [
{ "type": "pkgConfig", "args": "libsystemd" },
{ "type": "pkgConfig", "args": "libsystemd-journal" }
@@ -579,7 +578,10 @@
},
"topleveldomain": {
"label": "QUrl::topLevelDomain()",
- "description": "Provides support for extracting the top level domain from URLs.",
+ "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": "Utilities",
"output": [ "publicFeature" ]
}
diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc
index 0b98397a68..a1c32bb007 100644
--- a/src/corelib/doc/src/containers.qdoc
+++ b/src/corelib/doc/src/containers.qdoc
@@ -158,11 +158,8 @@
\endtable
Containers can be nested. For example, it is perfectly possible
- to use a QMap<QString, QList<int> >, where the key type is
- QString and the value type QList<int>. The only pitfall is that
- you must insert a space between the closing angle brackets (>);
- otherwise the C++ compiler will misinterpret the two >'s as a
- right-shift operator (>>) and report a syntax error.
+ to use a QMap<QString, QList<int>>, where the key type is
+ QString and the value type QList<int>.
The containers are defined in individual header files with the
same name as the container (e.g., \c <QLinkedList>). For
diff --git a/src/corelib/doc/src/eventsandfilters.qdoc b/src/corelib/doc/src/eventsandfilters.qdoc
index 4e914d17cc..947a24f4e5 100644
--- a/src/corelib/doc/src/eventsandfilters.qdoc
+++ b/src/corelib/doc/src/eventsandfilters.qdoc
@@ -80,7 +80,7 @@
\section1 Event Types
- Most events types have special classes, notably QResizeEvent,
+ Most event types have special classes, notably QResizeEvent,
QPaintEvent, QMouseEvent, QKeyEvent, and QCloseEvent. Each class
subclasses QEvent and adds event-specific functions. For example,
QResizeEvent adds \l{QResizeEvent::}{size()} and
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index afcd20a9c1..bd2e125006 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -59,11 +59,7 @@ slog2 {
}
journald {
- CONFIG += link_pkgconfig
- packagesExist(libsystemd): \
- PKGCONFIG_PRIVATE += libsystemd
- else: \
- PKGCONFIG_PRIVATE += libsystemd-journal
+ QMAKE_USE_PRIVATE += journald
DEFINES += QT_USE_JOURNALD
}
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index d42a7a0ea6..cbefe92eca 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -4192,8 +4192,10 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
Compares the floating point value \a p1 and \a p2 and
returns \c true if they are considered equal, otherwise \c false.
- Note that comparing values where either \a p1 or \a p2 is 0.0 will not work.
- The solution to this is to compare against values greater than or equal to 1.0.
+ Note that comparing values where either \a p1 or \a p2 is 0.0 will not work,
+ nor does comparing values where one of the values is NaN or infinity.
+ If one of the values is always 0.0, use qFuzzyIsNull instead. If one of the
+ values is likely to be 0.0, one solution is to add 1.0 to both values.
\snippet code/src_corelib_global_qglobal.cpp 46
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 8b67f0d3ef..1bcd30e0b3 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -593,9 +593,9 @@ Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max
# define QT_WATCHOS_DEPLOYMENT_TARGET_BELOW(watchos) \
QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, __IPHONE_NA, __TVOS_NA, watchos)
+// Compatibility synonyms, do not use
# define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios)
# define QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, ios) QT_MACOS_IOS_DEPLOYMENT_TARGET_BELOW(osx, ios)
-
# define QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(osx) QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx)
# define QT_OSX_DEPLOYMENT_TARGET_BELOW(osx) QT_MACOS_DEPLOYMENT_TARGET_BELOW(osx)
diff --git a/src/corelib/global/qglobal_p.h b/src/corelib/global/qglobal_p.h
index c329357f46..b8f9e5fbf7 100644
--- a/src/corelib/global/qglobal_p.h
+++ b/src/corelib/global/qglobal_p.h
@@ -53,10 +53,5 @@
#include <QtCore/private/qtcore-config_p.h>
#endif
-#define QT_LIBRARY_VERSION(lib) QT_LIBRARY_VERSION_##lib
-#define QT_LIBRARY_VERSION_MAJOR(lib) (QT_LIBRARY_VERSION_##lib >> 16)
-#define QT_LIBRARY_VERSION_MINOR(lib) ((QT_LIBRARY_VERSION_##lib >> 8) & 0xff)
-#define QT_LIBRARY_VERSION_PATCH(lib) (QT_LIBRARY_VERSION_##lib & 0xff)
-
#endif // QGLOBAL_P_H
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 5a66319164..e2b0d30db0 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -1197,7 +1197,8 @@ public:
SystemLocaleLongDate,
DefaultLocaleShortDate,
DefaultLocaleLongDate,
- RFC2822Date // RFC 2822 (+ 850 and 1036 during parsing)
+ RFC2822Date, // RFC 2822 (+ 850 and 1036 during parsing)
+ ISODateWithMs
};
enum TimeSpec {
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 7768070e4f..250195a512 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -658,6 +658,8 @@
\c{YYYY-MM-DDTHH:mm:ss}, \c{YYYY-MM-DDTHH:mm:ssTZD} (e.g., 1997-07-16T19:20:30+01:00)
for combined dates and times.
+ \value ISODateWithMs \l{ISO 8601} extended format, including milliseconds if applicable.
+
\value SystemLocaleShortDate The \l{QLocale::ShortFormat}{short format} used
by the \l{QLocale::system()}{operating system}.
diff --git a/src/corelib/global/qversiontagging.h b/src/corelib/global/qversiontagging.h
index 1e276dc3e0..3ed02c7376 100644
--- a/src/corelib/global/qversiontagging.h
+++ b/src/corelib/global/qversiontagging.h
@@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE
* There will only be one copy of the section in the output library or application.
*/
-#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING)
+#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING) || defined(QT_STATIC)
// don't make tags in QtCore, bootstrapped systems or if the user asked not to
#elif defined(Q_CC_GNU) && !defined(Q_OS_ANDROID)
# if defined(Q_PROCESSOR_X86) && (defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD_KERNEL))
diff --git a/src/corelib/io/QTEMPORARYFILE_LICENSE.txt b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt
new file mode 100644
index 0000000000..f5f1a2e05e
--- /dev/null
+++ b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt
@@ -0,0 +1,26 @@
+Copyright (c) 1987, 1993
+ The Regents of the University of California. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp
index baf8cbd193..5acee25d02 100644
--- a/src/corelib/io/qfileinfo.cpp
+++ b/src/corelib/io/qfileinfo.cpp
@@ -293,8 +293,7 @@ QDateTime &QFileInfoPrivate::getFileTime(QAbstractFileEngine::FileTime request)
\note To speed up performance, QFileInfo caches information about
the file.
- To speed up performance, QFileInfo caches information about the
- file. Because files can be changed by other users or programs, or
+ Because files can be changed by other users or programs, or
even by other parts of the same program, there is a function that
refreshes the file information: refresh(). If you want to switch
off a QFileInfo's caching and force it to access the file system
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index c9f7672ac3..5de85f9811 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -283,7 +283,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
if (ret) {
data.knownFlagsMask |= QFileSystemMetaData::ExistsAttribute;
data.entryFlags |= QFileSystemMetaData::ExistsAttribute;
- QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret));
+ QString canonicalPath = QDir::cleanPath(QFile::decodeName(ret));
free(ret);
return QFileSystemEntry(canonicalPath);
} else if (errno == ENOENT) { // file doesn't exist
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm
index a5558b62e7..b4517cbac7 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents.mm
+++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm
@@ -343,7 +343,7 @@ QStringList QFseventsFileSystemWatcherEngine::addPaths(const QStringList &paths,
QStringList p = paths;
QMutableListIterator<QString> it(p);
while (it.hasNext()) {
- QString origPath = it.next();
+ QString origPath = it.next().normalized(QString::NormalizationForm_C);
QString realPath = origPath;
if (realPath.endsWith(QDir::separator()))
realPath = realPath.mid(0, realPath.size() - 1);
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 5c79a745fa..117c224318 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -382,11 +382,11 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len)
// Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when
// the chunks are too large, so we limit the block size to 32MB.
- const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024)));
qint64 totalWritten = 0;
do {
+ const DWORD currentBlockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024)));
DWORD bytesWritten;
- if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) {
+ if (!WriteFile(fileHandle, data + totalWritten, currentBlockSize, &bytesWritten, NULL)) {
if (totalWritten == 0) {
// Note: Only return error if the first WriteFile failed.
q->setError(QFile::WriteError, qt_error_string());
diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp
index a31dfc5366..dcaefd1613 100644
--- a/src/corelib/io/qsettings_mac.cpp
+++ b/src/corelib/io/qsettings_mac.cpp
@@ -274,7 +274,6 @@ static QVariant qtValue(CFPropertyListRef cfvalue)
const QString str = QString::fromUtf8(byteArray.constData(), byteArray.size());
return QSettingsPrivate::stringToVariant(str);
-
} else if (typeId == CFDictionaryGetTypeID()) {
CFDictionaryRef cfdict = static_cast<CFDictionaryRef>(cfvalue);
CFTypeID arrayTypeId = CFArrayGetTypeID();
diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp
index 0561e5833f..7974dc8cca 100644
--- a/src/corelib/io/qstandardpaths_unix.cpp
+++ b/src/corelib/io/qstandardpaths_unix.cpp
@@ -245,7 +245,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
break;
case FontsLocation:
- path = QDir::homePath() + QLatin1String("/.fonts");
+ path = writableLocation(GenericDataLocation) + QLatin1String("/fonts");
break;
case MusicLocation:
@@ -340,6 +340,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
for (int i = 0; i < dirs.count(); ++i)
appendOrganizationAndApp(dirs[i]);
break;
+ case FontsLocation:
+ dirs += QDir::homePath() + QLatin1String("/.fonts");
+ break;
default:
break;
}
diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json
new file mode 100644
index 0000000000..2a616a2819
--- /dev/null
+++ b/src/corelib/io/qt_attribution.json
@@ -0,0 +1,13 @@
+{
+ "Id": "qtemporaryfile",
+ "Name": "Parts of QTemporaryFile",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core. Disable the qtemporaryfile feature to avoid.",
+ "Path": "qtemporaryfile.cpp",
+
+ "Description": "Generates a unique file path and returns a native handle to the open file.",
+ "License": "BSD 3-clause \"New\" or \"Revised\" License",
+ "LicenseId": "BSD-3-Clause",
+ "LicenseFile": "QTEMPORARYFILE_LICENSE.txt",
+ "Copyright": "Copyright (c) 1987, 1993 The Regents of the University of California."
+}
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index c165aef5a2..b7762c2ae6 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -155,7 +155,7 @@
dealing with URLs and strings:
\list
- \li When creating an QString to contain a URL from a QByteArray or a
+ \li When creating a QString to contain a URL from a QByteArray or a
char*, always use QString::fromUtf8().
\endlist
*/
@@ -4128,35 +4128,6 @@ static bool isIp6(const QString &text)
return !text.isEmpty() && QIPAddressUtils::parseIp6(address, text.begin(), text.end()) == 0;
}
-// The following code has the following copyright:
-/*
- Copyright (C) Research In Motion Limited 2009. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Research In Motion Limited nor the
- contributors may be used to endorse or promote products derived
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY Research In Motion Limited ''AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL Research In Motion Limited BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-
/*!
Returns a valid URL from a user supplied \a userInput string if one can be
deducted. In the case that is not possible, an invalid QUrl() is returned.
@@ -4275,6 +4246,5 @@ QUrl QUrl::fromUserInput(const QString &userInput)
return QUrl();
}
-// end of BSD code
QT_END_NAMESPACE
diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h
index 2bd5c68c7b..87e9382339 100644
--- a/src/corelib/io/qurltlds_p.h
+++ b/src/corelib/io/qurltlds_p.h
@@ -60,11678 +60,13225 @@ QT_BEGIN_NAMESPACE
// this file should be updated before each release ->
// for instructions see the program at
// util/corelib/qurl-generateTLDs
-static const quint16 tldCount = 7150;
+
+static const quint16 tldCount = 8101;
static const quint32 tldIndices[] = {
0,
-40,
-40,
-49,
-49,
-49,
-71,
-95,
-95,
-110,
-123,
-123,
-151,
-189,
-189,
-189,
-189,
-189,
-189,
-189,
-189,
-189,
-202,
-202,
-202,
-208,
-219,
-219,
-219,
-219,
-219,
-238,
-249,
-278,
-294,
-301,
-312,
-312,
-317,
-317,
-317,
-323,
-330,
-406,
-406,
-467,
-467,
-500,
-500,
-500,
-512,
-533,
-533,
-533,
-533,
-533,
-542,
-574,
-580,
-620,
-620,
-633,
-645,
-645,
-659,
-659,
-659,
-685,
-685,
-703,
+15,
+43,
+55,
+60,
+70,
+80,
+101,
+101,
+154,
+169,
+169,
+169,
+184,
+184,
+195,
+217,
+217,
+235,
+255,
+276,
+296,
+296,
+314,
+345,
+350,
+350,
+358,
+384,
+400,
+424,
+424,
+431,
+452,
+472,
+508,
+508,
+508,
+508,
+525,
+558,
+581,
+581,
+594,
+608,
+608,
+628,
+628,
+652,
+680,
+680,
703,
-721,
-721,
-721,
-737,
-744,
-744,
-756,
+722,
+722,
+760,
768,
-774,
-774,
-774,
-784,
-784,
-802,
-841,
-882,
-882,
-882,
-882,
-905,
-924,
-935,
-950,
-960,
-960,
-972,
-983,
-983,
-983,
-990,
-997,
-1017,
-1037,
-1045,
-1045,
-1045,
-1063,
-1069,
-1085,
-1085,
-1085,
-1085,
-1085,
-1085,
-1085,
-1136,
-1145,
-1183,
-1183,
-1225,
-1225,
-1241,
-1241,
-1259,
-1282,
-1305,
-1305,
-1358,
-1358,
-1370,
-1370,
-1383,
-1383,
-1430,
-1430,
-1430,
-1457,
-1466,
-1472,
-1472,
-1472,
-1472,
-1486,
-1518,
-1564,
-1593,
-1614,
-1661,
-1675,
-1675,
-1691,
-1719,
-1730,
-1750,
-1750,
-1755,
-1759,
-1773,
-1797,
-1823,
-1841,
-1848,
+768,
+788,
+788,
+814,
+847,
+847,
+865,
+895,
+895,
+930,
+930,
+936,
+964,
+991,
+1025,
+1042,
+1061,
+1061,
+1082,
+1098,
+1098,
+1098,
+1111,
+1135,
+1141,
+1141,
+1141,
+1160,
+1192,
+1192,
+1192,
+1192,
+1192,
+1192,
+1207,
+1207,
+1214,
+1219,
+1219,
+1219,
+1242,
+1255,
+1255,
+1255,
+1272,
+1291,
+1291,
+1291,
+1309,
+1334,
+1372,
+1376,
+1376,
+1385,
+1419,
+1419,
+1419,
+1427,
+1442,
+1442,
+1450,
+1450,
+1469,
+1508,
+1533,
+1533,
+1574,
+1582,
+1582,
+1592,
+1625,
+1643,
+1643,
+1653,
+1653,
+1664,
+1664,
+1687,
+1687,
+1731,
+1742,
+1760,
+1760,
+1760,
+1775,
+1788,
+1815,
+1815,
+1815,
+1815,
+1827,
+1842,
+1850,
+1850,
+1874,
+1874,
+1887,
1887,
-1894,
-1911,
-1918,
-1923,
-1929,
-1966,
-1966,
-1973,
-1973,
-1973,
-1990,
-2041,
-2059,
-2075,
-2093,
-2093,
-2093,
-2127,
-2136,
-2152,
-2159,
-2178,
-2201,
+1887,
+1917,
+1931,
+1962,
+1962,
+1962,
+2002,
+2017,
+2073,
+2073,
+2103,
+2103,
+2120,
+2160,
+2168,
+2168,
+2176,
+2193,
+2199,
+2199,
+2205,
2212,
-2219,
-2219,
-2219,
-2233,
-2240,
-2247,
-2247,
-2273,
-2298,
+2212,
+2226,
+2226,
+2226,
+2226,
+2261,
+2282,
2298,
-2305,
-2330,
-2377,
-2410,
-2461,
-2468,
-2511,
-2511,
-2524,
-2524,
-2530,
-2547,
-2560,
-2576,
-2583,
-2599,
-2599,
-2599,
-2599,
-2599,
-2628,
-2671,
-2692,
-2697,
-2726,
-2726,
-2756,
-2756,
-2775,
-2775,
-2787,
-2814,
-2814,
-2839,
-2853,
-2869,
-2901,
-2949,
-2949,
-2972,
-2972,
-2979,
-2997,
-3003,
-3014,
-3014,
-3014,
-3014,
-3014,
-3014,
-3043,
-3043,
-3070,
-3070,
+2316,
+2316,
+2316,
+2316,
+2316,
+2373,
+2373,
+2390,
+2390,
+2397,
+2412,
+2428,
+2435,
+2435,
+2443,
+2443,
+2451,
+2458,
+2504,
+2504,
+2510,
+2510,
+2510,
+2517,
+2544,
+2555,
+2573,
+2612,
+2627,
+2627,
+2650,
+2657,
+2664,
+2674,
+2691,
+2698,
+2706,
+2713,
+2713,
+2729,
+2743,
+2750,
+2781,
+2781,
+2796,
+2796,
+2809,
+2816,
+2836,
+2866,
+2887,
+2894,
+2943,
+2950,
+2950,
+2950,
+2950,
+2970,
+2970,
+3002,
+3002,
+3015,
+3022,
+3032,
+3059,
+3069,
+3084,
3091,
3091,
-3097,
-3108,
-3108,
-3108,
+3098,
+3098,
+3107,
3125,
-3182,
-3232,
-3283,
-3283,
-3292,
-3312,
-3319,
-3359,
-3379,
-3406,
-3433,
-3441,
-3448,
-3459,
-3466,
-3466,
-3466,
-3466,
-3466,
-3473,
-3491,
-3498,
-3524,
-3524,
-3568,
-3605,
-3605,
-3618,
-3618,
-3618,
-3632,
-3632,
-3632,
-3632,
-3645,
-3645,
-3652,
-3662,
-3662,
-3701,
-3708,
+3132,
+3140,
+3172,
+3189,
+3205,
+3218,
+3224,
+3231,
+3255,
+3261,
+3261,
+3261,
+3261,
+3279,
+3285,
+3296,
+3310,
+3317,
+3317,
+3333,
+3352,
+3362,
+3362,
+3362,
+3362,
+3404,
+3404,
+3404,
+3404,
+3404,
+3404,
+3415,
+3428,
+3428,
+3483,
+3503,
+3503,
+3530,
+3555,
+3562,
+3562,
+3578,
+3593,
+3600,
+3622,
+3629,
+3644,
+3663,
+3663,
+3685,
+3685,
+3685,
+3685,
3713,
-3729,
-3742,
-3767,
-3799,
-3799,
-3806,
-3806,
-3824,
-3824,
-3839,
-3839,
-3854,
-3876,
-3883,
-3883,
-3890,
-3896,
-3939,
-3939,
-3953,
-3953,
-3953,
-3953,
-3988,
+3730,
+3757,
+3775,
+3775,
+3775,
+3800,
+3815,
+3815,
+3815,
+3815,
+3815,
+3900,
+3900,
+3950,
+3950,
+3959,
+3959,
+3959,
+3974,
4005,
-4019,
-4039,
-4039,
-4058,
-4069,
-4094,
-4101,
-4139,
-4146,
-4174,
-4206,
-4221,
-4221,
-4237,
-4237,
-4254,
-4270,
-4277,
-4301,
-4301,
-4301,
-4301,
-4327,
-4327,
-4334,
-4341,
-4361,
-4361,
-4368,
-4391,
-4403,
-4403,
-4416,
-4416,
-4423,
-4448,
-4448,
-4448,
-4500,
-4534,
-4543,
-4543,
-4562,
-4569,
-4576,
-4613,
-4632,
-4639,
-4646,
-4670,
-4670,
-4670,
-4677,
-4695,
-4695,
-4695,
-4702,
-4720,
-4734,
-4734,
-4734,
-4734,
-4741,
-4741,
-4741,
-4748,
-4748,
-4762,
-4785,
-4792,
-4823,
-4823,
-4861,
-4886,
-4886,
-4886,
-4922,
-4922,
-4932,
-4939,
-4939,
-4939,
-4946,
-4953,
-4953,
-4977,
-4977,
-4977,
-4984,
-5009,
-5028,
-5080,
-5080,
-5080,
-5080,
-5110,
-5117,
-5132,
-5143,
-5167,
-5184,
-5184,
-5184,
-5209,
-5209,
-5230,
-5230,
-5238,
-5260,
-5289,
-5289,
-5298,
-5315,
-5315,
-5315,
+4070,
+4141,
+4141,
+4160,
+4177,
+4177,
+4207,
+4235,
+4263,
+4274,
+4280,
+4280,
+4290,
+4321,
+4338,
+4381,
+4396,
+4402,
+4446,
+4461,
+4461,
+4461,
+4485,
+4496,
+4512,
+4528,
+4580,
+4580,
+4624,
+4650,
+4650,
+4650,
+4672,
+4714,
+4714,
+4721,
+4728,
+4751,
+4769,
+4769,
+4769,
+4783,
+4783,
+4783,
+4807,
+4814,
+4821,
+4821,
+4839,
+4892,
+4908,
+4908,
+4908,
+4915,
+4952,
+4952,
+4959,
+4966,
+4973,
+4973,
+4980,
+4999,
+5032,
+5039,
+5057,
+5095,
+5112,
+5127,
+5127,
+5144,
+5151,
+5172,
+5172,
+5186,
+5200,
+5215,
+5236,
+5263,
+5294,
+5294,
+5294,
+5310,
+5310,
+5320,
+5320,
+5350,
5350,
-5356,
-5356,
-5356,
-5356,
5370,
5392,
-5413,
-5430,
-5437,
-5471,
-5502,
-5514,
-5514,
-5534,
-5552,
-5559,
-5559,
-5616,
-5651,
-5657,
-5657,
-5657,
-5674,
-5681,
-5681,
-5681,
-5702,
-5709,
-5745,
-5764,
-5776,
-5776,
-5812,
-5827,
-5849,
-5875,
-5892,
-5913,
-5913,
-5920,
-5935,
-5980,
-5987,
-6024,
-6024,
-6041,
-6058,
+5392,
+5419,
+5419,
+5419,
+5426,
+5426,
+5426,
+5433,
+5449,
+5449,
+5455,
+5468,
+5481,
+5487,
+5487,
+5521,
+5581,
+5581,
+5604,
+5604,
+5617,
+5624,
+5631,
+5631,
+5666,
+5666,
+5692,
+5705,
+5719,
+5726,
+5746,
+5761,
+5777,
+5789,
+5795,
+5802,
+5815,
+5833,
+5839,
+5846,
+5846,
+5846,
+5868,
+5868,
+5887,
+5899,
+5910,
+5927,
+5937,
+5937,
+5974,
+5996,
+6019,
+6019,
+6027,
+6027,
+6033,
+6066,
6066,
-6103,
-6103,
-6103,
-6127,
-6127,
-6137,
-6157,
-6223,
-6248,
-6297,
-6297,
-6297,
-6325,
-6332,
-6355,
-6355,
-6382,
-6408,
-6423,
-6423,
-6423,
-6440,
-6452,
-6462,
-6482,
-6482,
-6482,
-6500,
-6500,
-6518,
-6518,
-6518,
-6526,
-6535,
-6535,
-6542,
+6088,
+6095,
+6109,
+6123,
+6130,
+6130,
+6168,
+6176,
+6176,
+6176,
+6176,
+6183,
+6183,
+6190,
+6207,
+6235,
+6254,
+6254,
+6266,
+6293,
+6293,
+6308,
+6329,
+6341,
+6360,
+6367,
+6407,
+6413,
+6431,
+6460,
+6467,
+6467,
+6488,
+6510,
+6510,
+6538,
6560,
-6570,
-6585,
-6604,
-6604,
-6604,
-6604,
-6617,
-6626,
-6626,
-6626,
-6654,
-6654,
-6680,
-6695,
-6695,
-6695,
-6706,
-6706,
-6736,
-6736,
-6766,
-6766,
-6766,
-6766,
-6766,
-6775,
-6775,
-6775,
-6786,
-6825,
-6825,
-6834,
-6854,
-6854,
-6854,
-6897,
-6915,
-6915,
-6960,
-7002,
+6575,
+6589,
+6589,
+6589,
+6589,
+6606,
+6606,
+6614,
+6629,
+6629,
+6635,
+6647,
+6667,
+6696,
+6696,
+6703,
+6712,
+6712,
+6752,
+6759,
+6759,
+6791,
+6815,
+6815,
+6822,
+6859,
+6859,
+6875,
+6900,
+6906,
+6913,
+6942,
+6981,
+6996,
+6996,
+7015,
+7015,
7015,
-7077,
-7155,
-7207,
-7222,
-7250,
-7284,
-7284,
-7297,
-7334,
-7357,
-7357,
-7373,
-7373,
-7373,
-7398,
-7411,
-7424,
-7458,
-7470,
-7508,
-7508,
-7531,
-7538,
-7554,
+7022,
+7044,
+7044,
+7062,
+7062,
+7062,
+7089,
+7102,
+7102,
+7150,
+7159,
+7186,
+7194,
+7204,
+7204,
+7226,
+7256,
+7264,
+7277,
+7302,
+7316,
+7316,
+7351,
+7387,
+7410,
+7410,
+7410,
+7421,
+7463,
+7463,
+7463,
+7463,
+7463,
+7499,
+7521,
+7521,
+7550,
7566,
-7580,
-7612,
-7612,
-7612,
-7619,
-7629,
-7636,
-7648,
-7682,
-7682,
-7701,
-7712,
-7712,
-7712,
-7719,
-7719,
-7746,
-7746,
-7746,
-7770,
-7770,
-7770,
-7770,
-7770,
-7795,
-7847,
-7847,
-7847,
-7868,
-7868,
-7877,
-7893,
-7910,
-7942,
-7976,
-7976,
-8015,
-8020,
-8031,
-8031,
-8040,
-8040,
-8059,
-8071,
-8092,
-8123,
-8136,
-8136,
-8136,
-8141,
-8141,
-8141,
-8148,
-8148,
-8193,
-8193,
-8210,
-8230,
-8247,
-8247,
-8264,
-8296,
-8317,
-8332,
-8332,
-8332,
-8364,
-8392,
-8403,
-8421,
-8421,
-8441,
-8441,
-8441,
-8441,
-8441,
-8460,
-8474,
-8487,
-8508,
-8508,
-8508,
-8526,
-8540,
-8540,
-8540,
-8540,
-8572,
-8596,
-8641,
-8641,
-8641,
-8686,
-8686,
-8686,
-8695,
-8695,
-8714,
-8735,
-8744,
-8775,
-8780,
+7600,
+7627,
+7627,
+7627,
+7641,
+7652,
+7665,
+7677,
+7677,
+7677,
+7693,
+7709,
+7709,
+7725,
+7725,
+7757,
+7757,
+7811,
+7817,
+7874,
+7886,
+7905,
+7905,
+7905,
+7905,
+7929,
+7929,
+7958,
+7972,
+7988,
+7988,
+7988,
+8007,
+8038,
+8078,
+8078,
+8084,
+8084,
+8111,
+8111,
+8111,
+8118,
+8118,
+8118,
+8118,
+8118,
+8118,
+8128,
+8147,
+8159,
+8166,
+8166,
+8191,
+8191,
+8229,
+8229,
+8229,
+8229,
+8229,
+8251,
+8258,
+8258,
+8258,
+8258,
+8258,
+8263,
+8263,
+8272,
+8290,
+8301,
+8301,
+8333,
+8333,
+8350,
+8357,
+8408,
+8408,
+8408,
+8425,
+8469,
+8469,
+8504,
+8545,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8552,
+8575,
+8608,
+8608,
+8608,
+8634,
+8652,
+8652,
+8673,
+8673,
+8673,
+8673,
+8688,
+8688,
+8717,
+8717,
+8762,
+8762,
+8762,
+8779,
8802,
-8802,
-8802,
-8802,
-8835,
-8842,
-8894,
-8894,
-8908,
-8908,
-8908,
-8942,
-8967,
-8967,
-9008,
-9008,
-9023,
-9035,
-9035,
-9035,
-9052,
-9079,
-9087,
-9087,
-9127,
-9139,
-9139,
-9173,
-9173,
-9199,
-9208,
-9235,
-9235,
-9249,
-9249,
-9259,
-9259,
-9267,
-9285,
-9300,
-9300,
-9322,
-9337,
-9342,
-9342,
-9348,
-9407,
-9418,
-9434,
-9434,
-9455,
-9455,
-9455,
-9469,
-9489,
-9489,
-9527,
-9527,
-9527,
-9568,
-9568,
-9568,
-9578,
-9603,
-9610,
-9610,
-9610,
-9621,
-9621,
-9625,
-9641,
-9649,
-9649,
-9649,
-9667,
-9667,
-9667,
-9680,
-9709,
-9709,
-9739,
-9739,
-9766,
-9775,
-9783,
-9790,
-9810,
-9810,
-9828,
-9828,
-9853,
-9867,
-9867,
-9867,
-9867,
-9884,
-9884,
-9900,
-9900,
-9936,
-9954,
-9954,
-9977,
-9987,
-9987,
-9994,
-9994,
-10009,
-10009,
-10009,
-10029,
-10047,
-10047,
-10062,
-10076,
-10076,
-10100,
-10106,
-10106,
-10113,
-10129,
-10143,
-10166,
-10166,
-10198,
-10208,
-10208,
-10229,
-10251,
-10251,
-10275,
-10275,
-10281,
-10314,
-10333,
-10333,
-10333,
-10357,
-10357,
-10378,
-10386,
-10398,
-10420,
-10443,
-10461,
-10480,
-10488,
-10498,
-10498,
-10498,
-10498,
-10528,
-10528,
-10534,
-10534,
-10534,
-10534,
-10534,
-10534,
-10534,
-10558,
-10579,
-10595,
-10595,
-10595,
-10595,
-10611,
-10611,
+8812,
+8844,
+8844,
+8850,
+8862,
+8887,
+8893,
+8928,
+8946,
+8978,
+9010,
+9010,
+9010,
+9010,
+9041,
+9047,
+9047,
+9047,
+9054,
+9054,
+9054,
+9054,
+9054,
+9061,
+9061,
+9098,
+9117,
+9129,
+9162,
+9179,
+9179,
+9185,
+9221,
+9221,
+9244,
+9258,
+9288,
+9295,
+9307,
+9307,
+9307,
+9314,
+9356,
+9356,
+9372,
+9372,
+9403,
+9425,
+9430,
+9430,
+9447,
+9447,
+9454,
+9496,
+9528,
+9535,
+9543,
+9570,
+9577,
+9577,
+9619,
+9619,
+9626,
+9640,
+9647,
+9672,
+9687,
+9694,
+9705,
+9770,
+9820,
+9827,
+9843,
+9861,
+9874,
+9886,
+9893,
+9916,
+9931,
+9931,
+9941,
+9968,
+10012,
+10030,
+10045,
+10045,
+10052,
+10068,
+10104,
+10104,
+10111,
+10111,
+10126,
+10136,
+10144,
+10144,
+10151,
+10157,
+10164,
+10176,
+10197,
+10197,
+10197,
+10222,
+10222,
+10222,
+10245,
+10276,
+10292,
+10298,
+10318,
+10318,
+10346,
+10353,
+10353,
+10360,
+10360,
+10371,
+10395,
+10395,
+10405,
+10413,
+10413,
+10413,
+10440,
+10440,
+10448,
+10481,
+10481,
+10481,
+10495,
+10495,
+10495,
+10509,
+10516,
+10525,
+10543,
+10550,
+10550,
+10594,
+10594,
10634,
-10659,
-10659,
-10659,
-10659,
-10659,
-10659,
-10698,
-10716,
-10741,
-10749,
-10768,
-10801,
-10813,
-10842,
-10842,
-10860,
-10860,
-10879,
-10917,
-10939,
-10958,
-10964,
-10964,
-10986,
-10994,
-11000,
-11005,
-11005,
-11005,
-11021,
-11031,
-11031,
-11031,
-11050,
-11077,
-11077,
-11091,
-11091,
-11110,
-11110,
-11120,
-11139,
-11187,
-11187,
-11187,
-11187,
+10634,
+10641,
+10641,
+10648,
+10648,
+10648,
+10660,
+10687,
+10718,
+10718,
+10746,
+10785,
+10794,
+10812,
+10820,
+10832,
+10849,
+10863,
+10863,
+10870,
+10887,
+10897,
+10897,
+10897,
+10944,
+10970,
+10970,
+10970,
+11003,
+11019,
+11074,
+11074,
+11081,
+11081,
+11111,
+11131,
+11150,
+11164,
11187,
-11219,
-11249,
-11260,
-11283,
-11299,
-11330,
-11330,
-11330,
-11330,
-11340,
-11340,
-11340,
-11340,
-11346,
-11391,
-11391,
-11397,
-11397,
-11397,
-11408,
-11408,
-11431,
-11452,
-11452,
+11207,
+11228,
+11243,
+11243,
+11243,
+11243,
+11258,
+11273,
+11279,
+11310,
+11310,
+11310,
+11322,
+11361,
+11361,
+11389,
+11417,
+11430,
+11436,
+11436,
+11436,
+11453,
+11461,
+11475,
+11482,
11489,
-11505,
-11526,
-11526,
-11526,
-11526,
-11543,
-11563,
-11580,
-11599,
-11599,
-11599,
-11599,
-11636,
-11636,
-11636,
+11528,
+11545,
+11575,
+11616,
+11632,
+11668,
+11668,
11675,
-11675,
-11675,
-11675,
-11695,
-11695,
-11695,
-11703,
-11712,
-11725,
-11734,
-11743,
-11771,
-11812,
-11838,
+11689,
+11696,
+11714,
+11714,
+11714,
+11714,
+11714,
+11714,
+11721,
+11721,
+11739,
+11739,
+11758,
+11799,
+11817,
+11824,
+11824,
+11831,
11848,
11870,
+11870,
11888,
-11903,
-11903,
-11910,
-11938,
-11938,
-11938,
-11956,
-11956,
-11986,
-11986,
-11994,
-12007,
-12017,
-12017,
-12053,
-12066,
-12066,
-12066,
-12066,
-12066,
-12066,
-12076,
-12088,
-12099,
-12099,
-12117,
-12117,
-12127,
-12146,
-12146,
-12146,
-12165,
-12165,
-12165,
+11888,
+11895,
+11902,
+11927,
+11934,
+11941,
+11971,
+12005,
+12012,
+12069,
+12087,
+12087,
+12106,
+12126,
+12126,
+12140,
+12140,
+12140,
+12147,
+12153,
12165,
-12172,
-12176,
-12176,
-12176,
-12191,
-12191,
-12201,
-12217,
-12217,
-12241,
-12241,
-12241,
-12255,
-12255,
-12269,
-12269,
-12310,
-12310,
-12333,
-12351,
-12366,
-12366,
-12377,
-12412,
-12435,
-12453,
-12453,
-12453,
-12457,
-12489,
-12489,
-12489,
-12501,
-12523,
-12523,
-12547,
-12569,
-12628,
-12628,
-12628,
-12628,
-12628,
-12638,
-12687,
-12705,
-12705,
-12715,
-12732,
-12732,
-12750,
-12750,
-12750,
-12750,
-12750,
-12750,
-12763,
-12763,
-12772,
-12772,
-12827,
-12863,
-12870,
-12880,
-12886,
-12902,
-12916,
-12944,
-12944,
+12186,
+12194,
+12199,
+12207,
+12207,
+12207,
+12213,
+12229,
+12236,
+12243,
+12243,
+12243,
+12250,
+12259,
+12270,
+12270,
+12277,
+12284,
+12284,
+12291,
+12300,
+12309,
+12345,
+12373,
+12385,
+12385,
+12404,
+12404,
+12424,
+12431,
+12475,
+12494,
+12494,
+12494,
+12494,
+12515,
+12522,
+12532,
+12540,
+12578,
+12597,
+12636,
+12636,
+12636,
+12636,
+12636,
+12651,
+12651,
+12693,
+12693,
+12711,
+12720,
+12720,
+12720,
+12720,
+12739,
+12766,
+12787,
+12794,
+12794,
+12826,
+12833,
+12862,
+12869,
+12890,
+12890,
+12910,
+12917,
+12934,
+12934,
+12949,
12956,
12956,
-12977,
-12983,
-12993,
-13011,
-13022,
-13059,
-13066,
-13066,
-13113,
-13113,
-13120,
-13120,
-13132,
-13143,
-13154,
-13154,
-13154,
-13160,
-13160,
-13164,
-13164,
-13164,
-13203,
-13222,
-13222,
-13244,
-13250,
-13267,
-13272,
-13301,
-13319,
-13319,
-13319,
-13319,
-13319,
-13338,
-13350,
-13350,
-13350,
-13355,
-13362,
-13362,
-13374,
-13396,
-13408,
-13408,
-13408,
-13433,
-13454,
-13454,
-13454,
-13511,
-13522,
-13541,
-13550,
-13550,
-13563,
-13580,
-13585,
-13585,
-13585,
-13585,
-13585,
-13598,
-13628,
-13634,
-13634,
-13654,
-13679,
-13684,
-13693,
-13723,
-13740,
-13740,
-13747,
-13791,
+12963,
+12989,
+12997,
+13021,
+13021,
+13021,
+13028,
+13028,
+13035,
+13054,
+13070,
+13077,
+13107,
+13119,
+13119,
+13126,
+13140,
+13163,
+13163,
+13216,
+13228,
+13251,
+13275,
+13329,
+13329,
+13386,
+13404,
+13410,
+13410,
+13416,
+13429,
+13445,
+13445,
+13445,
+13473,
+13480,
+13480,
+13487,
+13487,
+13500,
+13555,
+13568,
+13574,
+13607,
+13627,
+13627,
+13644,
+13658,
+13665,
+13685,
+13691,
+13691,
+13691,
+13706,
+13719,
+13726,
+13738,
+13776,
+13795,
+13795,
13805,
-13805,
-13834,
-13868,
-13893,
-13910,
-13920,
+13813,
+13813,
+13813,
+13813,
+13827,
+13827,
+13833,
+13833,
+13840,
+13892,
+13901,
13920,
-13940,
-13940,
-13960,
-13977,
-13977,
-13988,
-13988,
-13999,
-13999,
-13999,
-13999,
-14025,
-14025,
-14025,
-14044,
-14059,
-14059,
-14059,
-14096,
+13933,
+13966,
+13966,
+13966,
+13998,
+14033,
+14046,
+14060,
+14060,
+14075,
+14075,
+14075,
14112,
-14143,
-14156,
-14156,
-14169,
-14173,
-14193,
-14193,
-14193,
-14197,
-14197,
-14197,
-14222,
-14222,
-14231,
-14231,
+14129,
+14129,
+14129,
+14129,
+14129,
+14129,
+14139,
+14167,
+14167,
+14211,
+14220,
+14220,
14231,
14231,
-14251,
-14251,
-14251,
-14256,
-14260,
-14287,
-14287,
-14309,
-14309,
-14309,
-14309,
-14361,
-14361,
-14380,
-14380,
-14396,
-14440,
-14448,
-14448,
-14448,
-14461,
-14486,
-14486,
-14486,
-14500,
-14500,
-14500,
-14500,
-14500,
-14500,
-14525,
-14531,
-14538,
-14556,
-14578,
-14578,
-14601,
-14601,
-14601,
-14601,
-14615,
-14615,
-14615,
-14626,
-14626,
-14637,
-14654,
-14688,
-14688,
-14719,
-14735,
-14744,
-14749,
-14749,
-14749,
-14749,
-14749,
-14786,
-14808,
-14808,
-14822,
-14867,
-14882,
-14887,
-14899,
-14899,
+14248,
+14248,
+14266,
+14288,
+14307,
+14352,
+14397,
+14404,
+14404,
+14423,
+14455,
+14480,
+14480,
+14509,
+14509,
+14535,
+14541,
+14541,
+14541,
+14541,
+14541,
+14554,
+14554,
+14561,
+14600,
+14618,
+14618,
+14618,
+14618,
+14634,
+14649,
+14649,
+14649,
+14662,
+14662,
+14667,
+14686,
+14720,
+14753,
+14774,
+14806,
+14806,
+14826,
+14826,
+14848,
+14848,
+14848,
+14866,
+14879,
+14879,
+14879,
+14879,
+14879,
+14888,
14906,
-14916,
-14958,
-14958,
-14958,
-14968,
-15000,
-15031,
-15051,
-15056,
-15060,
-15079,
-15079,
-15096,
-15116,
-15133,
-15133,
-15133,
-15133,
-15133,
-15145,
-15145,
-15182,
-15209,
-15218,
-15218,
-15239,
-15282,
-15282,
-15282,
-15282,
-15304,
-15318,
-15338,
-15364,
-15383,
-15402,
-15426,
-15480,
-15491,
-15491,
-15491,
-15507,
-15530,
-15543,
-15543,
-15543,
-15571,
-15571,
-15571,
-15578,
-15595,
-15612,
-15621,
-15621,
-15621,
-15634,
-15662,
-15662,
-15666,
+14929,
+14949,
+14949,
+14981,
+14996,
+15019,
+15019,
+15037,
+15070,
+15092,
+15092,
+15092,
+15113,
+15128,
+15128,
+15163,
+15163,
+15187,
+15223,
+15223,
+15223,
+15241,
+15241,
+15241,
+15278,
+15299,
+15309,
+15331,
+15331,
+15331,
+15342,
+15342,
+15342,
+15352,
+15352,
+15368,
+15368,
+15374,
+15386,
+15386,
+15386,
+15386,
+15386,
+15392,
+15421,
+15434,
+15434,
+15434,
+15434,
+15472,
+15489,
+15489,
+15500,
+15500,
+15506,
+15539,
+15560,
+15560,
+15560,
+15560,
+15582,
+15587,
+15602,
+15610,
+15624,
+15650,
+15656,
+15672,
15681,
-15705,
-15705,
-15705,
15711,
15711,
-15716,
-15716,
-15716,
-15728,
-15728,
-15758,
-15782,
-15791,
-15791,
-15801,
-15823,
-15833,
-15851,
-15871,
-15871,
-15889,
-15897,
-15897,
-15914,
-15914,
-15926,
-15947,
-15968,
-15974,
-15974,
-15998,
-16015,
-16028,
-16052,
-16063,
-16063,
-16069,
-16075,
-16087,
-16087,
-16093,
-16131,
-16131,
-16142,
-16142,
-16153,
+15711,
+15711,
+15711,
+15718,
+15730,
+15752,
+15752,
+15759,
+15759,
+15772,
+15778,
+15788,
+15788,
+15798,
+15807,
+15807,
+15829,
+15829,
+15829,
+15843,
+15843,
+15843,
+15888,
+15931,
+15980,
+15993,
+16020,
+16025,
+16056,
+16074,
+16081,
+16146,
+16146,
16173,
-16205,
-16205,
-16205,
-16228,
-16251,
-16251,
-16251,
-16291,
-16291,
-16298,
-16312,
-16327,
-16327,
-16336,
-16346,
-16346,
-16366,
-16391,
-16406,
-16406,
-16406,
-16449,
-16449,
-16449,
-16473,
+16197,
+16210,
+16210,
+16210,
+16225,
+16265,
+16280,
+16290,
+16308,
+16321,
+16321,
+16321,
+16321,
+16332,
+16341,
+16353,
+16389,
+16389,
+16399,
+16427,
+16439,
+16450,
16473,
-16491,
-16501,
-16510,
-16510,
-16510,
-16510,
-16516,
-16516,
-16535,
-16535,
-16552,
-16573,
-16588,
-16588,
-16588,
-16597,
-16635,
-16700,
-16738,
-16743,
-16743,
-16754,
-16765,
-16765,
-16774,
-16783,
-16783,
-16783,
-16783,
-16812,
-16812,
-16827,
-16833,
-16833,
-16874,
-16906,
+16505,
+16505,
+16518,
+16554,
+16554,
+16554,
+16565,
+16577,
+16595,
+16614,
+16622,
+16622,
+16622,
+16654,
+16654,
+16685,
+16697,
+16697,
+16697,
+16697,
+16719,
+16719,
+16752,
+16766,
+16798,
+16798,
+16798,
+16820,
+16828,
+16847,
+16847,
+16854,
+16860,
+16870,
+16877,
+16877,
+16901,
16919,
-16928,
-16942,
-16955,
-16982,
-17004,
-17020,
-17020,
-17020,
-17020,
-17020,
-17028,
-17041,
-17053,
-17053,
-17058,
-17072,
-17072,
-17092,
-17138,
-17138,
-17155,
-17155,
-17155,
-17155,
-17168,
-17168,
-17182,
-17205,
-17214,
-17214,
-17214,
-17220,
-17238,
-17238,
-17245,
-17291,
-17313,
-17313,
-17322,
-17361,
-17398,
-17435,
-17435,
-17450,
-17450,
-17450,
-17486,
-17493,
-17493,
-17493,
-17497,
-17497,
-17497,
-17497,
-17497,
-17497,
-17497,
-17527,
-17531,
-17551,
-17551,
-17568,
-17586,
-17603,
-17603,
-17603,
-17616,
-17622,
-17622,
-17622,
-17622,
-17647,
-17677,
-17717,
-17727,
-17749,
-17781,
-17813,
-17813,
-17830,
-17879,
-17879,
-17906,
-17932,
-17932,
-17932,
-17932,
-17932,
+16952,
+16972,
+16972,
+16986,
+16986,
+17029,
+17055,
+17067,
+17080,
+17099,
+17124,
+17124,
+17124,
+17124,
+17144,
+17151,
+17158,
+17163,
+17163,
+17178,
+17195,
+17195,
+17210,
+17244,
+17244,
+17244,
+17262,
+17272,
+17290,
+17308,
+17308,
+17321,
+17321,
+17333,
+17351,
+17364,
+17364,
+17379,
+17406,
+17406,
+17424,
+17443,
+17500,
+17500,
+17507,
+17520,
+17538,
+17545,
+17560,
+17597,
+17597,
+17597,
+17597,
+17608,
+17641,
+17652,
+17673,
+17673,
+17689,
+17689,
+17707,
+17732,
+17748,
+17748,
+17790,
+17790,
+17790,
+17820,
+17820,
+17820,
+17820,
+17820,
+17836,
+17855,
+17866,
+17866,
+17866,
+17904,
17947,
-17981,
-17988,
-18011,
-18011,
-18011,
-18011,
-18011,
-18011,
-18011,
-18019,
-18026,
-18026,
-18039,
-18039,
-18039,
-18039,
-18047,
-18079,
-18079,
-18084,
-18125,
-18138,
-18138,
-18138,
-18138,
-18147,
-18147,
-18147,
-18147,
-18147,
-18147,
-18163,
-18182,
-18182,
-18193,
-18193,
-18193,
-18204,
-18204,
-18204,
-18204,
-18204,
-18204,
-18213,
-18235,
-18257,
-18283,
-18283,
-18304,
-18334,
-18352,
-18367,
-18367,
-18367,
-18387,
-18396,
-18403,
-18403,
-18413,
-18413,
-18444,
-18444,
-18468,
-18478,
-18499,
-18506,
-18517,
-18526,
-18526,
-18544,
-18563,
-18563,
-18563,
-18563,
-18579,
-18603,
-18603,
-18621,
+17958,
+17979,
+17993,
+18009,
+18021,
+18021,
+18033,
+18033,
+18043,
+18067,
+18103,
+18140,
+18150,
+18164,
+18188,
+18188,
+18196,
+18211,
+18236,
+18236,
+18255,
+18255,
+18255,
+18255,
+18255,
+18255,
+18285,
+18300,
+18300,
+18324,
+18333,
+18360,
+18388,
+18425,
+18443,
+18457,
+18466,
+18466,
+18466,
+18482,
+18482,
+18482,
+18515,
+18538,
+18538,
+18555,
+18565,
+18631,
+18631,
+18631,
+18631,
18631,
18631,
18631,
18631,
-18638,
-18638,
-18638,
-18638,
-18662,
-18703,
-18703,
-18703,
-18703,
-18715,
-18723,
-18741,
-18759,
-18798,
-18814,
-18834,
-18853,
-18853,
-18871,
-18881,
-18935,
-18935,
-18962,
-18962,
-18962,
-18962,
-18978,
-18987,
-18987,
-18987,
-19014,
-19027,
-19037,
-19060,
-19060,
-19060,
-19060,
-19109,
-19134,
-19149,
-19170,
-19170,
-19188,
-19195,
-19211,
+18644,
+18644,
+18669,
+18669,
+18686,
+18686,
+18706,
+18718,
+18751,
+18769,
+18776,
+18783,
+18783,
+18783,
+18783,
+18783,
+18783,
+18803,
+18836,
+18845,
+18845,
+18856,
+18856,
+18864,
+18864,
+18878,
+18878,
+18878,
+18878,
+18885,
+18891,
+18901,
+18926,
+18926,
+18937,
+18961,
+18981,
+18981,
+18981,
+18981,
+18988,
+19002,
+19028,
+19078,
+19078,
+19078,
+19098,
+19104,
+19151,
+19151,
+19158,
+19182,
+19198,
+19198,
+19198,
+19213,
19233,
-19248,
-19257,
-19275,
-19278,
-19323,
-19326,
-19366,
-19378,
-19378,
-19381,
-19381,
-19394,
-19414,
-19417,
-19420,
-19433,
-19456,
-19462,
-19468,
-19494,
-19497,
-19503,
-19539,
-19561,
-19567,
-19570,
-19576,
-19576,
-19576,
-19599,
-19599,
-19633,
-19633,
-19643,
-19651,
-19662,
-19695,
-19711,
-19740,
-19758,
-19783,
-19789,
-19792,
-19802,
-19825,
-19838,
-19841,
-19870,
-19900,
-19900,
-19930,
-19930,
-19974,
-20013,
-20052,
-20059,
-20079,
-20085,
-20101,
-20113,
-20126,
-20129,
-20169,
-20180,
+19233,
+19233,
+19243,
+19243,
+19300,
+19350,
+19350,
+19368,
+19368,
+19393,
+19423,
+19434,
+19434,
+19451,
+19466,
+19477,
+19477,
+19498,
+19498,
+19519,
+19543,
+19550,
+19550,
+19557,
+19557,
+19557,
+19557,
+19590,
+19590,
+19595,
+19595,
+19595,
+19626,
+19626,
+19636,
+19678,
+19678,
+19697,
+19703,
+19703,
+19703,
+19722,
+19735,
+19761,
+19782,
+19782,
+19782,
+19782,
+19808,
+19808,
+19814,
+19814,
+19814,
+19830,
+19830,
+19830,
+19830,
+19840,
+19840,
+19852,
+19875,
+19894,
+19894,
+19894,
+19915,
+19915,
+19922,
+19922,
+19922,
+19953,
+19968,
+19984,
+19997,
+20012,
+20028,
+20068,
+20099,
+20099,
+20117,
+20148,
+20148,
+20155,
+20155,
+20165,
+20195,
20220,
20220,
-20230,
-20264,
-20264,
-20289,
-20296,
-20299,
-20299,
-20299,
-20308,
-20308,
-20358,
-20374,
-20374,
-20388,
-20396,
-20402,
-20402,
-20428,
-20468,
-20493,
-20493,
+20250,
+20250,
+20275,
+20287,
+20287,
+20321,
+20321,
+20321,
+20355,
+20370,
+20395,
+20410,
+20432,
+20435,
+20463,
+20466,
+20466,
+20479,
+20499,
+20499,
+20502,
20517,
-20524,
-20534,
-20551,
-20593,
-20608,
-20611,
-20611,
-20618,
-20632,
-20635,
-20657,
-20657,
-20677,
-20704,
-20707,
-20734,
-20751,
-20754,
-20774,
-20794,
-20813,
-20816,
-20819,
-20830,
-20839,
-20842,
-20855,
-20865,
-20868,
-20868,
-20868,
-20881,
-20888,
-20891,
-20891,
-20933,
-20933,
-20936,
-20939,
-20939,
-20963,
-20963,
-20998,
-21005,
-21063,
-21111,
-21118,
-21118,
-21141,
-21147,
-21164,
-21164,
-21171,
-21209,
-21230,
-21253,
-21273,
-21283,
-21300,
-21332,
-21347,
-21379,
-21386,
-21397,
-21404,
-21412,
-21419,
-21419,
-21419,
-21434,
-21434,
-21451,
-21494,
-21501,
-21508,
-21526,
+20554,
+20613,
+20613,
+20658,
+20672,
+20716,
+20741,
+20769,
+20772,
+20795,
+20801,
+20836,
+20852,
+20852,
+20873,
+20876,
+20930,
+20949,
+20970,
+20987,
+20990,
+21010,
+21016,
+21016,
+21022,
+21035,
+21038,
+21044,
+21047,
+21062,
+21065,
+21094,
+21114,
+21126,
+21126,
+21145,
+21166,
+21166,
+21173,
+21226,
+21291,
+21313,
+21331,
+21331,
+21337,
+21340,
+21340,
+21359,
+21378,
+21387,
+21421,
+21439,
+21452,
+21460,
+21460,
+21463,
+21485,
+21520,
+21537,
+21537,
+21540,
+21540,
21540,
-21549,
-21549,
-21565,
-21565,
-21575,
+21540,
+21558,
+21586,
+21586,
+21607,
21607,
-21625,
-21663,
-21703,
-21713,
+21621,
+21634,
+21654,
+21654,
+21671,
+21671,
+21674,
+21674,
+21674,
+21674,
+21677,
+21683,
+21686,
+21698,
+21716,
21746,
-21797,
-21811,
-21817,
-21833,
+21764,
+21767,
+21789,
+21813,
+21816,
+21819,
+21822,
21839,
-21846,
-21865,
-21865,
-21872,
-21943,
-21954,
-21957,
-21995,
-22002,
-22019,
-22026,
-22044,
-22057,
-22060,
-22073,
-22090,
-22103,
-22106,
-22116,
-22126,
-22129,
+21854,
+21873,
+21886,
+21889,
+21902,
+21905,
+21908,
+21947,
+21965,
+21994,
+21994,
+22001,
+22004,
+22020,
+22023,
+22023,
+22034,
+22034,
+22037,
+22059,
+22059,
+22065,
+22065,
+22068,
+22091,
+22130,
22136,
-22139,
-22163,
-22187,
-22190,
-22203,
-22206,
-22224,
-22249,
-22255,
-22282,
-22293,
-22319,
-22325,
-22349,
-22365,
-22365,
-22386,
-22408,
-22408,
-22408,
-22420,
-22420,
-22420,
-22447,
-22472,
-22493,
-22548,
-22564,
-22581,
-22601,
-22608,
-22611,
-22622,
-22622,
-22625,
-22632,
-22649,
-22675,
+22164,
+22205,
+22205,
+22205,
+22227,
+22235,
+22238,
+22241,
+22263,
+22266,
+22272,
+22317,
+22320,
+22328,
+22344,
+22353,
+22359,
+22368,
+22380,
+22405,
+22427,
+22427,
+22427,
+22441,
+22489,
+22512,
+22531,
+22552,
+22575,
+22591,
+22591,
+22629,
+22629,
+22658,
+22677,
22691,
-22698,
-22720,
-22736,
-22739,
-22742,
-22756,
-22785,
-22811,
-22864,
-22881,
-22921,
-22924,
-22950,
-22950,
+22691,
+22721,
+22721,
+22730,
+22733,
+22741,
+22757,
+22760,
+22775,
+22788,
+22795,
+22804,
+22809,
+22809,
+22847,
+22894,
+22916,
22966,
-22969,
-22986,
-23024,
-23043,
-23063,
-23063,
-23079,
-23113,
-23124,
+22966,
+22993,
+23007,
+23044,
+23066,
+23100,
+23110,
23124,
23135,
-23175,
-23175,
-23190,
-23190,
-23224,
-23238,
-23245,
-23252,
-23259,
-23274,
-23283,
-23310,
-23310,
-23310,
-23310,
-23310,
-23310,
-23336,
-23349,
-23359,
-23359,
-23380,
-23421,
-23447,
-23457,
-23471,
-23471,
-23484,
-23516,
-23551,
-23569,
-23572,
-23575,
-23599,
-23609,
-23612,
-23635,
-23651,
-23680,
-23690,
+23156,
+23159,
+23182,
+23185,
+23188,
+23188,
+23201,
+23204,
+23219,
+23222,
+23232,
+23241,
+23253,
+23276,
+23306,
+23323,
+23329,
+23341,
+23367,
+23383,
+23386,
+23402,
+23416,
+23452,
+23459,
+23478,
+23481,
+23481,
+23488,
+23504,
+23518,
+23518,
+23521,
+23540,
+23561,
+23570,
+23570,
+23573,
+23587,
+23620,
+23633,
+23659,
+23671,
+23671,
+23681,
+23681,
+23687,
+23694,
23714,
-23753,
-23777,
-23789,
-23849,
-23859,
-23872,
-23882,
-23892,
-23911,
-23931,
-23934,
-23937,
-23960,
-23970,
-23982,
-23998,
-24016,
-24053,
-24066,
-24090,
+23767,
+23767,
+23770,
+23786,
+23823,
+23826,
+23845,
+23856,
+23876,
+23876,
+23876,
+23896,
+23923,
+23944,
+23955,
+23979,
+23990,
+23993,
+24000,
+24003,
+24021,
+24021,
+24021,
+24021,
+24029,
+24035,
+24035,
+24035,
+24035,
+24046,
+24046,
+24049,
+24077,
24097,
-24100,
-24110,
-24146,
-24165,
-24179,
+24106,
+24150,
+24150,
+24150,
+24169,
+24186,
24186,
-24193,
-24196,
-24240,
-24253,
-24270,
-24280,
-24312,
-24329,
-24329,
-24342,
-24345,
-24354,
-24354,
+24216,
+24226,
+24229,
+24232,
+24248,
+24271,
+24286,
+24301,
+24307,
+24332,
24370,
-24373,
+24391,
24394,
-24394,
-24405,
-24430,
-24440,
-24462,
-24465,
-24488,
-24502,
-24502,
-24526,
-24533,
-24542,
-24542,
-24559,
-24578,
-24585,
-24617,
-24617,
-24634,
-24648,
-24664,
-24690,
-24690,
-24690,
-24715,
-24715,
-24732,
-24757,
-24764,
+24406,
+24409,
+24412,
+24415,
+24425,
+24425,
+24428,
+24438,
+24444,
+24447,
+24481,
+24505,
+24547,
+24556,
+24562,
+24565,
+24568,
+24594,
+24614,
+24632,
+24632,
+24635,
+24676,
+24705,
+24738,
+24765,
+24773,
24779,
-24786,
-24786,
-24786,
-24793,
-24830,
-24852,
-24872,
-24872,
-24890,
-24903,
-24903,
-24910,
-24914,
-24921,
-24939,
-24946,
-24977,
-24986,
-25008,
-25022,
-25022,
-25032,
-25035,
-25047,
-25047,
-25073,
+24810,
+24842,
+24881,
+24896,
+24904,
+24919,
+24919,
+24944,
+24944,
+24947,
+24969,
+24994,
+25013,
+25028,
+25034,
+25037,
+25037,
+25060,
+25063,
+25063,
+25063,
+25075,
+25078,
+25078,
25084,
-25111,
-25111,
-25137,
-25137,
+25084,
+25116,
+25116,
+25116,
25137,
-25142,
-25142,
-25149,
-25156,
-25163,
-25177,
-25184,
-25197,
-25197,
-25235,
-25261,
-25267,
-25313,
-25333,
-25362,
-25362,
+25140,
+25183,
+25183,
+25214,
+25214,
+25214,
+25214,
+25272,
+25288,
+25315,
+25315,
+25325,
+25351,
+25394,
25409,
25409,
25409,
-25409,
-25427,
-25427,
-25447,
-25447,
-25477,
-25483,
-25490,
-25504,
-25529,
-25536,
-25543,
-25550,
-25573,
-25580,
-25593,
-25612,
-25619,
-25637,
-25651,
-25651,
-25682,
-25703,
-25712,
-25712,
-25712,
-25719,
-25725,
-25725,
-25725,
-25745,
-25763,
-25783,
-25789,
-25809,
-25809,
-25823,
-25829,
-25829,
-25835,
-25847,
-25847,
-25867,
-25886,
-25886,
-25914,
-25914,
-25914,
-25914,
-25914,
-25920,
-25920,
-25927,
-25927,
-25953,
-25961,
-25961,
-25973,
-25994,
-25994,
-26009,
-26009,
-26015,
-26015,
-26015,
-26037,
-26053,
-26089,
+25417,
+25433,
+25433,
+25463,
+25463,
+25463,
+25463,
+25508,
+25508,
+25508,
+25517,
+25541,
+25586,
+25604,
+25622,
+25634,
+25634,
+25644,
+25677,
+25688,
+25723,
+25723,
+25735,
+25750,
+25750,
+25750,
+25785,
+25785,
+25803,
+25830,
+25850,
+25850,
+25850,
+25863,
+25863,
+25913,
+25921,
+25921,
+25930,
+25950,
+25974,
+25974,
+25999,
+25999,
+26023,
+26048,
+26092,
26098,
-26104,
-26113,
-26118,
-26133,
-26133,
-26133,
-26146,
-26155,
-26155,
-26185,
-26185,
-26202,
-26246,
-26246,
-26246,
-26261,
-26298,
-26298,
-26298,
-26298,
-26316,
-26331,
-26358,
-26367,
-26411,
-26411,
-26411,
-26444,
-26451,
-26458,
-26464,
-26464,
-26464,
-26464,
-26482,
-26482,
-26482,
-26512,
-26512,
-26512,
-26555,
-26555,
-26555,
-26555,
-26587,
-26587,
-26587,
-26587,
-26610,
-26610,
-26620,
-26639,
-26657,
-26673,
-26688,
-26688,
-26723,
-26740,
-26749,
-26765,
-26807,
-26807,
-26877,
-26904,
-26904,
-26945,
-26962,
-26962,
-26982,
-26992,
-27013,
-27030,
-27060,
-27065,
-27104,
+26109,
+26122,
+26190,
+26201,
+26207,
+26216,
+26234,
+26234,
+26248,
+26248,
+26269,
+26269,
+26275,
+26291,
+26346,
+26365,
+26365,
+26365,
+26414,
+26432,
+26438,
+26438,
+26438,
+26438,
+26438,
+26459,
+26469,
+26469,
+26509,
+26532,
+26581,
+26608,
+26615,
+26615,
+26615,
+26615,
+26615,
+26615,
+26615,
+26615,
+26615,
+26645,
+26666,
+26694,
+26694,
+26694,
+26694,
+26694,
+26694,
+26714,
+26714,
+26730,
+26743,
+26796,
+26796,
+26824,
+26844,
+26872,
+26872,
+26878,
+26887,
+26892,
+26912,
+26931,
+26931,
+26949,
+26949,
+26949,
+26949,
+26949,
+26958,
+26994,
+27010,
+27031,
+27053,
+27071,
+27110,
27110,
-27119,
-27125,
-27125,
-27125,
+27139,
+27139,
+27139,
+27139,
+27139,
+27139,
+27139,
+27144,
27150,
-27166,
-27166,
-27185,
-27185,
-27207,
+27150,
+27165,
+27184,
+27184,
+27184,
+27202,
+27214,
+27230,
+27246,
27246,
-27265,
-27265,
-27286,
-27294,
-27311,
-27331,
-27331,
-27331,
-27331,
-27331,
-27353,
-27353,
-27360,
-27378,
-27402,
-27419,
-27431,
-27431,
-27431,
-27437,
-27506,
-27514,
-27514,
-27514,
-27514,
-27514,
-27514,
-27530,
-27542,
-27550,
-27550,
-27550,
-27550,
-27550,
-27550,
-27585,
-27603,
-27603,
-27635,
-27635,
-27635,
-27642,
-27650,
-27686,
-27686,
-27686,
-27697,
-27717,
-27723,
-27766,
-27808,
-27815,
-27831,
-27831,
-27831,
-27850,
-27866,
-27866,
-27866,
-27866,
-27871,
-27871,
-27877,
-27899,
-27923,
-27948,
-27955,
-27955,
-27964,
-27990,
-27999,
-28015,
-28023,
-28027,
-28052,
-28052,
-28052,
-28059,
-28059,
-28096,
-28096,
-28112,
-28112,
-28124,
-28124,
-28180,
-28180,
-28203,
-28203,
-28212,
-28212,
-28244,
-28279,
-28286,
-28298,
-28298,
-28317,
-28340,
-28340,
-28340,
-28385,
-28406,
-28438,
-28445,
-28462,
-28462,
-28462,
-28462,
-28462,
-28462,
-28488,
-28504,
-28520,
-28558,
-28558,
-28558,
-28563,
-28578,
-28578,
-28578,
-28584,
-28584,
-28584,
-28584,
-28584,
-28600,
-28600,
-28600,
-28600,
-28606,
-28611,
-28611,
-28631,
-28631,
-28655,
-28655,
-28664,
-28664,
-28668,
-28672,
-28672,
-28672,
-28672,
-28700,
-28708,
-28708,
-28730,
-28746,
-28758,
-28758,
-28776,
+27255,
+27255,
+27266,
+27266,
+27266,
+27279,
+27279,
+27279,
+27288,
+27296,
+27358,
+27367,
+27367,
+27367,
+27367,
+27367,
+27367,
+27367,
+27395,
+27427,
+27427,
+27451,
+27451,
+27462,
+27462,
+27462,
+27497,
+27508,
+27512,
+27512,
+27538,
+27538,
+27564,
+27564,
+27587,
+27611,
+27626,
+27626,
+27648,
+27648,
+27667,
+27667,
+27691,
+27706,
+27720,
+27734,
+27764,
+27791,
+27791,
+27823,
+27847,
+27847,
+27847,
+27857,
+27863,
+27874,
+27878,
+27878,
+27878,
+27884,
+27891,
+27891,
+27907,
+27929,
+27935,
+27935,
+27935,
+27942,
+27966,
+27966,
+27966,
+27993,
+27993,
+27993,
+27993,
+28009,
+28020,
+28020,
+28020,
+28025,
+28045,
+28066,
+28087,
+28104,
+28117,
+28148,
+28158,
+28167,
+28208,
+28225,
+28254,
+28305,
+28305,
+28310,
+28319,
+28319,
+28319,
+28328,
+28328,
+28359,
+28405,
+28409,
+28409,
+28409,
+28409,
+28440,
+28440,
+28440,
+28440,
+28486,
+28486,
+28486,
+28501,
+28530,
+28530,
+28546,
+28546,
+28569,
+28569,
+28587,
+28650,
+28650,
+28650,
+28650,
+28673,
+28686,
+28686,
+28697,
+28697,
+28732,
+28737,
+28737,
+28749,
+28760,
+28760,
+28772,
+28779,
28794,
-28801,
-28801,
-28801,
-28811,
-28811,
-28827,
-28834,
-28860,
-28872,
-28887,
-28917,
-28930,
+28841,
+28841,
+28865,
+28865,
+28865,
+28897,
+28920,
+28920,
+28927,
+28934,
28965,
-28983,
-28983,
-29018,
-29038,
-29051,
-29051,
-29082,
-29082,
-29136,
-29152,
-29172,
-29182,
-29198,
-29198,
-29205,
-29205,
-29219,
-29219,
-29219,
+29022,
+29022,
+29047,
+29065,
+29083,
+29089,
+29125,
+29125,
+29125,
+29125,
+29130,
+29186,
+29186,
+29194,
+29247,
+29257,
+29257,
29285,
-29299,
-29305,
-29323,
-29323,
-29332,
-29355,
-29390,
-29396,
-29447,
-29447,
+29285,
+29285,
+29368,
+29375,
+29402,
+29409,
+29414,
+29421,
+29428,
+29434,
29447,
-29460,
-29460,
-29472,
-29472,
-29484,
-29484,
-29484,
-29484,
-29502,
-29502,
-29529,
-29538,
-29538,
+29464,
+29473,
+29494,
+29509,
+29509,
+29521,
+29521,
+29533,
29538,
-29538,
-29577,
-29589,
-29589,
-29605,
-29624,
-29624,
-29624,
-29624,
-29624,
-29624,
-29632,
-29641,
-29641,
-29650,
-29695,
-29702,
-29702,
-29714,
+29544,
+29561,
+29571,
+29578,
+29578,
+29578,
+29588,
+29598,
+29609,
+29609,
+29616,
+29634,
+29640,
+29651,
+29651,
+29663,
+29679,
+29694,
+29694,
+29694,
+29694,
+29727,
29727,
29737,
-29737,
-29737,
-29788,
-29802,
-29825,
-29825,
-29825,
-29832,
-29859,
-29876,
-29894,
-29894,
-29904,
-29904,
-29904,
-29904,
-29904,
-29919,
-29929,
-29940,
-29940,
-29947,
-29967,
-29991,
-29991,
-29991,
-29998,
-30006,
-30006,
-30006,
-30026,
+29746,
+29752,
+29759,
+29778,
+29778,
+29778,
+29784,
+29784,
+29792,
+29792,
+29792,
+29792,
+29826,
+29843,
+29854,
+29877,
+29903,
+29903,
+29903,
+29903,
+29903,
+29903,
+29910,
+29910,
+29910,
+29910,
+29933,
+29961,
+29979,
+30013,
+30013,
+30024,
+30028,
+30028,
30042,
30042,
-30059,
-30067,
-30067,
-30090,
-30096,
-30115,
-30133,
-30133,
-30138,
-30144,
-30152,
-30152,
-30164,
-30164,
-30164,
-30164,
-30164,
-30178,
+30042,
+30048,
+30062,
+30062,
+30080,
+30086,
+30093,
+30113,
+30113,
+30130,
+30130,
+30130,
+30130,
30178,
-30211,
-30215,
-30255,
-30259,
-30267,
-30277,
-30283,
-30289,
-30289,
-30307,
-30327,
-30334,
-30334,
-30334,
-30353,
-30359,
-30375,
-30387,
-30387,
-30387,
-30413,
-30413,
-30422,
-30422,
-30422,
-30459,
-30477,
-30492,
+30183,
+30183,
+30183,
+30204,
+30208,
+30217,
+30238,
+30250,
+30250,
+30250,
+30270,
+30276,
+30282,
+30298,
+30336,
+30336,
+30370,
+30415,
+30415,
+30415,
+30415,
+30415,
+30419,
+30423,
+30423,
+30436,
+30436,
+30436,
+30436,
+30436,
+30436,
+30475,
+30475,
30519,
-30519,
-30567,
-30567,
-30575,
-30581,
-30618,
-30618,
-30618,
-30618,
-30635,
-30657,
-30665,
-30665,
-30685,
-30695,
-30717,
-30738,
-30757,
-30757,
-30780,
-30786,
-30786,
-30796,
-30834,
-30834,
-30834,
-30838,
-30864,
-30894,
-30913,
-30913,
-30913,
-30935,
-30935,
-30935,
-30965,
-30965,
-30993,
-31002,
-31002,
-31002,
-31014,
-31014,
-31040,
-31065,
-31075,
-31075,
-31109,
-31121,
-31121,
-31121,
+30536,
+30536,
+30536,
+30542,
+30542,
+30562,
+30602,
+30608,
+30617,
+30641,
+30701,
+30701,
+30701,
+30730,
+30730,
+30730,
+30743,
+30751,
+30765,
+30779,
+30807,
+30814,
+30814,
+30814,
+30850,
+30850,
+30850,
+30850,
+30879,
+30886,
+30893,
+30893,
+30907,
+30923,
+30930,
+30930,
+30930,
+30930,
+30940,
+31010,
+31023,
+31023,
+31032,
+31032,
+31032,
+31032,
+31049,
+31049,
+31059,
+31059,
+31071,
+31090,
+31113,
+31120,
31136,
-31164,
-31164,
-31164,
-31179,
-31189,
-31189,
-31189,
-31189,
-31189,
-31202,
-31202,
-31202,
-31202,
-31219,
-31219,
-31225,
-31243,
-31259,
-31259,
-31282,
-31282,
-31282,
+31162,
+31168,
+31235,
+31249,
+31249,
+31254,
+31260,
+31260,
+31290,
31290,
-31298,
-31313,
-31330,
-31338,
-31338,
-31338,
-31338,
-31338,
-31338,
-31338,
-31338,
-31353,
-31353,
-31353,
-31382,
-31390,
-31429,
-31437,
-31447,
-31447,
+31299,
+31311,
+31348,
+31348,
+31357,
+31357,
+31380,
+31430,
+31469,
31475,
-31499,
-31499,
-31521,
-31562,
-31562,
-31562,
-31595,
-31614,
-31631,
-31683,
-31707,
-31735,
-31735,
-31762,
-31776,
-31817,
-31828,
-31828,
-31838,
-31852,
-31870,
-31870,
-31870,
-31870,
-31879,
-31879,
-31879,
-31879,
-31895,
-31895,
-31895,
-31925,
-31925,
-31925,
-31925,
-31944,
-31944,
-31944,
-31944,
-31968,
-31968,
-31985,
-32000,
-32021,
-32032,
-32054,
-32065,
-32065,
-32076,
-32099,
-32099,
-32118,
-32126,
-32152,
-32152,
-32152,
-32169,
-32169,
+31493,
+31531,
+31542,
+31563,
+31579,
+31625,
+31636,
+31651,
+31661,
+31684,
+31688,
+31698,
+31698,
+31704,
+31730,
+31785,
+31798,
+31798,
+31798,
+31798,
+31808,
+31808,
+31808,
+31808,
+31822,
+31840,
+31840,
+31854,
+31874,
+31874,
+31885,
+31896,
+31896,
+31903,
+31903,
+31942,
+31942,
+31942,
+31946,
+31951,
+31972,
+31999,
+31999,
+32016,
+32030,
+32030,
+32030,
+32037,
+32037,
+32067,
+32105,
+32105,
+32148,
+32170,
32176,
-32235,
-32240,
-32240,
-32257,
-32257,
-32257,
-32288,
-32288,
-32288,
-32301,
-32301,
-32301,
-32301,
-32331,
-32331,
-32331,
-32331,
-32331,
-32331,
-32359,
-32359,
-32424,
-32440,
-32440,
-32468,
-32468,
+32188,
+32188,
+32188,
+32188,
+32208,
+32234,
+32234,
+32251,
+32295,
+32295,
+32295,
+32295,
+32295,
+32295,
+32295,
+32295,
+32308,
+32308,
+32323,
+32336,
+32336,
+32341,
+32367,
+32411,
+32411,
+32429,
+32461,
+32461,
+32461,
+32467,
+32478,
32488,
-32488,
-32509,
-32536,
-32558,
-32573,
-32573,
-32577,
-32597,
-32597,
-32609,
-32620,
-32634,
-32640,
-32640,
-32668,
-32679,
-32679,
-32687,
-32718,
-32718,
-32718,
-32718,
-32718,
-32738,
-32745,
-32760,
-32784,
-32848,
+32525,
+32563,
+32586,
+32598,
+32598,
+32598,
+32613,
+32629,
+32629,
+32660,
+32676,
+32708,
+32720,
+32736,
+32743,
+32743,
+32752,
+32752,
+32762,
+32766,
+32778,
+32778,
+32797,
+32801,
+32813,
+32820,
+32820,
+32838,
32862,
-32894,
-32901,
-32901,
-32901,
-32908,
-32908,
-32915,
-32915,
-32919,
-32961,
-32993,
-33005,
-33005,
-33037,
-33044,
-33044,
-33051,
-33090,
-33097,
-33097,
-33116,
-33123,
-33123,
-33130,
-33138,
-33142,
-33168,
-33186,
-33193,
-33193,
+32868,
+32881,
+32881,
+32892,
+32906,
+32920,
+32920,
+32920,
+32942,
+32942,
+32942,
+32955,
+32970,
+32970,
+32979,
+32979,
+32983,
+32990,
+33013,
+33045,
+33057,
+33067,
+33073,
+33099,
+33099,
+33099,
+33099,
+33103,
+33103,
+33141,
+33141,
+33173,
+33190,
+33190,
+33190,
+33190,
+33212,
33216,
-33223,
-33223,
-33240,
-33268,
-33272,
-33272,
-33304,
-33311,
-33343,
-33343,
-33343,
-33362,
-33362,
-33372,
-33389,
-33389,
-33396,
-33396,
-33404,
-33404,
-33420,
-33420,
+33234,
+33234,
+33245,
+33245,
+33263,
+33263,
+33263,
+33271,
+33312,
+33337,
+33359,
+33398,
33427,
-33435,
-33456,
+33432,
33456,
-33467,
-33536,
-33543,
-33547,
-33554,
-33576,
-33583,
-33606,
-33606,
-33613,
-33629,
-33657,
-33664,
-33664,
-33664,
-33690,
-33699,
-33699,
-33730,
-33750,
-33762,
-33783,
-33826,
-33844,
-33844,
-33868,
-33868,
-33903,
-33911,
-33911,
-33927,
-33945,
+33460,
+33490,
+33500,
+33500,
+33508,
+33508,
+33508,
+33508,
+33508,
+33532,
+33570,
+33593,
+33597,
+33597,
+33597,
+33597,
+33597,
+33601,
+33638,
+33638,
+33638,
+33638,
+33638,
+33660,
+33693,
+33729,
+33739,
+33787,
+33787,
+33787,
+33798,
+33798,
+33808,
+33808,
+33808,
+33808,
+33840,
+33840,
+33840,
+33854,
+33854,
+33854,
+33884,
+33884,
+33884,
+33914,
+33955,
+33961,
+33965,
+33974,
+33974,
+33974,
33990,
-34010,
-34025,
-34025,
-34032,
-34051,
-34075,
-34095,
-34129,
-34129,
+33998,
+34006,
+34030,
+34030,
+34030,
+34064,
+34074,
+34094,
+34108,
+34108,
34129,
-34129,
-34129,
-34136,
-34149,
-34173,
-34173,
-34186,
-34199,
-34206,
-34218,
-34218,
-34227,
-34227,
-34227,
-34227,
-34234,
-34234,
-34234,
-34241,
-34268,
-34275,
+34174,
+34198,
+34225,
+34246,
+34261,
+34277,
+34277,
+34281,
+34305,
+34305,
34305,
-34326,
-34360,
-34367,
-34386,
-34397,
-34407,
-34407,
-34407,
-34407,
-34407,
-34461,
-34468,
-34496,
-34496,
-34505,
-34512,
-34566,
-34594,
-34594,
-34601,
-34606,
-34634,
-34634,
-34634,
-34634,
-34634,
-34634,
-34634,
-34653,
-34660,
-34660,
-34666,
-34686,
-34696,
-34703,
-34720,
-34720,
-34727,
+34305,
+34305,
+34305,
+34338,
+34355,
+34355,
+34355,
+34355,
+34380,
+34380,
+34395,
+34422,
+34443,
+34443,
+34448,
+34448,
+34459,
+34472,
+34488,
+34495,
+34504,
+34515,
+34515,
+34533,
+34533,
+34533,
+34563,
+34622,
+34622,
+34639,
+34656,
+34706,
34744,
-34751,
-34758,
-34773,
-34794,
-34801,
-34808,
-34808,
-34828,
-34835,
-34852,
-34859,
-34876,
-34876,
+34752,
+34752,
+34767,
+34788,
+34793,
+34793,
+34793,
+34793,
+34793,
+34793,
+34837,
+34837,
+34837,
34885,
-34893,
-34905,
-34934,
-34941,
-34988,
-34988,
-34988,
-35033,
-35033,
-35033,
-35040,
-35058,
-35065,
+34908,
+34908,
+34926,
+34933,
+34953,
+34963,
+34963,
+34963,
+34990,
+34990,
+35013,
+35013,
+35017,
+35017,
+35024,
+35024,
+35041,
+35041,
+35059,
+35059,
+35059,
+35073,
35073,
-35093,
-35119,
-35137,
-35144,
-35171,
-35199,
+35073,
+35084,
+35108,
+35120,
+35130,
+35184,
+35184,
+35184,
+35191,
35206,
-35213,
-35253,
-35266,
-35273,
-35273,
-35312,
-35329,
-35336,
-35365,
-35381,
-35399,
-35413,
-35420,
-35427,
-35427,
-35432,
-35442,
-35448,
-35455,
-35467,
-35517,
-35531,
-35538,
+35216,
+35216,
+35216,
+35226,
+35244,
+35260,
+35260,
+35290,
+35296,
+35296,
+35296,
+35313,
+35334,
+35334,
+35343,
+35382,
+35414,
+35414,
+35447,
+35447,
+35457,
+35457,
+35475,
+35475,
+35484,
+35491,
+35491,
+35503,
+35503,
+35509,
+35529,
+35537,
+35558,
35558,
-35571,
-35581,
-35606,
-35619,
-35645,
-35659,
-35666,
-35666,
-35681,
-35688,
-35719,
-35729,
-35736,
-35743,
-35761,
-35769,
-35828,
-35835,
-35859,
-35859,
-35866,
-35866,
-35866,
-35873,
-35921,
-35950,
+35567,
+35567,
+35585,
+35595,
+35610,
+35624,
+35654,
+35654,
+35661,
+35661,
+35680,
+35696,
+35701,
+35701,
+35726,
+35752,
+35768,
+35768,
+35838,
+35870,
+35870,
+35894,
+35894,
+35894,
+35905,
+35922,
35965,
-35976,
-35976,
-35983,
-36007,
-36014,
-36021,
-36021,
-36021,
-36021,
-36021,
-36038,
-36038,
-36038,
-36053,
-36067,
-36082,
-36082,
-36082,
-36119,
-36155,
-36171,
-36171,
-36171,
-36184,
-36199,
-36206,
-36206,
-36220,
-36234,
-36242,
-36272,
-36282,
-36296,
-36296,
-36314,
-36321,
-36352,
-36359,
-36383,
-36391,
-36412,
-36419,
-36419,
-36434,
-36442,
-36449,
-36462,
-36469,
-36476,
-36492,
-36492,
-36512,
-36512,
-36567,
-36567,
-36588,
-36588,
-36588,
-36608,
-36650,
-36660,
-36670,
-36687,
-36694,
-36701,
-36714,
-36725,
-36732,
-36762,
-36777,
-36804,
-36804,
-36838,
-36855,
-36855,
-36903,
-36922,
-36943,
-36943,
-36949,
-36949,
-36969,
+35984,
+35989,
+36011,
+36025,
+36040,
+36057,
+36057,
+36057,
+36074,
+36086,
+36096,
+36108,
+36140,
+36163,
+36191,
+36216,
+36248,
+36248,
+36275,
+36284,
+36284,
+36298,
+36298,
+36328,
+36335,
+36344,
+36348,
+36406,
+36413,
+36433,
+36457,
+36470,
+36470,
+36478,
+36485,
+36485,
+36485,
+36523,
+36541,
+36550,
+36550,
+36550,
+36550,
+36550,
+36565,
+36565,
+36565,
+36569,
+36569,
+36576,
+36576,
+36576,
+36595,
+36595,
+36610,
+36620,
+36620,
+36639,
+36639,
+36639,
+36653,
+36653,
+36682,
+36722,
+36722,
+36722,
+36722,
+36722,
+36728,
+36745,
+36745,
+36759,
+36759,
+36759,
+36759,
+36768,
+36785,
+36803,
+36834,
+36834,
+36834,
+36865,
+36887,
+36887,
+36887,
+36907,
+36926,
+36967,
36977,
-36977,
-36993,
-36993,
-37000,
-37023,
-37023,
-37030,
-37121,
-37137,
-37137,
-37153,
-37176,
-37183,
-37192,
+36981,
+36981,
+37005,
+37005,
+37054,
+37086,
+37096,
+37103,
+37116,
+37116,
+37116,
+37143,
+37143,
+37149,
+37149,
+37181,
+37181,
+37181,
+37205,
+37209,
37209,
-37217,
-37248,
-37248,
-37248,
-37266,
+37236,
+37259,
+37259,
37286,
-37292,
-37292,
-37300,
-37339,
-37339,
-37355,
-37362,
-37379,
-37387,
-37403,
-37403,
-37403,
-37432,
-37432,
-37450,
-37450,
-37466,
-37481,
-37481,
-37481,
-37500,
+37302,
+37302,
+37319,
+37336,
+37348,
+37361,
+37361,
+37361,
+37361,
+37361,
+37371,
+37371,
+37382,
+37396,
+37396,
+37396,
+37420,
+37433,
+37449,
+37449,
+37449,
+37449,
+37471,
+37471,
+37499,
+37519,
+37519,
37540,
-37540,
-37540,
-37552,
-37569,
-37594,
-37594,
-37609,
-37628,
-37628,
-37661,
-37677,
-37677,
-37677,
-37717,
-37717,
-37717,
-37723,
-37754,
-37754,
-37799,
-37799,
-37810,
-37810,
-37825,
-37825,
-37825,
-37825,
-37845,
-37867,
-37867,
-37877,
-37892,
-37909,
-37909,
-37919,
-37919,
-37938,
-37959,
-37967,
-37972,
-37992,
-37992,
-38026,
+37550,
+37555,
+37555,
+37572,
+37576,
+37576,
+37576,
+37583,
+37583,
+37599,
+37615,
+37615,
+37634,
+37634,
+37647,
+37672,
+37672,
+37690,
+37705,
+37710,
+37728,
+37728,
+37728,
+37728,
+37745,
+37755,
+37755,
+37761,
+37771,
+37771,
+37788,
+37813,
+37813,
+37832,
+37832,
+37832,
+37832,
+37856,
+37856,
+37872,
+37872,
+37872,
+37872,
+37872,
+37872,
+37872,
+37902,
+37913,
+37913,
+37925,
+37943,
+37952,
+37952,
+37952,
+37982,
+38011,
+38011,
+38011,
+38011,
+38019,
+38019,
+38019,
+38019,
+38019,
38035,
-38061,
-38061,
-38072,
-38083,
-38083,
-38099,
-38123,
-38146,
-38146,
-38158,
-38158,
-38182,
-38234,
-38255,
-38255,
-38310,
-38331,
-38331,
-38346,
-38346,
-38346,
-38353,
-38353,
-38353,
-38378,
-38378,
-38388,
-38408,
-38428,
-38428,
-38428,
-38428,
-38445,
-38453,
-38460,
-38460,
-38460,
-38493,
-38503,
-38525,
-38525,
-38532,
-38532,
-38546,
-38546,
-38569,
-38599,
-38618,
-38618,
-38618,
-38643,
-38643,
-38643,
-38691,
-38699,
-38717,
+38035,
+38057,
+38057,
+38068,
+38080,
+38091,
+38110,
+38128,
+38149,
+38164,
+38189,
+38199,
+38199,
+38199,
+38207,
+38207,
+38224,
+38224,
+38235,
+38251,
+38251,
+38251,
+38251,
+38251,
+38260,
+38260,
+38260,
+38260,
+38260,
+38279,
+38279,
+38290,
+38290,
+38297,
+38345,
+38351,
+38351,
+38389,
+38398,
+38402,
+38402,
+38450,
+38450,
+38466,
+38490,
+38490,
+38494,
+38517,
+38544,
+38544,
+38557,
+38568,
+38574,
+38574,
+38574,
+38574,
+38574,
+38574,
+38595,
+38616,
+38642,
+38672,
+38672,
+38672,
+38672,
+38672,
+38686,
+38693,
38717,
-38729,
-38729,
-38733,
-38760,
-38760,
-38773,
-38801,
-38817,
-38824,
+38735,
+38751,
+38751,
+38758,
+38794,
+38808,
+38829,
38836,
38843,
-38843,
-38843,
-38870,
-38880,
-38880,
-38887,
-38900,
-38907,
-38919,
-38919,
-38919,
-38949,
-38967,
-38984,
-38984,
-38984,
-38989,
-38989,
-39029,
-39036,
-39054,
-39080,
-39086,
-39103,
-39110,
-39130,
-39130,
-39130,
-39154,
-39154,
-39176,
-39176,
-39213,
-39213,
-39213,
-39225,
-39230,
-39249,
-39264,
-39264,
-39264,
-39284,
-39284,
-39293,
-39293,
-39311,
-39311,
-39311,
-39320,
+38858,
+38883,
+38893,
+38915,
+38915,
+38915,
+38922,
+38933,
+38940,
+38940,
+38950,
+38957,
+38991,
+39009,
+39009,
+39014,
+39021,
+39021,
+39028,
+39042,
+39048,
+39055,
+39077,
+39102,
+39116,
+39129,
+39136,
+39155,
+39155,
+39161,
+39179,
+39205,
+39219,
+39239,
+39283,
+39283,
+39304,
39339,
-39345,
-39355,
-39369,
-39388,
-39399,
-39399,
-39399,
-39418,
-39418,
-39433,
-39451,
-39451,
-39458,
-39476,
-39481,
-39519,
-39519,
-39519,
-39519,
-39529,
-39567,
-39609,
-39624,
-39637,
-39637,
-39644,
-39644,
-39651,
-39679,
-39679,
-39679,
-39697,
-39709,
-39751,
-39751,
-39777,
-39791,
-39817,
-39817,
-39835,
-39835,
-39844,
-39844,
-39851,
-39874,
-39878,
-39878,
-39888,
-39905,
-39905,
-39928,
-39928,
+39365,
+39387,
+39413,
+39413,
+39413,
+39430,
+39437,
+39437,
+39450,
+39462,
+39469,
+39484,
+39502,
+39509,
+39509,
+39548,
+39548,
+39548,
+39560,
+39573,
+39582,
+39582,
+39582,
+39596,
+39616,
+39639,
+39639,
+39646,
+39668,
+39677,
+39694,
+39705,
+39721,
+39731,
+39731,
+39750,
+39750,
+39760,
+39760,
+39769,
+39796,
+39796,
+39815,
+39822,
+39847,
+39867,
+39881,
+39881,
+39900,
+39907,
+39907,
+39920,
+39934,
+39945,
39945,
39952,
-39978,
-39978,
-39985,
-40029,
-40043,
-40043,
-40043,
-40053,
-40066,
-40094,
-40106,
-40129,
-40129,
-40151,
-40151,
-40151,
-40158,
-40182,
-40199,
-40232,
-40232,
-40232,
-40281,
-40288,
-40302,
-40302,
-40302,
-40302,
-40317,
-40317,
-40324,
-40324,
-40356,
-40356,
-40369,
-40384,
-40392,
-40392,
-40392,
-40413,
-40413,
-40455,
-40462,
-40469,
-40483,
+39952,
+39952,
+39961,
+39989,
+40030,
+40045,
+40058,
+40085,
+40101,
+40138,
+40178,
+40188,
+40210,
+40221,
+40228,
+40228,
+40241,
+40248,
+40279,
+40292,
+40292,
+40301,
+40308,
+40322,
+40322,
+40329,
+40336,
+40352,
+40359,
+40366,
+40373,
+40380,
+40380,
+40435,
+40435,
+40435,
+40473,
40483,
40483,
-40511,
-40511,
-40524,
-40524,
-40528,
-40546,
-40546,
-40568,
-40575,
-40582,
-40610,
-40629,
-40656,
-40656,
-40656,
-40679,
-40679,
-40679,
-40693,
-40713,
-40732,
-40754,
-40795,
-40795,
-40809,
-40816,
-40823,
-40851,
-40889,
-40908,
-40956,
-40970,
-41026,
-41040,
-41056,
-41063,
-41070,
-41077,
-41100,
-41108,
-41141,
-41148,
-41181,
-41197,
-41220,
-41241,
-41275,
-41291,
-41307,
-41307,
-41327,
-41334,
-41355,
-41369,
-41394,
-41401,
-41414,
-41430,
-41444,
-41494,
+40488,
+40488,
+40488,
+40513,
+40537,
+40537,
+40564,
+40569,
+40612,
+40637,
+40637,
+40651,
+40651,
+40658,
+40665,
+40665,
+40672,
+40686,
+40717,
+40741,
+40766,
+40789,
+40815,
+40830,
+40830,
+40840,
+40840,
+40840,
+40840,
+40860,
+40886,
+40893,
+40933,
+40933,
+40946,
+40968,
+41002,
+41017,
+41024,
+41057,
+41080,
+41087,
+41094,
+41137,
+41150,
+41157,
+41157,
+41164,
+41171,
+41177,
+41184,
+41198,
+41198,
+41198,
+41216,
+41240,
+41251,
+41293,
+41300,
+41330,
+41346,
+41383,
+41405,
+41405,
+41417,
+41448,
+41466,
+41466,
+41466,
+41466,
+41473,
+41485,
41513,
-41513,
-41520,
-41529,
-41575,
-41589,
-41612,
+41528,
+41537,
+41564,
+41564,
+41594,
+41627,
+41627,
+41627,
41634,
41634,
+41639,
+41639,
41652,
-41652,
-41664,
-41696,
-41703,
-41750,
-41772,
-41772,
-41793,
-41819,
-41826,
-41848,
-41855,
-41872,
-41884,
-41892,
-41892,
-41947,
-41947,
-41947,
-41971,
-41971,
-41971,
-41971,
-41977,
-41977,
-41984,
-42033,
-42051,
-42051,
+41671,
+41680,
+41690,
+41690,
+41690,
+41690,
+41712,
+41712,
+41722,
+41746,
+41778,
+41784,
+41816,
+41825,
+41825,
+41832,
+41856,
+41868,
+41916,
+41922,
+41935,
+41944,
+41956,
+41970,
+41982,
+41982,
+41982,
+41989,
+41996,
+42018,
+42018,
+42018,
+42025,
+42032,
+42040,
+42040,
+42047,
+42047,
+42055,
+42055,
42066,
-42066,
-42066,
-42066,
-42087,
-42102,
-42127,
-42134,
-42134,
-42155,
-42167,
-42186,
-42186,
-42186,
-42193,
-42215,
-42224,
-42242,
-42249,
-42262,
-42286,
-42303,
-42316,
-42340,
-42360,
-42392,
-42392,
-42399,
-42406,
-42433,
-42449,
-42449,
-42459,
-42485,
-42513,
-42530,
-42537,
-42537,
-42544,
-42576,
-42576,
-42583,
-42583,
-42590,
-42599,
-42628,
-42649,
-42649,
-42656,
-42697,
-42704,
+42086,
+42086,
+42086,
+42103,
+42103,
+42122,
+42129,
+42136,
+42157,
+42164,
+42179,
+42179,
+42212,
+42226,
+42233,
+42240,
+42240,
+42247,
+42274,
+42308,
+42315,
+42343,
+42343,
+42385,
+42408,
+42415,
+42415,
+42415,
+42415,
+42436,
+42443,
+42450,
+42450,
+42457,
+42464,
+42471,
+42484,
+42508,
+42529,
+42548,
+42548,
+42596,
+42596,
+42596,
+42603,
+42624,
+42645,
+42661,
+42684,
+42684,
+42694,
+42694,
+42701,
+42701,
+42720,
42720,
-42739,
-42739,
-42815,
-42815,
-42834,
-42834,
-42870,
-42892,
-42899,
-42899,
-42919,
-42939,
-42969,
-42969,
-42979,
-42979,
-42979,
-42990,
-43030,
-43030,
-43052,
-43052,
-43074,
-43102,
-43102,
-43102,
-43130,
-43147,
-43154,
+42754,
+42776,
+42795,
+42795,
+42808,
+42808,
+42846,
+42855,
+42864,
+42882,
+42888,
+42909,
+42909,
+42929,
+42964,
+42985,
+43001,
+43017,
+43043,
+43050,
+43050,
+43060,
+43073,
+43091,
+43111,
+43134,
43172,
-43179,
-43199,
-43211,
-43215,
-43222,
-43222,
+43172,
+43172,
+43204,
+43250,
+43250,
43257,
-43284,
-43302,
-43352,
-43368,
-43368,
-43368,
-43381,
-43393,
-43423,
-43444,
-43487,
-43494,
-43523,
-43547,
-43567,
-43595,
-43612,
-43612,
-43619,
-43619,
-43640,
-43646,
-43664,
-43697,
-43717,
-43724,
-43724,
-43744,
-43767,
-43776,
-43781,
-43801,
-43801,
-43808,
-43808,
-43815,
-43822,
-43836,
-43850,
-43869,
+43286,
+43325,
+43345,
+43362,
+43362,
+43362,
+43362,
+43362,
+43430,
+43430,
+43430,
+43437,
+43437,
+43455,
+43455,
+43464,
+43464,
+43471,
+43471,
+43471,
+43471,
+43484,
+43484,
+43490,
+43490,
+43513,
+43526,
+43546,
+43546,
+43553,
+43571,
+43584,
+43584,
+43631,
+43642,
+43642,
+43642,
+43682,
+43702,
+43702,
+43722,
+43729,
+43729,
+43756,
+43783,
+43783,
+43795,
+43814,
+43818,
+43824,
+43854,
+43854,
+43861,
+43861,
+43868,
43888,
-43895,
-43911,
-43943,
-43963,
-43963,
-43998,
-43998,
-44033,
-44033,
-44047,
-44064,
-44077,
-44077,
-44101,
-44112,
-44112,
-44112,
-44130,
-44130,
-44130,
-44155,
-44166,
-44166,
-44166,
-44184,
-44184,
-44268,
-44268,
-44291,
-44317,
-44326,
-44353,
-44353,
-44392,
-44408,
-44444,
-44444,
-44444,
-44444,
-44444,
-44451,
-44483,
+43888,
+43893,
+43900,
+43917,
+43939,
+43939,
+43939,
+43946,
+43980,
+43980,
+43996,
+44024,
+44030,
+44036,
+44036,
+44043,
+44043,
+44055,
+44071,
+44087,
+44087,
+44097,
+44097,
+44097,
+44110,
+44158,
+44164,
+44171,
+44208,
+44208,
+44235,
+44241,
+44241,
+44241,
+44241,
+44241,
+44251,
+44251,
+44275,
+44275,
+44300,
+44307,
+44307,
+44314,
+44321,
+44332,
+44377,
+44400,
+44426,
+44432,
+44446,
+44446,
+44476,
+44476,
+44486,
+44486,
+44486,
+44486,
44502,
-44525,
-44525,
-44570,
-44606,
-44606,
-44658,
-44677,
-44677,
-44711,
-44711,
-44711,
-44711,
-44711,
-44742,
-44742,
-44742,
-44749,
-44763,
-44804,
+44512,
+44522,
+44535,
+44550,
+44574,
+44597,
+44605,
+44616,
+44616,
+44622,
+44622,
+44628,
+44636,
+44636,
+44636,
+44643,
+44643,
+44662,
+44669,
+44701,
+44720,
+44720,
+44727,
+44750,
+44754,
+44772,
+44772,
44804,
-44854,
-44866,
-44866,
-44884,
-44884,
-44894,
-44909,
-44916,
-44916,
-44923,
-44938,
-44958,
-44965,
-45004,
-45016,
-45030,
-45050,
-45060,
-45060,
-45066,
-45073,
-45077,
-45084,
-45105,
-45105,
-45105,
-45105,
-45105,
-45112,
-45112,
-45130,
-45139,
-45159,
-45166,
-45208,
-45223,
-45251,
+44819,
+44835,
+44859,
+44859,
+44883,
+44887,
+44898,
+44910,
+44922,
+44939,
+44939,
+44939,
+44945,
+44945,
+44945,
+44952,
+44952,
+44952,
+44991,
+45023,
+45054,
+45071,
+45071,
+45071,
+45080,
+45102,
+45102,
+45102,
+45128,
+45132,
+45162,
+45175,
+45193,
+45199,
+45199,
+45206,
+45221,
+45228,
+45243,
45258,
-45275,
-45291,
+45276,
+45280,
45291,
45310,
-45323,
-45351,
-45358,
-45368,
-45399,
-45413,
-45437,
-45437,
-45446,
-45473,
-45481,
-45488,
-45488,
-45488,
-45488,
-45501,
-45526,
-45544,
-45589,
-45612,
-45632,
-45632,
-45658,
-45672,
-45715,
-45721,
-45721,
-45727,
-45734,
-45759,
-45810,
-45838,
-45903,
-45915,
-45952,
-45959,
-45978,
-45991,
-45997,
-45997,
-45997,
-45997,
-46020,
-46020,
-46038,
-46070,
-46076,
-46076,
-46076,
-46093,
-46112,
-46135,
-46152,
-46152,
-46182,
-46182,
-46182,
-46182,
-46182,
-46182,
-46182,
-46182,
-46198,
-46222,
-46222,
-46229,
-46229,
-46240,
-46261,
-46273,
-46273,
-46288,
-46288,
-46288,
-46314,
-46314,
-46314,
-46327,
-46327,
-46327,
-46362,
-46377,
-46377,
-46383,
-46383,
-46383,
+45331,
+45338,
+45346,
+45346,
+45383,
+45383,
+45390,
+45416,
+45442,
+45449,
+45477,
+45484,
+45503,
+45503,
+45503,
+45510,
+45547,
+45561,
+45571,
+45578,
+45585,
+45617,
+45617,
+45617,
+45617,
+45676,
+45700,
+45730,
+45745,
+45745,
+45765,
+45796,
+45803,
+45829,
+45833,
+45843,
+45851,
+45886,
+45886,
+45909,
+45916,
+45916,
+45916,
+45923,
+45963,
+45984,
+45984,
+46004,
+46022,
+46052,
+46090,
+46113,
+46119,
+46138,
+46166,
+46166,
+46179,
+46196,
+46224,
+46224,
+46224,
+46224,
+46224,
+46234,
+46234,
+46289,
+46309,
+46328,
+46334,
+46357,
+46369,
46383,
-46391,
-46391,
-46400,
-46400,
-46400,
-46404,
-46433,
-46450,
-46475,
-46493,
-46515,
-46521,
-46521,
-46521,
-46546,
-46567,
-46567,
-46567,
+46390,
+46398,
+46398,
+46412,
+46443,
+46457,
+46476,
+46476,
+46484,
+46484,
+46484,
+46504,
+46522,
+46522,
+46522,
+46522,
+46538,
+46538,
+46544,
+46544,
46582,
46582,
46582,
-46603,
-46603,
-46603,
-46620,
-46653,
-46653,
-46659,
-46690,
-46700,
-46700,
-46719,
-46736,
-46736,
-46763,
-46763,
-46763,
-46785,
-46785,
+46596,
+46596,
+46613,
+46621,
+46628,
+46643,
+46657,
+46665,
+46699,
+46707,
+46716,
+46720,
+46747,
+46762,
+46762,
+46770,
46796,
-46811,
-46811,
-46819,
-46819,
-46819,
-46855,
-46855,
-46874,
-46874,
-46893,
+46806,
+46816,
+46827,
+46827,
+46827,
+46844,
+46857,
+46867,
+46881,
+46896,
+46903,
+46903,
+46903,
46911,
-46931,
-46931,
-46931,
-46941,
-46954,
-46961,
-46967,
-46996,
-47009,
-47009,
-47046,
-47046,
-47046,
-47046,
-47046,
-47074,
+46932,
+46947,
+46964,
+46964,
+46984,
+47006,
+47013,
+47013,
+47013,
+47027,
+47027,
+47069,
+47077,
+47077,
+47077,
+47083,
47093,
-47100,
-47121,
-47130,
-47168,
-47168,
-47168,
-47168,
-47168,
-47168,
-47209,
-47243,
-47282,
+47093,
+47106,
+47181,
+47195,
+47195,
+47195,
+47237,
+47273,
47295,
47295,
-47302,
-47336,
-47346,
-47346,
-47353,
-47353,
-47359,
-47366,
-47373,
-47380,
-47419,
-47434,
-47441,
-47458,
-47486,
-47486,
-47486,
-47493,
-47512,
-47519,
-47519,
-47519,
-47519,
-47536,
-47550,
-47575,
-47601,
-47601,
-47612,
-47619,
-47643,
-47655,
-47655,
-47670,
-47670,
-47683,
-47690,
-47690,
-47727,
-47740,
-47747,
-47755,
-47771,
-47771,
-47806,
-47806,
-47813,
-47819,
-47819,
-47819,
-47826,
-47851,
-47858,
-47865,
-47890,
-47912,
+47301,
+47343,
+47349,
+47369,
+47393,
+47409,
+47414,
+47428,
+47428,
+47454,
+47499,
+47511,
+47529,
+47535,
+47535,
+47535,
+47535,
+47535,
+47547,
+47572,
+47587,
+47587,
+47587,
+47625,
+47625,
+47645,
+47664,
+47664,
+47696,
+47704,
+47731,
+47769,
+47790,
+47799,
+47799,
+47816,
+47816,
+47833,
+47833,
+47833,
+47839,
+47856,
+47877,
+47877,
47918,
-47939,
-47955,
-47996,
-48029,
-48029,
-48029,
-48050,
-48050,
-48068,
-48092,
-48106,
-48106,
-48117,
-48117,
-48134,
-48134,
-48134,
-48134,
-48134,
-48134,
-48134,
-48134,
-48143,
-48158,
-48192,
-48199,
-48199,
-48206,
-48234,
-48270,
-48277,
-48322,
-48337,
-48337,
-48337,
-48344,
-48351,
-48364,
-48371,
-48371,
-48378,
-48395,
-48402,
-48402,
-48402,
-48412,
-48421,
-48421,
-48445,
-48452,
+47948,
+47956,
+47978,
+47978,
+47991,
+47991,
+47991,
+48008,
+48008,
+48019,
+48031,
+48045,
+48045,
+48045,
+48045,
+48066,
+48066,
+48070,
+48090,
+48119,
+48136,
+48142,
+48149,
+48149,
+48160,
+48160,
+48160,
+48160,
+48172,
+48172,
+48185,
+48196,
+48196,
+48218,
+48218,
+48225,
+48225,
+48225,
+48225,
+48235,
+48249,
+48249,
+48258,
+48258,
+48284,
+48284,
+48308,
+48326,
+48341,
+48370,
+48370,
+48394,
+48429,
+48429,
+48437,
+48442,
48452,
48452,
-48482,
-48500,
-48542,
-48542,
-48559,
-48579,
-48611,
-48611,
-48628,
-48651,
-48657,
-48657,
-48676,
-48676,
-48676,
-48676,
-48683,
-48689,
-48722,
-48729,
-48729,
-48736,
-48749,
-48765,
+48456,
+48479,
+48479,
+48485,
+48492,
+48498,
+48498,
+48498,
+48523,
+48560,
+48581,
+48597,
+48597,
+48597,
+48624,
+48624,
+48652,
+48665,
+48705,
+48705,
+48712,
+48726,
+48726,
+48726,
+48760,
+48760,
+48770,
+48770,
+48770,
+48770,
+48770,
+48770,
+48770,
+48770,
+48770,
+48770,
+48779,
+48786,
+48786,
48786,
-48802,
-48802,
-48802,
-48832,
-48853,
-48869,
-48888,
-48888,
-48895,
-48922,
-48922,
-48922,
-48922,
-48943,
-48943,
-48956,
-48973,
-48973,
-48986,
-48992,
-49006,
-49045,
-49064,
+48797,
+48811,
+48820,
+48820,
+48820,
+48836,
+48836,
+48842,
+48871,
+48894,
+48894,
+48894,
+48894,
+48894,
+48911,
+48935,
+48935,
+48935,
+48968,
+48979,
+48994,
+49007,
+49019,
+49040,
+49051,
49071,
-49080,
-49116,
-49123,
-49130,
-49137,
-49172,
-49193,
-49193,
-49193,
-49193,
-49210,
-49217,
-49224,
-49261,
-49261,
-49285,
-49310,
-49327,
-49343,
-49350,
-49371,
-49371,
+49079,
+49079,
+49096,
+49106,
+49106,
+49128,
+49138,
+49138,
+49138,
+49150,
+49150,
+49159,
+49219,
+49262,
+49262,
+49300,
+49300,
+49300,
+49331,
+49337,
+49347,
+49347,
+49347,
+49368,
+49368,
+49368,
+49368,
+49368,
49378,
-49385,
-49392,
-49392,
-49428,
-49448,
-49464,
-49512,
-49542,
-49549,
-49556,
-49562,
-49594,
-49623,
-49630,
-49674,
-49674,
-49699,
+49378,
+49378,
+49387,
+49403,
+49412,
+49412,
+49422,
+49441,
+49474,
+49498,
+49498,
+49498,
+49514,
+49514,
+49524,
+49524,
+49535,
+49535,
+49546,
+49546,
+49551,
+49602,
+49602,
+49609,
+49613,
+49624,
+49624,
+49624,
+49624,
+49641,
+49648,
+49648,
+49648,
+49675,
+49692,
+49692,
+49709,
+49724,
49739,
-49752,
-49775,
-49775,
-49775,
-49793,
-49803,
-49819,
-49819,
-49819,
-49828,
-49846,
+49770,
+49770,
+49770,
+49770,
+49770,
+49786,
+49825,
+49825,
+49825,
+49834,
+49853,
+49853,
49860,
-49860,
-49867,
-49888,
-49895,
-49909,
-49941,
-49947,
-49947,
-50014,
-50030,
-50036,
-50036,
-50036,
-50049,
-50071,
-50097,
-50136,
-50143,
-50158,
-50158,
-50165,
-50165,
-50183,
-50196,
+49875,
+49891,
+49914,
+49924,
+49924,
+49939,
+49949,
+49960,
+49970,
+49970,
+49980,
+49994,
+50001,
+50013,
+50039,
+50039,
+50039,
+50065,
+50081,
+50114,
+50142,
+50169,
+50180,
+50180,
50203,
50203,
-50210,
-50237,
-50248,
+50220,
+50220,
+50229,
+50236,
+50236,
50266,
-50280,
-50293,
-50307,
+50275,
+50295,
50307,
-50307,
-50307,
-50346,
+50340,
50359,
-50390,
-50412,
-50440,
-50440,
-50440,
-50446,
-50462,
-50462,
-50478,
-50486,
-50486,
-50494,
-50498,
-50552,
-50569,
-50569,
-50569,
-50569,
-50569,
-50569,
-50591,
-50604,
-50604,
-50611,
-50618,
-50642,
-50684,
-50720,
-50720,
-50750,
-50754,
-50754,
-50784,
-50784,
-50817,
-50832,
-50858,
-50874,
-50874,
-50919,
-50955,
-50955,
-50962,
-50962,
-50992,
-51013,
-51013,
-51020,
-51046,
-51056,
-51115,
-51122,
-51152,
-51189,
-51189,
-51196,
-51203,
-51203,
-51217,
-51217,
-51217,
-51265,
-51304,
-51327,
-51347,
-51360,
-51371,
-51386,
-51386,
-51411,
-51452,
-51452,
-51452,
-51459,
-51484,
-51491,
-51491,
-51491,
-51491,
-51510,
-51510,
+50359,
+50374,
+50374,
+50387,
+50387,
+50387,
+50387,
+50387,
+50387,
+50409,
+50414,
+50423,
+50423,
+50449,
+50449,
+50449,
+50459,
+50482,
+50499,
+50499,
+50514,
+50522,
+50522,
+50522,
+50540,
+50558,
+50565,
+50574,
+50574,
+50620,
+50620,
+50620,
+50624,
+50633,
+50633,
+50653,
+50665,
+50673,
+50673,
+50700,
+50700,
+50700,
+50713,
+50713,
+50713,
+50740,
+50748,
+50767,
+50767,
+50767,
+50775,
+50781,
+50789,
+50803,
+50803,
+50803,
+50803,
+50803,
+50810,
+50810,
+50821,
+50827,
+50839,
+50876,
+50893,
+50893,
+50910,
+50942,
+50960,
+50960,
+50984,
+50984,
+50991,
+50991,
+51025,
+51043,
+51058,
+51073,
+51077,
+51077,
+51092,
+51092,
+51113,
+51144,
+51160,
+51172,
+51188,
+51198,
+51198,
+51208,
+51221,
+51231,
+51235,
+51235,
+51255,
+51271,
+51288,
+51288,
+51288,
+51307,
+51307,
+51318,
+51318,
+51318,
+51338,
+51338,
+51349,
+51349,
+51364,
+51375,
+51375,
+51416,
+51416,
+51416,
+51416,
+51416,
+51437,
+51437,
+51457,
+51470,
+51470,
+51470,
+51486,
+51501,
51521,
-51565,
-51581,
-51588,
-51601,
-51620,
-51620,
-51635,
-51666,
-51683,
-51690,
-51718,
-51718,
-51718,
-51757,
-51779,
-51779,
-51779,
-51779,
-51779,
-51779,
-51809,
-51814,
-51820,
-51842,
-51886,
-51900,
-51900,
-51900,
-51900,
-51900,
-51910,
-51927,
-51927,
-51945,
-51962,
-51968,
-51974,
-51974,
-51980,
-51980,
-51980,
-51980,
-52001,
-52011,
-52011,
-52025,
-52025,
-52025,
-52039,
-52071,
-52096,
-52096,
-52096,
-52096,
-52102,
-52119,
-52119,
-52119,
-52119,
-52125,
-52153,
-52164,
-52164,
-52164,
-52195,
-52207,
-52223,
-52255,
+51531,
+51548,
+51548,
+51558,
+51576,
+51611,
+51611,
+51611,
+51632,
+51670,
+51682,
+51695,
+51717,
+51717,
+51717,
+51717,
+51732,
+51743,
+51743,
+51758,
+51765,
+51765,
+51782,
+51812,
+51812,
+51812,
+51812,
+51828,
+51828,
+51828,
+51845,
+51845,
+51851,
+51851,
+51908,
+51923,
+51923,
+51923,
+51932,
+51953,
+51953,
+51969,
+52002,
+52002,
+52056,
+52072,
+52072,
+52072,
+52092,
+52137,
+52145,
+52145,
+52145,
+52163,
+52183,
+52219,
+52219,
+52227,
+52256,
+52267,
+52267,
+52276,
52276,
52276,
-52299,
-52305,
-52305,
-52320,
-52320,
-52359,
-52373,
-52389,
-52389,
-52396,
-52401,
-52401,
+52295,
+52363,
+52375,
+52375,
+52395,
+52395,
52414,
52414,
-52420,
-52432,
-52432,
-52432,
-52449,
-52449,
-52456,
-52466,
-52466,
+52414,
+52429,
+52429,
+52429,
+52445,
+52471,
52471,
52471,
-52478,
-52478,
-52478,
-52507,
-52507,
-52507,
-52519,
-52537,
-52537,
-52537,
-52537,
-52556,
-52569,
-52569,
-52569,
-52585,
-52594,
-52594,
-52631,
-52652,
-52680,
-52695,
-52710,
-52745,
-52745,
-52745,
-52758,
-52764,
+52471,
+52492,
+52492,
+52510,
+52530,
+52530,
+52530,
+52538,
+52555,
+52555,
+52579,
+52587,
+52587,
+52587,
+52644,
+52644,
+52644,
+52644,
+52644,
+52654,
+52654,
+52667,
+52690,
+52690,
+52702,
+52727,
+52727,
+52755,
+52773,
+52778,
52778,
-52789,
-52805,
-52805,
-52821,
-52842,
-52855,
-52855,
-52896,
-52896,
-52928,
-52928,
-52941,
-52947,
-52947,
-52960,
-52960,
-52990,
-53004,
+52790,
+52810,
+52826,
+52826,
+52826,
+52826,
+52834,
+52848,
+52848,
+52848,
+52856,
+52875,
+52885,
+52895,
+52895,
+52895,
+52895,
+52908,
+52908,
+52959,
+52963,
+52963,
+52988,
+52993,
53014,
-53020,
-53020,
-53020,
-53020,
-53034,
-53073,
-53084,
-53084,
-53100,
-53100,
-53100,
-53115,
-53123,
-53148,
-53178,
-53188,
-53202,
-53202,
-53218,
-53218,
-53228,
-53251,
-53256,
-53262,
-53262,
-53262,
-53282,
-53299,
+53014,
+53056,
+53080,
+53111,
+53111,
+53118,
+53118,
+53134,
+53161,
+53161,
+53161,
+53172,
+53172,
+53194,
+53208,
+53208,
+53208,
+53233,
+53233,
+53233,
+53240,
+53240,
+53247,
+53274,
+53296,
+53321,
+53321,
+53338,
53338,
-53358,
-53358,
-53431,
-53436,
-53436,
-53456,
-53504,
-53504,
-53517,
-53531,
-53574,
-53583,
-53619,
-53631,
-53631,
-53631,
-53631,
-53640,
-53670,
-53670,
-53718,
-53718,
+53355,
+53362,
+53369,
+53376,
+53393,
+53393,
+53393,
+53393,
+53400,
+53412,
+53426,
+53437,
+53460,
+53467,
+53509,
+53509,
+53509,
+53532,
+53532,
+53542,
+53588,
+53593,
+53600,
+53600,
+53615,
+53615,
+53615,
+53630,
+53637,
+53637,
+53653,
+53667,
+53674,
+53674,
+53681,
+53681,
+53681,
53728,
-53733,
-53749,
-53774,
-53774,
-53811,
-53811,
+53735,
+53740,
+53748,
+53772,
+53783,
+53791,
+53791,
+53791,
+53791,
+53791,
+53804,
53822,
-53835,
-53842,
-53882,
+53831,
+53861,
+53861,
+53861,
+53879,
+53893,
+53899,
+53899,
+53899,
53903,
-53919,
-53932,
-53942,
-53942,
-53951,
-53978,
-54001,
-54015,
-54015,
-54015,
-54015,
-54024,
-54024,
-54031,
-54067,
-54081,
-54081,
-54081,
-54086,
-54086,
-54105,
-54132,
-54132,
-54132,
+53903,
+53914,
+53924,
+53924,
+53924,
+53924,
+53946,
+53975,
+53988,
+53988,
+54008,
+54008,
+54016,
+54033,
+54054,
+54094,
+54123,
54140,
54140,
-54178,
-54178,
-54178,
-54192,
-54192,
-54209,
-54231,
-54258,
+54147,
+54147,
+54180,
+54180,
+54198,
+54198,
+54217,
+54217,
+54234,
+54241,
+54251,
54258,
-54280,
-54287,
-54293,
-54308,
-54308,
-54315,
+54300,
+54300,
+54307,
+54307,
54332,
54332,
-54346,
-54379,
-54379,
-54421,
-54444,
-54467,
-54481,
-54481,
-54497,
-54529,
-54555,
-54555,
-54597,
-54614,
-54620,
-54635,
-54635,
-54635,
-54652,
-54664,
-54664,
-54724,
-54752,
-54752,
-54762,
-54778,
-54788,
-54788,
-54796,
-54835,
-54848,
-54848,
-54864,
-54914,
-54940,
-54940,
-54945,
-54957,
-54966,
-54966,
-54966,
-54966,
-54988,
-54988,
-54988,
-55008,
-55008,
-55008,
-55014,
-55014,
-55030,
-55044,
+54339,
+54356,
+54370,
+54380,
+54380,
+54380,
+54380,
+54380,
+54380,
+54384,
+54405,
+54438,
+54459,
+54480,
+54480,
+54487,
+54494,
+54528,
+54538,
+54552,
+54552,
+54552,
+54552,
+54568,
+54585,
+54595,
+54624,
+54624,
+54637,
+54644,
+54644,
+54644,
+54644,
+54657,
+54657,
+54677,
+54677,
+54684,
+54684,
+54697,
+54697,
+54712,
+54739,
+54749,
+54773,
+54793,
+54802,
+54827,
+54834,
+54841,
+54841,
+54873,
+54882,
+54901,
+54941,
+54948,
+54963,
+54970,
+54986,
+54986,
+55001,
+55029,
+55035,
+55065,
55072,
-55072,
-55102,
-55102,
-55102,
-55130,
-55137,
-55137,
-55137,
-55137,
-55137,
-55156,
-55168,
-55168,
-55181,
-55226,
-55226,
-55233,
-55246,
-55246,
-55256,
-55256,
-55261,
-55261,
-55261,
-55282,
-55298,
-55314,
-55321,
-55330,
-55339,
+55089,
+55111,
+55124,
+55143,
+55143,
+55143,
+55150,
+55150,
+55189,
+55196,
+55216,
+55245,
+55252,
+55252,
+55272,
+55272,
+55332,
55339,
-55350,
-55368,
-55381,
-55401,
-55412,
-55412,
-55412,
-55412,
-55412,
-55430,
-55440,
-55461,
-55461,
-55474,
-55518,
-55537,
-55537,
-55553,
-55571,
-55571,
-55615,
-55622,
-55622,
-55622,
-55634,
-55650,
-55650,
-55685,
-55691,
-55691,
-55691,
-55697,
-55734,
-55734,
+55363,
+55396,
+55410,
+55433,
+55447,
+55454,
+55458,
+55458,
+55487,
+55487,
+55497,
+55497,
+55497,
+55544,
+55544,
+55548,
+55562,
+55568,
+55568,
+55568,
+55568,
+55585,
+55585,
+55585,
+55604,
+55604,
+55619,
+55625,
+55632,
+55632,
+55671,
+55671,
+55684,
+55684,
+55684,
+55709,
+55717,
+55727,
55734,
+55769,
55801,
-55813,
-55844,
-55857,
-55863,
-55876,
-55890,
-55924,
+55815,
+55837,
+55848,
+55855,
+55871,
+55885,
+55905,
+55926,
+55926,
55942,
-55949,
-55970,
-55970,
-55970,
-55970,
-55990,
-56006,
-56006,
-56029,
-56038,
-56050,
-56057,
-56057,
-56073,
-56073,
-56073,
-56073,
-56073,
-56085,
-56085,
-56108,
-56108,
-56108,
-56141,
-56155,
-56168,
+55942,
+55973,
+55973,
+55973,
+55973,
+55979,
+56020,
+56033,
+56033,
+56047,
+56054,
+56072,
+56089,
+56096,
+56103,
+56130,
+56146,
+56146,
+56153,
56179,
-56186,
-56204,
-56245,
-56257,
-56257,
-56257,
-56274,
-56304,
-56341,
-56341,
-56341,
-56367,
-56405,
-56405,
-56405,
-56405,
-56443,
-56443,
-56463,
-56482,
-56492,
-56522,
-56539,
-56539,
-56539,
-56546,
-56553,
-56586,
-56605,
-56612,
-56631,
-56631,
-56631,
-56649,
-56649,
-56670,
-56684,
-56684,
-56733,
-56769,
-56769,
-56779,
-56807,
-56823,
-56839,
-56870,
-56870,
-56870,
-56870,
-56886,
-56886,
-56886,
-56886,
-56886,
-56908,
-56908,
-56964,
-56964,
-56970,
-56982,
-57001,
-57001,
-57001,
-57010,
-57032,
-57039,
-57039,
-57070,
-57080,
-57088,
-57095,
-57095,
-57112,
-57112,
-57131,
-57141,
-57161,
-57193,
-57193,
-57204,
-57221,
-57221,
-57221,
-57221,
-57221,
-57231,
-57241,
-57271,
-57298,
-57310,
-57321,
-57321,
-57321,
-57336,
-57336,
-57342,
-57349,
-57349,
-57349,
-57349,
-57349,
-57349,
-57366,
-57397,
-57406,
-57437,
-57437,
-57456,
-57511,
-57527,
-57548,
-57564,
-57564,
-57564,
-57586,
-57586,
-57611,
-57627,
-57649,
-57656,
-57708,
-57708,
-57708,
-57708,
-57728,
-57728,
-57747,
-57747,
-57747,
-57756,
-57772,
-57784,
-57784,
-57784,
-57806,
-57854,
-57861,
-57876,
-57882,
-57882,
-57882,
-57890,
-57911,
-57911,
-57911,
-57918,
-57918,
-57936,
-57936,
-57936,
-57936,
-57942,
-57942,
-57942,
-57942,
-57947,
-57947,
-57947,
-57954,
+56183,
+56202,
+56216,
+56226,
+56260,
+56287,
+56300,
+56307,
+56345,
+56359,
+56376,
+56390,
+56410,
+56417,
+56435,
+56442,
+56462,
+56462,
+56480,
+56514,
+56521,
+56521,
+56521,
+56528,
+56558,
+56565,
+56626,
+56646,
+56685,
+56692,
+56718,
+56741,
+56741,
+56768,
+56804,
+56821,
+56821,
+56851,
+56904,
+56911,
+56918,
+56925,
+56940,
+56962,
+56977,
+56984,
+56999,
+57019,
+57019,
+57019,
+57037,
+57049,
+57049,
+57083,
+57083,
+57115,
+57115,
+57152,
+57178,
+57178,
+57209,
+57223,
+57244,
+57244,
+57244,
+57244,
+57273,
+57280,
+57287,
+57287,
+57332,
+57368,
+57368,
+57375,
+57375,
+57375,
+57412,
+57412,
+57418,
+57433,
+57433,
+57452,
+57462,
+57462,
+57469,
+57476,
+57485,
+57499,
+57544,
+57551,
+57551,
+57561,
+57568,
+57577,
+57593,
+57593,
+57606,
+57606,
+57633,
+57633,
+57644,
+57644,
+57659,
+57659,
+57689,
+57710,
+57718,
+57725,
+57725,
+57725,
+57732,
+57732,
+57732,
+57732,
+57745,
+57767,
+57774,
+57809,
+57809,
+57809,
+57829,
+57880,
+57915,
+57927,
57954,
-57978,
-57978,
-58000,
-58006,
-58013,
-58013,
-58013,
-58027,
-58076,
-58093,
-58093,
-58093,
-58099,
-58099,
-58107,
-58118,
-58158,
-58158,
-58173,
-58181,
-58187,
-58194,
-58194,
-58215,
-58240,
-58240,
-58240,
-58240,
-58256,
-58256,
-58256,
-58263,
-58282,
-58290,
-58290,
+58002,
+58009,
+58009,
+58021,
+58035,
+58042,
+58049,
+58069,
+58084,
+58105,
+58105,
+58122,
+58122,
+58140,
+58177,
+58195,
+58199,
+58220,
+58239,
+58252,
+58252,
+58252,
+58291,
58312,
58312,
-58312,
-58317,
-58317,
-58317,
58333,
-58345,
-58345,
-58361,
-58361,
-58387,
-58414,
-58438,
+58351,
+58398,
+58409,
+58409,
+58409,
+58409,
+58416,
+58446,
58446,
-58467,
-58467,
-58482,
-58482,
-58512,
-58512,
-58512,
-58520,
-58542,
-58569,
-58598,
-58607,
-58626,
-58647,
-58666,
-58688,
-58688,
-58688,
-58697,
-58703,
-58703,
-58703,
-58703,
-58721,
-58742,
-58794,
+58453,
+58469,
+58476,
+58509,
+58509,
+58509,
+58509,
+58509,
+58529,
+58555,
+58571,
+58587,
+58587,
+58587,
+58587,
+58594,
+58594,
+58628,
+58635,
+58668,
+58668,
+58693,
+58700,
+58707,
+58761,
+58789,
+58789,
58829,
-58847,
-58866,
-58866,
-58874,
-58880,
-58880,
-58887,
-58887,
-58900,
-58900,
-58900,
-58928,
+58854,
+58854,
+58871,
+58878,
+58886,
+58893,
+58931,
+58938,
58945,
-58945,
-58963,
-58963,
-58963,
-58985,
-58985,
-58991,
-59011,
-59062,
-59062,
-59062,
-59062,
-59062,
-59062,
-59095,
-59115,
-59138,
-59138,
-59138,
-59155,
+58952,
+58970,
+58984,
+59013,
+59038,
+59045,
+59068,
+59077,
+59077,
+59086,
+59086,
+59086,
+59086,
+59112,
+59151,
+59151,
59166,
59166,
-59202,
-59202,
-59202,
-59211,
-59218,
-59224,
+59166,
+59166,
+59166,
+59194,
59224,
59224,
-59242,
-59242,
-59268,
-59268,
-59308,
-59314,
-59326,
-59326,
-59340,
-59340,
-59345,
-59368,
-59373,
-59373,
-59412,
-59412,
-59435,
-59435,
-59435,
-59435,
-59455,
-59466,
+59247,
+59247,
+59247,
+59259,
+59283,
+59283,
+59283,
+59283,
+59290,
+59297,
+59330,
+59349,
+59362,
+59374,
+59437,
+59449,
+59459,
59466,
-59466,
-59481,
-59481,
-59481,
-59481,
-59500,
-59517,
-59517,
-59549,
-59555,
-59555,
-59555,
-59568,
-59595,
-59615,
-59631,
-59631,
-59631,
-59631,
+59488,
+59494,
+59511,
+59537,
+59560,
+59574,
+59598,
+59611,
+59634,
+59634,
59641,
59641,
-59654,
-59678,
-59678,
-59694,
-59700,
-59700,
-59700,
-59700,
-59700,
-59714,
-59721,
+59641,
+59641,
+59652,
+59663,
+59663,
+59679,
+59679,
+59685,
59721,
-59740,
-59749,
-59765,
-59765,
-59784,
-59784,
+59727,
+59727,
+59727,
+59741,
+59760,
+59771,
+59810,
59822,
-59822,
-59867,
-59878,
-59890,
-59890,
-59925,
-59925,
-59925,
-59925,
-59925,
-59942,
-59942,
-59964,
-59964,
-59964,
-59978,
-59985,
-59997,
-60010,
-60010,
-60055,
-60091,
-60101,
-60101,
-60108,
-60114,
-60139,
-60139,
-60139,
-60156,
-60156,
-60156,
-60163,
-60163,
-60169,
-60175,
-60181,
-60181,
-60181,
-60187,
-60195,
-60215,
-60215,
-60215,
-60215,
-60234,
-60234,
-60234,
-60244,
-60284,
-60290,
-60305,
-60305,
-60317,
-60380,
-60388,
-60388,
-60393,
-60400,
-60400,
-60400,
-60400,
-60407,
-60407,
-60407,
-60407,
-60431,
-60450,
-60460,
-60512,
-60522,
-60532,
-60532,
-60552,
-60560,
-60560,
-60560,
-60594,
-60594,
-60607,
-60615,
-60615,
-60615,
-60628,
-60628,
-60649,
-60655,
-60663,
-60675,
+59831,
+59850,
+59856,
+59880,
+59923,
+59966,
+59973,
+59987,
+60006,
+60041,
+60041,
+60070,
+60103,
+60119,
+60131,
+60136,
+60152,
+60184,
+60191,
+60220,
+60228,
+60253,
+60253,
+60280,
+60303,
+60303,
+60310,
+60345,
+60345,
+60372,
+60395,
+60406,
+60430,
+60454,
+60461,
+60486,
+60497,
+60504,
+60511,
+60528,
+60535,
+60535,
+60535,
+60556,
+60556,
+60563,
+60581,
+60599,
+60599,
+60616,
+60636,
+60636,
+60668,
+60690,
+60690,
60697,
-60713,
-60731,
+60716,
+60723,
60747,
-60754,
-60761,
-60761,
-60778,
-60778,
-60778,
-60778,
-60782,
-60793,
-60811,
-60811,
-60848,
-60874,
-60904,
-60904,
-60910,
+60759,
+60771,
+60785,
+60792,
+60792,
+60792,
+60815,
+60829,
+60849,
+60849,
+60849,
+60849,
+60859,
+60870,
+60911,
60929,
-60944,
-60959,
-60977,
-60984,
-60992,
-60992,
-61013,
-61019,
-61045,
-61045,
-61049,
-61061,
-61061,
-61061,
-61061,
-61069,
-61089,
-61115,
-61138,
-61148,
-61165,
-61182,
-61203,
-61241,
-61295,
-61295,
-61295,
-61295,
-61308,
-61335,
-61335,
-61335,
-61335,
-61358,
-61406,
-61410,
+60929,
+60947,
+60947,
+60947,
+60947,
+60947,
+60947,
+60947,
+60974,
+60974,
+60974,
+60991,
+61014,
+61025,
+61025,
+61025,
+61062,
+61074,
+61074,
+61074,
+61080,
+61096,
+61112,
+61112,
+61136,
+61136,
+61136,
+61147,
+61154,
+61154,
+61176,
+61176,
+61199,
+61209,
+61224,
+61224,
+61231,
+61246,
+61246,
+61246,
+61266,
+61266,
+61273,
+61294,
+61312,
+61312,
+61332,
+61332,
+61354,
+61371,
+61378,
+61378,
+61378,
61410,
-61418,
-61418,
-61418,
-61418,
-61424,
-61424,
-61424,
-61424,
-61438,
-61452,
-61497,
-61505,
-61505,
-61529,
-61554,
-61575,
-61581,
-61581,
-61615,
-61623,
+61417,
+61433,
+61433,
+61455,
+61489,
+61489,
+61501,
+61501,
+61513,
+61513,
+61547,
+61547,
+61547,
+61558,
+61558,
+61578,
+61584,
+61598,
+61598,
+61598,
+61598,
+61598,
+61598,
+61627,
+61635,
+61635,
+61635,
61663,
61663,
-61677,
-61677,
-61686,
-61686,
-61698,
-61698,
-61698,
-61705,
-61705,
-61705,
-61705,
-61714,
-61714,
-61745,
-61755,
-61761,
-61779,
-61807,
-61807,
-61817,
-61817,
-61855,
-61872,
-61872,
-61872,
-61872,
-61872,
-61872,
-61878,
-61905,
-61905,
-61905,
-61905,
-61930,
-61943,
-61943,
-61949,
+61669,
+61687,
+61687,
+61687,
+61706,
+61723,
+61803,
+61803,
+61803,
+61813,
+61823,
+61842,
+61842,
+61870,
+61870,
+61926,
+61926,
+61926,
+61944,
61970,
-61982,
-61982,
-61982,
-61982,
-61993,
-61993,
-62005,
-62036,
-62036,
-62055,
-62076,
-62076,
-62091,
+61980,
+61980,
+61980,
+61985,
+62001,
+62007,
+62007,
+62035,
+62052,
+62067,
+62081,
+62081,
+62081,
+62081,
+62087,
+62118,
+62118,
62124,
-62134,
-62134,
-62140,
-62161,
+62142,
+62149,
+62149,
62181,
-62193,
-62236,
-62243,
-62261,
-62261,
-62297,
-62297,
-62308,
-62317,
-62317,
-62331,
-62356,
-62356,
-62417,
-62452,
-62452,
-62452,
-62467,
-62467,
-62467,
-62477,
-62477,
-62486,
-62486,
-62510,
-62510,
-62518,
-62548,
-62548,
-62567,
-62567,
-62567,
-62580,
-62580,
-62580,
-62586,
-62593,
-62613,
-62613,
-62628,
-62669,
-62697,
-62697,
-62697,
+62209,
+62209,
+62209,
+62209,
+62225,
+62225,
+62225,
+62232,
+62268,
+62286,
+62320,
+62320,
+62320,
+62320,
+62320,
+62320,
+62320,
+62335,
+62335,
+62343,
+62379,
+62425,
+62425,
+62442,
+62442,
+62474,
+62484,
+62530,
+62555,
+62555,
+62582,
+62582,
+62608,
+62608,
+62621,
+62621,
+62631,
+62681,
+62681,
62697,
62697,
-62718,
-62718,
-62718,
-62718,
-62718,
-62741,
-62771,
-62797,
-62827,
-62847,
-62847,
-62847,
-62847,
-62901,
-62901,
-62901,
-62901,
-62901,
-62915,
-62915,
-62926,
-62940,
-62940,
-62940,
-62948,
-62954,
-62954,
-62960,
-62975,
-62975,
+62723,
+62753,
+62774,
+62774,
+62774,
+62774,
+62774,
+62820,
+62829,
+62829,
+62837,
+62841,
+62841,
+62849,
+62849,
+62857,
+62857,
+62925,
+62931,
+62931,
+62937,
+62966,
+62978,
62987,
-63007,
-63007,
-63044,
-63044,
-63065,
-63065,
-63081,
-63081,
-63100,
-63120,
-63133,
-63150,
-63150,
-63167,
-63167,
-63187,
-63227,
-63227,
-63227,
-63227,
-63227,
-63227,
-63256,
-63273,
-63277,
-63291,
-63297,
-63297,
-63297,
-63297,
-63315,
-63351,
-63368,
-63397,
-63397,
-63397,
-63397,
-63409,
-63437,
-63437,
-63437,
-63444,
-63444,
-63444,
-63489,
-63522,
-63522,
-63522,
-63538,
-63554,
-63554,
-63554,
-63569,
-63576,
-63576,
-63606,
-63615,
-63626,
-63646,
-63670,
-63670,
-63670,
-63696,
-63710,
-63730,
-63742,
-63757,
-63766,
-63792,
-63807,
-63807,
-63828,
+62993,
+63002,
+63016,
+63052,
+63097,
+63101,
+63123,
+63152,
+63175,
+63202,
+63208,
+63214,
+63214,
+63214,
+63214,
+63231,
+63231,
+63239,
+63286,
+63321,
+63333,
+63333,
+63348,
+63348,
+63348,
+63355,
+63355,
+63359,
+63372,
+63394,
+63394,
+63394,
+63410,
+63410,
+63417,
+63417,
+63417,
+63452,
+63469,
+63501,
+63501,
+63511,
+63520,
+63530,
+63530,
+63530,
+63530,
+63543,
+63558,
+63558,
+63574,
+63574,
+63591,
+63613,
+63625,
+63645,
+63645,
+63663,
+63663,
+63675,
+63687,
+63687,
+63687,
+63687,
+63715,
+63731,
+63737,
+63737,
+63737,
+63741,
+63759,
+63759,
+63759,
+63769,
+63769,
+63769,
+63769,
+63769,
+63794,
+63810,
+63841,
63849,
63849,
-63856,
-63876,
-63910,
+63849,
+63849,
+63849,
+63862,
+63862,
+63862,
+63880,
+63886,
+63901,
+63914,
+63928,
63928,
-63945,
-63961,
-63961,
-63982,
-64042,
-64050,
-64066,
-64071,
-64089,
-64099,
-64099,
-64129,
-64150,
-64150,
-64168,
-64168,
-64168,
-64168,
-64168,
-64214,
-64231,
+63955,
+63962,
+63969,
+63981,
+63981,
+63981,
+63981,
+63981,
+63999,
+64014,
+64014,
+64033,
+64048,
+64048,
+64059,
+64059,
+64059,
+64059,
+64108,
+64108,
+64108,
+64108,
+64117,
+64127,
+64158,
+64158,
+64158,
+64178,
+64190,
+64215,
64241,
64241,
-64250,
-64294,
-64294,
-64294,
-64326,
-64355,
-64366,
-64386,
-64386,
-64386,
-64408,
-64408,
-64426,
-64458,
-64458,
-64492,
-64492,
-64498,
-64537,
-64555,
-64573,
-64573,
-64622,
-64642,
-64651,
-64651,
-64659,
-64659,
-64683,
-64683,
-64683,
-64718,
-64718,
-64735,
-64735,
-64741,
-64741,
-64745,
-64745,
-64771,
-64771,
-64771,
-64771,
-64792,
-64800,
-64825,
-64825,
-64825,
-64850,
-64868,
-64868,
-64886,
-64886,
-64897,
-64897,
-64904,
-64909,
-64945,
-64945,
-64965,
-64982,
-65005,
-65005,
-65044,
-65068,
-65082,
-65090,
-65090,
-65113,
-65125,
-65134,
-65151,
-65172,
-65184,
-65211,
-65211,
-65221,
-65277,
-65284,
-65290,
-65290,
-65290,
+64241,
+64241,
+64263,
+64291,
+64295,
+64295,
+64307,
+64307,
+64307,
+64307,
+64307,
+64307,
+64311,
+64352,
+64352,
+64352,
+64368,
+64368,
+64368,
+64412,
+64412,
+64434,
+64443,
+64443,
+64456,
+64456,
+64456,
+64469,
+64514,
+64514,
+64514,
+64514,
+64514,
+64522,
+64522,
+64522,
+64544,
+64578,
+64608,
+64633,
+64644,
+64672,
+64700,
+64716,
+64742,
+64755,
+64755,
+64765,
+64793,
+64846,
+64856,
+64856,
+64879,
+64885,
+64896,
+64896,
+64924,
+64928,
+64928,
+64938,
+64971,
+64971,
+64977,
+65007,
+65019,
+65019,
+65034,
+65073,
+65073,
+65091,
+65091,
+65091,
+65101,
+65101,
+65101,
+65112,
+65146,
+65167,
+65178,
+65178,
+65192,
+65208,
+65227,
+65227,
+65227,
+65227,
+65227,
+65227,
+65227,
+65227,
+65227,
+65271,
+65286,
65290,
-65301,
-65362,
-65380,
-65380,
-65400,
-65411,
-65437,
-65437,
-65437,
-65450,
-65458,
-65458,
-65458,
-65458,
-65483,
-65483,
-65496,
+65324,
+65348,
+65358,
+65412,
+65412,
+65412,
+65419,
+65423,
+65459,
+65466,
+65489,
65496,
-65528,
-65542,
-65568,
-65568,
-65578,
-65578,
-65578,
-65610,
-65610,
-65618,
-65641,
-65664,
-65664,
-65664,
-65664,
-65693,
-65693,
-65693,
-65716,
-65743,
-65760,
-65760,
-65760,
-65767,
-65771,
-65781,
-65811,
-65816,
-65836,
-65836,
-65857,
-65868,
-65880,
-65880,
-65880,
-65886,
-65904,
-65904,
-65919,
-65919,
-65947,
-65951,
-65958,
-65962,
-65972,
-65989,
-65989,
-65989,
-65993,
-66011,
-66011,
+65502,
+65512,
+65538,
+65547,
+65551,
+65585,
+65601,
+65601,
+65612,
+65632,
+65651,
+65657,
+65657,
+65669,
+65669,
+65675,
+65679,
+65701,
+65701,
+65730,
+65756,
+65756,
+65770,
+65789,
+65789,
+65789,
+65818,
+65818,
+65851,
+65851,
+65865,
+65869,
+65879,
+65879,
+65911,
+65911,
+65917,
+65917,
+65936,
+65959,
+65965,
+65965,
+65965,
+65965,
+65990,
+66019,
66036,
-66073,
-66073,
-66079,
-66095,
-66095,
-66124,
-66136,
-66136,
-66154,
-66172,
-66176,
-66176,
-66185,
-66185,
-66185,
-66198,
-66198,
-66236,
-66250,
-66255,
-66277,
-66277,
-66277,
-66291,
-66313,
-66332,
-66352,
-66352,
-66356,
-66378,
-66384,
-66384,
-66399,
-66399,
-66434,
-66444,
-66444,
-66444,
-66486,
-66501,
-66546,
-66556,
-66589,
-66589,
-66589,
-66596,
-66596,
-66607,
-66618,
-66644,
-66672,
-66672,
-66672,
-66686,
-66686,
-66705,
-66705,
-66705,
-66723,
-66733,
-66733,
-66741,
-66764,
-66785,
-66810,
-66810,
-66841,
-66841,
-66841,
-66849,
-66857,
-66857,
-66857,
-66867,
-66885,
-66885,
+66068,
+66076,
+66090,
+66108,
+66130,
+66130,
+66166,
+66184,
+66204,
+66204,
+66217,
+66217,
+66228,
+66228,
+66228,
+66247,
+66247,
+66278,
+66311,
+66316,
+66335,
+66350,
+66368,
+66382,
+66382,
+66382,
+66382,
+66382,
+66382,
+66386,
+66402,
+66408,
+66408,
+66418,
+66422,
+66470,
+66470,
+66491,
+66521,
+66548,
+66548,
+66555,
+66574,
+66581,
+66581,
+66593,
+66593,
+66600,
+66610,
+66636,
+66657,
+66675,
+66675,
+66675,
+66687,
+66721,
+66751,
+66760,
+66781,
+66798,
+66798,
+66811,
+66811,
+66811,
+66819,
+66819,
+66830,
+66830,
+66853,
+66869,
66893,
-66899,
-66919,
-66927,
-66944,
-66954,
-66954,
-66961,
-66993,
-66993,
-67008,
-67022,
-67064,
-67068,
-67089,
-67089,
-67093,
-67106,
+66893,
+66893,
+66893,
+66900,
+66918,
+66940,
+66950,
+66959,
+66959,
+66965,
+67016,
+67023,
+67047,
+67047,
+67062,
+67069,
67106,
-67121,
-67121,
-67125,
67136,
-67145,
-67145,
-67161,
-67161,
-67161,
-67191,
-67191,
-67191,
-67200,
-67200,
-67209,
-67209,
-67209,
-67209,
-67223,
-67223,
-67223,
-67223,
-67223,
-67223,
-67223,
-67237,
-67237,
-67287,
-67287,
-67294,
-67294,
-67294,
-67294,
-67294,
+67167,
+67177,
+67212,
+67230,
+67230,
+67249,
+67279,
+67285,
67312,
-67338,
-67338,
-67338,
-67354,
-67376,
-67387,
-67392,
-67407,
-67407,
-67432,
-67472,
-67483,
-67526,
-67526,
+67330,
+67351,
+67358,
+67374,
+67394,
+67441,
+67473,
+67513,
+67524,
+67524,
+67545,
+67565,
+67573,
67584,
-67605,
-67625,
-67633,
-67649,
-67659,
-67659,
-67659,
-67659,
-67675,
-67712,
-67746,
-67764,
-67764,
-67795,
-67795,
-67799,
-67808,
-67808,
-67817,
-67829,
-67829,
-67836,
-67856,
-67874,
-67874,
-67884,
-67907,
-67907,
-67912,
-67912,
-67936,
-67936,
-67951,
-67969,
-67975,
-67984,
-67984,
-67984,
-67984,
-67984,
-68010,
-68010,
-68016,
-68037,
-68044,
-68044,
-68053,
-68072,
-68078,
-68078,
-68078,
-68078,
-68078,
-68078,
-68091,
-68091,
-68091,
+67619,
+67637,
+67637,
+67657,
+67684,
+67684,
+67684,
+67684,
+67684,
+67713,
+67721,
+67733,
+67733,
+67733,
+67739,
+67745,
+67745,
+67750,
+67750,
+67787,
+67787,
+67806,
+67827,
+67837,
+67872,
+67872,
+67872,
+67898,
+67916,
+67922,
+67922,
+67944,
+67953,
+67996,
+67996,
+68023,
+68023,
+68038,
+68038,
+68038,
+68074,
68100,
68100,
-68110,
-68117,
68125,
68125,
-68125,
-68157,
+68141,
68157,
68157,
-68173,
-68173,
-68218,
-68218,
-68248,
-68288,
-68288,
-68288,
-68310,
-68310,
-68343,
-68343,
-68382,
-68402,
-68402,
-68427,
-68450,
-68461,
-68468,
-68493,
-68542,
-68542,
-68573,
-68591,
-68591,
-68591,
-68598,
-68616,
-68634,
-68634,
-68634,
-68634,
-68634,
-68663,
-68682,
-68695,
-68711,
-68733,
-68769,
-68769,
-68804,
-68804,
-68815,
-68821,
-68842,
-68842,
-68868,
-68868,
-68868,
-68868,
-68868,
-68868,
-68868,
-68884,
-68884,
-68884,
-68888,
-68888,
-68888,
-68888,
-68926,
-68926,
-68940,
-68962,
-68962,
-68979,
-68998,
-69014,
-69020,
-69020,
-69039,
-69039,
-69045,
-69073,
-69073,
-69073,
-69073,
-69077,
-69077,
-69077,
-69093,
-69099,
-69099,
-69099,
-69107,
-69138,
-69138,
-69146,
-69146,
-69180,
-69180,
-69213,
-69222,
-69222,
-69245,
+68177,
+68216,
+68221,
+68256,
+68256,
+68262,
+68285,
+68285,
+68301,
+68301,
+68301,
+68312,
+68312,
+68332,
+68332,
+68381,
+68403,
+68409,
+68432,
+68432,
+68445,
+68465,
+68471,
+68471,
+68488,
+68515,
+68515,
+68539,
+68539,
+68552,
+68569,
+68594,
+68594,
+68609,
+68648,
+68704,
+68710,
+68730,
+68737,
+68737,
+68750,
+68760,
+68766,
+68794,
+68794,
+68794,
+68794,
+68794,
+68810,
+68810,
+68825,
+68839,
+68839,
+68860,
+68893,
+68893,
+68893,
+68922,
+68922,
+68922,
+68927,
+68927,
+68927,
+68944,
+68944,
+68944,
+68944,
+68944,
+68944,
+68960,
+68970,
+68985,
+69001,
+69001,
+69007,
+69028,
+69028,
+69042,
+69042,
+69048,
+69076,
+69076,
+69095,
+69124,
+69131,
+69155,
+69162,
+69162,
+69176,
+69184,
+69184,
+69184,
+69184,
+69230,
69254,
-69276,
-69286,
-69286,
-69286,
-69326,
-69344,
-69378,
-69396,
-69396,
-69408,
-69408,
-69445,
-69445,
-69456,
-69469,
-69469,
-69477,
+69261,
+69267,
+69267,
+69273,
+69292,
+69298,
+69335,
+69356,
+69356,
+69361,
+69367,
+69367,
+69367,
+69367,
+69382,
+69402,
+69421,
+69434,
+69455,
+69467,
+69479,
69485,
-69513,
-69526,
-69526,
-69536,
-69569,
-69569,
-69614,
-69632,
+69493,
+69505,
+69511,
+69556,
+69586,
+69595,
+69605,
+69605,
+69605,
+69621,
+69634,
+69634,
+69648,
+69648,
+69652,
+69652,
69658,
-69668,
-69668,
-69693,
-69732,
-69740,
-69756,
-69772,
-69772,
-69779,
-69779,
-69779,
-69779,
-69779,
-69800,
-69815,
-69819,
-69819,
-69846,
-69852,
-69941,
-69962,
-69962,
-69962,
-69962,
-69962,
-69962,
-69962,
-69962,
-69982,
-70001,
-70012,
-70031,
-70038,
-70038,
-70046,
-70069,
-70069,
-70094,
-70128,
-70128,
-70128,
-70128,
-70128,
-70128,
-70128,
+69678,
+69706,
+69717,
+69717,
+69731,
+69731,
+69731,
+69731,
+69752,
+69766,
+69775,
+69807,
+69814,
+69814,
+69855,
+69859,
+69868,
+69868,
+69874,
+69874,
+69874,
+69874,
+69874,
+69883,
+69900,
+69900,
+69917,
+69934,
+69949,
+69969,
+69969,
+69996,
+69996,
+70014,
+70056,
+70075,
+70097,
70145,
-70177,
-70177,
-70189,
-70189,
-70189,
-70189,
-70189,
-70219,
-70219,
-70219,
-70219,
-70226,
-70226,
-70245,
-70245,
-70245,
-70245,
-70253,
-70253,
-70253,
-70279,
-70279,
-70279,
-70279,
-70279,
-70279,
-70311,
-70349,
-70356,
-70386,
-70386,
-70424,
-70424,
-70466,
-70466,
-70494,
-70523,
-70541,
-70550,
-70568,
-70583,
-70592,
-70592,
-70592,
-70592,
-70631,
-70656,
-70676,
-70676,
-70696,
-70696,
-70703,
+70145,
+70168,
+70182,
+70193,
+70209,
+70209,
+70233,
+70233,
+70240,
+70240,
+70240,
+70247,
+70280,
+70295,
+70295,
+70321,
+70351,
+70357,
+70364,
+70384,
+70397,
+70409,
+70413,
+70413,
+70421,
+70430,
+70446,
+70446,
+70446,
+70461,
+70461,
+70461,
+70478,
+70478,
+70484,
+70490,
+70490,
+70490,
+70504,
+70509,
+70509,
+70522,
+70522,
+70522,
+70532,
+70532,
+70532,
+70539,
+70546,
+70574,
+70604,
+70634,
+70649,
+70649,
+70663,
+70669,
+70669,
+70681,
+70681,
+70681,
+70698,
+70698,
+70710,
+70710,
+70710,
70710,
70710,
-70716,
-70730,
-70730,
-70769,
-70769,
-70769,
-70786,
-70804,
-70804,
-70821,
-70832,
-70832,
-70844,
-70844,
-70891,
-70891,
+70710,
+70731,
+70744,
+70761,
+70783,
+70783,
+70783,
+70783,
+70790,
+70790,
+70800,
+70835,
+70835,
+70835,
+70851,
+70851,
+70851,
+70856,
+70856,
+70864,
+70864,
+70864,
+70864,
+70879,
+70879,
+70879,
+70898,
+70904,
70904,
-70944,
-70951,
-70951,
-70961,
-70961,
-70990,
-71009,
-71025,
-71032,
-71045,
-71045,
-71052,
-71052,
-71052,
-71052,
-71052,
-71063,
-71073,
-71080,
-71080,
-71119,
-71119,
-71119,
-71155,
-71155,
-71155,
-71155,
-71191,
-71207,
-71207,
-71214,
-71214,
-71214,
-71225,
-71242,
-71248,
-71252,
-71274,
-71307,
+70904,
+70910,
+70910,
+70930,
+70930,
+70941,
+70957,
+70978,
+70988,
+71002,
+71006,
+71020,
+71030,
+71035,
+71056,
+71094,
+71116,
+71116,
+71135,
+71135,
+71147,
+71164,
+71175,
+71195,
+71195,
+71239,
+71257,
+71277,
+71277,
+71291,
+71311,
+71311,
+71311,
71320,
-71356,
-71356,
-71356,
-71374,
-71374,
-71404,
-71428,
-71459,
-71467,
-71478,
-71478,
-71489,
-71495,
-71505,
-71543,
-71543,
-71565,
-71565,
-71578,
-71638,
-71666,
-71673,
-71688,
-71688,
-71688,
-71700,
-71700,
-71730,
-71742,
-71742,
-71742,
-71754,
-71771,
+71324,
+71331,
+71331,
+71331,
+71337,
+71337,
+71349,
+71362,
+71362,
+71362,
+71362,
+71385,
+71400,
+71409,
+71416,
+71416,
+71416,
+71416,
+71434,
+71454,
+71454,
+71466,
+71466,
+71466,
+71466,
+71493,
+71511,
+71511,
+71547,
+71547,
+71581,
+71581,
+71590,
+71590,
+71590,
+71597,
+71613,
+71613,
+71620,
+71641,
+71645,
+71645,
+71659,
+71659,
+71668,
+71675,
+71681,
+71687,
+71687,
+71704,
+71704,
+71704,
+71704,
+71722,
+71722,
+71765,
71789,
-71836,
-71841,
-71852,
-71852,
-71885,
-71896,
-71913,
-71913,
-71971,
-71991,
-71991,
-72030,
-72054,
-72054,
-72101,
-72130,
-72130,
-72148,
+71789,
+71814,
+71825,
+71838,
+71855,
+71855,
+71861,
+71891,
+71891,
+71907,
+71928,
+71928,
+71936,
+71983,
+71983,
+71993,
+71998,
+71998,
+71998,
+72033,
+72052,
+72077,
+72089,
+72098,
+72137,
+72137,
+72144,
+72144,
72148,
-72158,
-72158,
-72158,
-72158,
-72158,
-72158,
-72158,
-72167,
-72184,
-72203,
-72209,
-72209,
-72214,
-72228,
+72166,
+72191,
+72221,
72238,
-72248,
-72248,
-72248,
-72257,
-72289,
-72289,
-72289,
-72289,
-72295,
-72295,
-72295,
-72295,
-72356,
-72369,
-72369,
-72369,
-72377,
-72414,
-72434,
-72441,
-72459,
-72459,
-72470,
-72477,
-72477,
-72477,
-72477,
-72477,
+72293,
+72326,
+72350,
+72350,
+72375,
+72375,
+72387,
+72400,
+72432,
+72432,
+72456,
+72482,
72482,
-72486,
-72504,
-72504,
-72527,
-72527,
-72548,
-72548,
-72548,
-72558,
-72564,
-72564,
-72581,
-72581,
-72587,
-72587,
-72612,
-72627,
-72633,
-72633,
-72633,
-72644,
-72660,
-72660,
-72681,
-72702,
-72712,
-72712,
-72732,
-72775,
-72775,
-72775,
-72775,
-72775,
-72775,
-72775,
-72830,
-72839,
-72861,
-72877,
-72894,
-72894,
-72894,
-72894,
-72900,
-72900,
-72931,
-72931,
-72931,
+72502,
+72502,
+72506,
+72506,
+72525,
+72578,
+72585,
+72618,
+72618,
+72632,
+72674,
+72674,
+72683,
+72726,
+72743,
+72743,
+72743,
+72753,
+72761,
+72767,
+72798,
+72832,
+72832,
+72872,
+72886,
+72913,
+72913,
72943,
+72965,
72980,
-72991,
-73019,
-73034,
-73056,
-73056,
-73073,
-73086,
-73086,
-73086,
-73086,
-73109,
-73129,
-73139,
-73157,
-73167,
-73167,
-73192,
-73192,
-73209,
-73231,
-73231,
-73247,
-73268,
-73288,
+73003,
+73025,
+73025,
+73025,
+73058,
+73104,
+73119,
+73126,
+73146,
+73146,
+73158,
+73170,
+73186,
+73186,
+73205,
+73218,
+73222,
+73234,
+73251,
+73261,
+73261,
+73261,
+73299,
+73299,
+73299,
+73299,
73303,
-73324,
-73324,
-73324,
-73331,
-73331,
-73331,
-73367,
-73393,
-73398,
-73429,
-73452,
-73463,
-73463,
-73463,
-73492,
-73492,
-73492,
-73492,
-73515,
-73530,
-73553,
-73563,
-73563,
-73576,
-73576,
-73592,
-73611,
-73645,
-73687,
-73700,
-73700,
-73700,
-73716,
-73758,
-73790,
-73790,
-73804,
-73804,
-73822,
-73822,
-73845,
+73322,
+73343,
+73352,
+73352,
+73357,
+73357,
+73374,
+73382,
+73382,
+73396,
+73402,
+73402,
+73414,
+73441,
+73459,
+73459,
+73488,
+73494,
+73508,
+73508,
+73584,
+73610,
+73610,
+73630,
+73647,
+73647,
+73647,
+73665,
+73703,
+73715,
+73715,
+73715,
+73736,
+73750,
+73762,
+73782,
+73796,
+73824,
+73824,
+73838,
+73838,
+73838,
+73850,
73862,
73862,
-73875,
-73919,
-73919,
-73938,
-73938,
-73938,
-73968,
-73968,
-73981,
-73992,
-73992,
-73992,
-73992,
-73992,
-74000,
-74000,
-74005,
-74024,
-74058,
-74074,
-74074,
-74096,
-74144,
-74161,
-74161,
-74161,
-74161,
-74161,
-74169,
-74179,
-74191,
-74204,
-74204,
-74214,
-74225,
-74225,
-74238,
-74279,
-74289,
-74296,
-74320,
-74320,
-74325,
-74325,
-74325,
-74378,
-74426,
-74426,
-74426,
-74473,
-74488,
-74498,
-74498,
-74531,
-74531,
-74531,
+73882,
+73882,
+73882,
+73882,
+73897,
+73918,
+73951,
+73951,
+73951,
+73951,
+73963,
+73973,
+73973,
+73973,
+73983,
+73993,
+74021,
+74021,
+74021,
+74021,
+74021,
+74068,
+74091,
+74104,
+74104,
+74104,
+74104,
+74116,
+74147,
+74147,
+74147,
+74147,
+74159,
+74183,
+74197,
+74209,
+74229,
+74243,
+74243,
+74254,
+74254,
+74254,
+74260,
+74267,
+74267,
+74288,
+74333,
+74350,
+74350,
+74360,
+74365,
+74365,
+74381,
+74393,
+74408,
+74414,
+74414,
+74414,
+74414,
+74464,
+74469,
+74486,
+74515,
+74515,
+74515,
74531,
+74540,
+74562,
74572,
-74597,
-74597,
-74597,
-74611,
+74572,
+74572,
+74595,
+74595,
+74601,
74611,
-74631,
-74645,
+74643,
74663,
-74674,
-74701,
-74701,
-74707,
-74712,
-74712,
-74712,
-74727,
-74737,
-74746,
-74770,
-74790,
+74716,
+74716,
+74732,
+74732,
+74745,
+74745,
+74760,
+74775,
+74775,
+74792,
+74792,
+74792,
74803,
-74808,
-74843,
-74854,
-74897,
-74901,
-74901,
-74907,
-74945,
-74945,
-74945,
-74958,
-74978,
-74978,
-74998,
-74998,
-75015,
-75015,
-75015,
-75023,
-75023,
-75023,
-75032,
-75077,
-75077,
-75115,
-75127,
-75127,
-75127,
-75160,
-75166,
-75166,
-75172,
-75172,
-75186,
-75224,
-75224,
-75241,
-75241,
-75241,
-75251,
-75251,
-75257,
-75263,
-75278,
+74803,
+74826,
+74865,
+74870,
+74870,
+74870,
+74870,
+74886,
+74886,
+74890,
+74890,
+74926,
+74926,
+74940,
+74940,
+74954,
+74954,
+74964,
+74976,
+74976,
+74976,
+75000,
+75010,
+75019,
+75044,
+75044,
+75050,
+75059,
+75088,
+75088,
+75128,
+75128,
+75141,
+75153,
+75153,
+75153,
+75153,
+75185,
+75209,
+75221,
+75221,
+75221,
+75233,
+75233,
+75237,
+75237,
+75267,
75291,
-75335,
-75372,
-75382,
-75398,
-75404,
-75423,
-75438,
-75438,
-75444,
-75444,
-75452,
-75452,
-75458,
-75481,
-75481,
-75481,
-75494,
-75504,
-75510,
-75524,
-75540,
-75540,
-75540,
-75546,
-75552,
-75574,
-75574,
-75614,
-75630,
-75646,
-75652,
-75652,
-75652,
-75692,
-75708,
-75708,
-75724,
-75724,
-75724,
-75724,
-75724,
-75724,
-75729,
-75737,
-75754,
-75754,
-75754,
-75772,
-75772,
-75795,
-75795,
-75820,
-75858,
-75858,
-75875,
-75881,
-75890,
-75890,
+75296,
+75308,
+75328,
+75346,
+75357,
+75369,
+75390,
+75390,
+75462,
+75475,
+75475,
+75475,
+75496,
+75523,
+75523,
+75542,
+75562,
+75580,
+75590,
+75604,
+75604,
+75660,
+75678,
+75678,
+75678,
+75678,
+75690,
+75702,
+75728,
+75751,
+75764,
+75792,
+75805,
+75805,
+75805,
+75805,
+75815,
+75824,
+75824,
+75824,
+75824,
+75833,
+75833,
+75833,
+75833,
+75833,
+75841,
+75851,
+75851,
+75851,
+75851,
+75851,
+75863,
+75863,
+75885,
+75885,
75900,
-75916,
-75916,
-75925,
-75941,
-75941,
-75960,
-75960,
-75960,
-75960,
-75983,
-75983,
-75983,
-75983,
-75993,
-75993,
-75993,
-76007,
-76028,
-76028,
-76056,
-76056,
-76067,
-76067,
+75912,
+75943,
+75943,
+75962,
+75991,
+75991,
+76016,
+76045,
+76052,
+76052,
+76052,
+76052,
+76065,
+76080,
76080,
-76100,
-76100,
-76107,
-76107,
-76107,
-76107,
-76107,
-76107,
-76107,
-76116,
-76136,
-76136,
-76136,
-76149,
-76177,
-76193,
-76193,
-76199,
+76080,
+76087,
+76087,
+76108,
+76108,
+76108,
+76108,
+76108,
+76118,
+76129,
+76129,
+76129,
+76169,
+76169,
+76188,
+76188,
+76197,
+76206,
+76216,
+76227,
+76227,
+76227,
+76232,
+76253,
76253,
+76253,
+76259,
76259,
-76281,
-76299,
-76349,
-76349,
-76357,
-76362,
-76382,
-76399,
-76405,
-76421,
+76274,
+76295,
+76310,
+76310,
+76326,
+76326,
+76326,
+76344,
+76374,
+76406,
+76406,
+76406,
76437,
-76442,
-76442,
-76457,
-76480,
-76480,
-76497,
-76514,
-76520,
-76525,
-76535,
-76535,
-76597,
-76597,
-76603,
-76625,
-76625,
+76472,
+76486,
+76493,
+76499,
+76509,
+76530,
+76537,
+76558,
+76568,
+76587,
+76587,
+76587,
+76587,
+76587,
+76617,
+76617,
+76617,
+76617,
+76617,
+76617,
76625,
+76640,
76659,
-76679,
-76698,
-76698,
-76698,
-76726,
-76757,
-76780,
-76786,
-76792,
-76792,
-76806,
-76826,
-76846,
-76862,
-76871,
+76678,
+76678,
+76678,
+76693,
+76693,
+76702,
+76734,
+76734,
+76734,
+76734,
+76771,
+76794,
+76808,
+76830,
+76830,
+76830,
+76837,
+76837,
+76837,
+76843,
+76843,
+76861,
+76890,
+76898,
76906,
-76906,
-76921,
-76921,
-76921,
-76921,
-76921,
-76955,
-76955,
-76968,
-76994,
-77032,
+76913,
+76913,
+76927,
+76927,
+76934,
+76943,
+76943,
+76943,
+76943,
+76959,
+76959,
+76969,
+76969,
+76976,
+76976,
+77017,
+77017,
+77048,
77048,
-77068,
-77068,
77073,
-77094,
-77094,
-77094,
-77103,
-77120,
-77120,
-77120,
-77136,
-77136,
-77148,
-77166,
-77185,
-77185,
-77191,
-77191,
-77233,
-77252,
-77252,
-77252,
-77252,
+77073,
+77088,
+77118,
+77118,
+77139,
+77153,
+77153,
+77153,
+77153,
+77178,
+77214,
+77214,
+77214,
+77231,
+77249,
+77258,
+77258,
+77265,
+77284,
+77301,
+77301,
+77301,
77307,
-77318,
-77318,
-77318,
-77318,
-77324,
-77343,
-77357,
-77357,
-77373,
-77383,
-77389,
-77416,
-77427,
-77444,
-77475,
-77514,
-77514,
-77514,
-77520,
-77520,
-77538,
-77563,
-77572,
-77572,
-77572,
-77572,
-77613,
-77613,
-77633,
-77643,
-77651,
-77667,
-77673,
-77690,
-77690,
-77690,
-77705,
-77723,
-77723,
-77723,
-77744,
-77744,
-77763,
-77801,
-77816,
-77838,
-77838,
+77316,
+77316,
+77316,
+77316,
+77322,
+77322,
+77340,
+77340,
+77346,
+77364,
+77364,
+77371,
+77371,
+77371,
+77371,
+77388,
+77394,
+77394,
+77394,
+77409,
+77409,
+77429,
+77459,
+77459,
+77477,
+77491,
+77491,
+77529,
+77529,
+77546,
+77577,
+77599,
+77604,
+77625,
+77625,
+77631,
+77640,
+77662,
+77675,
+77675,
+77675,
+77688,
+77698,
+77708,
+77708,
+77708,
+77715,
+77731,
+77749,
+77749,
+77753,
+77785,
+77785,
+77785,
+77805,
+77818,
+77818,
+77844,
77844,
-77856,
77862,
-77877,
-77889,
-77919,
-77935,
-77940,
-77981,
-77986,
-78016,
-78029,
-78029,
-78029,
-78049,
-78049,
-78049,
-78061,
-78061,
-78080,
-78080,
-78080,
-78080,
-78080,
-78080,
-78089,
-78089,
-78101,
-78101,
-78101,
-78101,
-78121,
-78125,
-78155,
-78155,
-78185,
-78185,
-78209,
-78224,
-78254,
-78282,
-78282,
-78296,
-78314,
-78337,
-78342,
-78371,
-78371,
-78383,
-78393,
-78426,
-78440,
-78440,
-78455,
-78477,
-78486,
-78499,
-78499,
-78507,
-78507,
-78578,
-78584,
-78596,
-78617,
-78659,
-78665,
-78665,
-78705,
-78705,
-78741,
-78778,
-78792,
-78805,
-78805,
-78812,
-78831,
-78831,
-78848,
-78866,
-78911,
-78911,
-78916,
-78935,
-78952,
-78964,
-78979,
-78979,
-78985,
-79017,
-79039,
-79039,
-79066,
-79066,
-79085,
+77886,
+77886,
+77904,
+77915,
+77930,
+77945,
+77945,
+77945,
+77945,
+77961,
+77984,
+77997,
+78011,
+78041,
+78041,
+78058,
+78065,
+78065,
+78072,
+78098,
+78113,
+78127,
+78141,
+78153,
+78183,
+78183,
+78202,
+78202,
+78202,
+78202,
+78202,
+78202,
+78202,
+78202,
+78202,
+78202,
+78231,
+78231,
+78231,
+78273,
+78273,
+78283,
+78341,
+78341,
+78341,
+78341,
+78341,
+78363,
+78363,
+78363,
+78396,
+78413,
+78413,
+78424,
+78445,
+78445,
+78472,
+78522,
+78522,
+78522,
+78539,
+78539,
+78543,
+78558,
+78558,
+78588,
+78592,
+78592,
+78609,
+78609,
+78633,
+78633,
+78646,
+78646,
+78646,
+78654,
+78654,
+78694,
+78694,
+78712,
+78721,
+78742,
+78774,
+78774,
+78774,
+78790,
+78810,
+78828,
+78891,
+78891,
+78903,
+78903,
+78903,
+78903,
+78978,
+78978,
+78993,
+78999,
+79016,
+79048,
+79056,
+79056,
+79086,
79091,
-79091,
-79110,
-79128,
-79147,
-79147,
-79168,
-79168,
-79224,
-79224,
-79242,
-79242,
-79252,
-79252,
-79252,
-79252,
-79271,
-79291,
-79309,
-79327,
-79327,
-79327,
-79346,
-79375,
-79393,
+79119,
+79125,
+79141,
+79141,
+79150,
+79166,
+79212,
+79232,
+79266,
+79266,
+79266,
+79302,
+79319,
+79335,
+79376,
79400,
79400,
-79407,
-79407,
-79417,
-79432,
-79432,
-79432,
-79464,
-79476,
-79476,
-79501,
-79511,
-79518,
-79518,
-79539,
-79547,
+79418,
+79418,
+79418,
+79418,
+79455,
+79455,
+79455,
+79474,
+79503,
+79503,
+79515,
79569,
79569,
-79600,
-79610,
-79642,
-79676,
-79713,
-79713,
-79736,
-79736,
-79755,
-79755,
-79755,
+79578,
+79589,
+79589,
+79589,
+79601,
+79601,
+79601,
+79601,
+79625,
+79625,
+79625,
+79646,
+79659,
+79659,
+79665,
+79665,
+79665,
+79688,
+79694,
+79704,
+79716,
+79716,
+79737,
+79737,
+79737,
+79744,
79755,
-79771,
-79801,
-79801,
-79821,
-79837,
-79848,
-79860,
-79860,
-79867,
-79867,
-79867,
-79867,
-79867,
-79906,
-79933,
-79943,
-79977,
-79993,
-80011,
-80042,
-80060,
-80060,
-80082,
-80101,
-80113,
-80119,
-80155,
-80159,
-80174,
-80174,
-80174,
-80174,
-80174,
-80183,
-80202,
-80214,
+79806,
+79833,
+79843,
+79856,
+79870,
+79887,
+79887,
+79917,
+79917,
+79917,
+79925,
+79925,
+79932,
+79932,
+79950,
+79975,
+80002,
+80002,
+80027,
+80044,
+80044,
+80044,
+80044,
+80044,
+80044,
+80044,
+80044,
+80044,
+80055,
+80074,
+80089,
+80089,
+80089,
+80098,
+80118,
+80126,
+80150,
+80150,
+80198,
+80198,
+80207,
+80207,
80218,
-80247,
-80259,
-80259,
-80295,
-80295,
-80300,
-80342,
-80342,
-80342,
-80359,
-80359,
-80375,
-80375,
-80402,
-80413,
-80446,
-80446,
-80480,
-80485,
-80504,
-80504,
-80525,
-80529,
+80235,
+80246,
+80246,
+80246,
+80255,
+80276,
+80276,
+80280,
+80306,
+80329,
+80350,
+80360,
+80376,
+80376,
+80396,
+80396,
+80396,
+80396,
+80406,
+80406,
+80415,
+80424,
+80437,
+80461,
+80461,
+80476,
+80503,
+80515,
+80515,
80533,
-80548,
-80553,
-80565,
-80569,
-80569,
-80605,
-80623,
-80623,
-80623,
-80623,
-80643,
-80684,
-80684,
-80695,
-80695,
-80712,
-80730,
-80737,
-80737,
-80776,
-80776,
-80776,
-80776,
-80776,
-80776,
-80795,
-80795,
-80816,
-80867,
-80881,
-80881,
-80881,
-80896,
-80896,
-80913,
-80913,
-80937,
-80937,
-80947,
-80952,
-80952,
-80952,
-80958,
-80992,
-80992,
-81015,
-81048,
-81063,
-81063,
-81082,
-81089,
-81121,
-81121,
-81121,
-81151,
-81196,
-81201,
-81215,
-81215,
-81244,
-81244,
-81244,
+80559,
+80567,
+80567,
+80567,
+80567,
+80595,
+80595,
+80600,
+80618,
+80618,
+80624,
+80624,
+80624,
+80624,
+80661,
+80661,
+80697,
+80697,
+80697,
+80697,
+80697,
+80714,
+80718,
+80718,
+80725,
+80772,
+80786,
+80805,
+80805,
+80833,
+80882,
+80886,
+80907,
+80907,
+80907,
+80955,
+80955,
+80963,
+80986,
+80986,
+81002,
+81002,
+81025,
+81025,
+81043,
+81066,
+81066,
+81076,
+81081,
+81101,
+81117,
+81146,
+81146,
+81162,
+81188,
+81188,
+81195,
+81204,
+81227,
+81227,
+81227,
+81227,
+81264,
+81264,
81273,
-81273,
-81307,
-81333,
-81338,
-81400,
-81400,
-81400,
-81400,
-81418,
-81418,
-81418,
-81430,
-81455,
+81283,
+81299,
+81311,
+81339,
+81339,
+81350,
+81372,
+81397,
+81425,
+81425,
+81425,
+81425,
81455,
-81493,
-81499,
-81527,
-81527,
-81539,
-81554,
+81467,
+81467,
+81467,
+81483,
+81497,
+81513,
+81513,
+81513,
81560,
-81584,
-81584,
-81601,
-81601,
-81601,
-81601,
-81601,
-81601,
-81601,
-81619,
-81631,
-81643,
-81643,
-81643,
-81654,
-81666,
-81716,
-81740,
-81740,
-81757,
-81769,
-81797,
-81797,
-81848,
-81873,
-81873,
-81873,
-81873,
-81885,
-81885,
-81898,
-81911,
-81916,
-81940,
-81940,
-81940,
-81940,
-81956,
-81956,
-81961,
-81977,
-81994,
-81994,
-82025,
-82025,
+81578,
+81595,
+81595,
+81605,
+81605,
+81616,
+81616,
+81623,
+81623,
+81623,
+81632,
+81640,
+81640,
+81640,
+81640,
+81640,
+81640,
+81640,
+81659,
+81676,
+81690,
+81690,
+81690,
+81690,
+81690,
+81690,
+81694,
+81694,
+81709,
+81725,
+81730,
+81730,
+81746,
+81746,
+81765,
+81765,
+81765,
+81801,
+81815,
+81815,
+81826,
+81826,
+81830,
+81830,
+81830,
+81849,
+81863,
+81874,
+81884,
+81884,
+81884,
+81909,
+81953,
+81971,
+82024,
+82024,
+82024,
+82024,
82031,
-82047,
-82047,
-82086,
-82105,
-82124,
-82124,
-82143,
-82143,
-82143,
-82143,
-82163,
-82163,
-82163,
-82163,
-82163,
-82188,
-82193,
-82207,
-82207,
-82207,
-82234,
-82246,
-82265,
-82314,
-82314,
-82314,
-82323,
-82323,
-82323,
-82323,
-82337,
-82337,
-82343,
-82349,
-82349,
-82375,
-82385,
-82402,
-82402,
-82452,
-82462,
-82462,
-82462,
-82469,
-82481,
-82481,
-82481,
-82540,
-82550,
-82567,
-82576,
-82576,
-82576,
-82585,
-82591,
-82620,
-82634,
-82668,
+82054,
+82068,
+82088,
+82104,
+82132,
+82192,
+82221,
+82221,
+82262,
+82281,
+82287,
+82300,
+82300,
+82300,
+82300,
+82300,
+82300,
+82300,
+82306,
+82306,
+82328,
+82328,
+82338,
+82338,
+82365,
+82365,
+82365,
+82365,
+82365,
+82365,
+82365,
+82372,
+82372,
+82403,
+82403,
+82403,
+82403,
+82403,
+82420,
+82453,
+82453,
+82467,
+82467,
+82467,
+82479,
+82484,
+82493,
+82502,
+82518,
+82559,
+82582,
+82618,
+82618,
+82618,
+82667,
+82667,
82687,
-82714,
-82724,
-82724,
-82750,
-82750,
-82750,
-82764,
-82777,
-82811,
-82849,
-82849,
+82703,
+82726,
+82726,
+82726,
+82738,
+82799,
+82799,
+82806,
+82827,
+82843,
+82843,
+82848,
+82848,
+82848,
+82848,
+82848,
82864,
-82877,
-82888,
-82917,
-82917,
+82864,
+82870,
+82878,
+82891,
+82895,
82917,
-82923,
-82944,
-82958,
-82958,
-82958,
-82958,
-82958,
-82971,
-82985,
-82985,
-83004,
-83004,
-83025,
+82933,
+82960,
+82983,
+82983,
+83005,
83025,
-83107,
-83126,
-83126,
-83126,
-83126,
-83126,
-83126,
-83126,
-83132,
-83132,
-83147,
-83153,
-83153,
-83153,
-83164,
-83164,
-83176,
-83183,
-83212,
-83233,
-83294,
-83315,
-83336,
-83355,
-83355,
-83355,
-83367,
-83403,
-83430,
-83448,
-83448,
+83058,
+83068,
+83085,
+83090,
+83094,
+83094,
+83094,
+83094,
+83136,
+83169,
+83169,
+83169,
+83169,
+83187,
+83201,
+83201,
+83201,
+83209,
+83225,
+83252,
+83252,
+83275,
+83297,
+83304,
+83304,
+83312,
+83312,
+83316,
+83343,
+83365,
+83370,
+83370,
+83370,
+83390,
+83431,
+83431,
+83436,
+83436,
83448,
-83448,
-83488,
-83488,
-83488,
-83488,
-83488,
-83488,
-83506,
-83506,
-83506,
-83510,
-83551,
-83567,
-83575,
-83575,
-83591,
-83591,
-83599,
-83681,
-83681,
-83703,
-83703,
+83454,
+83487,
+83504,
+83504,
+83515,
+83519,
+83519,
+83519,
+83529,
+83529,
+83562,
+83562,
+83569,
+83587,
+83592,
+83606,
+83615,
+83615,
+83642,
+83690,
83709,
-83732,
-83742,
-83742,
-83752,
-83752,
-83805,
-83805,
-83805,
-83845,
-83864,
-83864,
-83875,
-83907,
-83933,
-83950,
-83976,
-83985,
-83992,
-83992,
-84001,
-84040,
-84040,
-84057,
-84070,
-84096,
-84124,
+83714,
+83714,
+83721,
+83721,
+83721,
+83741,
+83741,
+83755,
+83773,
+83797,
+83812,
+83812,
+83827,
+83837,
+83865,
+83865,
+83865,
+83865,
+83865,
+83877,
+83877,
+83877,
+83884,
+83884,
+83905,
+83910,
+83922,
+83922,
+83934,
+83946,
+83946,
+83968,
+83968,
+83988,
+83988,
+84023,
+84023,
+84023,
+84034,
+84034,
+84034,
+84048,
+84061,
+84085,
+84085,
+84085,
+84125,
+84125,
+84125,
+84125,
+84125,
+84134,
+84134,
+84134,
+84155,
+84155,
+84170,
+84179,
84179,
-84187,
-84232,
-84232,
-84286,
-84308,
-84308,
-84322,
-84322,
-84322,
-84322,
-84338,
-84357,
-84373,
-84373,
-84373,
-84394,
-84394,
-84402,
-84402,
-84402,
-84424,
-84445,
-84466,
-84485,
-84501,
-84501,
-84522,
-84529,
-84547,
-84592,
-84592,
-84621,
-84633,
-84651,
-84651,
-84662,
-84689,
+84179,
+84212,
+84212,
+84224,
+84242,
+84247,
+84256,
+84256,
+84276,
+84303,
+84303,
+84310,
+84310,
+84317,
+84324,
+84324,
+84324,
+84328,
+84328,
+84346,
+84346,
+84353,
+84364,
+84397,
+84407,
+84407,
+84433,
+84433,
+84433,
+84447,
+84447,
+84463,
+84463,
+84463,
+84488,
+84488,
+84499,
+84523,
+84523,
+84523,
+84540,
+84540,
+84540,
+84556,
+84556,
+84556,
+84556,
+84588,
+84619,
+84666,
+84666,
+84666,
+84666,
84696,
-84704,
-84704,
-84704};
+84730,
+84751,
+84756,
+84756,
+84790,
+84800,
+84832,
+84832,
+84837,
+84853,
+84853,
+84879,
+84879,
+84901,
+84907,
+84920,
+84947,
+84965,
+84997,
+85035,
+85045,
+85045,
+85045,
+85045,
+85086,
+85118,
+85135,
+85172,
+85192,
+85192,
+85192,
+85202,
+85202,
+85215,
+85228,
+85241,
+85268,
+85268,
+85268,
+85287,
+85287,
+85287,
+85287,
+85300,
+85300,
+85305,
+85305,
+85305,
+85353,
+85353,
+85353,
+85368,
+85405,
+85405,
+85432,
+85432,
+85438,
+85443,
+85443,
+85452,
+85459,
+85477,
+85477,
+85490,
+85490,
+85519,
+85519,
+85524,
+85542,
+85552,
+85557,
+85557,
+85557,
+85577,
+85622,
+85640,
+85651,
+85658,
+85663,
+85668,
+85668,
+85680,
+85688,
+85695,
+85695,
+85695,
+85731,
+85731,
+85738,
+85742,
+85742,
+85758,
+85758,
+85758,
+85796,
+85796,
+85796,
+85796,
+85818,
+85840,
+85872,
+85872,
+85872,
+85872,
+85893,
+85898,
+85898,
+85898,
+85907,
+85907,
+85914,
+85933,
+85933,
+85955,
+85955,
+85981,
+85981,
+85996,
+86009,
+86009,
+86019,
+86019,
+86019,
+86029,
+86033,
+86033,
+86033,
+86048,
+86053,
+86053,
+86068,
+86068,
+86088,
+86138,
+86153,
+86178,
+86178,
+86199,
+86218,
+86231,
+86231,
+86231,
+86231,
+86231,
+86247,
+86252,
+86252,
+86277,
+86292,
+86313,
+86342,
+86370,
+86378,
+86430,
+86470,
+86504,
+86509,
+86509,
+86527,
+86536,
+86536,
+86544,
+86555,
+86555,
+86555,
+86580,
+86597,
+86597,
+86618,
+86623,
+86633,
+86648,
+86671,
+86671,
+86698,
+86698,
+86698,
+86705,
+86714,
+86727,
+86732,
+86732,
+86754,
+86754,
+86776,
+86776,
+86810,
+86810,
+86810,
+86817,
+86817,
+86849,
+86870,
+86875,
+86896,
+86941,
+86947,
+86952,
+86973,
+86980,
+86980,
+87006,
+87022,
+87030,
+87037,
+87043,
+87051,
+87051,
+87085,
+87085,
+87101,
+87101,
+87123,
+87160,
+87160,
+87173,
+87188,
+87188,
+87207,
+87207,
+87223,
+87241,
+87258,
+87305,
+87312,
+87312,
+87328,
+87328,
+87348,
+87357,
+87357,
+87375,
+87375,
+87375,
+87375,
+87394,
+87394,
+87425,
+87445,
+87453,
+87471,
+87480,
+87480,
+87501,
+87510,
+87528,
+87528,
+87545,
+87545,
+87560,
+87593,
+87600,
+87600,
+87600,
+87600,
+87600,
+87600,
+87676,
+87676,
+87676,
+87689,
+87709,
+87744,
+87744,
+87778,
+87778,
+87819,
+87819,
+87819,
+87835,
+87835,
+87842,
+87853,
+87853,
+87868,
+87880,
+87893,
+87912,
+87912,
+87943,
+87953,
+87953,
+87953,
+87953,
+87958,
+87958,
+87969,
+88010,
+88010,
+88029,
+88029,
+88029,
+88040,
+88040,
+88040,
+88040,
+88055,
+88060,
+88066,
+88072,
+88072,
+88085,
+88085,
+88104,
+88104,
+88132,
+88138,
+88138,
+88138,
+88138,
+88142,
+88161,
+88171,
+88171,
+88180,
+88180,
+88180,
+88180,
+88200,
+88206,
+88206,
+88206,
+88240,
+88266,
+88282,
+88282,
+88301,
+88312,
+88325,
+88343,
+88354,
+88354,
+88385,
+88385,
+88385,
+88401,
+88415,
+88415,
+88424,
+88424,
+88435,
+88458,
+88458,
+88502,
+88514,
+88520,
+88520,
+88536,
+88536,
+88536,
+88558,
+88576,
+88576,
+88576,
+88576,
+88588,
+88612,
+88655,
+88662,
+88672,
+88683,
+88699,
+88707,
+88725,
+88732,
+88772,
+88772,
+88778,
+88807,
+88814,
+88824,
+88824,
+88845,
+88877,
+88877,
+88882,
+88888,
+88921,
+88921,
+88921,
+88927,
+88934,
+88934,
+88958,
+88958,
+88958,
+88988,
+89030,
+89044,
+89044,
+89073,
+89087,
+89117,
+89132,
+89142,
+89142,
+89147,
+89164,
+89171,
+89185,
+89206,
+89206,
+89206,
+89206,
+89206,
+89206,
+89206,
+89227,
+89233,
+89233,
+89259,
+89281,
+89281,
+89281,
+89312,
+89321,
+89328,
+89342,
+89360,
+89360,
+89369,
+89378,
+89378,
+89398,
+89398,
+89417,
+89429,
+89429,
+89442,
+89442,
+89442,
+89442,
+89460,
+89476,
+89476,
+89476,
+89493,
+89551,
+89551,
+89570,
+89583,
+89583,
+89600,
+89609,
+89609,
+89619,
+89636,
+89636,
+89658,
+89681,
+89688,
+89714,
+89733,
+89744,
+89744,
+89753,
+89753,
+89753,
+89766,
+89766,
+89778,
+89778,
+89799,
+89820,
+89832,
+89866,
+89907,
+89907,
+89907,
+89947,
+89947,
+89975,
+89995,
+90004,
+90004,
+90004,
+90015,
+90023,
+90023,
+90040,
+90047,
+90065,
+90065,
+90074,
+90088,
+90088,
+90088,
+90094,
+90109,
+90109,
+90139,
+90139,
+90139,
+90139,
+90145,
+90151,
+90156,
+90156,
+90187,
+90187,
+90198,
+90204,
+90204,
+90204,
+90204,
+90226,
+90238,
+90245,
+90245,
+90250,
+90281,
+90281,
+90281,
+90329,
+90334,
+90349,
+90370,
+90392,
+90392,
+90412,
+90412,
+90437,
+90437,
+90464,
+90470,
+90483,
+90483,
+90495,
+90495,
+90495,
+90495,
+90506,
+90506,
+90506,
+90506,
+90522,
+90529,
+90547,
+90596,
+90614,
+90614,
+90614,
+90614,
+90636,
+90636,
+90636,
+90654,
+90654,
+90654,
+90654,
+90654,
+90661,
+90661,
+90693,
+90713,
+90713,
+90719,
+90744,
+90744,
+90744,
+90756,
+90776,
+90782,
+90782,
+90807,
+90865,
+90865,
+90865,
+90865,
+90865,
+90892,
+90892,
+90892,
+90892,
+90938,
+90974,
+90974,
+90980,
+90980,
+90997,
+90997,
+91011,
+91031,
+91061,
+91074,
+91106,
+91111,
+91123,
+91123,
+91150,
+91159,
+91159,
+91159,
+91190,
+91195,
+91208,
+91208,
+91216,
+91228,
+91228,
+91228,
+91228,
+91238,
+91258,
+91258,
+91258,
+91275,
+91297,
+91335,
+91335,
+91351,
+91382,
+91382,
+91389,
+91389,
+91397,
+91397,
+91425,
+91425,
+91425,
+91425,
+91425,
+91425,
+91440,
+91469,
+91476,
+91476,
+91500,
+91534,
+91553,
+91553,
+91580,
+91587,
+91607,
+91617,
+91639,
+91639,
+91656,
+91671,
+91677,
+91710,
+91710,
+91719,
+91719,
+91743,
+91743,
+91743,
+91743,
+91748,
+91768,
+91781,
+91781,
+91803,
+91826,
+91826,
+91836,
+91856,
+91856,
+91872,
+91872,
+91872,
+91878,
+91878,
+91878,
+91878,
+91878,
+91901,
+91901,
+91915,
+91931,
+91931,
+91931,
+91942,
+91942,
+91952,
+91967,
+91982,
+91982,
+92000,
+92000,
+92000,
+92000,
+92000,
+92023,
+92023,
+92048,
+92070,
+92085,
+92104,
+92104,
+92116,
+92116,
+92150,
+92163,
+92163,
+92179,
+92179,
+92179,
+92193,
+92221,
+92221,
+92228,
+92228,
+92265,
+92289,
+92303,
+92303,
+92303,
+92303,
+92311,
+92311,
+92328,
+92365,
+92365,
+92365,
+92365,
+92365,
+92365,
+92365,
+92365,
+92365,
+92365,
+92401,
+92401,
+92401,
+92401,
+92401,
+92401,
+92420,
+92434,
+92448,
+92498,
+92556,
+92561,
+92561,
+92576,
+92576,
+92576,
+92576,
+92582,
+92599,
+92614,
+92638,
+92654,
+92654,
+92665,
+92665,
+92665,
+92665,
+92665,
+92699,
+92699,
+92718,
+92718,
+92741,
+92746,
+92765,
+92783,
+92783,
+92820,
+92850,
+92850,
+92896,
+92918,
+92955,
+92955,
+92955,
+92955,
+92955,
+92967,
+92967,
+92982,
+92998,
+93004,
+93004,
+93026,
+93026,
+93026,
+93026,
+93032,
+93073,
+93073,
+93079,
+93093,
+93093,
+93105,
+93123,
+93123,
+93145,
+93145,
+93145,
+93145,
+93150,
+93150,
+93179,
+93201,
+93227,
+93245,
+93267,
+93276,
+93276,
+93287,
+93292,
+93292,
+93292,
+93292,
+93292,
+93305,
+93305,
+93319,
+93323,
+93341,
+93349,
+93349,
+93361,
+93361,
+93361,
+93372,
+93389,
+93389,
+93389,
+93432,
+93464,
+93477,
+93477,
+93484,
+93484,
+93484,
+93484,
+93484,
+93503,
+93503,
+93519,
+93519,
+93544,
+93553,
+93553,
+93562,
+93606,
+93621,
+93621,
+93631,
+93654,
+93670,
+93693,
+93699,
+93705,
+93715,
+93734,
+93745,
+93745,
+93745,
+93745,
+93745,
+93761};
static const char *tldData[] = {
-"trentinosudtirol.it\0ashikaga.tochigi.jp\0"
-"radio.br\0"
-"lib.il.us\0photography\0"
-"miki.hyogo.jp\0edunet.tn\0"
-"aisai.aichi.jp\0"
-"isa-geek.org\0"
-"educator.aero\0mining.museum\0"
-"tsu.mie.jp\0yakumo.shimane.jp\0turek.pl\0"
-"*.sch.uk\0ifm\0"
-"an.it\0"
-"consulting\0"
-"tsuyama.okayama.jp\0"
-"kommune.no\0"
-"hl.cn\0mamurogawa.yamagata.jp\0"
-"michigan.museum\0"
-"\xe6\x89\x8b\xe6\x9c\xba\0"
-"sand\xc3\xb8y.no\0"
-"jprs\0"
-"ne.jp\0"
-"rnd.ru\0"
-"ogaki.gifu.jp\0chitose.hokkaido.jp\0chigasaki.kanagawa.jp\0kasukabe.saitama.jp\0"
-"kawaguchi.saitama.jp\0takashima.shiga.jp\0chuo.tokyo.jp\0expert\0"
-"ueno.gunma.jp\0bifuka.hokkaido.jp\0"
-"oster\xc3\xb8y.no\0"
-"nishigo.fukushima.jp\0"
-"gs.sf.no\0"
-"higashichichibu.saitama.jp\0qpon\0"
-"ns.ca\0"
-"oishida.yamagata.jp\0ne.kr\0kobierzyce.pl\0"
-"for-some.biz\0"
-"satx.museum\0"
-"sydney.museum\0"
-"fujishiro.ibaraki.jp\0gift\0"
-"akaiwa.okayama.jp\0"
-"azumino.nagano.jp\0"
-"divtasvuodna.no\0"
-"slg.br\0"
-"creditunion\0"
-"ralingen.no\0"
-"trust\0"
-"lib.tn.us\0"
-"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
-"trentinosud-tirol.it\0unazuki.toyama.jp\0"
-"naturhistorisches.museum\0war.museum\0nico\0"
-"nedre-eiker.no\0odda.no\0"
-"zentsuji.kagawa.jp\0"
-"finn\xc3\xb8y.no\0"
-"ikeda.osaka.jp\0"
-"lerdal.no\0"
-"mill.museum\0"
-"wolomin.pl\0"
-"vrn.ru\0"
-"g12.br\0"
-"artanddesign.museum\0"
-"fujimino.saitama.jp\0"
-"arts.co\0"
-"shiroishi.saga.jp\0"
-"honda\0"
-"otaki.nagano.jp\0"
-"harvestcelebration.museum\0bremanger.no\0nikolaev.ua\0"
-"ilawa.pl\0"
-"brandywinevalley.museum\0portal.museum\0"
-"indianapolis.museum\0\xc3\xb8vre-eiker.no\0ski.no\0"
-"catering\0condos\0"
-"vlaanderen.museum\0"
-"higashiyamato.tokyo.jp\0"
-"alesund.no\0ternopil.ua\0"
-"living.museum\0tysvar.no\0norilsk.ru\0osaka\0from-wi.com\0"
-"bill.museum\0"
-"is-saved.org\0"
-"accident-investigation.aero\0palmsprings.museum\0"
-"aeroport.fr\0tamba.hyogo.jp\0"
-"sorum.no\0"
-"ts.it\0"
-"nose.osaka.jp\0"
-"miners.museum\0ne.pw\0mari.ru\0ing\0"
-"saikai.nagasaki.jp\0iheya.okinawa.jp\0miasta.pl\0"
-"scientist.aero\0ovre-eiker.no\0"
-"hirogawa.wakayama.jp\0"
-"gs.oslo.no\0mn.us\0ink\0blogdns.com\0is-a-chef.org\0"
-"miyama.mie.jp\0"
-"starachowice.pl\0"
-"settlement.museum\0k12.nh.us\0"
-"sassari.it\0"
-"lib.vi.us\0directory\0"
-"b.bg\0"
-"int\0"
-"veg\xc3\xa5rshei.no\0"
-"tsurugashima.saitama.jp\0"
-"net.ac\0here-for-more.info\0"
-"kamijima.ehime.jp\0"
-"net.ae\0"
-"net.af\0hakodate.hokkaido.jp\0opoczno.pl\0"
-"net.ag\0"
-"date.hokkaido.jp\0"
-"net.ai\0"
-"b.br\0"
-"te.ua\0"
-"net.al\0bl.it\0shichikashuku.miyagi.jp\0"
-"net.an\0"
-"net.ba\0tyumen.ru\0"
-"net.ar\0net.bb\0friuli-v-giulia.it\0yawara.ibaraki.jp\0"
-"nl.no\0dnsdojo.com\0"
-"monzabrianza.it\0"
-"net.au\0granvin.no\0"
-"net.bh\0tadotsu.kagawa.jp\0olawa.pl\0"
-"airforce\0"
-"net.az\0konin.pl\0"
-"fin.ec\0"
-"shonai.yamagata.jp\0"
-"net.bm\0vestre-toten.no\0"
-"webhop.net\0"
-"net.bo\0"
-"net.br\0gen.in\0"
-"net.bs\0"
-"net.bt\0"
-"shinjuku.tokyo.jp\0lincoln\0"
-"geology.museum\0lahppi.no\0"
-"net.ci\0"
-"net.bz\0campidanomedio.it\0"
-"gs.st.no\0naustdal.no\0omasvuotna.no\0from-il.com\0"
-"aomori.aomori.jp\0tanabe.kyoto.jp\0"
-"net.cm\0beeldengeluid.museum\0openair.museum\0tana.no\0"
-"net.cn\0"
-"net.co\0arboretum.museum\0ivano-frankivsk.ua\0"
-"stavropol.ru\0"
-"ne.ug\0"
-"koganei.tokyo.jp\0"
-"net.cu\0hl.no\0"
-"ne.tz\0goldpoint\0"
-"net.cw\0"
-"haga.tochigi.jp\0"
-"services.aero\0net.dm\0whoswho\0"
-"sodegaura.chiba.jp\0toyoura.hokkaido.jp\0jcb\0"
-"net.do\0ne.us\0courses\0"
-"best\0"
-"baseball.museum\0paleo.museum\0"
-"net.ec\0k12.ne.us\0isa-geek.com\0"
-"gemological.museum\0"
-"i.bg\0net.eg\0"
-"toga.toyama.jp\0williamhill\0"
-"net.dz\0matsue.shimane.jp\0"
-"mytis.ru\0auto\0"
-"toho.fukuoka.jp\0"
-"saintlouis.museum\0is-a-chef.com\0"
-"chikujo.fukuoka.jp\0okagaki.fukuoka.jp\0wegrow.pl\0"
-"ogliastra.it\0hs.kr\0ist\0"
-"atm.pl\0"
-"ballangen.no\0date\0"
-"bs.it\0"
-"gotdns.com\0"
-"pharmacy.museum\0blogsite.org\0"
-"natuurwetenschappen.museum\0"
-"tysfjord.no\0vagan.no\0"
-"gu.us\0"
-"vlaanderen\0"
-"net.ge\0k12.gu.us\0"
-"joso.ibaraki.jp\0shimotsuma.ibaraki.jp\0kawagoe.saitama.jp\0"
-"net.gg\0iraq.museum\0holtalen.no\0za.com\0from-or.com\0"
-"isehara.kanagawa.jp\0itoman.okinawa.jp\0zgorzelec.pl\0"
-"slask.pl\0"
-"est-a-la-maison.com\0"
-"design\0"
-"s3-website-ap-northeast-1.amazonaws.com\0"
-"net.gn\0benevento.it\0"
-"\xe7\xbb\x84\xe7\xb9\x94.hk\0botanical.museum\0"
-"net.gp\0hanawa.fukushima.jp\0"
-"arts.ve\0"
-"net.gr\0"
-"works.aero\0"
-"net.gt\0"
-"net.gy\0"
-"seihi.nagasaki.jp\0"
-"net.hk\0"
-"koza.wakayama.jp\0hotel.tz\0"
-"cq.cn\0net.hn\0va.it\0masuda.shimane.jp\0gen.nz\0"
-"britishcolumbia.museum\0orkdal.no\0iwc\0"
-"dynalias.org\0"
-"net.ht\0net.id\0"
-"ono.hyogo.jp\0"
-"\xe5\x8f\xb0\xe6\xb9\xbe\0"
-"k12.nv.us\0"
-"net.im\0newmexico.museum\0chelyabinsk.ru\0"
-"net.in\0"
-"p.bg\0"
-"yasuda.kochi.jp\0"
-"net.iq\0cc.na\0"
-"net.ir\0hofu.yamaguchi.jp\0"
-"net.is\0r\xc3\xb8ros.no\0dyn-o-saur.com\0"
-"net.je\0"
-"video.hu\0graphics\0"
+"sakae.chiba.jp\0"
+"equipment.aero\0bjerkreim.no\0"
+"gyeonggi.kr\0"
+"jeep\0"
+"chieti.it\0"
+"landrover\0"
+"genoa.it\0ugim.gov.pl\0"
+"rishirifuji.hokkaido.jp\0tomiya.miyagi.jp\0foodnetwork\0"
+"bananarepublic\0"
+"kr\xc3\xb8""dsherad.no\0"
+"swiftcover\0"
+"wtc\0unusualperson.com\0"
+"unazuki.toyama.jp\0"
+"wtf\0forgot.his.name\0"
+"dyndns.org\0ma.leg.br\0"
+"cci.fr\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
+"hiroo.hokkaido.jp\0"
+"showa.gunma.jp\0yawata.kyoto.jp\0"
+"help\0"
+"name.vn\0"
+"cagliari.it\0game-host.org\0"
+"\xe5\x9f\xbc\xe7\x8e\x89.jp\0trust\0"
+"dagestan.ru\0pokrovsk.su\0"
+"cmw.ru\0"
+"tokamachi.niigata.jp\0"
+"hirono.fukushima.jp\0"
+"forlicesena.it\0tsushima.nagasaki.jp\0"
+"sci.eg\0\xe7\xae\x87\xe4\xba\xba.hk\0"
+"kawaba.gunma.jp\0ookuwa.nagano.jp\0"
+"masuda.shimane.jp\0xbox\0"
+"servep2p.com\0"
+"portal.museum\0"
+"blog.br\0dagestan.su\0"
+"fukushima.jp\0newholland\0"
+"merseine.nu\0ditchyourip.com\0"
+"iraq.museum\0bronnoy.no\0"
+"ogasawara.tokyo.jp\0"
+"furukawa.miyagi.jp\0takayama.nagano.jp\0"
+"name.tj\0"
+"mb.ca\0koto.tokyo.jp\0"
+"loyalist.museum\0gdansk.pl\0"
+"chosei.chiba.jp\0nagawa.nagano.jp\0"
+"cheltenham.museum\0"
+"casadelamoneda.museum\0name.tr\0"
+"d\xc3\xb8nna.no\0name.tt\0futuremailing.at\0"
+"al.no\0"
+"trentinoa-adige.it\0herad.no\0"
+"kizu.kyoto.jp\0\xc3\xa5krehamn.no\0"
+"katagami.akita.jp\0\xc3\xb8stre-toten.no\0"
+"johana.toyama.jp\0"
+"kawasaki.miyagi.jp\0"
+"cc.in.us\0dnsdojo.com\0"
+"cc.de.us\0\xe6\x89\x8b\xe8\xa1\xa8\0"
+"toki.gifu.jp\0"
+"georgia.museum\0gs.tr.no\0"
+"ri.it\0"
+"an.it\0house.museum\0"
+"is-a-musician.com\0servehttp.com\0"
+"oto.fukuoka.jp\0"
+"\xe5\xbe\xae\xe5\x8d\x9a\0"
+"mtpc\0"
+"nordkapp.no\0boxfuse.io\0"
+"shell.museum\0"
+"alipay\0mt.eu.org\0"
+"\xe6\x9d\xb1\xe4\xba\xac.jp\0softbank\0"
+"yashio.saitama.jp\0"
+"mutsuzawa.chiba.jp\0nowtv\0"
+"ina.ibaraki.jp\0hembygdsforbund.museum\0"
+"xin\0"
+"loppa.no\0"
+"judygarland.museum\0here\0scjohnson\0"
+"firm.ht\0"
+"suita.osaka.jp\0"
+"assn.lk\0"
+"saikai.nagasaki.jp\0"
+"mo-i-rana.no\0spiegel\0sites.static.land\0"
+"skydiving.aero\0homegoods\0"
+"hino.tokyo.jp\0phoenix.museum\0kvalsund.no\0"
+"firm.in\0"
+"k12.ia.us\0"
+"heguri.nara.jp\0name.qa\0guru\0lego\0"
+"flor\xc3\xb8.no\0name.pr\0"
+"\xe9\x95\xb7\xe9\x87\x8e.jp\0"
+"palermo.it\0"
+"control.aero\0verona.it\0"
+"traniandriabarletta.it\0takamori.kumamoto.jp\0"
+"skedsmo.no\0"
+"kyotamba.kyoto.jp\0"
+"itami.hyogo.jp\0"
+"clubmed\0star\0"
+"ginowan.okinawa.jp\0name.na\0"
+"griw.gov.pl\0"
+"name.mv\0mormon\0"
+"name.ng\0"
+"fvg.it\0name.my\0tomsk.ru\0"
+"altoadige.it\0"
+"school.museum\0gs.jan-mayen.no\0"
+"md.ci\0firm.co\0"
+"and\xc3\xb8y.no\0mari-el.ru\0lib.az.us\0"
+"wanouchi.gifu.jp\0higashiyamato.tokyo.jp\0"
+"textile.museum\0"
+"kitakami.iwate.jp\0mansions.museum\0randaberg.no\0chrysler\0"
+"udm.ru\0cc.ny.us\0is-a-guru.com\0"
+"eisenbahn.museum\0"
+"eun.eg\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0praxi\0"
+"firm.dk\0"
+"domains\0"
+"parachuting.aero\0"
+"mb.it\0"
+"ap.it\0"
+"travel\0"
+"muko.kyoto.jp\0"
+"tsukiyono.gunma.jp\0freiburg.museum\0"
+"higashiyama.kyoto.jp\0"
+"\xe6\x84\x9b\xe7\x9f\xa5.jp\0al.us\0"
+"kamagaya.chiba.jp\0"
+"ibaraki.ibaraki.jp\0chikuhoku.nagano.jp\0mima.tokushima.jp\0"
+"noheji.aomori.jp\0"
+"edu.ac\0"
+"redirectme.net\0"
+"tahara.aichi.jp\0"
+"edu.af\0"
+"taxi.br\0"
+"name.mk\0"
+"med.br\0"
+"edu.al\0nishitosa.kochi.jp\0stpetersburg.museum\0"
+"salon\0"
+"edu.ba\0"
+"edu.ar\0edu.bb\0gyeongnam.kr\0"
+"*.0emm.com\0"
+"shimoichi.nara.jp\0"
+"civilaviation.aero\0edu.au\0la-spezia.it\0"
+"seiyo.ehime.jp\0"
+"edu.bh\0is-very-bad.org\0"
+"edu.bi\0"
+"edu.az\0"
+"k12.ct.us\0"
+"b.ssl.fastly.net\0"
+"edu.bm\0"
+"name.jo\0"
+"edu.bo\0"
+"dyndns-wiki.com\0"
+"edu.br\0\xeb\x8b\xb7\xec\xbb\xb4\0"
+"edu.bs\0"
+"flog.br\0edu.bt\0onjuku.chiba.jp\0"
+"otoyo.kochi.jp\0"
+"benevento.it\0"
+"edu.ci\0"
+"in-addr.arpa\0edu.bz\0"
+"art.br\0history.museum\0brother\0"
+"med.ec\0meteorapp.com\0"
+"agr.br\0"
+"edu.cn\0med.ee\0naka.hiroshima.jp\0kamimine.saga.jp\0"
+"edu.co\0"
+"rishiri.hokkaido.jp\0"
+"edu.cu\0shinjo.nara.jp\0nesset.no\0"
+"edu.cw\0click\0"
+"\xe9\xa4\x90\xe5\x8e\x85\0"
+"lib.ga.us\0"
+"\xd9\x83\xd9\x88\xd9\x85\0is-a-bookkeeper.com\0"
+"samara.ru\0"
+"ainan.ehime.jp\0"
+"edu.dm\0"
+"edu.do\0"
+"cc.ok.us\0"
+"fujisawa.iwate.jp\0"
+"edu.ec\0"
+"vlog.br\0"
+"edu.ee\0hamatonbetsu.hokkaido.jp\0"
+"datsun\0my.eu.org\0"
+"edu.eg\0football\0"
+"art.do\0rm.it\0"
+"lt.it\0"
+"edu.dz\0"
+"ar.it\0juedisches.museum\0"
+"e4.cz\0"
+"a.prod.fastly.net\0"
+"ri.us\0"
+"norddal.no\0"
+"art.dz\0edu.es\0"
+"edu.et\0"
+"geisei.kochi.jp\0"
+"kasaoka.okayama.jp\0"
+"bergen.no\0"
+"kujukuri.chiba.jp\0ochi.kochi.jp\0ladbrokes\0"
+"foundation\0"
+"ven.it\0style\0"
+"edu.ge\0okayama.jp\0takahama.aichi.jp\0shimofusa.chiba.jp\0"
+"family\0godaddy\0read\0"
+"edu.gh\0imakane.hokkaido.jp\0"
+"edu.gi\0shioya.tochigi.jp\0"
+"\xe1\x83\x92\xe1\x83\x94\0"
+"edu.gl\0skjak.no\0"
+"med.ht\0gifu.jp\0"
+"edu.gn\0"
+"culturalcenter.museum\0"
+"edu.gp\0"
+"is-a-llama.com\0"
+"edu.gr\0skanland.no\0"
+"edu.gt\0inagi.tokyo.jp\0"
+"mobara.chiba.jp\0creditunion\0"
+"edu.gy\0community\0"
+"osaka.jp\0historisch.museum\0"
+"edu.hk\0b\xc3\xa1l\xc3\xa1t.no\0"
+"press.aero\0pri.ee\0edu.hn\0"
+"sa.au\0ulvik.no\0"
+"barreau.bj\0edu.ht\0asaka.saitama.jp\0birkenes.no\0evje-og-hornnes.no\0pomorze.pl\0firm.ve\0"
+"siena.it\0nysa.pl\0est-a-la-maison.com\0paris.eu.org\0"
+"brussels\0"
"withgoogle.com\0"
-"operaunite.com\0"
-"bz.it\0yamazoe.nara.jp\0"
-"vgs.no\0"
-"net.jo\0"
-"pa.it\0"
-"telekommunikation.museum\0cc.mt.us\0cc.nd.us\0"
-"brasil.museum\0"
-"net.kg\0ullensvang.no\0sebastopol.ua\0"
-"toyooka.hyogo.jp\0"
-"net.ki\0supply\0"
-"higashiomi.shiga.jp\0"
-"tottori.tottori.jp\0"
-"jfk.museum\0"
-"misaki.okayama.jp\0net.kn\0"
-"kr.com\0"
-"ookuwa.nagano.jp\0koshigaya.saitama.jp\0"
-"net.la\0"
-"furubira.hokkaido.jp\0net.lb\0"
-"net.lc\0historicalsociety.museum\0"
-"cesenaforli.it\0"
-"kagami.kochi.jp\0"
-"gobo.wakayama.jp\0"
-"net.ky\0loppa.no\0"
-"net.kz\0"
-"net.lk\0gs.tr.no\0arts.ro\0"
-"castres.museum\0r\xc3\xb8""d\xc3\xb8y.no\0"
-"net.ma\0"
-"net.lr\0"
-"is-a-landscaper.com\0"
-"net.me\0"
-"imizu.toyama.jp\0net.lv\0"
-"birkenes.no\0"
-"net.ly\0va.no\0"
-"net.mk\0"
-"hikimi.shimane.jp\0net.ml\0"
-"uri.arpa\0ltd.gi\0net.mo\0depot.museum\0smolensk.ru\0jlc\0"
-"showa.gunma.jp\0kawanishi.hyogo.jp\0"
-"klepp.no\0"
-"net.ms\0honefoss.no\0"
-"net.mt\0"
-"net.mu\0"
-"yazu.tottori.jp\0net.mv\0net.nf\0gen.tr\0"
-"w.bg\0net.mw\0net.ng\0"
-"net.mx\0"
-"net.my\0"
-"tos.it\0toya.hokkaido.jp\0"
-"sakura\0"
-"assedic.fr\0aid.pl\0"
-"ltd.hk\0"
-"isernia.it\0net.nr\0"
-"botany.museum\0"
-"aramco\0"
-"net.nz\0"
-"ostrowwlkp.pl\0"
-"hotel.lk\0net.om\0voting\0"
-"\xe4\xbc\x81\xe4\xb8\x9a\0"
-"virginia.museum\0googlecode.com\0"
-"stj\xc3\xb8rdalshalsen.no\0net.pa\0adygeya.ru\0"
-"arai.shizuoka.jp\0arts.nf\0"
-"americanart.museum\0habmer.no\0net.pe\0"
-"lib.pr.us\0"
-"net.ph\0"
-"net.pk\0"
-"net.pl\0"
-"morioka.iwate.jp\0net.pn\0"
-"net.qa\0"
-"kanuma.tochigi.jp\0net.pr\0"
-"gjerdrum.no\0net.ps\0"
-"inawashiro.fukushima.jp\0yamatotakada.nara.jp\0net.pt\0"
-"shimizu.shizuoka.jp\0wielun.pl\0"
-"net.py\0"
-"asahi.chiba.jp\0"
-"os\xc3\xb8yro.no\0"
-"kijo.miyazaki.jp\0\xe7\xbd\x91\xe5\x9d\x80\0"
-"b.se\0rhcloud.com\0"
-"kamikitayama.nara.jp\0jot\0"
-"toyotomi.hokkaido.jp\0"
-"from.hr\0"
-"portlligat.museum\0joy\0"
-"saijo.ehime.jp\0fin.tn\0yandex\0"
-"other.nf\0"
-"bruxelles.museum\0"
-"utsunomiya.tochigi.jp\0gyeongbuk.kr\0"
-"tools\0"
-"ltd.lk\0net.sa\0"
-"ikata.ehime.jp\0net.sb\0"
-"catering.aero\0net.sc\0"
-"health.nz\0net.sd\0"
-"net.ru\0"
-"tsuno.kochi.jp\0shimane.shimane.jp\0"
-"net.rw\0net.sg\0is-very-evil.org\0"
-"i.ph\0net.sh\0"
-"kosuge.yamanashi.jp\0"
-"\xc3\xb8ystre-slidre.no\0"
-"net.sl\0"
-"info.ht\0maizuru.kyoto.jp\0shinjo.nara.jp\0yorii.saitama.jp\0"
-"info.hu\0m\xc3\xa5s\xc3\xb8y.no\0press.se\0net.so\0"
-"po.it\0"
-"s\xc3\xb8r-varanger.no\0"
-"net.st\0"
-"hotel.hu\0oppegard.no\0"
-"net.th\0"
-"nsw.au\0net.sy\0githubusercontent.com\0"
-"kanagawa.jp\0net.tj\0"
-"roma.museum\0"
-"contemporaryart.museum\0net.tm\0va.us\0"
-"info.et\0net.tn\0"
-"net.to\0land-4-sale.us\0"
-"konan.aichi.jp\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
-"net.ua\0k12.vi.us\0"
-"alto-adige.it\0net.tr\0"
-"net.tt\0"
-"dyndns-web.com\0"
-"shiwa.iwate.jp\0nagai.yamagata.jp\0stargard.pl\0"
-"net.tw\0"
-"kasuya.fukuoka.jp\0nagaoka.niigata.jp\0"
-"!city.sapporo.jp\0"
-"tranoy.no\0net.uk\0"
-"pila.pl\0"
-"dyndns-home.com\0is-into-cartoons.com\0"
-"aizumisato.fukushima.jp\0"
-"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0"
-"clock.museum\0net.vc\0"
-"kamioka.akita.jp\0fujimi.nagano.jp\0ando.nara.jp\0tochigi.tochigi.jp\0"
-"lorenskog.no\0i.se\0net.ve\0"
-"vv.it\0kamishihoro.hokkaido.jp\0shiogama.miyagi.jp\0"
-"pilots.museum\0net.uy\0net.vi\0"
-"net.uz\0"
-"is-a-cubicle-slave.com\0"
-"cargo.aero\0salzburg.museum\0"
-"kitami.hokkaido.jp\0net.vn\0"
-"dyroy.no\0pa.us\0"
-"nagiso.nagano.jp\0"
+"ikawa.akita.jp\0\xc3\xa5mot.no\0credit\0"
+"art.ht\0midori.gunma.jp\0kazo.saitama.jp\0komatsushima.tokushima.jp\0"
+"edu.in\0pavia.it\0mihara.kochi.jp\0aridagawa.wakayama.jp\0transport.museum\0"
+"sodegaura.chiba.jp\0"
+"edu.iq\0edunet.tn\0"
+"edu.is\0lib.md.us\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
+"edu.it\0kawakita.ishikawa.jp\0"
+"go.ci\0\xe7\x9f\xb3\xe5\xb7\x9d.jp\0accountants\0"
+"act.edu.au\0"
+"xj.cn\0"
+"kurgan.ru\0"
+"s3-us-gov-west-1.amazonaws.com\0"
+"yashiro.hyogo.jp\0"
+"sa.cr\0alabama.museum\0pasadena.museum\0ro.im\0"
+"gs.svalbard.no\0"
+"go.cr\0"
+"edu.jo\0ap-northeast-2.compute.amazonaws.com\0"
+"sakai.fukui.jp\0"
+"ro.it\0miyama.fukuoka.jp\0"
+"extraspace\0"
+"memorial.museum\0"
+"at.it\0nl.eu.org\0"
+"edu.kg\0xxx\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0us-west-2.compute.amazonaws.com\0"
+"toya.hokkaido.jp\0edu.ki\0suldal.no\0kurgan.su\0"
+"enebakk.no\0groks-the.info\0"
+"edu.km\0tiffany\0\xe4\xbd\x9b\xe5\xb1\xb1\0"
+"edu.kn\0anthropology.museum\0baghdad.museum\0"
+"edu.kp\0"
+"edu.la\0"
+"edu.lb\0med.ly\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
+"edu.lc\0kafjord.no\0"
+"ueno.gunma.jp\0"
+"edu.ky\0vinnytsia.ua\0xyz\0"
+"edu.kz\0"
+"edu.lk\0"
+"misato.saitama.jp\0"
+"mus.br\0monza.it\0torahime.shiga.jp\0ichikai.tochigi.jp\0"
+"katori.chiba.jp\0"
+"edu.lr\0"
+"shikama.miyagi.jp\0vestnes.no\0banamex\0"
+"edu.me\0"
+"edu.lv\0"
+"edu.mg\0"
+"edu.ly\0"
+"orientexpress\0team\0"
+"edu.mk\0inder\xc3\xb8y.no\0ru.com\0se.com\0"
+"edu.ml\0"
+"taiki.hokkaido.jp\0"
+"edu.mn\0nyc.museum\0firm.ro\0from-fl.com\0"
+"varese.it\0edu.mo\0"
+"isumi.chiba.jp\0"
+"a.ssl.fastly.net\0"
+"edu.ms\0"
+"imari.saga.jp\0edu.mt\0"
+"edu.mv\0med.om\0"
+"edu.mw\0edu.ng\0"
+"edu.mx\0amot.no\0"
+"lom.it\0edu.my\0edu.ni\0"
+"hiji.oita.jp\0edu.mz\0med.pa\0"
+"goto.nagasaki.jp\0freebox-os.fr\0"
+"yamazoe.nara.jp\0"
+"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0"
+"nesoddtangen.no\0edu.nr\0\xe4\xb8\xad\xe4\xbf\xa1\0"
+"amakusa.kumamoto.jp\0"
+"ryazan.ru\0tech\0med.pl\0"
+"arai.shizuoka.jp\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
+"isa.us\0"
+"edu.om\0"
+"donostia.museum\0"
+"go.id\0"
+"edu.pa\0edeka\0"
+"construction\0"
+"sc.cn\0"
+"ha.cn\0shibecha.hokkaido.jp\0edu.pe\0"
+"cody.museum\0palace.museum\0edu.pf\0lt.ua\0cc.tx.us\0\xd9\x85\xd8\xb5\xd8\xb1\0reit\0"
+"topology.museum\0edu.ph\0"
+"serveftp.com\0"
+"edu.pk\0"
+"edu.pl\0"
+"sa.it\0academy.museum\0edu.pn\0rnd.ru\0"
+"go.it\0nakatsugawa.gifu.jp\0"
+"av.it\0edu.qa\0"
+"vet.br\0edu.pr\0"
+"edu.ps\0"
+"eigersund.no\0edu.pt\0"
+"firm.nf\0art.pl\0"
+"wv.us\0ng.eu.org\0"
+"shacknet.nu\0"
+"md.us\0"
+"edu.py\0"
+"med.sa\0ar.us\0"
+"pisa.it\0tr.eu.org\0"
+"go.jp\0"
+"med.sd\0"
+"*.ext.githubcloud.com\0"
+"bihoro.hokkaido.jp\0"
+"potager.org\0"
+"tattoo\0you\0"
+"reggio-emilia.it\0"
+"mg.leg.br\0"
+"kawagoe.saitama.jp\0us-2.evennode.com\0"
+"samsclub\0is-saved.org\0"
+"shinanomachi.nagano.jp\0"
+"club.tw\0"
+"go.kr\0"
+"artcenter.museum\0komforb.se\0news\0"
+"whaling.museum\0edu.sa\0"
+"edu.sb\0"
+"edu.rs\0edu.sc\0"
+"lom.no\0edu.sd\0"
+"edu.ru\0"
+"info.ht\0sannan.hyogo.jp\0edu.rw\0edu.sg\0"
+"info.hu\0"
+"edu.sl\0"
+"edu.sn\0"
+"ambulance.museum\0"
+"kanra.gunma.jp\0academy\0next\0"
+"kokubunji.tokyo.jp\0"
+"nfshost.com\0"
+"kushiro.hokkaido.jp\0edu.st\0"
+"edu.sv\0toshiba\0"
+"info.et\0bd.se\0art.sn\0"
+"from-pa.com\0"
+"voronezh.ru\0edu.sy\0"
+"edu.tj\0"
+"kaneyama.yamagata.jp\0meraker.no\0game.tw\0"
+"swiss\0"
+"gs.oslo.no\0edu.tm\0"
+"aoki.nagano.jp\0ikoma.nara.jp\0"
+"edu.to\0"
+"joyo.kyoto.jp\0edu.ua\0"
+"newyork.museum\0edu.tr\0"
+"edu.tt\0is-a-hard-worker.com\0"
+"samegawa.fukushima.jp\0"
+"narvik.no\0rent\0"
+"soc.lk\0edu.tw\0"
+"lib.ar.us\0webcam\0"
+"sola.no\0"
+"flekkefjord.no\0"
+"gs.cn\0"
+"bj.cn\0lv.ua\0"
+"ketrzyn.pl\0cc.pa.us\0"
+"hitoyoshi.kumamoto.jp\0edu.vc\0"
+"edu.ve\0"
+"ilawa.pl\0"
+"tabayama.yamanashi.jp\0us-1.evennode.com\0"
+"edu.uy\0"
+"kumejima.okinawa.jp\0from-co.net\0"
+"bilbao.museum\0alfaromeo\0"
+"edu.vn\0"
+"kashima.ibaraki.jp\0agrinet.tn\0expert\0"
+"settsu.osaka.jp\0"
+"bus.museum\0h\xc3\xb8ylandet.no\0"
+"video\0"
+"pro.az\0"
+"kawanehon.shizuoka.jp\0edu.vu\0"
+"info.ec\0firenze.it\0murakami.niigata.jp\0"
+"nord-aurdal.no\0"
+"yachimata.chiba.jp\0"
+"pro.br\0"
+"yun\0elb.amazonaws.com\0"
+"chrome\0istmein.de\0"
+"itano.tokushima.jp\0mycd.eu\0"
+"go.pw\0edu.ws\0"
+"info.bb\0yamada.iwate.jp\0tawaramoto.nara.jp\0lgbt\0"
+"partners\0"
+"sc.kr\0balsfjord.no\0info.at\0"
+"info.au\0"
+"fairwinds\0"
+"beskidy.pl\0creditcard\0"
+"shingo.aomori.jp\0ouda.nara.jp\0"
+"info.az\0"
+"servemp3.com\0"
+"axis.museum\0lplfinancial\0"
+"sor-aurdal.no\0"
+"aosta-valley.it\0fujiidera.osaka.jp\0"
+"pro.cy\0pescara.it\0hiranai.aomori.jp\0"
+"sagamihara.kanagawa.jp\0"
+"gjemnes.no\0"
+"asakuchi.okayama.jp\0heritage.museum\0weber\0"
+"pro.ec\0venezia.it\0oguni.yamagata.jp\0"
+"kobayashi.miyazaki.jp\0"
+"kagawa.jp\0nango.fukushima.jp\0"
+"edu.za\0marriott\0"
+"info.co\0bill.museum\0fet.no\0\xe5\x9c\xa8\xe7\xba\xbf\0"
+"culture.museum\0nissedal.no\0"
+"olawa.pl\0rest\0"
+"bajddar.no\0"
+"journal.aero\0"
+"evenassi.no\0"
+"katano.osaka.jp\0"
+"penza.ru\0edu.zm\0"
+"kosaka.akita.jp\0"
+"s3-ap-southeast-2.amazonaws.com\0"
+"tome.miyagi.jp\0higashiyodogawa.osaka.jp\0on-the-web.tv\0"
+"go.th\0"
+"omachi.nagano.jp\0katowice.pl\0lib.hi.us\0isa-hockeynut.com\0"
+"ha.no\0go.tj\0"
+"verm\xc3\xb6gensberatung\0"
+"he.cn\0savannahga.museum\0"
+"kashima.kumamoto.jp\0penza.su\0"
+"is-a-chef.org\0"
+"av.tr\0solar\0zip\0"
+"kainan.wakayama.jp\0"
+"yamada.fukuoka.jp\0go.ug\0\xe5\xa8\xb1\xe4\xb9\x90\0"
+"oseto.nagasaki.jp\0coastaldefence.museum\0"
+"go.tz\0"
+"kadogawa.miyazaki.jp\0lease\0"
+"safety\0"
+"mielec.pl\0"
+"katashina.gunma.jp\0"
"sortland.no\0"
-"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0"
-"volgograd.ru\0net.vu\0"
-"tsunan.niigata.jp\0"
-"takata.fukuoka.jp\0"
-"info.ec\0"
-"istanbul\0"
-"rel.ht\0"
-"dyndns-server.com\0"
-"\xe9\x9d\x92\xe6\xa3\xae.jp\0"
-"net.ws\0bauhaus\0"
-"forlicesena.it\0kfh\0"
-"pv.it\0norton\0"
-"cc.ny.us\0"
-"info.bb\0hashikami.aomori.jp\0"
-"seirou.niigata.jp\0info.at\0"
-"info.au\0lib.ee\0"
-"selfip.biz\0"
-"info.az\0tsukigata.hokkaido.jp\0"
-"trani-barletta-andria.it\0loan\0"
-"press.ma\0"
-"legnica.pl\0"
-"lavangen.no\0pors\xc3\xa1\xc5\x8bgu.no\0sk\xc3\xa5nland.no\0"
-"orsta.no\0"
-"hakusan.ishikawa.jp\0"
-"flight.aero\0hemnes.no\0moss.no\0sykkylven.no\0"
-"hirara.okinawa.jp\0"
-"ukiha.fukuoka.jp\0kyotango.kyoto.jp\0health.vn\0"
-"info.co\0bo.nordland.no\0tysv\xc3\xa6r.no\0fhsk.se\0"
-"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
-"air-traffic-control.aero\0design.aero\0meland.no\0chtr.k12.ma.us\0"
-"matsumae.hokkaido.jp\0sakuragawa.ibaraki.jp\0nagano.nagano.jp\0motegi.tochigi.jp\0"
-"insurance.aero\0automotive.museum\0ullensaker.no\0p.se\0"
-"alessandria.it\0"
-"journalist.aero\0cody.museum\0"
-"bato.tochigi.jp\0misasa.tottori.jp\0"
-"polkowice.pl\0"
-"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
-"trentino-sued-tirol.it\0"
-"asahi.toyama.jp\0"
-"sogne.no\0orenburg.ru\0kim\0"
-"isa-geek.net\0"
-"tatarstan.ru\0"
-"kashiwa.chiba.jp\0kamimine.saga.jp\0"
-"contractors\0"
-"tagajo.miyagi.jp\0fujikawa.shizuoka.jp\0"
-"kudamatsu.yamaguchi.jp\0"
-"ltd.uk\0"
-"nantan.kyoto.jp\0"
-"r\xc3\xb8yrvik.no\0"
-"is-a-chef.net\0"
-"planetarium.museum\0langev\xc3\xa5g.no\0"
-"abbott\0"
-"club.aero\0"
+"qsl.br\0"
+"\xe5\xa4\xa7\xe9\x98\xaa.jp\0indiana.museum\0"
+"seika.kyoto.jp\0workshop.museum\0gallup\0"
+"linz.museum\0financial\0"
+"pro.ht\0"
+"surf\0"
+"konin.pl\0"
+"joetsu.niigata.jp\0"
+"l\xc3\xa6rdal.no\0"
+"shingu.fukuoka.jp\0miyama.mie.jp\0"
+"yoita.niigata.jp\0"
"ind.br\0"
-"from-nv.com\0"
-"tokushima.jp\0omaezaki.shizuoka.jp\0"
-"hongo.hiroshima.jp\0"
-"inderoy.no\0"
-"res.in\0"
-"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0echizen.fukui.jp\0"
-"dr\xc3\xb8""bak.no\0s\xc3\xb8r-fron.no\0"
-"teo.br\0yokoze.saitama.jp\0"
-"sch.ae\0franziskaner.museum\0undersea.museum\0belau.pw\0"
-"kouyama.kagoshima.jp\0"
-"zarow.pl\0"
-"aviation.museum\0"
-"soeda.fukuoka.jp\0"
-"skydiving.aero\0teaches-yoga.com\0"
-"shinto.gunma.jp\0kure.hiroshima.jp\0"
-"yakumo.hokkaido.jp\0minobu.yamanashi.jp\0"
-"dclk\0"
-"ibaraki.jp\0"
-"naklo.pl\0"
-"yachimata.chiba.jp\0"
-"vanylven.no\0"
-"shimodate.ibaraki.jp\0"
-"union.aero\0toshiba\0from-ak.com\0"
-"kuju.oita.jp\0"
-"w.se\0"
-"rel.pl\0"
-"friuliv-giulia.it\0minamiashigara.kanagawa.jp\0"
-"togura.nagano.jp\0"
-"!www.ck\0b\xc3\xa1id\xc3\xa1r.no\0"
-"miyoshi.aichi.jp\0"
-"izumo.shimane.jp\0"
-"us-west-1.compute.amazonaws.com\0"
-"tsuruoka.yamagata.jp\0"
-"finland.museum\0"
-"barreau.bj\0tokashiki.okinawa.jp\0"
-"television.museum\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
-"tuscany.it\0"
-"sport.hu\0fjell.no\0"
-"philadelphia.museum\0"
-"hasami.nagasaki.jp\0"
-"software.aero\0"
-"yufu.oita.jp\0"
-"kongsvinger.no\0boots\0"
-"chikuma.nagano.jp\0"
-"london.museum\0"
-"s3-ap-northeast-1.amazonaws.com\0"
-"ind.gt\0suzu.ishikawa.jp\0"
-"arteducation.museum\0eidsberg.no\0vevelstad.no\0"
-"\xe5\xb2\x90\xe9\x98\x9c.jp\0fujisato.akita.jp\0hanyu.saitama.jp\0"
-"bod\xc3\xb8.no\0"
-"is-a-therapist.com\0"
-"yoshikawa.saitama.jp\0"
-"r\xc3\xb8st.no\0"
-"rishiri.hokkaido.jp\0grajewo.pl\0"
-"3.bg\0"
-"kosai.shizuoka.jp\0kpn\0"
-"chuo.chiba.jp\0susono.shizuoka.jp\0"
+"sicily.it\0miyazaki.jp\0kawazu.shizuoka.jp\0\xe5\x95\x86\xe6\xa5\xad.tw\0"
+"ic.gov.pl\0za.net\0"
+"tondabayashi.osaka.jp\0astronomy.museum\0hgtv\0"
+"agrar.hu\0suginami.tokyo.jp\0rentals\0"
+"kariya.aichi.jp\0usgarden.museum\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
+"asn.au\0"
+"fujinomiya.shizuoka.jp\0"
+"isa.kagoshima.jp\0muenster.museum\0"
+"mp.br\0mashike.hokkaido.jp\0"
+"!city.kawasaki.jp\0"
+"townnews-staging.com\0"
+"novosibirsk.ru\0"
+"kunisaki.oita.jp\0from-sd.com\0"
+"ris\xc3\xb8r.no\0sanok.pl\0nikolaev.ua\0is-a-chef.com\0"
+"sandnessj\xc3\xb8""en.no\0"
+"rikuzentakata.iwate.jp\0"
+"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0"
+"shinyoshitomi.fukuoka.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0"
+"sc.ug\0"
+"zhytomyr.ua\0"
+"abo.pa\0teva\0cloudns.asia\0"
+"sc.tz\0"
+"mn.it\0urausu.hokkaido.jp\0ee.eu.org\0"
+"nanae.hokkaido.jp\0"
+"bl.it\0pilots.museum\0zakopane.pl\0"
+"minato.tokyo.jp\0database.museum\0"
+"ohkura.yamagata.jp\0jessheim.no\0"
+"sc.us\0"
+"pro.na\0"
+"pro.mv\0"
+"psc.br\0tamayu.shimane.jp\0j\xc3\xb8lster.no\0"
+"ivano-frankivsk.ua\0"
+"motorcycles\0"
+"eu.meteorapp.com\0cable-modem.org\0"
+"muika.niigata.jp\0"
+"sener\0"
+"com.ac\0kami.kochi.jp\0leangaviika.no\0"
+"oppeg\xc3\xa5rd.no\0uk.eu.org\0"
+"com.af\0otsuka\0"
+"com.ag\0nakamichi.yamanashi.jp\0"
+"ind.gt\0"
+"com.ai\0bike\0"
+"com.al\0"
+"\xe7\xbb\x84\xe7\xbb\x87.hk\0kiyosu.aichi.jp\0karatsu.saga.jp\0"
+"nishio.aichi.jp\0"
+"com.ba\0inf.br\0sirdal.no\0pro.om\0"
+"com.ar\0com.bb\0info.ve\0"
+"diet\0"
+"com.au\0k12.or.us\0"
+"com.aw\0"
+"com.bh\0\xe7\xa6\x8f\xe4\xba\x95.jp\0minokamo.gifu.jp\0tver.ru\0"
+"com.bi\0from-ky.com\0freeboxos.fr\0"
+"com.az\0"
+"info.vn\0"
+"mining.museum\0vevelstad.no\0"
+"com.bm\0"
+"com.bo\0family.museum\0shangrila\0int.eu.org\0"
"fla.no\0"
-"roma.it\0kudoyama.wakayama.jp\0global.prod.fastly.net\0"
-"gamo.shiga.jp\0"
-"gildesk\xc3\xa5l.no\0cloudcontrolled.com\0"
-"ind.in\0futsu.nagasaki.jp\0"
-"furudono.fukushima.jp\0kashiwara.osaka.jp\0"
-"minoh.osaka.jp\0"
-"akrehamn.no\0"
-"nosegawa.nara.jp\0"
-"baths.museum\0likes-pie.com\0"
-"krd\0lat\0"
-"seki.gifu.jp\0togakushi.nagano.jp\0ens.tn\0"
-"rana.no\0law\0"
-"juedisches.museum\0national.museum\0"
-"sande.m\xc3\xb8re-og-romsdal.no\0"
-"bozen.it\0"
-"furniture.museum\0malvik.no\0"
-"hjelmeland.no\0"
-"loabat.no\0"
-"info.ve\0"
-"kamagaya.chiba.jp\0"
-"betainabox.com\0"
-"fosnes.no\0from-tn.com\0"
-"sakae.chiba.jp\0"
-"sohu\0"
-"mb.ca\0"
-"wanouchi.gifu.jp\0hidaka.kochi.jp\0torahime.shiga.jp\0info.vn\0"
-"mari-el.ru\0"
-"tsukumi.oita.jp\0"
-"sch.id\0kota.aichi.jp\0"
-"snillfjord.no\0"
-"akkeshi.hokkaido.jp\0"
-"kanegasaki.iwate.jp\0takaoka.toyama.jp\0"
-"ostre-toten.no\0novosibirsk.ru\0selfip.com\0"
-"molise.it\0"
-"barrel-of-knowledge.info\0"
-"sch.ir\0"
-"fuoisku.no\0"
-"lds\0"
-"oguchi.aichi.jp\0"
-"omsk.ru\0"
-"nogata.fukuoka.jp\0"
-"sch.jo\0guide\0"
-"sunagawa.hokkaido.jp\0info.tn\0"
-"turystyka.pl\0a.ssl.fastly.net\0"
-"nishiarita.saga.jp\0info.tr\0"
-"mortgage\0"
+"com.br\0ind.in\0"
+"com.bs\0"
+"com.bt\0inf.cu\0lavagis.no\0"
+"kawai.iwate.jp\0"
+"pro.pr\0"
+"klodzko.pl\0"
+"\xe5\x85\xac\xe5\x8f\xb8.cn\0saigawa.fukuoka.jp\0kawatana.nagasaki.jp\0on-aptible.com\0"
+"com.by\0com.ci\0s3-fips-us-gov-west-1.amazonaws.com\0"
+"com.bz\0"
+"tanabe.kyoto.jp\0"
+"sk.ca\0winb.gov.pl\0"
+"nb.ca\0com.cm\0"
+"com.cn\0fiat\0"
+"com.co\0"
+"higashiizu.shizuoka.jp\0"
+"larsson.museum\0"
+"lib.sc.us\0"
+"br\xc3\xb8nn\xc3\xb8ysund.no\0lib.nj.us\0"
+"com.cu\0\xe5\x85\xac\xe5\x8f\xb8.hk\0hapmir.no\0lib.gu.us\0com.de\0"
+"is-a-rockstar.com\0"
+"com.cw\0aca.pro\0"
+"com.cy\0"
+"carraramassa.it\0"
+"hi.cn\0oiso.kanagawa.jp\0info.tn\0bing\0"
+"com.dm\0"
+"com.do\0info.tr\0"
+"rad\xc3\xb8y.no\0"
"info.tt\0"
-"\xe5\x8f\xb0\xe7\x81\xa3\0"
-"muroran.hokkaido.jp\0"
-"tendo.yamagata.jp\0"
-"nanbu.tottori.jp\0info.tz\0"
-"go.dyndns.org\0"
-"is-very-nice.org\0"
-"hammarfeasta.no\0"
-"williamsburg.museum\0dyndns-wiki.com\0"
-"tagawa.fukuoka.jp\0"
-"kurotaki.nara.jp\0xerox\0"
-"lib.ma.us\0"
-"sch.lk\0"
-"arkhangelsk.ru\0"
-"trentino-s-tirol.it\0"
-"\xc3\xa1lt\xc3\xa1.no\0info.ro\0"
-"ab.ca\0askoy.no\0"
-"malopolska.pl\0"
-"aogaki.hyogo.jp\0info.sd\0"
-"km.ua\0"
-"sch.ly\0"
-"onjuku.chiba.jp\0"
-"muncie.museum\0"
-"kawaminami.miyazaki.jp\0"
-"cn-north-1.compute.amazonaws.cn\0"
-"vads\xc3\xb8.no\0"
-"ushuaia.museum\0vista\0"
-"kaminokawa.tochigi.jp\0"
-"olbiatempio.it\0shiga.jp\0"
-"sener\0"
-"sch.ng\0kddi\0endoftheinternet.org\0"
-"ichikai.tochigi.jp\0"
-"lund.no\0lib.ga.us\0style\0"
-"info.pk\0tsaritsyn.ru\0"
-"info.pl\0"
-"jevnaker.no\0"
-"fst.br\0ainan.ehime.jp\0"
-"california.museum\0sony\0"
-"oketo.hokkaido.jp\0"
-"is-a-bruinsfan.org\0"
+"com.ec\0"
+"si.it\0"
+"com.ee\0"
+"verbania.it\0"
+"com.eg\0bn.it\0info.tz\0"
+"com.dz\0kamigori.hyogo.jp\0"
+"yamatsuri.fukushima.jp\0"
+"pharmaciens.km\0portland.museum\0"
+"michigan.museum\0"
+"az.us\0"
+"is-a-linux-user.org\0"
+"com.es\0couchpotatofries.org\0"
+"com.et\0"
+"voyage\0"
+"finn\xc3\xb8y.no\0"
+"kumenan.okayama.jp\0fido\0"
+"aomori.jp\0"
+"info.ro\0"
+"minamiashigara.kanagawa.jp\0"
+"info.sd\0"
+"com.fr\0kasai.hyogo.jp\0ski.museum\0"
+"leg.br\0com.ge\0"
+"com.gh\0pro.tt\0"
+"com.gi\0"
+"targi.pl\0"
+"elvendrell.museum\0"
+"com.gl\0"
+"com.gn\0tingvoll.no\0nationwide\0sakura\0\xe5\x95\x86\xe5\xba\x97\0"
+"com.gp\0matsusaka.mie.jp\0asn.lv\0stcgroup\0"
+"com.gr\0"
+"com.gt\0"
+"tonsberg.no\0"
+"namie.fukushima.jp\0info.pk\0"
+"com.gy\0info.pl\0bounty-full.com\0"
+"com.hk\0southcarolina.museum\0"
+"media.aero\0bjarkoy.no\0folldal.no\0forex\0"
+"vadso.no\0"
+"com.hn\0daejeon.kr\0"
"info.pr\0"
-"nt.edu.au\0"
-"carrier.museum\0newport.museum\0"
-"promo\0"
-"mb.it\0mima.tokushima.jp\0"
-"info.na\0jan-mayen.no\0"
-"narita.chiba.jp\0"
-"info.mv\0info.nf\0"
-"fuso.aichi.jp\0gmina.pl\0"
-"manx.museum\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0"
-"show.aero\0moskenes.no\0sch.qa\0lib.nh.us\0"
-"fnd.br\0cieszyn.pl\0"
-"properties\0ru.com\0se.com\0"
-"info.nr\0"
-"madrid.museum\0love\0"
-"hakone.kanagawa.jp\0kita.osaka.jp\0"
-"from-de.com\0"
-"siena.it\0tateshina.nagano.jp\0"
-"cricket\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
-"numata.hokkaido.jp\0"
-"brussel.museum\0hitra.no\0pyatigorsk.ru\0"
-"rifu.miyagi.jp\0ind.tn\0"
-"judygarland.museum\0"
-"mp.br\0"
-"higashitsuno.kochi.jp\0"
+"myfritz.net\0"
+"okazaki.aichi.jp\0"
+"com.hr\0pro.vn\0"
+"com.ht\0"
+"urbino-pesaro.it\0"
+"\xe5\xae\xae\xe5\xb4\x8e.jp\0"
+"shijonawate.osaka.jp\0saitama.saitama.jp\0\xe5\x98\x89\xe9\x87\x8c\0"
+"magazine.aero\0duckdns.org\0"
+"com.im\0choshi.chiba.jp\0mosvik.no\0"
+"info.na\0rana.no\0"
+"com.io\0mashiki.kumamoto.jp\0lib.nh.us\0azurewebsites.net\0"
+"com.iq\0"
+"com.is\0info.mv\0info.nf\0career\0"
+"schlesisches.museum\0"
+"urn.arpa\0uw.gov.pl\0"
+"hk.cn\0info.ni\0"
+"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0theguardian\0"
+"odawara.kanagawa.jp\0"
+"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0statebank\0"
+"jaguar\0weather\0"
+"hole.no\0warman\0"
+"com.jo\0info.nr\0"
+"vodka\0"
+"sande.more-og-romsdal.no\0apple\0"
+"kvits\xc3\xb8y.no\0"
+"higashihiroshima.hiroshima.jp\0sauda.no\0"
+"yoshikawa.saitama.jp\0com.kg\0"
+"humanities.museum\0ask\xc3\xb8y.no\0"
+"com.ki\0mn.us\0"
+"gu.us\0"
+"plc.co.im\0com.km\0"
"info.la\0"
-"fr.it\0"
-"zone\0"
-"si.it\0elblag.pl\0"
-"baikal.ru\0"
-"toyotsu.fukuoka.jp\0"
-"building.museum\0sorfold.no\0"
-"is-a-geek.com\0"
-"eidsvoll.no\0sch.sa\0"
-"institute\0"
-"dazaifu.fukuoka.jp\0"
-"chukotka.ru\0rivne.ua\0domains\0from-sd.com\0ro.com\0"
-"mihara.kochi.jp\0asahi.nagano.jp\0"
-"stockholm.museum\0chernigov.ua\0"
-"potenza.it\0"
-"pagespeedmobilizer.com\0"
-"shoo.okayama.jp\0"
-"bible.museum\0sherbrooke.museum\0"
-"nesset.no\0"
-"chloe\0"
-"anpachi.gifu.jp\0aibetsu.hokkaido.jp\0wlocl.pl\0"
-"mi.it\0"
-"elverum.no\0"
-"fredrikstad.no\0markets\0"
-"iglesias-carbonia.it\0"
-"nikaho.akita.jp\0miyashiro.saitama.jp\0"
-"asmatart.museum\0"
-"tsushima.nagasaki.jp\0"
-"hekinan.aichi.jp\0"
-"lib.ms.us\0lib.nc.us\0"
-"inazawa.aichi.jp\0"
-"info.ki\0agdenes.no\0"
-"medizinhistorisches.museum\0furniture\0"
-"ozora.hokkaido.jp\0wakayama.wakayama.jp\0"
-"gyokuto.kumamoto.jp\0"
-"fishing\0"
-"hyogo.jp\0"
-"stj\xc3\xb8rdal.no\0"
-"kutno.pl\0"
-"ulvik.no\0"
-"ofunato.iwate.jp\0restaurant\0"
-"americanantiques.museum\0paderborn.museum\0"
-"sp.it\0yokaichiba.chiba.jp\0"
-"kurgan.ru\0"
-"hakata.fukuoka.jp\0man\0"
-"entomology.museum\0"
-"otoyo.kochi.jp\0"
-"lel.br\0"
-"zoology.museum\0samnanger.no\0"
-"obama.nagasaki.jp\0"
-"oshu.iwate.jp\0miasa.nagano.jp\0"
-"rnrt.tn\0"
-"money.museum\0"
-"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0"
-"yahiko.niigata.jp\0kadena.okinawa.jp\0"
-"\xc3\xb8ygarden.no\0"
-"v\xc3\xa5gan.no\0"
-"trentino.it\0"
-"\xc3\xb8rskog.no\0"
-"hoyanger.no\0sb.ua\0"
-"vestby.no\0"
-"yurihonjo.akita.jp\0"
-"fjaler.no\0cc.ks.us\0"
-"\xd9\x82\xd8\xb7\xd8\xb1\0"
-"ltd\0"
-"rockart.museum\0"
-"lib.as.us\0"
-"hashima.gifu.jp\0"
-"agano.niigata.jp\0ath.cx\0"
-"gangaviika.no\0"
-"hammerfest.no\0"
-"saskatchewan.museum\0est-mon-blogueur.com\0"
-"hoylandet.no\0stockholm\0"
-"tatsuno.nagano.jp\0"
-"georgia.museum\0"
-"kherson.ua\0"
-"shiroishi.miyagi.jp\0tomi.nagano.jp\0"
-"computerhistory.museum\0"
-"kofu.yamanashi.jp\0"
-"meo\0"
-"setagaya.tokyo.jp\0prochowice.pl\0"
-"farm.museum\0"
-"fujikawa.yamanashi.jp\0"
-"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0dontexist.net\0"
-"workshop.museum\0toray\0"
-"kosaka.akita.jp\0shijonawate.osaka.jp\0takanezawa.tochigi.jp\0"
-"k12.ak.us\0"
-"nakamura.kochi.jp\0ochi.kochi.jp\0iizuna.nagano.jp\0"
-"midtre-gauldal.no\0"
-"k12.md.us\0"
-"inuyama.aichi.jp\0"
-"kumatori.osaka.jp\0"
-"ako.hyogo.jp\0"
-"tgory.pl\0"
-"ato.br\0higashikawa.hokkaido.jp\0akagi.shimane.jp\0bbs.tr\0"
-"newspaper.museum\0oregontrail.museum\0"
-"gb.net\0"
-"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
-"ap.it\0"
-"zaporizhzhia.ua\0"
-"taka.hyogo.jp\0"
-"karate.museum\0is-a-geek.org\0"
-"from-ks.com\0"
-"fage\0misconfused.org\0"
-"hn.cn\0"
-"palana.ru\0"
+"design.museum\0"
+"com.kp\0"
+"com.la\0"
+"ono.hyogo.jp\0com.lb\0oregontrail.museum\0"
+"\xe4\xba\xac\xe9\x83\xbd.jp\0com.lc\0"
+"takayama.gunma.jp\0cyou\0bnr.la\0"
+"ebina.kanagawa.jp\0kawachinagano.osaka.jp\0"
+"gotpantheon.com\0"
+"takata.fukuoka.jp\0tarama.okinawa.jp\0"
+"com.ky\0"
+"com.kz\0inf.mk\0"
+"com.lk\0"
"kisarazu.chiba.jp\0"
-"vaapste.no\0"
-"namie.fukushima.jp\0ichikawa.hyogo.jp\0"
-"cn.com\0"
-"stpetersburg.museum\0nord-fron.no\0iamallama.com\0"
-"fam.pk\0"
-"skjervoy.no\0"
-"beskidy.pl\0"
-"siellak.no\0"
-"mi.th\0"
-"mil\0"
-"culturalcenter.museum\0tsk.ru\0odessa.ua\0"
-"otama.fukushima.jp\0"
-"ishikawa.fukushima.jp\0"
-"nu.ca\0"
-"omiya.saitama.jp\0"
-"bike\0"
-"hirono.iwate.jp\0digital\0read\0"
-"exhibition.museum\0"
-"tn.it\0hita.oita.jp\0"
-"inder\xc3\xb8y.no\0"
-"fail\0"
-"otsuka\0"
-"k-uralsk.ru\0"
-"tamaki.mie.jp\0florist\0"
-"mi.us\0place\0"
-"yono.saitama.jp\0movistar\0"
-"sn\xc3\xa5""ase.no\0k12.ma.us\0"
-"ashibetsu.hokkaido.jp\0mizusawa.iwate.jp\0isa.kagoshima.jp\0"
-"farsund.no\0"
-"haebaru.okinawa.jp\0"
-"gs.aa.no\0"
-"hyllestad.no\0"
-"itako.ibaraki.jp\0"
-"pics\0"
-"godo.gifu.jp\0"
-"fauske.no\0frei.no\0dyndns.info\0"
-"bg.it\0"
-"matsumoto.nagano.jp\0"
-"kids.museum\0gaivuotna.no\0"
-"dell\0"
-"cc.ma.us\0"
-"\xe5\xb2\xa9\xe6\x89\x8b.jp\0yamagata.ibaraki.jp\0"
-"austevoll.no\0mma\0"
-"br.com\0"
-"fuchu.hiroshima.jp\0ostrowiec.pl\0podlasie.pl\0"
-"nature.museum\0"
-"usdecorativearts.museum\0bing\0"
-"matsudo.chiba.jp\0niimi.okayama.jp\0"
-"federation.aero\0brussels\0"
-"ancona.it\0piaget\0"
-"k12.ga.us\0"
-"jorpeland.no\0camera\0"
-"preservation.museum\0"
-"vibo-valentia.it\0"
-"tochigi.jp\0"
-"salerno.it\0"
-"iwade.wakayama.jp\0kiwi.nz\0"
-"pvt.ge\0gifts\0globo\0"
-"honai.ehime.jp\0"
-"childrensgarden.museum\0spreadbetting\0"
-"hannan.osaka.jp\0"
-"raholt.no\0cc.ga.us\0from-ut.com\0"
-"cartier\0maif\0"
-"kolobrzeg.pl\0"
-"moe\0"
-"bungotakada.oita.jp\0"
-"moi\0"
-"otaru.hokkaido.jp\0\xe8\xb0\xb7\xe6\xad\x8c\0"
-"akita.jp\0"
-"carboniaiglesias.it\0"
-"d.bg\0"
-"mov\0"
-"gs.ah.no\0marnardal.no\0fans\0"
-"tysnes.no\0mordovia.ru\0"
-"bearalv\xc3\xa1hki.no\0engineering\0compute-1.amazonaws.com\0"
-"is-a-nascarfan.com\0"
-"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
-"friuli-venezia-giulia.it\0bn.it\0udono.mie.jp\0"
-"oslo.no\0"
-"nu.it\0mormon\0"
-"freiburg.museum\0hamar.no\0"
-"kita.tokyo.jp\0"
-"minamifurano.hokkaido.jp\0"
-"bible\0"
-"esp.br\0"
-"is-a-democrat.com\0"
-"narusawa.yamanashi.jp\0"
-"uonuma.niigata.jp\0wien\0"
-"on-the-web.tv\0"
-"karm\xc3\xb8y.no\0"
-"mosjoen.no\0"
-"koya.wakayama.jp\0"
-"chernovtsy.ua\0holiday\0from-mi.com\0"
-"square.museum\0is-a-patsfan.org\0"
-"mihama.fukui.jp\0"
-"clothing\0"
-"reit\0"
-"historichouses.museum\0gjovik.no\0desi\0"
-"cam.it\0asuke.aichi.jp\0"
-"kizu.kyoto.jp\0"
-"syzran.ru\0eu-central-1.compute.amazonaws.com\0"
-"ama.shimane.jp\0"
-"farm\0"
-"jaworzno.pl\0"
-"emp.br\0"
-"k12.ar.us\0"
-"oto.fukuoka.jp\0takahagi.ibaraki.jp\0elk.pl\0"
-"k12.mo.us\0"
-"soo.kagoshima.jp\0umaji.kochi.jp\0"
-"farmequipment.museum\0github.io\0"
-"mashiki.kumamoto.jp\0"
-"k.bg\0"
-"mtn\0"
-"skole.museum\0deals\0"
-"is-a-student.com\0"
-"friuli-ve-giulia.it\0"
-"force.museum\0nec\0"
-"fast\0walter\0"
-"pharmacien.fr\0ce.it\0hakuba.nagano.jp\0"
-"s3-eu-west-1.amazonaws.com\0"
-"lucca.it\0"
-"nakadomari.aomori.jp\0"
-"antiques.museum\0resistance.museum\0cc.mo.us\0"
-"troandin.no\0vyatka.ru\0"
-"net\0microsoft\0"
-"civilisation.museum\0"
-"komatsushima.tokushima.jp\0"
-"bronnoysund.no\0new\0"
-"nanbu.yamanashi.jp\0"
-"vic.au\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
-"shitara.aichi.jp\0kamikawa.hokkaido.jp\0nogi.tochigi.jp\0"
-"tn.us\0pink\0"
-"yokote.akita.jp\0"
-"oz.au\0k12.tx.us\0physio\0"
-"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
-"stalbans.museum\0productions\0"
-"fvg.it\0"
-"riik.ee\0aland.fi\0"
-"okazaki.aichi.jp\0"
-"gs.tm.no\0"
-"*.sapporo.jp\0"
-"children.museum\0dali.museum\0"
-"ngo\0"
-"ritto.shiga.jp\0"
-"wiki\0dyndns-at-home.com\0"
-"vc.it\0"
-"rent\0"
-"berlevag.no\0"
-"bryne.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0nhk\0"
-"eng.br\0carrara-massa.it\0"
-"penza.ru\0"
-"lib.in.us\0"
-"onomichi.hiroshima.jp\0"
-"k12.oh.us\0"
-"ebino.miyazaki.jp\0"
-"deatnu.no\0lib.wi.us\0"
-"wa.au\0r.bg\0us.org\0"
-"univ.sn\0"
-"seiro.niigata.jp\0"
-"brindisi.it\0"
-"is-a-hard-worker.com\0"
-"rankoshi.hokkaido.jp\0"
-"archi\0"
-"dnsdojo.org\0from-ia.com\0"
-"kimitsu.chiba.jp\0"
-"chernihiv.ua\0"
-"cl.it\0toride.ibaraki.jp\0"
-"bjarkoy.no\0"
-"bu.no\0"
-"pc.it\0"
-"karasjok.no\0"
-"ol.no\0"
-"kesennuma.miyagi.jp\0katsuragi.nara.jp\0"
-"tourism.tn\0"
-"bolzano.it\0"
-"act.au\0trondheim.no\0"
-"trentinosuedtirol.it\0suwalki.pl\0"
-"bahccavuotna.no\0abo.pa\0"
-"yamagata.gifu.jp\0canon\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\0horse\0"
-"viajes\0"
-"repair\0\xe6\x89\x8b\xe8\xa1\xa8\0"
-"history.museum\0"
-"gs.hm.no\0"
-"\xe7\xa6\x8f\xe4\xba\x95.jp\0"
-"inashiki.ibaraki.jp\0"
-"us.na\0osoyro.no\0fedje.no\0"
-"sakai.fukui.jp\0"
-"air-surveillance.aero\0engineer.aero\0pri.ee\0"
-"is.it\0namikata.ehime.jp\0"
-"warabi.saitama.jp\0"
-"strand.no\0"
-"lecco.it\0"
-"tatar\0"
-"shinjo.yamagata.jp\0"
-"sakahogi.gifu.jp\0"
-"aarborte.no\0cityeats\0"
-"\xe7\xbe\xa4\xe9\xa6\xac.jp\0rest\0"
-"skien.no\0"
-"kasai.hyogo.jp\0hitachinaka.ibaraki.jp\0"
-"costume.museum\0photography.museum\0froya.no\0grozny.ru\0simbirsk.ru\0"
-"barletta-trani-andria.it\0sells-it.net\0"
-"y.bg\0"
-"art.museum\0"
-"karpacz.pl\0"
-"sanok.pl\0"
-"gs.nt.no\0"
-"fortworth.museum\0murmansk.ru\0"
-"mansion.museum\0"
-"cs.it\0"
-"nishiokoppe.hokkaido.jp\0yaese.okinawa.jp\0"
-"santacruz.museum\0googleapis.com\0"
-"servebbs.net\0"
-"cc.nm.us\0"
-"asso.fr\0lupin\0"
-"eigersund.no\0"
-"sukumo.kochi.jp\0ketrzyn.pl\0"
-"compute.amazonaws.com\0"
-"nagara.chiba.jp\0"
-"bokn.no\0"
-"mino.gifu.jp\0"
-"author.aero\0"
-"erni\0"
-"asso.gp\0iz.hr\0"
-"otsuki.yamanashi.jp\0"
-"posts-and-telecommunications.museum\0marker.no\0"
-"is-into-cars.com\0"
-"flynnhub.com\0"
-"kr\xc3\xa5""anghke.no\0"
-"nakamichi.yamanashi.jp\0"
-"tokke.no\0"
-"pc.pl\0"
-"etne.no\0community\0"
-"hol.no\0"
-"asso.ht\0tatsuno.hyogo.jp\0tokamachi.niigata.jp\0"
-"valer.ostfold.no\0d.se\0"
-"agrar.hu\0"
-"nagareyama.chiba.jp\0niigata.niigata.jp\0"
-"ap-northeast-1.compute.amazonaws.com\0"
-"qh.cn\0sardinia.it\0tozawa.yamagata.jp\0"
-"oe.yamagata.jp\0"
-"scotland.museum\0kalmykia.ru\0wedding\0"
-"med.br\0"
-"nra\0"
-"asso.bj\0tabayama.yamanashi.jp\0"
-"obi\0"
-"cci.fr\0ome.tokyo.jp\0"
-"sakuho.nagano.jp\0"
-"per.la\0s\xc3\xa1l\xc3\xa1t.no\0"
-"murata.miyagi.jp\0"
-"airport.aero\0"
-"cz.it\0"
-"friulive-giulia.it\0koeln\0"
-"asso.ci\0birthplace.museum\0nrw\0"
-"naka.hiroshima.jp\0shiranuka.hokkaido.jp\0"
-"bamble.no\0"
-"jx.cn\0mibu.tochigi.jp\0"
-"watchandclock.museum\0g\xc3\xa1ls\xc3\xa1.no\0"
-"shibata.niigata.jp\0!teledata.mz\0"
-"nanmoku.gunma.jp\0"
-"med.ec\0aquarium.museum\0il.us\0outsystemscloud.com\0"
-"med.ee\0mandal.no\0verran.no\0"
-"kumamoto.jp\0is-a-geek.net\0"
-"flekkefjord.no\0"
-"shinonsen.hyogo.jp\0fudai.iwate.jp\0"
-"\xe4\xbf\xa1\xe6\x81\xaf\0"
-"nishiaizu.fukushima.jp\0"
-"sumy.ua\0"
-"per.nf\0"
-"chiba.jp\0ntt\0"
-"asso.dz\0"
-"badaddja.no\0cc.id.us\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
-"k.se\0"
-"niki.hokkaido.jp\0higashikagawa.kagawa.jp\0"
-"koeln.museum\0"
-"andoy.no\0"
-"frana.no\0\xd9\x83\xd9\x88\xd9\x85\0"
-"katashina.gunma.jp\0"
-"tourism.pl\0"
-"aremark.no\0"
-"chita.ru\0"
-"tarumizu.kagoshima.jp\0"
-"\xe7\xbd\x91\xe7\xb5\xa1.hk\0orkanger.no\0"
-"tempioolbia.it\0saotome.st\0"
-"kawakita.ishikawa.jp\0"
-"karikatur.museum\0uz.ua\0hermes\0"
-"friuli-vgiulia.it\0"
-"textile.museum\0"
-"iwatsuki.saitama.jp\0"
-"cc.ok.us\0"
-"med.ht\0"
-"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
-"tsushima.aichi.jp\0ide.kyoto.jp\0"
-"abira.hokkaido.jp\0actor\0"
-"\xe7\xb5\x84\xe7\xbb\x87.hk\0"
-"tsuchiura.ibaraki.jp\0"
-"dep.no\0"
-"republican\0"
-"vefsn.no\0"
-"luxembourg.museum\0"
+"com.lr\0"
+"marylhurst.museum\0"
+"com.lv\0from-ia.com\0"
+"piedmont.it\0goshiki.hyogo.jp\0com.mg\0zero\0"
+"mizusawa.iwate.jp\0"
+"com.ly\0"
+"com.mk\0"
+"com.ml\0sandoy.no\0"
+"atlanta.museum\0george\0"
+"imperia.it\0com.mo\0"
+"com.na\0"
+"ind.tn\0"
+"com.ms\0is-very-sweet.org\0"
+"com.mt\0"
+"com.mu\0"
+"naka.ibaraki.jp\0com.mv\0com.nf\0"
+"giessen.museum\0com.mw\0com.ng\0film\0"
+"com.mx\0"
+"vic.edu.au\0com.my\0com.ni\0sa-east-1.compute.amazonaws.com\0"
+"hakui.ishikawa.jp\0"
+"chikujo.fukuoka.jp\0"
+"okuizumo.shimane.jp\0"
+"kota.aichi.jp\0"
+"com.nr\0"
+"nf.ca\0"
+"kids.museum\0"
+"fukagawa.hokkaido.jp\0"
+"info.ki\0"
+"dish\0"
+"tana.no\0"
+"mr.no\0"
+"kerryproperties\0"
+"com.om\0"
+"hiphop\0"
+"com.pa\0"
+"cc.ut.us\0"
+"sdn.gov.pl\0"
+"com.pe\0"
+"com.pf\0"
+"com.ph\0"
+"gs.vf.no\0"
+"showtime\0"
+"mt.it\0makinohara.shizuoka.jp\0com.pk\0"
+"nishikata.tochigi.jp\0com.pl\0"
+"br.it\0cb.it\0"
+"numata.hokkaido.jp\0"
+"com.qa\0rubtsovsk.ru\0"
+"com.pr\0"
+"zgora.pl\0com.ps\0s3-external-2.amazonaws.com\0"
+"com.pt\0certmgr.org\0"
+"etajima.hiroshima.jp\0"
+"com.py\0"
+"cn.eu.org\0"
+"mobi.gp\0"
+"ichikawa.hyogo.jp\0uchihara.ibaraki.jp\0"
+"psi.br\0nittedal.no\0"
+"hayakawa.yamanashi.jp\0yorkshire.museum\0"
+"valleeaoste.it\0"
+"\xe5\xba\x83\xe5\xb3\xb6.jp\0tanabe.wakayama.jp\0com.re\0chloe\0"
+"balashov.su\0loans\0"
+"selbu.no\0"
+"niigata.niigata.jp\0"
+"paris.museum\0vantaa.museum\0"
+"kembuchi.hokkaido.jp\0"
+"com.ro\0"
+"com.sa\0poltava.ua\0mymediapc.net\0"
+"com.sb\0"
+"trentino-sud-tirol.it\0com.sc\0"
+"com.sd\0"
+"pmn.it\0com.ru\0com.se\0"
+"com.rw\0com.sg\0homes\0"
+"com.sh\0"
+"naie.hokkaido.jp\0"
+"fussa.tokyo.jp\0"
+"com.sl\0"
+"com.sn\0"
+"com.so\0fire\0servegame.com\0"
+"leclerc\0"
+"holmestrand.no\0dedyn.io\0"
+"com.st\0"
+"com.sv\0"
+"bio.br\0ternopil.ua\0"
+"githubcloud.com\0"
+"com.sy\0"
+"trentino-alto-adige.it\0com.tj\0"
+"blockbuster\0"
+"com.tm\0"
+"com.tn\0\xe7\xbd\x91\xe5\x9d\x80\0"
+"joboji.iwate.jp\0com.to\0"
+"handson.museum\0society.museum\0com.ua\0dyndns-free.com\0"
+"com.tr\0fish\0"
+"miyakonojo.miyazaki.jp\0"
+"nishi.fukuoka.jp\0com.tt\0"
+"nichinan.tottori.jp\0lib.mt.us\0lib.nd.us\0is-a-chef.net\0"
+"shimotsuma.ibaraki.jp\0kamikitayama.nara.jp\0com.tw\0com.ug\0"
+"tsugaru.aomori.jp\0"
+"xz.cn\0"
+"vegas\0"
+"kuju.oita.jp\0"
+"kunohe.iwate.jp\0"
+"takarazuka.hyogo.jp\0geek.nz\0"
+"stv.ru\0"
+"com.vc\0"
+"so.it\0com.ve\0"
+"anamizu.ishikawa.jp\0semine.miyagi.jp\0itoman.okinawa.jp\0"
+"ama.aichi.jp\0"
+"bt.it\0"
+"iwanai.hokkaido.jp\0com.uy\0com.vi\0"
+"kunst.museum\0com.uz\0"
+"nyuzen.toyama.jp\0"
+"dontexist.net\0"
+"com.vn\0"
+"kitaura.miyazaki.jp\0"
+"hi.us\0"
+"brussel.museum\0"
+"austevoll.no\0"
+"com.vu\0"
+"oygarden.no\0"
+"tomika.gifu.jp\0kumatori.osaka.jp\0lidl\0"
"chikuho.fukuoka.jp\0"
+"cy.eu.org\0"
+"philips\0"
+"kawai.nara.jp\0"
+"forum\0"
+"com.ws\0"
+"munakata.fukuoka.jp\0tokuyama.yamaguchi.jp\0dyr\xc3\xb8y.no\0"
+"deloitte\0"
+"gemological.museum\0"
+"airport.aero\0"
+"\xc3\xa1laheadju.no\0northwesternmutual\0"
+"higashikagura.hokkaido.jp\0glade\0"
+"toei.aichi.jp\0mombetsu.hokkaido.jp\0"
+"press\0za.org\0"
+"servegame.org\0"
+"k12.vi.us\0life\0"
+"shimokawa.hokkaido.jp\0ritto.shiga.jp\0"
+"!city.sapporo.jp\0"
+"cz.eu.org\0"
+"leitungsen.de\0worse-than.tv\0"
+"yokoshibahikari.chiba.jp\0miyoshi.saitama.jp\0"
+"feedback\0"
+"kaszuby.pl\0"
+"pesaro-urbino.it\0"
+"moriya.ibaraki.jp\0"
+"furudono.fukushima.jp\0"
+"tateyama.toyama.jp\0"
+"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0brandywinevalley.museum\0sogndal.no\0"
+"tachikawa.tokyo.jp\0alaheadju.no\0vestvagoy.no\0"
+"\xe5\xae\xb6\xe9\x9b\xbb\0"
+"zentsuji.kagawa.jp\0"
+"oita.jp\0\xc3\xa1lt\xc3\xa1.no\0dyndns-ip.com\0"
+"workinggroup.aero\0com.zm\0"
+"corvette.museum\0for-more.biz\0"
+"rimini.it\0mihama.chiba.jp\0"
+"hm.no\0"
+"sm.ua\0\xe9\xa6\x99\xe6\xb8\xaf\0"
+"ath.cx\0"
+"bungotakada.oita.jp\0lutsk.ua\0dk.eu.org\0"
+"hirara.okinawa.jp\0"
+"media.hu\0bharti\0"
+"ta.it\0ipiranga\0"
+"is-slick.com\0"
+"nico\0"
+"marumori.miyagi.jp\0"
+"arts.co\0tsuruta.aomori.jp\0lancome\0"
+"gliding.aero\0inatsuki.fukuoka.jp\0"
+"nome.pt\0familyds.net\0"
+"naruto.tokushima.jp\0mt.us\0nd.us\0"
+"kakinoki.shimane.jp\0"
+"is-an-entertainer.com\0"
+"port.fr\0gotdns.ch\0"
+"bydgoszcz.pl\0"
+"r\xc3\xb8st.no\0"
+"ranzan.saitama.jp\0"
+"marburg.museum\0komi.ru\0"
+"wellbeingzone.co.uk\0"
+"chikuzen.fukuoka.jp\0hjartdal.no\0"
+"ikeda.fukui.jp\0"
+"contemporaryart.museum\0"
+"ostroleka.pl\0like\0"
+"\xc3\xb8vre-eiker.no\0dyndns-server.com\0"
+"ishikawa.fukushima.jp\0"
+"um.gov.pl\0industries\0"
+"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0"
+"koga.fukuoka.jp\0tsukui.kanagawa.jp\0"
+"sumida.tokyo.jp\0info.zm\0"
+"tohma.hokkaido.jp\0shika.ishikawa.jp\0"
+"ilovecollege.info\0"
+"gojome.akita.jp\0tsuchiura.ibaraki.jp\0"
+"shikokuchuo.ehime.jp\0"
+"pulawy.pl\0"
+"dr\xc3\xb8""bak.no\0muos\xc3\xa1t.no\0"
+"cremona.it\0"
+"de.eu.org\0"
+"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0"
+"mx.na\0"
+"oster\xc3\xb8y.no\0"
+"nl.ca\0"
+"minami.fukuoka.jp\0r\xc3\xb8yken.no\0"
+"t\xc3\xb8nsberg.no\0"
+"mihama.fukui.jp\0kodaira.tokyo.jp\0limo\0"
+"bv.nl\0lind\xc3\xa5s.no\0"
+"livorno.it\0"
+"yn.cn\0"
+"ascolipiceno.it\0sm\xc3\xb8la.no\0\xe6\x96\xb0\xe9\x97\xbb\0"
+"is-not-certified.com\0"
+"kanmaki.nara.jp\0honda\0"
+"link\0"
+"roma.it\0nowruz\0"
+"prof.pr\0"
+"dallas.museum\0"
+"iron.museum\0futbol\0hk.org\0"
+"ss.it\0"
"nasu.tochigi.jp\0"
-"intelligence.museum\0nyc\0"
-"is-an-actress.com\0"
-"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
-"vda.it\0"
-"\xe6\xbb\x8b\xe8\xb3\x80.jp\0worse-than.tv\0"
-"gliding.aero\0notaires.km\0lea\xc5\x8bgaviika.no\0"
-"r.se\0per.sg\0"
-"taxi.br\0"
-"elvendrell.museum\0"
-"kariwa.niigata.jp\0"
-"science.museum\0from-ms.com\0from-nc.com\0"
-"cesena-forli.it\0"
-"dc.us\0dontexist.org\0"
-"kishiwada.osaka.jp\0"
-"yoshioka.gunma.jp\0"
-"k12.dc.us\0"
-"toyoake.aichi.jp\0seranishi.hiroshima.jp\0noda.iwate.jp\0"
-"cagliari.it\0buyshouses.net\0"
-"aso.kumamoto.jp\0"
-"sauda.no\0"
-"\xe5\x85\xb5\xe5\xba\xab.jp\0nisshin.aichi.jp\0"
-"vegarshei.no\0"
-"m\xc4\x81ori.nz\0"
-"overhalla.no\0voagat.no\0"
-"indian.museum\0railroad.museum\0nsk.ru\0is-leet.com\0"
-"inf.br\0nakama.fukuoka.jp\0"
-"readmyblog.org\0"
-"bergamo.it\0\xe5\xa5\x88\xe8\x89\xaf.jp\0"
-"ushiku.ibaraki.jp\0"
-"med.ly\0"
-"tahara.aichi.jp\0"
-"ringsaker.no\0cc.or.us\0"
-"aga.niigata.jp\0"
-"property\0"
-"hinohara.tokyo.jp\0"
-"ac\0"
-"ad\0kuji.iwate.jp\0kinder\0compute.amazonaws.cn\0"
+"other.nf\0"
+"ch.it\0sykkylven.no\0loginto.me\0"
+"author\0"
+"aid.pl\0pics\0"
+"us.gov.pl\0kustanai.ru\0"
+"nkz.ru\0"
+"yaroslavl.ru\0"
+"koeln\0"
+"padova.it\0"
+"vard\xc3\xb8.no\0"
+"shiga.jp\0"
+"gaular.no\0rennesoy.no\0"
+"panama.museum\0"
+"yonezawa.yamagata.jp\0media.pl\0ciscofreak.com\0"
+"tosa.kochi.jp\0ogawa.nagano.jp\0holt\xc3\xa5len.no\0"
+"itayanagi.aomori.jp\0nakamura.kochi.jp\0askvoll.no\0"
+"batsfjord.no\0"
+"yosemite.museum\0homeip.net\0"
+"nike\0"
+"tempioolbia.it\0sandvikcoromant\0"
+"iwade.wakayama.jp\0"
+"kaufen\0"
+"shinjuku.tokyo.jp\0presidio.museum\0gloppen.no\0is-a-celticsfan.org\0"
+"bahccavuotna.no\0lezajsk.pl\0"
+"minamisanriku.miyagi.jp\0"
+"*.sapporo.jp\0"
+"tomi.nagano.jp\0"
+"friuliveneziagiulia.it\0bando.ibaraki.jp\0"
+"meiwa.gunma.jp\0"
+"k12.fl.us\0"
+"sos.pl\0gotdns.org\0"
+"bashkiria.ru\0"
+"troitsk.su\0"
+"kuban.ru\0"
+"nakhodka.ru\0"
+"moriyama.shiga.jp\0motorcycle.museum\0"
+"crew.aero\0"
+"luster.no\0podhale.pl\0hockey\0"
+"bahn.museum\0"
+"tas.gov.au\0"
+"izumizaki.fukushima.jp\0"
+"b\xc3\xa1jddar.no\0*.magentosite.cloud\0"
+"bashkiria.su\0"
+"satosho.okayama.jp\0kvam.no\0discount\0"
+"cosenza.it\0"
+"orkanger.no\0"
+"v\xc3\xa5ler.hedmark.no\0"
+"tobishima.aichi.jp\0"
+"vang.no\0"
+"higashine.yamagata.jp\0lib.mn.us\0"
+"arao.kumamoto.jp\0center.museum\0"
+"doomdns.com\0"
+"n\xc3\xb8tter\xc3\xb8y.no\0arts.ve\0"
+"\xc3\xa5lesund.no\0mobi.tt\0pamperedchef\0"
+"valleaosta.it\0"
+"kunstunddesign.museum\0gdynia.pl\0"
+"valer.ostfold.no\0rich\0"
+"mobi.tz\0"
+"te.it\0udono.mie.jp\0"
+"abarth\0"
+"bz.it\0"
+"ca.eu.org\0"
+"\xe3\x82\xb3\xe3\x83\xa0\0"
+"sondrio.it\0for-some.biz\0"
+"wa.gov.au\0agro.pl\0"
+"hanno.saitama.jp\0asahi.toyama.jp\0"
+"taka.hyogo.jp\0nh.us\0"
+"noda.iwate.jp\0"
+"hongo.hiroshima.jp\0omiya.saitama.jp\0\xd0\xb1\xd0\xb5\xd0\xbb\0"
+"cuneo.it\0yachiyo.chiba.jp\0"
+"troandin.no\0"
+"is-a-cpa.com\0"
+"mikasa.hokkaido.jp\0"
+"\xe9\x95\xb7\xe5\xb4\x8e.jp\0smola.no\0glass\0"
+"kanoya.kagoshima.jp\0"
+"int.ar\0"
+"tel.tr\0"
+"live\0"
+"mitake.gifu.jp\0"
+"nakano.nagano.jp\0"
+"is-a-nurse.com\0"
+"int.az\0matera.it\0hs.kr\0\xc3\xb8rskog.no\0"
+"yuzawa.niigata.jp\0"
+"lowicz.pl\0"
+"int.bo\0grondar.za\0"
+"eu-2.evennode.com\0"
+"volgograd.ru\0"
+"mazowsze.pl\0"
+"is-into-games.com\0"
+"is-found.org\0"
+"vossevangen.no\0"
+"int.ci\0yonabaru.okinawa.jp\0"
+"resistance.museum\0"
+"ginan.gifu.jp\0tiaa\0"
+"ayase.kanagawa.jp\0ise.mie.jp\0chichibu.saitama.jp\0athleta\0"
+"int.co\0"
+"langev\xc3\xa5g.no\0"
+"oguni.kumamoto.jp\0"
+"sec.ps\0"
+"chita.aichi.jp\0"
+"nakagyo.kyoto.jp\0cloudcontrolled.com\0"
+"inderoy.no\0"
+"monmouth.museum\0dep.no\0mazury.pl\0"
+"gliwice.pl\0"
+"jan-mayen.no\0arts.ro\0"
+"ohira.miyagi.jp\0"
+"\xe5\xa5\x88\xe8\x89\xaf.jp\0law.pro\0"
+"riik.ee\0mobi.na\0volda.no\0"
+"shisui.chiba.jp\0"
+"kyuragi.saga.jp\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0home.dyndns.org\0"
+"rotorcraft.aero\0mobi.ng\0nl.no\0"
+"kasuga.hyogo.jp\0"
+"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0ping\0"
+"jfk.museum\0"
+"vestv\xc3\xa5g\xc3\xb8y.no\0fam.pk\0healthcare\0pink\0"
+"rome.it\0fukushima.hokkaido.jp\0nord-fron.no\0"
+"magadan.ru\0"
+"nakayama.yamagata.jp\0"
+"val-daosta.it\0"
+"kiyose.tokyo.jp\0"
+"notodden.no\0"
+"cl.it\0miami\0"
+"modena.it\0"
+"hitachiomiya.ibaraki.jp\0"
+"kyowa.hokkaido.jp\0yakage.okayama.jp\0"
+"\xe6\x96\xb0\xe6\xbd\x9f.jp\0mer\xc3\xa5ker.no\0simple-url.com\0"
+"cd.eu.org\0"
+"nj.us\0schwarz\0"
+"ia.us\0eu-1.evennode.com\0"
+"oldnavy\0"
+"vladivostok.ru\0"
+"barrel-of-knowledge.info\0"
+"hirosaki.aomori.jp\0"
+"aeroclub.aero\0navigation.aero\0"
+"santafe.museum\0"
+"dellogliastra.it\0\xe6\x94\xbf\xe5\xba\x9c\0"
+"asnes.no\0"
+"vao.it\0yugawa.fukushima.jp\0"
+"chuo.osaka.jp\0arts.nf\0tokyo\0"
+"ap-southeast-1.compute.amazonaws.com\0"
+"notogawa.shiga.jp\0"
+"tennis\0us.com\0"
+"holdings\0"
+"beats\0lifestyle\0"
+"redumbrella\0issmarterthanyou.com\0"
+"britishcolumbia.museum\0"
+"maizuru.kyoto.jp\0"
+"k12.va.us\0"
+"encyclopedic.museum\0posts-and-telecommunications.museum\0k12.pr.us\0"
+"youth.museum\0"
+"barletta-trani-andria.it\0"
+"kai.yamanashi.jp\0"
+"riodejaneiro.museum\0"
+"nyny.museum\0"
+"software.aero\0yamato.kanagawa.jp\0"
+"obira.hokkaido.jp\0"
+"int.is\0"
+"review\0"
+"mishima.shizuoka.jp\0"
+"aizubange.fukushima.jp\0vestby.no\0"
+"akita.jp\0"
+"budejju.no\0"
+"hosting\0"
+"kuwana.mie.jp\0"
+"\xe4\xb8\x96\xe7\x95\x8c\0"
+"te.ua\0"
+"\xe5\xa4\xa7\xe5\x88\x86.jp\0"
+"tako.chiba.jp\0moareke.no\0"
+"associates\0"
+"m\xc3\xa1latvuopmi.no\0windows\0"
+"mail.pl\0augustow.pl\0"
+"int.la\0"
+"!city.kobe.jp\0"
+"cn.it\0sanfrancisco.museum\0"
+"sakado.saitama.jp\0s3-ap-southeast-1.amazonaws.com\0"
+"principe.st\0okinawa\0"
+"drive\0"
+"jogasz.hu\0misato.shimane.jp\0kuroiso.tochigi.jp\0"
+"int.lk\0"
+"higashikagawa.kagawa.jp\0"
+"groks-this.info\0"
+"arkhangelsk.ru\0"
+"yawatahama.ehime.jp\0"
+"pa.leg.br\0"
+"chigasaki.kanagawa.jp\0minami-alps.yamanashi.jp\0osoyro.no\0"
+"tone.ibaraki.jp\0matsuda.kanagawa.jp\0tenri.nara.jp\0"
+"nogata.fukuoka.jp\0"
+"omachi.saga.jp\0\xc3\xb8rsta.no\0"
+"lucca.it\0yanaizu.fukushima.jp\0"
+"africa.com\0"
+"wakuya.miyagi.jp\0"
+"arkhangelsk.su\0"
+"eurovision\0"
+"manx.museum\0askim.no\0"
+"sakegawa.yamagata.jp\0"
+"int.mv\0b\xc3\xa1hccavuotna.no\0"
+"int.mw\0"
+"int.ni\0"
+"sakaki.nagano.jp\0nakano.tokyo.jp\0"
+"blog\0"
+"tinn.no\0ostroda.pl\0mydrobo.com\0"
+"pb.leg.br\0"
+"gonohe.aomori.jp\0starostwo.gov.pl\0edu.krd\0"
+"marugame.kagawa.jp\0"
+"nt.au\0"
+"sekigahara.gifu.jp\0"
+"plaza.museum\0"
+"leasing.aero\0tjeldsund.no\0"
+"sunagawa.hokkaido.jp\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0from-nh.com\0"
+"nt.ca\0"
+"bellevue.museum\0"
+"lib.oh.us\0"
+"tysfjord.no\0"
+"otsuki.kochi.jp\0co.krd\0"
+"k12.ec\0porsangu.no\0"
+"yukuhashi.fukuoka.jp\0"
+"int.pt\0"
+"soundandvision.museum\0nesna.no\0"
+"read-books.org\0"
+"khmelnitskiy.ua\0"
+"br\xc3\xb8nn\xc3\xb8y.no\0"
+"tm.cy\0fedje.no\0"
+"monzabrianza.it\0"
+"ami.ibaraki.jp\0marker.no\0cloudfront.net\0"
+"naganohara.gunma.jp\0forsand.no\0"
+"\xe6\xbe\xb3\xe9\x96\x80\0volkswagen\0"
+"tosu.saga.jp\0raisa.no\0yokohama\0"
+"aip.ee\0"
+"foggia.it\0"
+"takinoue.hokkaido.jp\0realm.cz\0"
+"coldwar.museum\0lancaster\0"
+"wassamu.hokkaido.jp\0ro.eu.org\0"
+"tomari.hokkaido.jp\0locus\0"
+"stjordal.no\0"
+"aga.niigata.jp\0americanart.museum\0"
+"campobasso.it\0shimoda.shizuoka.jp\0"
+"adult\0pharmacy\0"
+"telekommunikation.museum\0"
+"ac\0kopervik.no\0"
+"ad\0witd.gov.pl\0int.ru\0"
"ae\0"
-"af\0uchinomi.kagawa.jp\0kashihara.nara.jp\0"
-"ag\0snasa.no\0"
-"ai\0"
-"inf.cu\0wa.us\0"
-"al\0tomioka.gunma.jp\0"
-"am\0"
-"an\0"
-"ao\0k12.wi.us\0"
-"traniandriabarletta.it\0"
-"aq\0ba\0"
-"ar\0bb\0"
-"as\0uslivinghistory.museum\0"
-"at\0"
-"au\0be\0"
-"bf\0tomisato.chiba.jp\0tajimi.gifu.jp\0"
-"aw\0bg\0is-a-knight.org\0"
+"af\0mytis.ru\0int.rw\0abudhabi\0"
+"ag\0"
+"ai\0raholt.no\0"
+"oshima.yamaguchi.jp\0"
+"al\0"
+"am\0latino\0tips\0"
+"reklam.hu\0jewish.museum\0rakkestad.no\0"
+"ao\0higashimatsushima.miyagi.jp\0\xe5\xa4\xa7\xe6\x8b\xbf\0elasticbeanstalk.com\0"
+"aq\0ba\0chernivtsi.ua\0blogsite.org\0from-id.com\0"
+"ar\0bb\0jobs.tt\0"
+"as\0tm.fr\0yamagata.yamagata.jp\0dontexist.org\0"
+"at\0obanazawa.yamagata.jp\0"
+"air-surveillance.aero\0au\0be\0"
+"bf\0"
+"aw\0bg\0carrara-massa.it\0"
"ax\0bh\0"
-"bi\0"
-"az\0bj\0"
-"bm\0nebraska.museum\0one\0"
-"bo\0ong\0s3-sa-east-1.amazonaws.com\0"
-"ca\0med.om\0"
-"br\0gold\0"
-"bs\0cc\0y.se\0"
-"bt\0cd\0nakai.kanagawa.jp\0golf\0onl\0"
-"med.pa\0cc.vi.us\0"
-"bv\0cf\0shinanomachi.nagano.jp\0"
-"bw\0cg\0york.museum\0"
-"ch\0nishihara.kumamoto.jp\0"
+"bi\0heroy.more-og-romsdal.no\0int.tj\0"
+"az\0bj\0myftp.org\0"
+"aogaki.hyogo.jp\0blue\0"
+"bm\0"
+"kawamata.fukushima.jp\0aurskog-h\xc3\xb8land.no\0scholarships\0"
+"bo\0romskog.no\0flir\0"
+"honbetsu.hokkaido.jp\0"
+"ca\0pors\xc3\xa1\xc5\x8bgu.no\0"
+"br\0"
+"bs\0cc\0idf.il\0int.tt\0"
+"bt\0cd\0"
+"bv\0cf\0"
+"bw\0cg\0k12.il\0"
+"ch\0"
"by\0ci\0"
"bz\0"
-"firestone\0"
-"cl\0chikusei.ibaraki.jp\0"
-"cm\0frosta.no\0"
-"cn\0"
-"co\0tingvoll.no\0isa.us\0\xe5\x95\x86\xe5\xba\x97\0"
-"sic.it\0kasuga.hyogo.jp\0med.pl\0"
-"cr\0!city.yokohama.jp\0maori.nz\0"
-"shiroi.chiba.jp\0amagasaki.hyogo.jp\0flsmidth\0"
-"cu\0de\0soc.lk\0gloppen.no\0holdings\0loans\0"
-"cv\0funabashi.chiba.jp\0kaizuka.osaka.jp\0"
-"cw\0ooo\0"
-"cx\0\xe1\x83\x92\xe1\x83\x94\0financial\0"
-"stada\0"
-"cz\0dj\0bedzin.pl\0"
-"dk\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0"
-"wodzislaw.pl\0"
-"dm\0"
-"otaki.chiba.jp\0saroma.hokkaido.jp\0poker\0"
-"do\0lviv.ua\0"
-"bibai.hokkaido.jp\0aridagawa.wakayama.jp\0"
-"arezzo.it\0"
-"ec\0civilization.museum\0vestnes.no\0"
-"ee\0communications.museum\0"
-"pmn.it\0"
-"eg\0"
-"dz\0final\0"
-"sarufutsu.hokkaido.jp\0nagawa.nagano.jp\0accountant\0"
-"muenchen.museum\0"
-"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"pisa.it\0"
-"linde\0"
-"es\0audnedaln.no\0narvik.no\0"
-"et\0geometre-expert.fr\0livorno.it\0tra.kp\0"
-"eu\0med.sa\0lib.sd.us\0goog\0"
-"5.bg\0krager\xc3\xb8.no\0gratis\0"
-"med.sd\0"
-"fi\0luxury\0"
-"nanjo.okinawa.jp\0"
-"askim.no\0aurskog-holand.no\0asso.re\0\xd9\x85\xd8\xb5\xd8\xb1\0"
-"wada.nagano.jp\0"
+"hangout\0moscow\0"
+"cl\0"
+"cm\0aostavalley.it\0prudential\0"
+"cn\0oirase.aomori.jp\0"
+"co\0\xc3\xa5mli.no\0"
+"chikugo.fukuoka.jp\0"
+"cr\0yaizu.shizuoka.jp\0"
+"int.ve\0"
+"cu\0de\0shiraoi.hokkaido.jp\0iruma.saitama.jp\0lib.nv.us\0"
+"of.by\0cv\0tm.hu\0teshikaga.hokkaido.jp\0lib.ia.us\0lawyer\0university\0"
+"cw\0yamaga.kumamoto.jp\0"
+"b.bg\0cx\0si.eu.org\0"
+"cz\0dj\0"
+"dk\0"
+"dm\0cc.vt.us\0int.vn\0"
+"furano.hokkaido.jp\0"
+"do\0cn.ua\0"
+"consultant.aero\0kasama.ibaraki.jp\0"
+"lecce.it\0frana.no\0"
+"\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0"
+"b.br\0ec\0"
+"ee\0"
+"higashitsuno.kochi.jp\0"
+"eg\0s3-ap-northeast-1.amazonaws.com\0"
+"cr.it\0defense.tn\0"
+"dz\0"
+"tokoname.aichi.jp\0"
+"cargo.aero\0frankfurt.museum\0"
+"yamakita.kanagawa.jp\0"
+"es\0yakutia.ru\0"
+"et\0torino.it\0"
+"eu\0noshiro.akita.jp\0"
+"fr\xc3\xb8ya.no\0\xe6\xbe\xb3\xe9\x97\xa8\0"
+"fi\0"
"fm\0"
-"fo\0org\0"
-"fm.br\0agro.pl\0"
-"ga\0"
-"fr\0gb\0kazo.saitama.jp\0"
-"gd\0ogawa.ibaraki.jp\0"
-"ge\0us-east-1.amazonaws.com\0"
-"gf\0"
-"gg\0mer\xc3\xa5ker.no\0from-ok.com\0"
-"gh\0kuwana.mie.jp\0"
+"tm.km\0"
+"fo\0"
+"blogdns.org\0"
+"ga\0for-better.biz\0"
+"fr\0gb\0iinet\0is-a-democrat.com\0"
+"kurate.fukuoka.jp\0"
+"gd\0"
+"ge\0nakijin.okinawa.jp\0"
+"gf\0miyoshi.tokushima.jp\0"
+"gg\0"
+"gh\0"
"gi\0"
-"mashike.hokkaido.jp\0"
-"is-a-celticsfan.org\0"
-"gl\0ogawa.nagano.jp\0"
-"gm\0"
+"oyama.tochigi.jp\0"
+"kanan.osaka.jp\0"
+"gl\0hannan.osaka.jp\0"
+"gm\0tranby.no\0"
"gn\0"
-"arendal.no\0"
-"sd.cn\0gp\0"
+"familyds.org\0"
+"gp\0"
"gq\0"
-"gr\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0"
-"gs\0claims\0"
-"gt\0"
-"gw\0lib.md.us\0"
-"int.ar\0"
+"gr\0trentinostirol.it\0sande.vestfold.no\0"
+"gs\0kanna.gunma.jp\0"
+"gt\0tm.mc\0k12.ak.us\0insurance\0"
+"virgin\0"
+"gw\0"
+"tm.mg\0sk.eu.org\0"
"gy\0"
-"hk\0colonialwilliamsburg.museum\0associates\0"
+"hk\0amli.no\0"
"hm\0"
-"hn\0"
-"int.az\0karumai.iwate.jp\0"
-"hr\0zao.miyagi.jp\0anan.tokushima.jp\0"
-"gov.ac\0"
-"ht\0id\0tsuiki.fukuoka.jp\0ikoma.nara.jp\0chungnam.kr\0mail.pl\0"
-"gov.ae\0int.bo\0hu\0ie\0bergen.no\0kh.ua\0is-lost.org\0"
-"gov.af\0"
-"kurobe.toyama.jp\0green\0"
-"yk.ca\0"
-"tonami.toyama.jp\0"
-"gov.al\0"
-"md.ci\0im\0histoire.museum\0salem.museum\0"
-"in\0rm.it\0vercelli.it\0"
-"int.ci\0io\0music.museum\0"
-"bieszczady.pl\0gmail\0"
-"gov.ba\0iq\0"
-"gov.ar\0gov.bb\0ir\0"
-"gov.as\0is\0\xc3\xa1laheadju.no\0samsung\0"
-"it\0dnsdojo.net\0"
-"gov.au\0int.co\0je\0game-server.cc\0"
-"gov.bf\0"
-"kragero.no\0"
-"gov.bh\0"
-"asso.nc\0"
-"gov.az\0"
-"gov.bm\0voss.no\0"
-"gov.bo\0jo\0insure\0"
-"chirurgiens-dentistes.fr\0gorizia.it\0jp\0ovh\0"
-"inf.mk\0"
-"gov.br\0"
-"gov.bs\0\xc3\xb8ksnes.no\0"
-"gov.bt\0gov.cd\0"
-"flora.no\0"
-"kg\0khakassia.ru\0"
-"gov.by\0ki\0"
-"gov.bz\0shinkamigoto.nagasaki.jp\0"
-"sk.ca\0\xc3\xa5lesund.no\0"
-"gov.cl\0fukaya.saitama.jp\0wloclawek.pl\0"
-"gov.cm\0km\0tynset.no\0chuvashia.ru\0tec.ve\0"
-"gov.cn\0kn\0"
-"gov.co\0journalism.museum\0netbank\0"
-"basilicata.it\0susaki.kochi.jp\0ogawara.miyagi.jp\0kp\0"
-"la\0kvitsoy.no\0"
-"kr\0lb\0"
-"lc\0alaheadju.no\0"
-"gd.cn\0"
-"gov.cu\0"
-"fujiidera.osaka.jp\0"
-"gov.cx\0"
-"ky\0li\0oceanographique.museum\0viking.museum\0jessheim.no\0forgot.her.name\0"
-"kz\0kitchen\0"
-"lk\0"
-"minamiawaji.hyogo.jp\0nikko.tochigi.jp\0"
-"gov.dm\0"
-"kakuda.miyagi.jp\0"
-"gov.do\0"
-"kasuga.fukuoka.jp\0"
-"ma\0r\xc3\xa1isa.no\0"
-"lr\0"
-"gov.ec\0ls\0mc\0"
-"fukuoka.jp\0lt\0md\0"
-"gov.ee\0lu\0me\0"
+"hn\0shonai.yamagata.jp\0"
+"bible\0"
+"hr\0"
+"pagespeedmobilizer.com\0"
+"ht\0id\0trentino-s-tirol.it\0kppsp.gov.pl\0"
+"hu\0ie\0"
+"yamatokoriyama.nara.jp\0visa\0"
+"assedic.fr\0seihi.nagasaki.jp\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
+"higashiosaka.osaka.jp\0"
+"digital\0"
+"il\0"
+"im\0"
+"in\0nagasaki.jp\0alstom\0"
+"io\0"
+"tm.no\0"
+"iq\0shimonoseki.yamaguchi.jp\0nt.no\0protection\0"
+"ir\0"
+"d.bg\0is\0"
+"zj.cn\0it\0vrn.ru\0"
+"je\0macys\0"
+"nx.cn\0"
+"grane.no\0"
+"no-ip.co.uk\0"
+"santacruz.museum\0aaa.pro\0"
+"shiranuka.hokkaido.jp\0"
+"surrey.museum\0"
+"misato.miyagi.jp\0ngo.lk\0baikal.ru\0careers\0sharp\0"
+"jo\0aizumi.tokushima.jp\0"
+"to.it\0jp\0palana.ru\0"
+"lombardia.it\0markets\0"
+"im.it\0gs.fm.no\0latrobe\0"
+"ct.it\0pi.leg.br\0"
+"sannohe.aomori.jp\0mizumaki.fukuoka.jp\0"
+"kg\0guernsey.museum\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0"
+"educational.museum\0"
+"ki\0kwp.gov.pl\0"
+"soma.fukushima.jp\0dvrcam.info\0"
+"km\0tm.pl\0"
+"kn\0"
+"med.pro\0"
+"ota.tokyo.jp\0kp\0"
+"la\0"
+"kr\0lb\0bradesco\0"
+"lc\0dynv6.net\0"
+"its.me\0"
+"molde.no\0"
+"viva\0"
+"hofu.yamaguchi.jp\0ru.eu.org\0se.eu.org\0"
+"nakatombetsu.hokkaido.jp\0susaki.kochi.jp\0ky\0li\0"
+"kz\0chattanooga.museum\0"
+"kunitachi.tokyo.jp\0lk\0marnardal.no\0apps.fbsbx.com\0"
+"is-an-artist.com\0ch.eu.org\0"
+"ovre-eiker.no\0"
+"aeroport.fr\0kuromatsunai.hokkaido.jp\0"
+"naturalhistory.museum\0"
+"shobara.hiroshima.jp\0ma\0""1kapp.com\0"
+"taa.it\0lr\0"
+"ls\0mc\0grue.no\0"
+"lt\0md\0vivo\0"
+"kiryu.gunma.jp\0lu\0me\0"
"lv\0"
-"gov.eg\0mg\0"
-"vet.br\0mh\0"
+"mg\0gratangen.no\0nat.tn\0"
+"mh\0"
"ly\0"
-"gov.dz\0"
-"mk\0"
-"zama.kanagawa.jp\0ml\0pid\0"
-"trade\0isa-hockeynut.com\0"
+"mk\0k12.wi.us\0"
+"ml\0"
+"betainabox.com\0"
"mn\0"
-"mo\0komvux.se\0"
-"mp\0"
-"mq\0na\0from-al.com\0"
-"fm.it\0futtsu.chiba.jp\0mr\0"
-"ms\0nc\0"
-"gov.et\0yasaka.nagano.jp\0mt\0"
-"mu\0ne\0ltda\0"
-"kazuno.akita.jp\0mv\0nf\0pin\0"
-"mw\0ng\0"
-"mishima.fukushima.jp\0mx\0"
-"steam.museum\0my\0"
-"group.aero\0\xe5\x80\x8b\xe4\xba\xba.hk\0"
-"matsuyama.ehime.jp\0nl\0"
-"no\0trana.no\0"
-"minamitane.kagoshima.jp\0nr\0"
-"schoenbrunn.museum\0wv.us\0"
-"mombetsu.hokkaido.jp\0"
-"gov.ge\0boston.museum\0schweiz.museum\0nu\0dyndns-pics.com\0"
-"ureshino.mie.jp\0"
-"aseral.no\0snz.ru\0"
-"gov.gh\0thruhere.net\0"
-"gov.gi\0"
+"mo\0global\0"
+"mp\0tm.ro\0"
+"mq\0na\0nt.ro\0"
+"yotsukaido.chiba.jp\0mr\0"
+"nishiokoppe.hokkaido.jp\0ms\0nc\0"
+"kira.aichi.jp\0mt\0"
+"mu\0ne\0"
+"mv\0nf\0tm.se\0"
+"miyawaka.fukuoka.jp\0mw\0ng\0"
+"mx\0servebbs.net\0"
+"my\0"
+"mz\0kraanghke.no\0"
+"ngo.ph\0hzc.io\0"
+"planetarium.museum\0nl\0onthewifi.com\0"
+"k12.tr\0"
+"toyako.hokkaido.jp\0"
+"no\0"
+"adm.br\0"
+"samnanger.no\0nr\0"
+"wolterskluwer\0"
+"nu\0"
+"midatlantic.museum\0"
+"tsuruoka.yamagata.jp\0"
+"radio.br\0"
"nz\0"
-"gjesdal.no\0"
-"om\0"
-"gov.gn\0"
-"s3.amazonaws.com\0"
-"friulivgiulia.it\0tokyo.jp\0"
-"kvinesdal.no\0pa\0"
-"gov.gr\0"
-"asso.km\0hagebostad.no\0"
-"adachi.tokyo.jp\0"
-"pe\0"
-"pf\0"
-"bushey.museum\0"
-"lt.it\0seoul.kr\0ph\0kaszuby.pl\0"
-"civilaviation.aero\0int.is\0"
-"genoa.it\0teshikaga.hokkaido.jp\0kawanabe.kagoshima.jp\0"
-"gov.hk\0pk\0bharti\0"
-"friulivegiulia.it\0ebetsu.hokkaido.jp\0pl\0"
-"pm\0"
-"kanonji.kagawa.jp\0pn\0star\0"
-"shisui.chiba.jp\0"
-"qa\0"
-"tenri.nara.jp\0pr\0"
-"ps\0s3-website-us-west-2.amazonaws.com\0"
-"nago.okinawa.jp\0pt\0"
-"gov.ie\0alstahaug.no\0"
-"pw\0blogspot.com\0"
-"aya.miyazaki.jp\0tamano.okayama.jp\0"
-"asso.mc\0py\0"
-"cuisinella\0"
-"moriyoshi.akita.jp\0ikeda.gifu.jp\0berlin\0"
-"gov.in\0geek.nz\0"
-"okuizumo.shimane.jp\0konskowola.pl\0"
-"gov.iq\0circle\0"
-"gov.ir\0"
-"gov.is\0"
-"gov.it\0"
-"nb.ca\0re\0kv.ua\0"
-"zagan.pl\0"
-"int.la\0v\xc3\xa5g\xc3\xa5.no\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
-"newhampshire.museum\0fm.no\0"
-"hiji.oita.jp\0"
-"gov.jo\0ro\0"
-"press.aero\0int.lk\0sa\0"
-"yoichi.hokkaido.jp\0kumenan.okayama.jp\0sb\0"
-"rs\0sc\0is-a-linux-user.org\0"
-"leg.br\0sd\0"
-"jur.pro\0ru\0se\0"
-"gov.kg\0rw\0sg\0"
-"brescia.it\0akishima.tokyo.jp\0sh\0"
-"gov.ki\0basel.museum\0si\0shacknet.nu\0"
-"ami.ibaraki.jp\0sj\0"
+"kicks-ass.net\0"
+"of.no\0rade.no\0wloclawek.pl\0legal\0"
+"om\0lib.ct.us\0"
+"f.bg\0uchinada.ishikawa.jp\0"
+"trogstad.no\0"
+"pa\0gsm.pl\0"
+"od.ua\0"
+"k12.vi\0"
+"pe\0wsa.gov.pl\0cr.ua\0"
+"minamitane.kagoshima.jp\0pf\0pomorskie.pl\0homeunix.net\0"
+"ph\0"
+"khmelnytskyi.ua\0"
+"fukushima.fukushima.jp\0miki.hyogo.jp\0"
+"pk\0"
+"b\xc3\xb8.nordland.no\0pl\0"
+"pm\0panerai\0"
+"newmexico.museum\0pn\0"
+"qa\0*.ex.ortsinfo.at\0"
+"alstahaug.no\0pr\0schaeffler\0"
+"otobe.hokkaido.jp\0ps\0"
+"como.it\0pt\0"
+"oystre-slidre.no\0racing\0"
+"trapani.it\0"
+"pw\0"
+"bayern\0"
+"py\0"
+"naamesjevuemie.no\0"
+"abogado\0"
+"space\0"
+"svelvik.no\0"
+"re\0"
+"shirako.chiba.jp\0kvitsoy.no\0"
+"hachinohe.aomori.jp\0"
+"padua.it\0"
+"kurogi.fukuoka.jp\0kanuma.tochigi.jp\0aure.no\0"
+"entertainment.aero\0"
+"soeda.fukuoka.jp\0"
+"moseushi.hokkaido.jp\0ro\0boats\0"
+"oksnes.no\0"
+"sa\0"
+"sb\0"
+"rs\0sc\0pe.leg.br\0"
+"isehara.kanagawa.jp\0sd\0"
+"perso.ht\0ru\0se\0"
+"otaki.chiba.jp\0"
+"rw\0sg\0"
+"sh\0k12.ky.us\0from-ga.com\0"
+"scienceandindustry.museum\0si\0budapest\0"
+"zushi.kanagawa.jp\0sj\0"
"sk\0"
-"sl\0"
-"gov.km\0sandefjord.no\0sm\0"
-"gov.kn\0sn\0"
+"sl\0graphics\0"
+"sm\0"
+"sn\0"
"so\0"
-"yahaba.iwate.jp\0gov.kp\0"
-"gov.la\0pharmacy\0"
-"kunitachi.tokyo.jp\0gov.lb\0sr\0"
-"gov.lc\0tc\0"
-"hidaka.saitama.jp\0st\0td\0"
-"convent.museum\0nyny.museum\0floro.no\0su\0"
-"kurate.fukuoka.jp\0sv\0tf\0"
-"altai.ru\0tg\0"
-"ibigawa.gifu.jp\0kakogawa.hyogo.jp\0nagaokakyo.kyoto.jp\0sx\0th\0"
-"gov.ky\0sy\0"
-"gov.kz\0sz\0tj\0"
-"gov.lk\0tk\0"
-"int.mv\0tl\0"
-"int.mw\0herad.no\0tm\0"
-"oarai.ibaraki.jp\0tn\0"
-"to\0"
-"tp\0"
-"gov.ma\0ua\0dnsalias.com\0"
-"gov.lr\0tr\0"
-"sor-fron.no\0"
-"hb.cn\0gov.lt\0tt\0"
-"gov.me\0healthcare\0"
-"\xe9\x9d\x99\xe5\xb2\xa1.jp\0inagawa.hyogo.jp\0gov.lv\0tv\0"
-"gov.mg\0tw\0ug\0"
-"ad.jp\0miura.kanagawa.jp\0"
-"gov.ly\0"
-"tz\0"
-"gov.mk\0uk\0"
-"\xe4\xbd\x90\xe8\xb3\x80.jp\0okinawa.okinawa.jp\0gov.ml\0"
-"archaeology.museum\0"
-"biz.bb\0gov.mn\0"
-"gov.mo\0"
-"biz.at\0"
+"beardu.no\0"
+"sr\0"
+"tc\0durban\0"
+"st\0td\0"
+"su\0"
+"works.aero\0valer.hedmark.no\0sv\0tf\0"
+"kikugawa.shizuoka.jp\0tg\0"
+"obihiro.hokkaido.jp\0joso.ibaraki.jp\0sx\0th\0"
+"sy\0media\0"
+"sz\0tj\0"
+"tk\0"
+"tl\0"
+"trading.aero\0tm\0at.eu.org\0"
+"nieruchomosci.pl\0tn\0"
+"to\0dyn-o-saur.com\0"
+"ua\0"
+"nakagusuku.okinawa.jp\0tr\0tm.za\0myftp.biz\0"
+"kashima.saga.jp\0andasuolo.no\0"
+"tt\0s3-eu-central-1.amazonaws.com\0"
+"toride.ibaraki.jp\0lighting\0"
+"b.se\0tv\0"
+"tw\0ug\0"
+"artsandcrafts.museum\0bievat.no\0"
+"h.bg\0divtasvuodna.no\0dominic.ua\0"
+"shizuoka.jp\0mitane.akita.jp\0tz\0booking\0"
+"eidfjord.no\0uk\0"
+"city.hu\0"
+"oki.fukuoka.jp\0"
+"shinjo.okayama.jp\0oracle\0"
"va\0"
-"iglesiascarbonia.it\0satte.saitama.jp\0gov.mr\0"
-"gov.ms\0us\0vc\0"
-"isshiki.aichi.jp\0"
-"gov.mu\0ve\0"
-"biz.az\0obira.hokkaido.jp\0gov.mv\0"
-"gov.mw\0gov.ng\0vg\0"
-"gov.my\0uy\0vi\0"
+"nozawaonsen.nagano.jp\0"
+"schoenbrunn.museum\0us\0vc\0"
+"stjordalshalsen.no\0"
+"ve\0from-wa.com\0"
+"ts.it\0"
+"vg\0"
+"gs.ah.no\0uy\0vi\0gallery\0"
"uz\0"
-"gs.rl.no\0"
-"corvette.museum\0"
+"unj\xc3\xa1rga.no\0"
"vn\0"
-"marburg.museum\0swiss\0"
-"lyngdal.no\0"
-"taiki.hokkaido.jp\0gov.nr\0"
-"sandoy.no\0"
-"otoineppu.hokkaido.jp\0"
-"vu\0"
-"sr.it\0misugi.mie.jp\0wf\0"
-"orland.no\0pro\0"
-"can.museum\0servebbs.org\0"
-"int.pt\0"
-"services\0"
-"s\xc3\xb8mna.no\0gov.om\0"
-"higashi.fukuoka.jp\0"
-"taobao\0"
-"lombardia.it\0tsuwano.shimane.jp\0"
-"biei.hokkaido.jp\0"
-"meraker.no\0ws\0"
+"nv.us\0"
+"ct.us\0\xe5\xb9\xbf\xe4\xb8\x9c\0sells-for-less.com\0"
+"hikawa.shimane.jp\0vu\0"
+"wf\0"
+"kamisu.ibaraki.jp\0grajewo.pl\0rsc.cdn77.org\0"
+"yamanakako.yamanashi.jp\0red.sv\0"
+"uruma.okinawa.jp\0ryuoh.shiga.jp\0tree.museum\0hotel.tz\0play\0"
+"komaki.aichi.jp\0"
+"ogliastra.it\0elburg.museum\0"
+"averoy.no\0"
+"fuchu.toyama.jp\0koenig.ru\0"
+"umb.it\0hitachinaka.ibaraki.jp\0alvdal.no\0ws\0"
+"berg.no\0ngo.za\0"
+"cooking\0"
+"okaya.nagano.jp\0"
+"kuroishi.aomori.jp\0gwangju.kr\0"
+"osakasayama.osaka.jp\0nationalfirearms.museum\0"
+"trana.no\0"
+"kamogawa.chiba.jp\0prime\0"
+"union.aero\0newjersey.museum\0k12.ks.us\0coupon\0"
+"nagahama.shiga.jp\0"
+"settlement.museum\0"
+"siracusa.it\0"
+"ac.leg.br\0"
+"s\xc3\xb8r-aurdal.no\0adygeya.su\0kep.tr\0"
+"os\xc3\xb8yro.no\0"
+"kouzushima.tokyo.jp\0malatvuopmi.no\0"
+"lavangen.no\0"
+"carrier.museum\0"
+"uslivinghistory.museum\0homedns.org\0"
+"hamada.shimane.jp\0"
+"vallee-aoste.it\0vega.no\0yt\0"
+"ishigaki.okinawa.jp\0"
+"kv\xc3\xa6""fjord.no\0"
+"emergency.aero\0on.ca\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0tj\xc3\xb8me.no\0"
+"politie\0"
+"zm\0cloud\0"
+"washingtondc.museum\0"
+"tromsa.no\0xen.prgmr.com\0"
+"urakawa.hokkaido.jp\0d.se\0"
+"chihayaakasaka.osaka.jp\0"
+"j.bg\0stjohn.museum\0audio\0"
+"qld.edu.au\0kitanakagusuku.okinawa.jp\0\xe7\xbd\x91\xe7\xab\x99\0"
+"tw.cn\0"
+"no-ip.info\0"
+"kusu.oita.jp\0"
+"veneto.it\0namikata.ehime.jp\0higashikurume.tokyo.jp\0iide.yamagata.jp\0"
+"ddr.museum\0"
+"cv.ua\0"
+"cc.ga.us\0"
+"kyotango.kyoto.jp\0"
+"seto.aichi.jp\0"
+"takaharu.miyazaki.jp\0"
+"is.it\0"
+"cz.it\0\xe4\xbd\x90\xe8\xb3\x80.jp\0"
+"yoshinogari.saga.jp\0kristiansand.no\0zarow.pl\0no-ip.org\0"
+"drangedal.no\0amfam\0"
+"trd.br\0adygeya.ru\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0frontier\0"
+"tamano.okayama.jp\0"
+"oh.us\0"
+"assassination.museum\0"
+"afjord.no\0"
+"napoli.it\0komatsu.ishikawa.jp\0pr.leg.br\0"
+"shishikui.tokushima.jp\0"
+"taranto.it\0!city.yokohama.jp\0higashiomi.shiga.jp\0"
+"erimo.hokkaido.jp\0opole.pl\0"
+"berlin\0"
+"kamisato.saitama.jp\0rindal.no\0"
+"trustee.museum\0stada\0"
+"accident-investigation.aero\0"
+"hokuto.yamanashi.jp\0"
+"ownprovider.com\0"
+"trainer.aero\0"
+"koshu.yamanashi.jp\0countryestate.museum\0astrakhan.ru\0"
+"hotel.lk\0direct\0does-it.net\0"
+"hatoyama.saitama.jp\0"
+"asahi.ibaraki.jp\0norilsk.ru\0"
+"pizza\0"
+"stryn.no\0"
+"\xd0\xb5\xd1\x8e\0"
+"audnedaln.no\0supply\0"
+"shimamoto.osaka.jp\0"
+"saito.miyazaki.jp\0"
+"stord.no\0"
+"nonoichi.ishikawa.jp\0likescandy.com\0"
+"valled-aosta.it\0"
+"biratori.hokkaido.jp\0"
+"trentinosued-tirol.it\0"
+"television.museum\0"
+"heimatunduhren.museum\0minnesota.museum\0"
+"narashino.chiba.jp\0aejrie.no\0"
+"f.se\0"
+"ol.no\0"
+"l.bg\0ruovat.no\0"
+"yatsuka.shimane.jp\0"
+"tsushima.aichi.jp\0"
+"upow.gov.pl\0"
+"nantan.kyoto.jp\0"
+"airguard.museum\0"
+"lecco.it\0"
+"gorlice.pl\0"
+"lorenskog.no\0"
+"kursk.ru\0"
+"perm.ru\0"
+"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0oga.akita.jp\0kiyosato.hokkaido.jp\0ouchi.saga.jp\0aaa\0"
+"tjome.no\0"
+"wakkanai.hokkaido.jp\0\xe8\x87\xba\xe7\x81\xa3\0"
+"is-very-nice.org\0""3utilities.com\0"
+"compute-1.amazonaws.com\0"
+"crotone.it\0"
+"toyohashi.aichi.jp\0soja.okayama.jp\0"
+"rel.ht\0abb\0"
+"abc\0"
+"chikusei.ibaraki.jp\0tunes\0"
+"hotel.hu\0bofa\0dnsdojo.org\0"
+"mamurogawa.yamagata.jp\0"
+"bindal.no\0kv\xc3\xa6nangen.no\0"
+"medical.museum\0"
+"sarufutsu.hokkaido.jp\0"
+"2000.hu\0n\xc3\xa6r\xc3\xb8y.no\0"
+"fukui.jp\0vipsinaapp.com\0"
+"oharu.aichi.jp\0"
+"lebtimnetz.de\0"
+"bushey.museum\0"
+"kashiwazaki.niigata.jp\0london\0"
+"francaise.museum\0k12.wa.us\0"
+"s3.ap-northeast-2.amazonaws.com\0"
+"desa.id\0railroad.museum\0"
+"r\xc3\xb8ros.no\0"
+"pb.ao\0"
+"bologna.it\0"
+"aco\0"
+"or.at\0"
+"gratis\0"
+"anpachi.gifu.jp\0"
+"uenohara.yamanashi.jp\0"
+"or.bi\0"
+"\xe4\xb8\xad\xe5\x9b\xbd\0"
+"from-mt.com\0from-nd.com\0"
+"hobol.no\0perso.sn\0attorney\0"
+"mitaka.tokyo.jp\0"
+"ads\0kinder\0"
+"h.se\0"
+"or.ci\0s\xc3\xb8gne.no\0aeg\0"
+"veg\xc3\xa5rshei.no\0\xe4\xb8\xad\xe5\x9c\x8b\0"
+"n.bg\0ureshino.mie.jp\0"
+"buzen.fukuoka.jp\0"
+"ora.gunma.jp\0"
+"unjarga.no\0au.eu.org\0be.eu.org\0"
+"powiat.pl\0"
+"perso.tn\0"
+"kawaminami.miyazaki.jp\0dnipropetrovsk.ua\0"
+"or.cr\0osteroy.no\0"
+"ooshika.nagano.jp\0boehringer\0"
+"kaho.fukuoka.jp\0missoula.museum\0lur\xc3\xb8y.no\0cc.al.us\0"
+"docs\0"
+"klabu.no\0"
+"chita.ru\0"
+"s3.cn-north-1.amazonaws.com.cn\0"
+"foundation.museum\0l\xc3\xa1hppi.no\0comsec\0mcdonalds\0"
+"afl\0"
+"pesarourbino.it\0asahi.chiba.jp\0"
+"iris.arpa\0inagawa.hyogo.jp\0takatsuki.osaka.jp\0"
+"shiso.hyogo.jp\0"
+"chofu.tokyo.jp\0viking.museum\0"
+"\xc3\xa1k\xc5\x8boluokta.no\0"
+"higashinaruse.akita.jp\0"
+"vaapste.no\0yachts\0"
+"friuli-vegiulia.it\0andria-barletta-trani.it\0grandrapids.museum\0"
+"taiki.mie.jp\0dyndns.tv\0"
+"gob.ar\0tools\0"
+"mup.gov.pl\0"
+"uto.kumamoto.jp\0palmsprings.museum\0"
+"\xd1\x80\xd1\x84\0"
+"akrehamn.no\0"
+"caserta.it\0"
+"mordovia.su\0"
+"sld.do\0"
+"farmers\0search\0"
+"gob.bo\0nishikatsura.yamanashi.jp\0davvesiida.no\0"
+"bialowieza.pl\0k12.la.us\0"
+"frogn.no\0g\xc3\xa1ls\xc3\xa1.no\0sinaapp.com\0"
+"vic.gov.au\0aero.tt\0aig\0"
+"\xe8\xb0\xb7\xe6\xad\x8c\0"
+"rel.pl\0"
+"annaka.gunma.jp\0izumi.osaka.jp\0"
+"tobetsu.hokkaido.jp\0ina.saitama.jp\0blogdns.net\0bg.eu.org\0"
+"gob.cl\0capebreton.museum\0"
+"embroidery.museum\0"
+"miyako.fukuoka.jp\0"
+"weibo\0"
+"pol.dz\0mjondalen.no\0doha\0ptplus.fit\0"
+"plus\0"
+"yoshimi.saitama.jp\0\xe7\xa7\xbb\xe5\x8a\xa8\0is-a-republican.com\0al.leg.br\0"
+"aero.mv\0"
+"labour.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\0bond\0"
+"kaluga.ru\0"
+"koka.shiga.jp\0kicks-ass.org\0"
+"ono.fukushima.jp\0takasago.hyogo.jp\0asahi.nagano.jp\0kadoma.osaka.jp\0gives\0dyndns.ws\0"
+"gob.do\0"
+"or.id\0tosashimizu.kochi.jp\0"
+"bel.tr\0"
+"p.bg\0"
+"gob.ec\0"
+"kindle\0"
+"zp.ua\0"
+"homeunix.org\0"
+"miyota.nagano.jp\0"
+"cc.ri.us\0"
+"medecin.km\0kaluga.su\0"
+"aisho.shiga.jp\0"
+"mordovia.ru\0"
+"nowaruda.pl\0"
+"book\0"
+"or.it\0"
+"is-a-patsfan.org\0"
+"sigdal.no\0"
+"gob.es\0"
+"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0"
+"lindas.no\0"
+"potenza.it\0"
+"nsk.ru\0"
+"tsuiki.fukuoka.jp\0"
+"or.jp\0"
+"sk\xc3\xa1nit.no\0"
+"b\xc3\xa1id\xc3\xa1r.no\0"
+"lea\xc5\x8bgaviika.no\0"
+"rifu.miyagi.jp\0"
+"ibaraki.jp\0crown\0is-a-knight.org\0"
+"mincom.tn\0"
+"diamonds\0"
+"coach\0"
+"pol.ht\0"
+"nemuro.hokkaido.jp\0"
+"or.kr\0"
+"rost.no\0"
+"fuel.aero\0gob.gt\0kitagata.saga.jp\0"
+"is-a-student.com\0"
+"incheon.kr\0"
+"idv.hk\0muroto.kochi.jp\0"
+"valle-d-aosta.it\0modum.no\0"
+"gob.hn\0"
+"servecounterstrike.com\0"
+"repbody.aero\0ed.ao\0vagan.no\0"
+"himeshima.oita.jp\0"
+"tajimi.gifu.jp\0takamori.nagano.jp\0"
+"wif.gov.pl\0"
+"anz\0"
+"aol\0hr.eu.org\0"
+"or.na\0"
+"gildesk\xc3\xa5l.no\0"
+"yahiko.niigata.jp\0"
+"or.mu\0"
+"rep.kp\0"
+"shimada.shizuoka.jp\0"
+"yokkaichi.mie.jp\0"
+"santabarbara.museum\0republican\0*.cns.joyent.com\0"
+"l.se\0"
+"r.bg\0ed.ci\0surgut.ru\0"
+"app\0"
+"fjell.no\0"
+"kurashiki.okayama.jp\0"
+"york.museum\0"
+"konskowola.pl\0dn.ua\0"
+"green\0"
+"ed.cr\0"
+"backplaneapp.io\0"
+"higashimurayama.tokyo.jp\0servebbs.org\0"
+"yokosuka.kanagawa.jp\0tsaritsyn.ru\0"
+"ot.it\0pd.it\0livinghistory.museum\0sandcats.io\0"
+"bar\0"
+"bbc\0"
+"shima.mie.jp\0"
+"shimonita.gunma.jp\0philadelphia.museum\0"
+"show.aero\0carboniaiglesias.it\0koryo.nara.jp\0"
+"giehtavuoatna.no\0"
+"nadex\0"
+"cieszyn.pl\0catholic\0"
+"yamatotakada.nara.jp\0lebesby.no\0art\0bbt\0"
+"or.pw\0"
+"uconnect\0"
+"paleo.museum\0bcg\0\xe9\x80\x9a\xe8\xb2\xa9\0"
+"vibovalentia.it\0nobeoka.miyazaki.jp\0tsurugashima.saitama.jp\0"
+"basilicata.it\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0"
+"agric.za\0bcn\0"
+"frogans\0"
+"babia-gora.pl\0"
+"sld.pa\0cruise\0"
+"minamiechizen.fukui.jp\0rmit\0"
+"walter\0"
+"pug.it\0tono.iwate.jp\0joshkar-ola.ru\0"
+"gob.mx\0hadsel.no\0hashbang.sh\0"
+"gob.ni\0"
+"fst.br\0"
+"pyatigorsk.ru\0"
+"masaki.ehime.jp\0"
+"emp.br\0"
+"fitjar.no\0"
+"ashibetsu.hokkaido.jp\0uzhgorod.ua\0komatsu\0xfinity\0cloudcontrolapp.com\0"
+"jorpeland.no\0"
+"parti.se\0"
+"dr.na\0h\xc3\xa1""bmer.no\0"
+"biella.it\0"
+"oristano.it\0"
+"atsugi.kanagawa.jp\0"
+"coal.museum\0stordal.no\0"
+"gob.pa\0"
+"grosseto.it\0bet\0"
+"viterbo.it\0jobs\0rollag.no\0"
+"or.th\0"
+"shonai.fukuoka.jp\0yono.saitama.jp\0kunstsammlung.museum\0gob.pe\0n.se\0"
+"dontexist.com\0"
+"t.bg\0"
+"horse\0"
+"kashiwa.chiba.jp\0gob.pk\0zt.ua\0"
+"cc.wv.us\0"
+"food\0health\0"
+"vladimir.su\0dp.ua\0cc.md.us\0no-ip.net\0"
+"cc.ar.us\0"
+"tas.au\0\xe5\xb1\xb1\xe6\xa2\xa8.jp\0or.ug\0"
+"tomisato.chiba.jp\0ibaraki.osaka.jp\0farmers.museum\0"
+"\xe6\xbb\x8b\xe8\xb3\x80.jp\0yokote.akita.jp\0ine.kyoto.jp\0"
+"or.tz\0"
+"monticello.museum\0"
+"sakawa.kochi.jp\0nakagawa.tokushima.jp\0"
+"saitama.jp\0"
+"ozu.ehime.jp\0college\0"
+"pharmacy.museum\0"
+"press.museum\0r\xc3\xb8yrvik.no\0gist.githubcloud.com\0"
+"slattum.no\0"
+"umi.fukuoka.jp\0"
+"or.us\0axa\0"
+"usa.oita.jp\0drammen.no\0"
+"aws\0"
+"e164.arpa\0"
+"ed.jp\0"
+"spjelkavik.no\0brasilia.me\0"
+"trani-andria-barletta.it\0kasumigaura.ibaraki.jp\0studio\0"
+"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0"
+"travelers\0"
+"swiebodzin.pl\0"
+"kure.hiroshima.jp\0"
+"molise.it\0bid\0"
+"iwatsuki.saitama.jp\0"
+"pup.gov.pl\0"
+"nhlfan.net\0"
+"pol.tr\0"
+"kyowa.akita.jp\0oum.gov.pl\0yolasite.com\0"
+"bio\0"
+"ford\0"
+"rygge.no\0vladimir.ru\0"
+"k12.wy.us\0servesarcasm.com\0"
+"toyooka.hyogo.jp\0"
+"nabari.mie.jp\0"
+"gob.sv\0"
+"biz\0nachikatsuura.wakayama.jp\0"
+"*.kitakyushu.jp\0loan\0azure-mobile.net\0"
+"chuo.fukuoka.jp\0satsumasendai.kagoshima.jp\0"
+"compute.amazonaws.com\0"
+"oz.au\0"
+"badaddja.no\0"
+"akabira.hokkaido.jp\0"
+"kashiwara.osaka.jp\0idv.tw\0"
+"itakura.gunma.jp\0"
+"association.museum\0is-a-personaltrainer.com\0"
+"ringerike.no\0"
+"p.se\0lib.or.us\0"
+"folkebibl.no\0"
+"v.bg\0"
+"uwajima.ehime.jp\0maserati\0"
+"oskol.ru\0gob.ve\0z-2.compute-1.amazonaws.com\0"
+"urasoe.okinawa.jp\0"
+"kumagaya.saitama.jp\0warszawa.pl\0"
+"dr.tr\0"
+"can.museum\0"
+"skanit.no\0"
+"ap-northeast-1.compute.amazonaws.com\0"
+"atsuma.hokkaido.jp\0mitou.yamaguchi.jp\0"
+"va.it\0isesaki.gunma.jp\0"
+"rhcloud.com\0"
+"mitsue.nara.jp\0"
+"columbia.museum\0"
+"shimizu.hokkaido.jp\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
+"cadaques.museum\0"
+"is-a-bruinsfan.org\0sells-it.net\0"
+"chungnam.kr\0"
+"akashi.hyogo.jp\0"
+"nsw.au\0"
+"barum.no\0"
+"ms.leg.br\0"
+"bms\0"
+"dnsdojo.net\0"
+"yomitan.okinawa.jp\0"
+"bmw\0"
+"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"villas\0"
+"endofinternet.net\0"
+"haibara.shizuoka.jp\0bnl\0"
+"ed.pw\0"
+"yamaguchi.jp\0"
+"medecin.fr\0"
+"suzuka.mie.jp\0"
+"tamaki.mie.jp\0"
+"nirasaki.yamanashi.jp\0"
+"catanzaro.it\0"
+"nordre-land.no\0"
+"ustka.pl\0"
+"bom\0"
+"nic.in\0"
+"froya.no\0k12.mi.us\0boo\0"
+"station.museum\0is-a-blogger.com\0"
+"coffee\0loft\0"
+"mt.leg.br\0"
+"tires\0"
+"iwamizawa.hokkaido.jp\0bot\0"
+"box\0"
+"kamo.niigata.jp\0nativeamerican.museum\0"
+"friuli-ve-giulia.it\0from-or.com\0"
+"ohira.tochigi.jp\0"
+"bomlo.no\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0"
+"cab\0"
+"nagai.yamagata.jp\0"
+"czeladz.pl\0"
+"tonaki.okinawa.jp\0"
+"dentist\0"
+"communication.museum\0fusa.no\0condos\0host\0"
+"lib.vi.us\0cal\0ufcfan.org\0"
+"emr.it\0va.no\0r.se\0cam\0"
+"gushikami.okinawa.jp\0sayama.saitama.jp\0"
+"sosa.chiba.jp\0geology.museum\0"
+"x.bg\0"
+"fyresdal.no\0cba\0noip.us\0"
+"car\0"
+"\xe7\xbe\xa4\xe9\xa6\xac.jp\0minobu.yamanashi.jp\0"
+"cat\0js.cn\0"
+"publ.pt\0"
+"assabu.hokkaido.jp\0cafe\0"
+"sumoto.kumamoto.jp\0ar.com\0from-vt.com\0"
+"vc.it\0chiyoda.tokyo.jp\0"
+"cbn\0"
+"cbs\0"
+"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0"
+"asmatart.museum\0shell\0"
+"yamato.kumamoto.jp\0azure\0compare\0"
+"*.nagoya.jp\0music.museum\0farsund.no\0"
+"il.eu.org\0"
+"\xe6\xa0\x83\xe6\x9c\xa8.jp\0tanagura.fukushima.jp\0mibu.tochigi.jp\0"
+"\xc3\xb8rland.no\0"
+"nt.edu.au\0"
+"s3-ap-northeast-2.amazonaws.com\0"
+"tama.tokyo.jp\0"
+"kosai.shizuoka.jp\0from-in.com\0"
+"forsale\0alpha-myqnapcloud.com\0"
+"nagano.nagano.jp\0taira.toyama.jp\0schmidt\0"
+"trade\0"
+"ceb\0"
+"meloy.no\0"
+"casino.hu\0tatar\0"
+"auction\0"
+"reviews\0"
+"s\xc3\xb8r-fron.no\0vaksdal.no\0"
+"yabu.hyogo.jp\0hu.eu.org\0ie.eu.org\0"
+"hopto.org\0"
+"kasukabe.saitama.jp\0"
+"ceo\0logoip.de\0"
+"soo.kagoshima.jp\0cfa\0"
+"hiroshima.jp\0daito.osaka.jp\0baltimore.museum\0"
+"minamioguni.kumamoto.jp\0"
+"tarui.gifu.jp\0*.sch.uk\0cfd\0"
+"matsushima.miyagi.jp\0"
+"kerrylogistics\0"
+"numata.gunma.jp\0"
+"buy\0"
+"hachioji.tokyo.jp\0us.na\0"
+"flanders.museum\0irkutsk.ru\0seven\0"
+"matta-varjjat.no\0"
+"fr\xc3\xa6na.no\0chtr.k12.ma.us\0"
+"blanco\0emerson\0"
+"matsubushi.saitama.jp\0t.se\0"
+"shintoku.hokkaido.jp\0"
+"z.bg\0"
+"vinnica.ua\0"
+"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
"soka.saitama.jp\0"
-"wildlife.museum\0lib.tx.us\0"
-"shonai.fukuoka.jp\0gov.ph\0"
-"sakaki.nagano.jp\0"
-"copenhagen.museum\0gov.pk\0"
-"gov.pl\0"
-"blue\0christmas\0"
-"gov.pn\0"
+"cal.it\0"
+"cc.sc.us\0"
+"wroclaw.pl\0"
+"*.cryptonomic.net\0"
+"sejny.pl\0deals\0\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0"
+"ve.it\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0matsubara.osaka.jp\0americanantiques.museum\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0"
+"ham-radio-op.net\0"
+"forum.hu\0otaru.hokkaido.jp\0s\xc3\xa1l\xc3\xa1t.no\0skjervoy.no\0"
+"mitsuke.niigata.jp\0jevnaker.no\0iki.fi\0"
+"company\0"
+"kami.miyagi.jp\0"
+"va.us\0is-a-green.com\0"
+"call\0"
+"ballooning.aero\0hirogawa.wakayama.jp\0taipei\0"
+"aogashima.tokyo.jp\0nationalheritage.museum\0aarp\0"
+"lund.no\0loten.no\0tirol\0"
+"dell-ogliastra.it\0"
+"dental\0"
+"kitamoto.saitama.jp\0"
+"aseral.no\0"
+"miyake.nara.jp\0orenburg.ru\0"
+"kamaishi.iwate.jp\0camp\0"
+"bzh\0"
+"nic.tj\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0"
+"is-a-designer.com\0"
+"fylkesbibl.no\0"
+"tochigi.jp\0"
+"sevastopol.ua\0k12.me.us\0"
+"from-ks.com\0"
+"k12.as.us\0"
+"sobetsu.hokkaido.jp\0oyamazaki.kyoto.jp\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"nhs.uk\0"
+"awaji.hyogo.jp\0"
+"\xe6\xb2\x96\xe7\xb8\x84.jp\0"
+"trysil.no\0"
+"kariwa.niigata.jp\0"
+"tajiri.osaka.jp\0"
+"calvinklein\0genting\0fbx-os.fr\0"
+"pp.az\0"
+"traeumtgerade.de\0"
+"nedre-eiker.no\0amica\0"
+"bykle.no\0"
+"tsuwano.shimane.jp\0arteducation.museum\0"
+"tanohata.iwate.jp\0nose.osaka.jp\0"
+"pohl\0z-1.compute-1.amazonaws.com\0"
+"tromso.no\0"
+"venice.it\0noip.me\0"
+"builders\0"
+"eu.com\0"
+"asso.eu.org\0"
+"toray\0"
+"nagaokakyo.kyoto.jp\0"
+"flights\0"
+"kumamoto.kumamoto.jp\0"
+"cc.az.us\0"
+"journalism.museum\0"
+"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0"
+"omi.niigata.jp\0"
+"lodi.it\0pn.it\0"
+"usuki.oita.jp\0helsinki.museum\0"
+"\xed\x95\x9c\xea\xb5\xad\0"
+"moriyoshi.akita.jp\0"
+"ikeda.nagano.jp\0"
+"care\0"
+"naturhistorisches.museum\0"
+"friuli-vgiulia.it\0cruises\0"
+"hikone.shiga.jp\0"
+"paragliding.aero\0hirata.fukushima.jp\0chiyoda.gunma.jp\0sumoto.hyogo.jp\0"
+"noda.chiba.jp\0texas.museum\0love\0"
+"scientist.aero\0hurum.no\0"
+"casa\0ubank\0"
+"esurance\0goip.de\0"
+"sakaiminato.tottori.jp\0burghof.museum\0cars\0"
+"shiogama.miyagi.jp\0"
+"case\0"
+"webhop.info\0gr.eu.org\0"
+"com\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0"
+"school.na\0cash\0"
+"toyoake.aichi.jp\0"
+"discovery.museum\0"
+"uppo.gov.pl\0"
+"frosta.no\0"
+"author.aero\0"
+"gotemba.shizuoka.jp\0nesodden.no\0"
+"asker.no\0fhv.se\0\xe7\xbd\x91\xe5\xba\x97\0"
+"obuse.nagano.jp\0aarborte.no\0"
+"museet.museum\0golffan.us\0"
+"altai.ru\0komvux.se\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
+"marche.it\0guovdageaidnu.no\0"
+"grong.no\0"
+"*.kawasaki.jp\0"
+"itoigawa.niigata.jp\0travel.pl\0"
+"pfizer\0"
+"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
+"dad\0"
+"hanggliding.aero\0shimabara.nagasaki.jp\0environment.museum\0"
+"etc.br\0"
+"school.nz\0statefarm\0"
+"satte.saitama.jp\0gol.no\0"
+"cherkassy.ua\0"
+"lier.no\0"
+"laz.it\0"
+"matsuyama.ehime.jp\0kamchatka.ru\0wales\0"
+"shiroishi.saga.jp\0"
+"tokke.no\0"
+"dyndns-web.com\0"
+"day\0"
+"quebec\0"
+"cri.nz\0x.se\0report\0"
+"lib.fl.us\0able\0"
+"l\xc3\xb8ten.no\0"
+"art.museum\0crs\0csc\0"
+"pl.ua\0samsung\0"
+"cc.mn.us\0securitytactics.com\0"
+"yonaguni.okinawa.jp\0rennebu.no\0cc.gu.us\0"
+"vi.it\0"
+"*.alwaysdata.net\0"
+"en.it\0wedding\0"
+"mutuelle\0"
+"sorum.no\0kiev.ua\0"
+"office-on-the.net\0"
+"hadano.kanagawa.jp\0krager\xc3\xb8.no\0"
+"journalist.aero\0ogata.akita.jp\0"
+"sciencecenters.museum\0"
+"barcelona\0kuokgroup\0"
+"shingu.wakayama.jp\0"
+"trentinoaltoadige.it\0gallery.museum\0game\0"
+"\xe6\x94\xbf\xe5\xba\x9c.hk\0"
+"dds\0"
+"uvic.museum\0from-me.org\0"
+"odo.br\0\xe7\xbd\x91\xe7\xbb\x9c.cn\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0nordreisa.no\0engineer\0"
+"kaizuka.osaka.jp\0trolley.museum\0"
+"travel.tt\0"
+"vda.it\0"
+"bible.museum\0"
+"miyoshi.hiroshima.jp\0kg.kr\0"
+"dabur\0"
+"toyoura.hokkaido.jp\0udmurtia.ru\0"
+"leksvik.no\0bentley\0jprs\0"
+"dev\0"
+"trader.aero\0kochi.kochi.jp\0"
+"kamifurano.hokkaido.jp\0"
+"australia.museum\0k12.ma.us\0"
+"tenkawa.nara.jp\0"
+"bizen.okayama.jp\0"
+"oumu.hokkaido.jp\0"
+"from-ma.com\0"
+"wiki.br\0porn\0"
+"vads\xc3\xb8.no\0"
+"leirvik.no\0"
+"yasu.shiga.jp\0"
+"tank.museum\0k\xc3\xa5""fjord.no\0"
+"yufu.oita.jp\0"
+"se.net\0hopto.me\0"
+"okinoshima.shimane.jp\0"
+"mino.gifu.jp\0bo.telemark.no\0"
+"fukuroi.shizuoka.jp\0"
+"nes.akershus.no\0post\0"
+"lib.va.us\0"
+"z.se\0"
+"uryu.hokkaido.jp\0"
+"dhl\0"
+"gon.pk\0"
+"fin.ec\0adult.ht\0"
+"doesntexist.com\0"
+"kaisei.kanagawa.jp\0"
+"sk\xc3\xa5nland.no\0"
+"versailles.museum\0olayan\0"
+"tendo.yamagata.jp\0"
+"pr.it\0gs.mr.no\0"
+"room\0"
+"serveexchange.com\0"
+"beauxarts.museum\0"
+"dynns.com\0"
+"baidu\0"
+"\xe7\xbd\x91\xe7\xbb\x9c.hk\0"
+"newspaper.museum\0"
+"historical.museum\0\xe7\xbd\x91\xe7\xbb\x9c\0"
+"odate.akita.jp\0diy\0"
+"railway.museum\0masoy.no\0"
+"is-a-player.com\0"
+"sport.hu\0sciencecenter.museum\0"
+"saltdal.no\0"
+"playstation\0"
+"atami.shizuoka.jp\0"
+"download\0"
+"chambagri.fr\0sar.it\0hvaler.no\0"
+"haboro.hokkaido.jp\0tranoy.no\0"
+"lapy.pl\0"
+"iselect\0yamaxun\0"
+"vestre-toten.no\0phone\0"
+"bryansk.su\0"
+"navuotna.no\0"
+"dscloud.me\0"
+"oyer.no\0bielawa.pl\0"
+"pp.ru\0pp.se\0volvo\0"
+"kuki.saitama.jp\0free\0"
+"newport.museum\0"
+"fujiyoshida.yamanashi.jp\0"
+"amsterdam\0"
+"sund.no\0"
+"urayasu.chiba.jp\0"
+"nflfan.org\0"
+"uki.kumamoto.jp\0"
+"etisalat\0"
+"fuchu.hiroshima.jp\0"
+"logoip.com\0"
+"gop.pk\0"
+"asago.hyogo.jp\0higashimatsuyama.saitama.jp\0cbre\0"
+"pp.ua\0"
+"nakagawa.fukuoka.jp\0luxembourg.museum\0"
+"cc.hi.us\0"
+"dnp\0"
+"kurotaki.nara.jp\0ogose.saitama.jp\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"naha.okinawa.jp\0"
+"pt.it\0kasamatsu.gifu.jp\0"
+"dog\0"
+"minamiminowa.nagano.jp\0"
+"tcm.museum\0is-uberleet.com\0"
+"depot.museum\0"
+"bryansk.ru\0"
+"vi.us\0"
+"gov.ac\0web.co\0anquan\0"
+"maibara.shiga.jp\0dot\0"
+"gov.ae\0kyotanabe.kyoto.jp\0"
+"gov.af\0tadaoka.osaka.jp\0codes\0"
+"keymachine.de\0"
+"gov.al\0"
+"from-ct.com\0from-la.net\0"
+"kofu.yamanashi.jp\0"
+"baseball.museum\0"
+"gov.ba\0"
+"gov.ar\0gov.bb\0fujikawa.yamanashi.jp\0"
+"gov.as\0web.do\0"
+"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0rexroth\0"
+"gov.au\0"
+"gov.bf\0"
+"hamburg.museum\0"
+"gov.bh\0copenhagen.museum\0"
+"namsos.no\0"
+"gov.az\0saku.nagano.jp\0"
+"gov.bm\0"
+"shimane.jp\0"
+"gov.bo\0"
+"k12.nm.us\0"
+"gov.br\0"
+"gov.bs\0film.museum\0maif\0yodobashi\0"
+"gov.bt\0gov.cd\0eat\0"
+"gbiz\0"
+"eti.br\0"
+"gov.by\0"
+"ecn.br\0gov.bz\0"
+"wa.au\0"
+"gov.cl\0"
+"gov.cm\0tsuno.kochi.jp\0"
+"gov.cn\0endofinternet.org\0"
+"gov.co\0maison\0"
+"\xc3\xb8ygarden.no\0"
+"rogers\0"
+"iwafune.tochigi.jp\0"
+"photo\0"
+"gov.cu\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0"
+"calabria.it\0fuso.aichi.jp\0"
+"g\xc3\xa1ivuotna.no\0"
+"council.aero\0gov.cx\0"
+"gov.cy\0kusatsu.gunma.jp\0kikonai.hokkaido.jp\0"
+"kitayama.wakayama.jp\0"
+"shinshinotsu.hokkaido.jp\0\xe7\xb5\x84\xe7\xb9\x94.tw\0"
+"gov.dm\0timekeeping.museum\0"
+"communications.museum\0"
+"gov.do\0pacific.museum\0eco\0"
+"imabari.ehime.jp\0"
+"gov.ec\0"
+"qh.cn\0gov.ee\0"
+"salangen.no\0"
+"gov.eg\0"
+"boleslawiec.pl\0"
+"cc.mt.us\0cc.nd.us\0"
+"gov.dz\0"
+"computerhistory.museum\0nes.buskerud.no\0"
+"eidsvoll.no\0"
+"pv.it\0\xe5\x95\x86\xe6\xa0\x87\0"
+"gs.hm.no\0"
+"qld.au\0gov.et\0"
+"edu\0scotland.museum\0"
+"takatsuki.shiga.jp\0dtv\0"
+"web.id\0"
+"pr.us\0pantheonsite.io\0"
+"kirov.ru\0"
+"fujioka.gunma.jp\0"
+"nesseby.no\0"
+"narita.chiba.jp\0"
+"hurdal.no\0"
+"travelersinsurance\0"
+"baidar.no\0"
+"\xc3\xb8yer.no\0"
+"gov.ge\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
+"writesthisblog.com\0"
+"gov.gh\0"
+"gov.gi\0california.museum\0"
+"kushima.miyazaki.jp\0"
+"house\0zuerich\0"
+"shinjo.yamagata.jp\0"
+"gov.gn\0"
+"servebbs.com\0"
+"crafts.museum\0"
+"gov.gr\0dvr\0"
+"photos\0"
+"dwg\0town\0"
+"friuliv-giulia.it\0accenture\0"
+"gov.gy\0gujo.gifu.jp\0minamiaiki.nagano.jp\0"
+"konan.shiga.jp\0"
+"gov.hk\0lamer\0"
+"okoppe.hokkaido.jp\0grocery\0"
+"honjyo.akita.jp\0"
+"catering.aero\0eniwa.hokkaido.jp\0adac\0"
+"higashiizumo.shimane.jp\0oyabe.toyama.jp\0"
+"\xc3\xa5rdal.no\0"
+"alpha.bounty-full.com\0"
+"pgafan.net\0"
+"sanofi\0"
+"gov.ie\0osaka\0"
+"\xc3\xa5s.no\0"
+"minamata.kumamoto.jp\0is.gov.pl\0"
+"scrapping.cc\0"
+"skaun.no\0"
+"pictet\0"
+"gov.il\0fin.tn\0"
+"gov.in\0"
+"web.lk\0"
+"shiroi.chiba.jp\0"
+"gov.iq\0"
+"gov.ir\0"
+"gov.is\0"
+"gov.it\0"
+"fukudomi.saga.jp\0boston.museum\0frog.museum\0moskenes.no\0"
+"gamagori.aichi.jp\0fuchu.tokyo.jp\0vote\0"
+"lib.pr.us\0"
+"toys\0"
+"gov.jo\0birthplace.museum\0"
+"minamiuonuma.niigata.jp\0"
+"huissier-justice.fr\0luxury\0"
+"voto\0"
+"community.museum\0silk.museum\0namsskogan.no\0"
+"higashiagatsuma.gunma.jp\0"
+"gov.kg\0\xe4\xbc\x81\xe4\xb8\x9a\0"
+"gov.ki\0"
+"web.nf\0"
+"aramco\0"
+"gov.km\0web.ni\0"
+"gov.kn\0bodo.no\0dyndns-pics.com\0"
+"makurazaki.kagoshima.jp\0"
+"fukusaki.hyogo.jp\0gov.kp\0"
+"cesena-forli.it\0gov.la\0"
+"mifune.kumamoto.jp\0gov.lb\0"
+"gov.lc\0systems\0"
+"tr\xc3\xa6na.no\0"
+"gov.ky\0salem.museum\0"
+"saroma.hokkaido.jp\0gov.kz\0"
+"gov.lk\0"
+"kunneppu.hokkaido.jp\0pila.pl\0fareast.ru\0"
+"gaivuotna.no\0"
+"investments\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0"
+"shibata.niigata.jp\0kongsvinger.no\0"
+"gov.ma\0tickets\0"
+"gov.lr\0"
+"mulhouse.museum\0nuernberg.museum\0"
+"gov.lt\0b\xc3\xa1hcavuotna.no\0"
+"gov.me\0"
+"gov.lv\0"
+"gov.mg\0kommunalforbund.se\0is-very-evil.org\0"
+"l\xc3\xb8""dingen.no\0"
+"gov.ly\0"
+"gov.mk\0"
+"gov.ml\0"
+"total\0"
+"gov.mn\0"
+"gov.mo\0web.pk\0"
+"gov.mr\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0"
+"gov.ms\0jefferson.museum\0"
+"tuscany.it\0"
+"friulivegiulia.it\0kitahata.saga.jp\0gov.mu\0"
+"gov.mv\0"
+"gov.mw\0gov.ng\0zgrad.ru\0physio\0"
+"istanbul\0secure\0"
+"isahaya.nagasaki.jp\0gov.my\0lebork.pl\0"
+"veterinaire.km\0gov.mz\0"
+"kanagawa.jp\0"
+"sado.niigata.jp\0fineart.museum\0"
+"kashihara.nara.jp\0"
+"gov.nr\0"
+"narviika.no\0"
+"kunigami.okinawa.jp\0agakhan\0"
+"alessandria.it\0"
+"tolga.no\0"
+"izumisano.osaka.jp\0contact\0"
+"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0namegawa.saitama.jp\0"
+"miyoshi.aichi.jp\0finearts.museum\0"
+"gov.om\0"
+"zone\0"
+"neues.museum\0"
+"syzran.ru\0bargains\0"
+"daegu.kr\0"
+"lib.wi.us\0"
+"ambulance.aero\0gov.ph\0"
+"hsbc\0icbc\0"
+"kusatsu.shiga.jp\0gov.pk\0"
+"gov.pl\0krasnoyarsk.ru\0fr.eu.org\0"
+"fj.cn\0"
+"showa.fukushima.jp\0gov.pn\0km.ua\0"
+"cc.nh.us\0"
"gov.qa\0"
-"sanagochi.tokushima.jp\0gov.pr\0author\0"
-"vestv\xc3\xa5g\xc3\xb8y.no\0gov.ps\0"
-"yamanashi.jp\0gov.pt\0"
-"yakage.okayama.jp\0"
-"holt\xc3\xa5len.no\0"
-"gov.py\0"
-"pub\0"
-"int.ru\0"
-"hi.cn\0notaires.fr\0"
-"int.rw\0"
-"trentino-altoadige.it\0osaka.jp\0"
-"loten.no\0"
-"biz.et\0odate.akita.jp\0"
-"niepce.museum\0"
-"rollag.no\0"
-"yt\0"
-"sd.us\0click\0"
-"lib.oh.us\0doesntexist.org\0"
-"immobilien\0"
-"stor-elvdal.no\0from-ri.com\0"
-"fribourg.museum\0finnoy.no\0"
-"diet\0"
-"int.tj\0"
+"gov.pr\0jp.net\0poznan.pl\0"
+"gov.ps\0safe\0"
+"mil.ac\0archaeological.museum\0gov.pt\0r.cdn77.net\0"
+"vs.it\0"
+"mil.ae\0pz.it\0"
+"guardian\0"
+"c.cdn77.org\0"
+"gov.py\0airtel\0"
+"gjerdrum.no\0"
+"mil.al\0"
+"web.tj\0"
+"veterinaire.fr\0chanel\0"
+"mil.ba\0"
+"mil.ar\0"
+"lviv.ua\0"
+"web.tr\0"
+"kiwi.nz\0"
+"sand\xc3\xb8y.no\0"
+"mil.az\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0"
+"sarpsborg.no\0fan\0"
+"mil.bo\0poivron.org\0"
"gov.sa\0"
"gov.sb\0"
-"gov.rs\0gov.sc\0"
+"mil.br\0gov.rs\0gov.sc\0"
"gov.sd\0"
-"gov.ru\0lt.ua\0"
-"shell.museum\0saratov.ru\0gov.rw\0gov.sg\0"
-"aikawa.kanagawa.jp\0gov.sh\0"
-"tours\0"
-"aosta-valley.it\0gr.it\0buzen.fukuoka.jp\0int.tt\0"
-"res.aero\0v\xc3\xa6r\xc3\xb8y.no\0"
-"kawamata.fukushima.jp\0gov.sl\0"
-"minami.fukuoka.jp\0suzuka.mie.jp\0genkai.saga.jp\0"
-"shika.ishikawa.jp\0"
-"yao.osaka.jp\0gov.st\0"
-"gr.jp\0mitake.gifu.jp\0sejny.pl\0"
-"md.us\0"
-"gov.sx\0"
-"gov.sy\0nagoya\0"
-"kurume.fukuoka.jp\0gov.tj\0"
-"int.ve\0"
+"gov.ru\0lanxess\0"
+"gov.rw\0gov.sg\0is-a-socialist.com\0"
+"gov.sh\0intuit\0"
+"web.ve\0"
+"mil.by\0"
+"gov.sl\0"
+"mil.cl\0gangwon.kr\0rivne.ua\0"
+"shimamaki.hokkaido.jp\0glas.museum\0"
+"mil.cn\0"
+"ac.ae\0mil.co\0honai.ehime.jp\0"
+"narusawa.yamanashi.jp\0k12.ms.us\0k12.nc.us\0"
+"k12.il.us\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0"
+"gov.st\0"
+"services.aero\0gov.sx\0"
+"gov.sy\0"
+"gov.tj\0"
"gov.tl\0"
"gov.tm\0"
-"mitaka.tokyo.jp\0gov.tn\0"
-"gov.to\0"
-"biz.id\0my.id\0"
-"trogstad.no\0gov.ua\0"
-"gov.tr\0"
-"ass.km\0budejju.no\0"
-"gov.tt\0int.vn\0"
-"aogashima.tokyo.jp\0gets-it.net\0"
-"plants.museum\0gov.tw\0"
-"store.nf\0"
-"gov.uk\0"
-"ar.it\0"
-"schlesisches.museum\0"
-"unzen.nagasaki.jp\0"
-"gaular.no\0koenig.ru\0"
-"epson\0"
-"sld.do\0mr.no\0gov.vc\0"
-"ptz.ru\0gov.ve\0"
-"build\0"
-"tw.cn\0"
-"from-mn.com\0"
-"og.ao\0namsskogan.no\0"
-"yamato.kumamoto.jp\0"
-"moseushi.hokkaido.jp\0gov.vn\0"
-"rocks\0"
-"biz.ki\0"
-"nes.buskerud.no\0\xe7\xb5\x84\xe7\xb9\x94.tw\0"
-"schwarz\0"
-"pruszkow.pl\0"
-"r\xc3\xb8mskog.no\0bargains\0"
-"vardo.no\0mk.ua\0"
-"house\0"
-"hashimoto.wakayama.jp\0"
-"cc.fl.us\0gov.ws\0"
-"chosei.chiba.jp\0shimosuwa.nagano.jp\0"
-"donna.no\0"
-"tp.it\0"
-"cc.sc.us\0"
-"meet\0"
-"sologne.museum\0"
-"obu.aichi.jp\0"
-"ardal.no\0"
-"meldal.no\0is-a-republican.com\0"
-"maintenance.aero\0"
-"haboro.hokkaido.jp\0hatoyama.saitama.jp\0rich\0"
-"gateway.museum\0"
-"kikonai.hokkaido.jp\0kosa.kumamoto.jp\0"
-"yasuoka.nagano.jp\0"
-"village.museum\0"
-"kyoto.jp\0hanamaki.iwate.jp\0"
-"tomsk.ru\0"
-"\xe7\xa7\x8b\xe7\x94\xb0.jp\0toyohashi.aichi.jp\0shiso.hyogo.jp\0"
-"hadsel.no\0google\0firebaseapp.com\0"
-"biz.mv\0"
-"biz.mw\0"
-"bi.it\0"
-"otobe.hokkaido.jp\0"
-"kvam.no\0vindafjord.no\0mine.nu\0"
-"omuta.fukuoka.jp\0ogasawara.tokyo.jp\0biz.nr\0"
-"frosinone.it\0kainan.wakayama.jp\0"
-"higashiyoshino.nara.jp\0"
-"\xe5\xa4\xa7\xe9\x98\xaa.jp\0"
-"delmenhorst.museum\0"
-"iwanuma.miyagi.jp\0"
-"khmelnitskiy.ua\0"
-"kanan.osaka.jp\0"
-"uwajima.ehime.jp\0toyonaka.osaka.jp\0"
-"transport.museum\0"
-"sklep.pl\0"
-"figueres.museum\0"
-"shimogo.fukushima.jp\0nishinomiya.hyogo.jp\0"
-"oumu.hokkaido.jp\0habikino.osaka.jp\0nakano.tokyo.jp\0ohkura.yamagata.jp\0"
-"qld.edu.au\0on.ca\0vacations\0"
-"berkeley.museum\0collection.museum\0biz.pk\0"
-"biz.pl\0pulawy.pl\0"
-"yabuki.fukushima.jp\0"
+"gov.tn\0"
+"ac.at\0gov.to\0"
+"ac.be\0mil.do\0steigen.no\0"
+"gov.ua\0esq\0vacations\0"
+"taki.mie.jp\0gov.tr\0"
+"mil.ec\0tsuruga.fukui.jp\0stockholm.museum\0gov.tt\0"
+"gov.tw\0"
+"mil.eg\0landes.museum\0"
+"murayama.yamagata.jp\0"
+"b\xc3\xb8.telemark.no\0"
+"kanzaki.saga.jp\0gov.uk\0"
+"mypsx.net\0"
+"per.la\0"
+"lib.ky.us\0baseball\0"
+"miyada.nagano.jp\0lib.ak.us\0gov.vc\0"
+"1.bg\0ac.ci\0jeonbuk.kr\0"
+"gov.ve\0is-lost.org\0"
+"tushu\0\xe4\xbf\xa1\xe6\x81\xaf\0"
+"ac.cn\0nasushiobara.tochigi.jp\0hyundai\0"
+"cc.nj.us\0"
+"cc.ia.us\0"
+"exhibition.museum\0"
+"ac.cr\0"
+"gov.vn\0ferrari\0lilly\0"
+"fortmissoula.museum\0"
+"gs.nl.no\0bearalv\xc3\xa1hki.no\0passagens\0"
+"lc.it\0missile.museum\0"
+"eus\0sale\0select\0"
+"ac.cy\0hasvik.no\0"
+"andebu.no\0web.za\0memorial\0"
+"mil.ge\0"
+"marshalls\0"
+"mil.gh\0wa.us\0"
+"shirakawa.gifu.jp\0"
+"spreadbetting\0yahoo\0"
+"coloradoplateau.museum\0"
+"medizinhistorisches.museum\0loab\xc3\xa1t.no\0"
+"\xe7\xb5\x84\xe7\xb9\x94.hk\0theater.museum\0\xe8\x81\x94\xe9\x80\x9a\0"
+"zao.miyagi.jp\0taketomi.okinawa.jp\0from-ak.com\0"
+"gov.ws\0"
+"nakaniikawa.toyama.jp\0per.nf\0"
+"mil.gt\0bungoono.oita.jp\0bo.nordland.no\0"
+"skodje.no\0dnsfor.me\0"
+"westfalen.museum\0"
+"naples.it\0\xe5\x8d\x83\xe8\x91\x89.jp\0toyotomi.hokkaido.jp\0tsuyama.okayama.jp\0bugatti\0"
+"mil.hn\0"
+"kadena.okinawa.jp\0"
+"balat.no\0"
+"mil.id\0"
+"gildeskal.no\0"
+"promo\0"
+"l\xc3\xa4ns.museum\0k12.ne.us\0"
+"homeunix.com\0"
+"mil.in\0tara.saga.jp\0"
+"gov.za\0"
+"mil.iq\0war.museum\0"
+"dynalias.com\0"
+"yanagawa.fukuoka.jp\0skoczow.pl\0misconfused.org\0"
+"jolster.no\0"
+"ac.gn\0minamimaki.nagano.jp\0iwi.nz\0fh.se\0"
+"g12.br\0clock.museum\0"
+"is-a-landscaper.com\0"
+"gov.zm\0"
+"shiojiri.nagano.jp\0hotmail\0"
+"mil.jo\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0lierne.no\0"
+"dyndns.info\0"
+"arakawa.saitama.jp\0"
+"fit\0"
+"dubai\0"
+"ethnology.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
+"mil.kg\0"
+"rocher\0"
+"salvadordali.museum\0"
+"sapo\0"
+"mil.km\0"
+"3.bg\0ac.id\0aa.no\0"
+"karasuyama.tochigi.jp\0"
+"mil.kr\0"
+"abiko.chiba.jp\0daiwa.hiroshima.jp\0"
+"bas.it\0oryol.ru\0"
+"ac.il\0shimokitayama.nara.jp\0"
+"ac.im\0"
+"ac.in\0"
+"mil.kz\0"
+"ac.ir\0le.it\0"
+"school.za\0gripe\0"
+"svizzera.museum\0"
"b\xc3\xa6rum.no\0"
-"kanazawa.ishikawa.jp\0"
-"reklam.hu\0emerck\0"
-"\xe5\xae\xae\xe5\xb4\x8e.jp\0oita.oita.jp\0biz.pr\0"
-"cyou\0"
-"kiyokawa.kanagawa.jp\0yonago.tottori.jp\0"
-"cards\0"
-"discount\0"
-"ak.us\0"
-"iide.yamagata.jp\0exposed\0"
-"store.ve\0de.com\0"
-"seljord.no\0sula.no\0"
-"skiptvet.no\0k12.mt.us\0"
-"friuliveneziagiulia.it\0ikeda.nagano.jp\0"
-"corporation.museum\0"
-"f.bg\0gj\xc3\xb8vik.no\0immo\0"
-"name.hr\0"
-"southwest.museum\0"
-"sekikawa.niigata.jp\0"
-"sciencecenters.museum\0"
-"tienda\0"
-"motoyama.kochi.jp\0"
-"plantation.museum\0kyoto\0"
-"izena.okinawa.jp\0"
-"mo\xc3\xa5reke.no\0"
-"og.it\0"
-"ap-southeast-1.compute.amazonaws.com\0s3-ap-southeast-1.amazonaws.com\0"
-"name.et\0"
-"kihoku.ehime.jp\0"
-"meme\0co.com\0"
-"prof.pr\0"
-"foggia.it\0kamisunagawa.hokkaido.jp\0"
-"historical.museum\0"
-"s3-ap-southeast-2.amazonaws.com\0"
-"biz.tj\0"
-"perm.ru\0"
-"tamayu.shimane.jp\0nanyo.yamagata.jp\0"
-"folldal.no\0"
-"matsuda.kanagawa.jp\0"
-"pe.ca\0"
-"etajima.hiroshima.jp\0mitsue.nara.jp\0biz.tr\0"
-"localhistory.museum\0rodeo\0doesntexist.com\0"
-"biz.tt\0"
-"iris.arpa\0zp.ua\0"
-"showa.yamanashi.jp\0"
-"urn.arpa\0sld.pa\0"
-"menu\0"
-"ar.us\0"
-"yusuhara.kochi.jp\0red\0"
-"glass.museum\0bygland.no\0"
-"ginoza.okinawa.jp\0\xd0\xba\xd0\xbe\xd0\xbc\0"
-"\xe7\xbd\x91\xe5\xba\x97\0"
-"store.ro\0"
-"higashikagura.hokkaido.jp\0"
-"selbu.no\0"
-"ohda.shimane.jp\0"
-"name.eg\0"
-"ren\0"
-"m.bg\0architecture.museum\0"
-"biz.vn\0"
-"satsumasendai.kagoshima.jp\0mazury.pl\0"
-"gojome.akita.jp\0"
+"gyeongbuk.kr\0"
+"saskatchewan.museum\0per.sg\0mysecuritycamera.net\0"
+"la.us\0"
+"mil.lv\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0nagato.yamaguchi.jp\0mil.mg\0"
+"takehara.hiroshima.jp\0sarl\0"
+"ac.jp\0"
+"gjovik.no\0"
+"historyofscience.museum\0"
+"chiryu.aichi.jp\0broadway\0"
+"not.br\0"
+"mil.mv\0"
+"mil.ng\0"
+"nis.za\0fly\0"
+"yaotsu.gifu.jp\0osaki.miyagi.jp\0mil.my\0mil.ni\0"
+"kagami.kochi.jp\0mil.mz\0"
+"davvenj\xc3\xa1rga.no\0no-ip.biz\0"
+"ac.kr\0"
+"hazu.aichi.jp\0"
+"mil.no\0kobierzyce.pl\0boutique\0"
+"\xe4\xb8\x80\xe5\x8f\xb7\xe5\xba\x97\0"
+"ac.lk\0lanbib.se\0"
+"\xe5\xb2\x90\xe9\x98\x9c.jp\0"
+"k12.mo.us\0"
+"isa-geek.org\0"
+"operaunite.com\0"
+"seiro.niigata.jp\0mil.nz\0"
+"ofunato.iwate.jp\0ac.ma\0"
+"nara.jp\0"
+"modalen.no\0"
+"ac.me\0"
+"epost\0"
+"alta.no\0"
+"mil.pe\0"
+"freemasonry.museum\0"
+"mil.ph\0"
+"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0dyndns-at-work.com\0"
+"shimoji.okinawa.jp\0"
+"mil.pl\0"
+"barlettatraniandria.it\0"
+"foo\0"
+"ac.mu\0stargard.pl\0"
+"schokoladen.museum\0ac.mw\0mil.qa\0"
+"verdal.no\0save\0"
+"\xe7\x86\x8a\xe6\x9c\xac.jp\0ac.ni\0"
+"ac.mz\0naturbruksgymn.se\0"
+"b\xc3\xa5tsfjord.no\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
+"fox\0"
+"tysv\xc3\xa6r.no\0"
+"5.bg\0mil.py\0"
+"eidsberg.no\0"
+"barcelona.museum\0"
+"ks.ua\0"
+"dni.us\0"
+"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0ac.nz\0embaixada.st\0gov.nc.tr\0"
+"mutsu.aomori.jp\0figueres.museum\0"
+"tsukumi.oita.jp\0diskstation.me\0"
+"ujiie.tochigi.jp\0"
+"halsa.no\0"
+"flakstad.no\0ac.pa\0gal\0"
+"realtor\0dyndns-remote.com\0"
+"gap\0"
+"inawashiro.fukushima.jp\0ks.us\0"
+"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0"
+"tsunan.niigata.jp\0"
+"lg.jp\0"
+"mil.ru\0"
+"tvedestrand.no\0"
+"mil.rw\0"
+"asso.fr\0mil.sh\0"
+"village.museum\0"
+"minakami.gunma.jp\0"
+"frl\0"
+"ac.pr\0saxo\0"
+"hidaka.wakayama.jp\0"
+"kamiizumi.saitama.jp\0"
+"jar.ru\0"
+"gouv.fr\0"
+"kahoku.ishikawa.jp\0habikino.osaka.jp\0"
+"mil.st\0"
+"etne.no\0verm\xc3\xb6gensberater\0"
+"asso.gp\0kani.gifu.jp\0prod\0"
+"uk.com\0"
+"allstate\0international\0prof\0"
+"mil.sy\0"
+"mil.tj\0wang\0\xe6\x97\xb6\xe5\xb0\x9a\0"
+"mil.tm\0"
+"milan.it\0xihuan\0is-a-libertarian.com\0"
+"mil.to\0\xe6\x9c\xba\xe6\x9e\x84\0"
+"milano.it\0"
+"imamat\0"
+"mil.tr\0"
+"nakama.fukuoka.jp\0malopolska.pl\0"
+"noboribetsu.hokkaido.jp\0cultural.museum\0mil.tw\0from-md.com\0"
+"nishinoshima.shimane.jp\0"
+"kazuno.akita.jp\0celtic.museum\0"
+"asso.ht\0mil.tz\0"
+"yokaichiba.chiba.jp\0"
+"shizukuishi.iwate.jp\0ac.rs\0gdn\0"
+"natura\0"
+"durham.museum\0ac.ru\0ac.se\0"
+"gea\0"
+"ac.rw\0ftr\0"
+"gouv.ht\0"
+"tokai.ibaraki.jp\0mil.vc\0apartments\0"
+"kouhoku.saga.jp\0mil.ve\0"
+"gen.in\0"
+"mil.uy\0"
+"piemonte.it\0krokstadelva.no\0enterprises\0"
+"reggioemilia.it\0duck\0"
+"sayama.osaka.jp\0fun\0"
+"hyuga.miyazaki.jp\0"
+"localhistory.museum\0lib.wa.us\0"
+"asso.bj\0koto.shiga.jp\0doesntexist.org\0"
+"lib.ks.us\0pimienta.org\0"
+"ac.th\0"
+"barefoot\0pgfog.com\0"
+"7.bg\0gj\xc3\xb8vik.no\0ac.sz\0ac.tj\0"
+"stavropol.ru\0"
+"suifu.ibaraki.jp\0"
+"gouv.bj\0illustration.museum\0"
+"sn\xc3\xa5sa.no\0"
+"asso.ci\0hatogaya.saitama.jp\0maryland.museum\0dnshome.de\0"
+"dev-myqnapcloud.com\0"
+"ac.ug\0neat-url.com\0"
+"li.it\0"
+"virginia.museum\0kosher\0"
+"ag.it\0ac.tz\0"
+"ac.uk\0watches\0"
+"\xd0\xba\xd0\xbe\xd0\xbc\0"
+"gouv.ci\0"
+"hasura-app.io\0"
+"galsa.no\0kddi\0teaches-yoga.com\0"
+"freeboxos.com\0"
+"fl.us\0rackmaze.com\0"
+"jur.pro\0"
+"tozsde.hu\0sp.leg.br\0"
+"collection.museum\0"
+"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
+"ac.vn\0"
+"!city.sendai.jp\0convent.museum\0suzuki\0"
+"kamo.kyoto.jp\0"
+"morioka.iwate.jp\0"
+"asso.dz\0"
+"mil.za\0"
+"kawaue.gifu.jp\0"
+"email\0fitness\0"
+"film.hu\0"
+"chirurgiens-dentistes.fr\0fidelity\0"
+"monster\0"
+"skien.no\0"
+"fyi\0"
+"aero\0nrw.museum\0wolomin.pl\0"
+"project.museum\0"
+"eng.pro\0"
+"k12.ok.us\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0mil.zm\0"
+"k12.id.us\0"
+"k12.ca.us\0"
+"saotome.st\0"
+"honjo.saitama.jp\0"
+"h\xc3\xb8nefoss.no\0"
+"b\xc3\xb8mlo.no\0"
+"living.museum\0"
+"dnsiskinky.com\0"
+"lig.it\0"
+"auto.pl\0"
+"niikappu.hokkaido.jp\0"
+"seaport.museum\0"
+"vibo-valentia.it\0"
+"mari.ru\0homeftp.org\0"
+"costume.museum\0sydney\0"
+"gen.nz\0"
+"aioi.hyogo.jp\0"
+"oguchi.aichi.jp\0alaska.museum\0pinb.gov.pl\0"
+"nnov.ru\0"
+"ac.za\0"
+"lib.la.us\0"
+"isa-geek.com\0"
+"9.bg\0hokkaido.jp\0kitadaito.okinawa.jp\0technology.museum\0fuettertdasnetz.de\0"
+"gangaviika.no\0"
+"gd.cn\0samukawa.kanagawa.jp\0bahcavuotna.no\0"
+"miasta.pl\0lg.ua\0gle\0shopping\0de.com\0"
+"money.museum\0jpmorgan\0"
+"ac.zm\0"
+"kumiyama.kyoto.jp\0izumo.shimane.jp\0agency\0"
+"linde\0"
+"kamikawa.saitama.jp\0"
+"asuke.aichi.jp\0gs.tm.no\0"
+"gs.nt.no\0juegos\0"
+"ltda\0"
+"fr.it\0fishing\0"
+"is-a-financialadvisor.com\0"
+"kitagawa.miyazaki.jp\0plc.ly\0workisboring.com\0"
+"*.sendai.jp\0"
+"tohnosho.chiba.jp\0"
+"wi.us\0"
+"blogdns.com\0"
+"ozora.hokkaido.jp\0\xe7\x8f\xa0\xe5\xae\x9d\0"
+"davvenjarga.no\0"
+"shichinohe.aomori.jp\0meiwa.mie.jp\0gmo\0"
+"yao.osaka.jp\0kms.ru\0"
+"otake.hiroshima.jp\0"
+"somna.no\0tours\0publishproxy.com\0"
+"chintai\0"
+"s3-sa-east-1.amazonaws.com\0"
+"toyotsu.fukuoka.jp\0busan.kr\0df.leg.br\0"
+"botanical.museum\0gmx\0"
+"fbxos.fr\0"
+"hekinan.aichi.jp\0"
+"philately.museum\0"
+"dodge\0"
+"otaki.saitama.jp\0"
+"kinokawa.wakayama.jp\0"
+"trentino-sudtirol.it\0motosu.gifu.jp\0cern\0"
+"asahi.yamagata.jp\0from-il.com\0"
+"lasalle\0"
+"hitachiota.ibaraki.jp\0"
+"student.aero\0"
+"kakuda.miyagi.jp\0"
+"mmafan.biz\0"
+"florist\0goo\0"
+"gop\0pramerica\0"
+"omuta.fukuoka.jp\0got\0"
+"gov\0"
+"indianapolis.museum\0"
+"finland.museum\0likes-pie.com\0"
+"gotsu.shimane.jp\0"
+"sling\0"
+"gen.tr\0"
+"r\xc3\xb8""d\xc3\xb8y.no\0"
+"hokksund.no\0"
+"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0"
+"am.br\0duns\0"
+"odesa.ua\0myeffect.net\0"
+"sch.ae\0"
+"es.eu.org\0"
+"realestate.pl\0"
+"telecity\0"
+"harvestcelebration.museum\0"
+"etnedal.no\0krasnodar.su\0"
+"hirakata.osaka.jp\0"
+"castres.museum\0"
+"lucania.it\0tainai.niigata.jp\0"
+"gs.of.no\0hemne.no\0skype\0"
+"matsuzaki.shizuoka.jp\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
+"saga.jp\0"
+"ieee\0"
+"amursk.ru\0"
+"hbo\0"
+"akita.akita.jp\0netbank\0"
+"ky.us\0"
+"nov.ru\0"
+"omega\0"
+"fudai.iwate.jp\0furniture\0"
+"sanagochi.tokushima.jp\0turen.tn\0dvag\0"
+"asakawa.fukushima.jp\0"
+"egyptian.museum\0"
+"natuurwetenschappen.museum\0"
+"xperia\0est-mon-blogueur.com\0"
+"cymru.museum\0"
+"moroyama.saitama.jp\0hikari.yamaguchi.jp\0"
+"nov.su\0"
+"hagebostad.no\0"
+"trentino.it\0shirahama.wakayama.jp\0"
+"fauske.no\0"
+"sopot.pl\0"
+"plc.uk\0"
+"usa.museum\0"
+"chernovtsy.ua\0"
+"vefsn.no\0"
+"asso.re\0android\0"
+"iveco\0"
+"latina.it\0kitaaiki.nagano.jp\0"
+"tsuno.miyazaki.jp\0fund\0"
+"unnan.shimane.jp\0"
+"philadelphiaarea.museum\0"
+"nomi.ishikawa.jp\0sumita.iwate.jp\0"
+"lugansk.ua\0"
+"mansion.museum\0"
+"media.museum\0"
"chungbuk.kr\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.cn\0nakasatsunai.hokkaido.jp\0takikawa.hokkaido.jp\0"
-"tokushima.tokushima.jp\0"
-"store.st\0"
-"name.az\0cnt.br\0johana.toyama.jp\0"
-"s3-website-eu-west-1.amazonaws.com\0"
-"social\0"
-"kvits\xc3\xb8y.no\0"
-"association.museum\0"
-"rikuzentakata.iwate.jp\0"
-"environment.museum\0indianmarket.museum\0hi.us\0"
-"ishikari.hokkaido.jp\0"
-"heimatunduhren.museum\0lib.de.us\0"
-"eti.br\0"
-"lunner.no\0estate\0"
-"lewismiller.museum\0\xec\x82\xbc\xec\x84\xb1\0"
-"komaki.aichi.jp\0"
-"naumburg.museum\0"
-"misato.wakayama.jp\0tsuru.yamanashi.jp\0"
-"haus\0"
-"kawagoe.mie.jp\0"
-"dance\0"
-"kadoma.osaka.jp\0"
-"ve.it\0"
-"vana\0"
-"museumcenter.museum\0"
-"\xc3\xb8stre-toten.no\0philips\0"
-"volyn.ua\0"
-"rio\0"
-"rip\0"
-"hiraya.nagano.jp\0skoczow.pl\0"
-"latrobe\0"
-"t.bg\0info\0homeftp.org\0"
-"shingu.hyogo.jp\0"
-"mykolaiv.ua\0"
-"loab\xc3\xa1t.no\0\xe7\xbd\x91\xe7\xab\x99\0"
-"prd.fr\0incheon.kr\0"
-"joburg\0"
-"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
-"oizumi.gunma.jp\0"
-"grp.lk\0"
-"cn.it\0kitamoto.saitama.jp\0"
-"silk.museum\0"
-"swinoujscie.pl\0"
-"\xe7\xbd\x91\xe7\xbb\x9c.hk\0sauherad.no\0komatsu\0"
-"pe.it\0datsun\0"
-"drangedal.no\0cc.nh.us\0versicherung\0"
-"date.fukushima.jp\0"
-"jl.cn\0mitane.akita.jp\0ozu.ehime.jp\0"
-"is-with-theband.com\0"
-"yoro.gifu.jp\0"
-"kamo.kyoto.jp\0azure-mobile.net\0"
-"aizuwakamatsu.fukushima.jp\0hasuda.saitama.jp\0targi.pl\0"
-"ddr.museum\0kiwi\0"
-"niyodogawa.kochi.jp\0"
-"snaase.no\0"
-"sumida.tokyo.jp\0"
-"emr.it\0"
-"prato.it\0surf\0"
-"iron.museum\0pittsburgh.museum\0us-gov-west-1.compute.amazonaws.com\0"
-"church\0futbol\0"
-"in.na\0"
-"moriyama.shiga.jp\0"
-"ehime.jp\0"
-"watch-and-clock.museum\0"
-"kushima.miyazaki.jp\0fussa.tokyo.jp\0"
-"qc.ca\0"
-"bmd.br\0shakotan.hokkaido.jp\0nyuzen.toyama.jp\0pe.kr\0"
-"skjerv\xc3\xb8y.no\0"
-"tree.museum\0"
-"egersund.no\0"
-"gratangen.no\0luxe\0"
-"\xe7\xb5\x84\xe7\xb9\x94.hk\0valer.hedmark.no\0"
-"stcgroup\0"
-"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0higashisumiyoshi.osaka.jp\0"
-"accountants\0"
-"is-uberleet.com\0"
-"kitaaiki.nagano.jp\0"
-"test.tj\0"
-"bomlo.no\0"
-"gs.of.no\0"
-"obanazawa.yamagata.jp\0yamanashi.yamanashi.jp\0"
-"prd.km\0"
-"from-wa.com\0"
-"agrigento.it\0"
-"casino.hu\0"
-"tawaramoto.nara.jp\0babia-gora.pl\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0credit\0"
-"dontexist.com\0"
-"yatsushiro.kumamoto.jp\0"
-"h\xc3\xa5.no\0"
-"js.cn\0niikappu.hokkaido.jp\0"
-"gallery\0training\0"
-"oguni.kumamoto.jp\0"
-"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0"
-"homebuilt.aero\0"
-"lowicz.pl\0"
-"sokndal.no\0"
-"prd.mg\0"
-"kakinoki.shimane.jp\0"
-"farmstead.museum\0active\0"
-"adm.br\0"
-"alibaba\0"
-"kunigami.okinawa.jp\0"
-"forgot.his.name\0"
-"\xc3\xa5mot.no\0test.ru\0"
-"bari.it\0"
-"fukuchi.fukuoka.jp\0sap\0"
-"in.rs\0"
-"doshi.yamanashi.jp\0"
-"monticello.museum\0"
-"f.se\0"
-"vs.it\0"
-"cpa.pro\0"
-"oygarden.no\0"
-"tarui.gifu.jp\0"
-"inzai.chiba.jp\0arida.wakayama.jp\0"
-"sca\0"
-"hokuto.hokkaido.jp\0okutama.tokyo.jp\0scb\0"
-"sbs\0"
-"name.vn\0"
+"gausdal.no\0slupsk.pl\0"
+"troms\xc3\xb8.no\0"
+"gent\0hobby-site.com\0"
+"vaga.no\0"
+"stackspace.space\0"
+"fresenius\0"
+"ullensvang.no\0gouv.rw\0"
+"us.eu.org\0"
+"sor-odal.no\0"
+"cc.nv.us\0"
+"fujikawaguchiko.yamanashi.jp\0gouv.sn\0global.prod.fastly.net\0"
+"inashiki.ibaraki.jp\0sebastopol.ua\0cc.ct.us\0"
+"togitsu.nagasaki.jp\0omaha.museum\0buzz\0"
+"tateshina.nagano.jp\0edu.eu.org\0"
+"lo.it\0"
+"goodhands\0"
+"mysecuritycamera.org\0"
+"tysvar.no\0"
+"democrat\0"
+"adachi.tokyo.jp\0"
+"delivery\0"
+"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0"
+"greta.fr\0szkola.pl\0"
+"iitate.fukushima.jp\0hida.gifu.jp\0"
+"sch.id\0tonami.toyama.jp\0"
+"asso.nc\0odda.no\0"
+"dgca.aero\0"
+"kommune.no\0"
+"build\0scor\0"
+"scot\0"
+"kimitsu.chiba.jp\0lunner.no\0salat.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0coupons\0"
+"sch.ir\0"
+"hiv\0"
+"gotdns.com\0"
+"koza.wakayama.jp\0"
+"ro.com\0"
+"otsuchi.iwate.jp\0k12.ny.us\0"
+"edogawa.tokyo.jp\0"
+"sch.jo\0algard.no\0"
+"hasama.oita.jp\0"
+"hara.nagano.jp\0"
+"kitakata.miyazaki.jp\0elblag.pl\0"
+"horology.museum\0"
+"arboretum.museum\0sciencehistory.museum\0"
+"commbank\0"
+"kounosu.saitama.jp\0"
+"arq.br\0"
+"ikeda.osaka.jp\0"
+"conference.aero\0"
+"shinonsen.hyogo.jp\0hkt\0"
+"tynset.no\0"
+"okawa.kochi.jp\0"
+"meland.no\0"
+"\xc3\xa5seral.no\0"
+"kl\xc3\xa6""bu.no\0"
"lib.wy.us\0"
-"in.th\0"
-"dubai\0"
-"magnitka.ru\0vegas\0"
-"otofuke.hokkaido.jp\0"
-"taipei\0"
-"trentinoa-adige.it\0"
-"in.ua\0"
-"ozu.kumamoto.jp\0"
-"from-id.com\0"
-"psi.br\0koshu.yamanashi.jp\0"
-"capetown\0"
-"fylkesbibl.no\0cc.nv.us\0pvt.k12.ma.us\0"
-"hachioji.tokyo.jp\0"
-"western.museum\0"
-"store.bb\0kasama.ibaraki.jp\0"
-"trentino-alto-adige.it\0terni.it\0kawaba.gunma.jp\0"
-"name.tj\0"
-"in.us\0"
-"katagami.akita.jp\0kawazu.shizuoka.jp\0"
-"mizunami.gifu.jp\0"
-"tank.museum\0lib.ri.us\0"
-"name.tr\0"
-"kiwa.mie.jp\0name.tt\0"
-"sm\xc3\xb8la.no\0"
-"nakaniikawa.toyama.jp\0"
-"online.museum\0hk.org\0"
-"miyoshi.saitama.jp\0"
-"asaminami.hiroshima.jp\0"
-"cn.ua\0"
-"fr\xc3\xb8ya.no\0"
-"!city.kawasaki.jp\0fukuroi.shizuoka.jp\0"
-"sew\0"
-"izunokuni.shizuoka.jp\0sex\0"
-"exeter.museum\0nesoddtangen.no\0"
-"tsukuba.ibaraki.jp\0"
-"m.se\0dreamhosters.com\0"
-"yame.fukuoka.jp\0ouchi.saga.jp\0"
-"amakusa.kumamoto.jp\0realtor\0"
-"symantec\0"
-"gyeonggi.kr\0"
-"ooshika.nagano.jp\0isla.pr\0"
-"eun.eg\0sund.no\0lib.ky.us\0"
+"canada.museum\0"
+"sch.lk\0"
+"protonet.io\0"
+"haga.tochigi.jp\0allfinanz\0"
+"shiroishi.miyagi.jp\0jetzt\0"
+"miyazu.kyoto.jp\0"
+"tagawa.fukuoka.jp\0zoology.museum\0"
+"prd.fr\0mishima.fukushima.jp\0"
+"choyo.kumamoto.jp\0cc.oh.us\0"
+"kharkiv.ua\0"
+"yatsushiro.kumamoto.jp\0"
+"sch.ly\0fi.eu.org\0"
+"business\0"
+"estate\0"
+"ao.it\0bari.it\0antiques.museum\0"
+"property\0"
+"!city.kitakyushu.jp\0"
+"svalbard.no\0"
+"happou.akita.jp\0skedsmokorset.no\0"
+"kumakogen.ehime.jp\0"
+"taketa.oita.jp\0"
+"sch.ng\0ak.us\0"
+"graz.museum\0krakow.pl\0"
+"meet\0"
+"ulsan.kr\0"
+"asso.km\0cartoonart.museum\0"
"teramo.it\0"
-"natori.miyagi.jp\0goto.nagasaki.jp\0"
-"notteroy.no\0"
-"sue.fukuoka.jp\0"
-"beardu.no\0naamesjevuemie.no\0"
-"iida.nagano.jp\0"
-"skj\xc3\xa5k.no\0"
-"ino.kochi.jp\0"
-"valle-d-aosta.it\0"
-"pz.it\0"
-"eastafrica.museum\0"
-"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0"
-"minamiminowa.nagano.jp\0"
-"name.qa\0"
-"name.pr\0"
-"jamison.museum\0"
-"kai.yamanashi.jp\0"
-"guitars\0"
-"farmers.museum\0"
-"ntr.br\0kamitonda.wakayama.jp\0"
-"name.na\0"
-"hanno.saitama.jp\0matsuzaki.shizuoka.jp\0"
-"leclerc\0"
-"napoli.it\0"
-"inatsuki.fukuoka.jp\0name.mv\0"
-"name.ng\0pl.ua\0police.uk\0"
-"oxford.museum\0name.my\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0kashima.saga.jp\0fuchu.tokyo.jp\0"
-"coal.museum\0bridgestone\0software\0"
-"campania.it\0rep.kp\0"
-"sor-odal.no\0t.se\0"
-"kyonan.chiba.jp\0hikawa.shimane.jp\0suginami.tokyo.jp\0"
-"medical.museum\0cc.ut.us\0"
-"kitakami.iwate.jp\0pa.gov.pl\0"
-"ecn.br\0aizumi.tokushima.jp\0"
-"amur.ru\0de.us\0"
-"kikugawa.shizuoka.jp\0yoshida.shizuoka.jp\0"
-"r\xc3\xa5holt.no\0"
-"k12.de.us\0"
-"international\0"
-"sande.vestfold.no\0"
-"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0"
-"sky\0from-fl.com\0"
-"seiyo.ehime.jp\0ariake.saga.jp\0"
-"shiojiri.nagano.jp\0"
-"koori.fukushima.jp\0bond\0"
-"nakagyo.kyoto.jp\0"
-"academy.museum\0"
-"ra.it\0abeno.osaka.jp\0"
-"eidskog.no\0"
-"shirahama.wakayama.jp\0"
-"dudinka.ru\0"
-"bnpparibas\0"
-"rybnik.pl\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0"
-"lazio.it\0gdynia.pl\0"
-"name.mk\0"
-"\xe5\xae\xae\xe5\x9f\x8e.jp\0nagi.okayama.jp\0"
-"is-an-artist.com\0"
-"racing\0"
-"hatsukaichi.hiroshima.jp\0sakai.ibaraki.jp\0chizu.tottori.jp\0"
-"0.bg\0"
-"nore-og-uvdal.no\0"
-"ichinomiya.chiba.jp\0lezajsk.pl\0"
-"bashkiria.ru\0"
-"name.jo\0sciencehistory.museum\0"
-"lucerne.museum\0vinnytsia.ua\0"
-"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0s3-website-us-east-1.amazonaws.com\0is-an-anarchist.com\0"
-"annaka.gunma.jp\0"
-"florence.it\0tajiri.osaka.jp\0"
-"shikabe.hokkaido.jp\0"
-"uchinada.ishikawa.jp\0"
-"from-pr.com\0hobby-site.com\0"
-"higashine.yamagata.jp\0"
-"society.museum\0"
-"soy\0"
-"anamizu.ishikawa.jp\0"
-"lom.it\0pohl\0"
-"\xc3\xa5seral.no\0"
-"kira.aichi.jp\0"
-"pizza\0"
-"ethnology.museum\0malselv.no\0"
-"bayern\0tab\0"
-"contact\0"
-"tozsde.hu\0saves-the-whales.com\0"
-"hokuto.yamanashi.jp\0"
-"org.ac\0"
-"ayabe.kyoto.jp\0"
-"org.ae\0time.no\0cc.ct.us\0"
-"org.af\0sobetsu.hokkaido.jp\0takinoue.hokkaido.jp\0sayama.osaka.jp\0"
-"org.ag\0moscow\0"
-"fukushima.jp\0hirado.nagasaki.jp\0"
+"matsumoto.kagoshima.jp\0"
+"iheya.okinawa.jp\0"
+"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0"
+"gouv.km\0"
+"is-into-anime.com\0"
+"yawara.ibaraki.jp\0"
+"sic.it\0"
+"rovno.ua\0"
+"asahikawa.hokkaido.jp\0nagatoro.saitama.jp\0hot\0"
+"how\0"
+"everbank\0"
+"asso.mc\0getmyip.com\0"
+"campania.it\0"
+"capital\0"
+"kawanishi.yamagata.jp\0rsvp\0"
+"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0"
+"glogow.pl\0recht.pro\0sch.qa\0"
+"jpn.com\0"
+"is-a-candidate.org\0"
+"i234.me\0"
+"ws.na\0"
+"gouv.ml\0"
+"mydissent.net\0"
+"prd.km\0"
+"qld.gov.au\0"
+"bc.ca\0"
+"ogi.saga.jp\0"
+"arts.museum\0mosj\xc3\xb8""en.no\0isa-geek.net\0"
+"is-a-caterer.com\0"
+"lib.mi.us\0gb.com\0"
+"katsushika.tokyo.jp\0naustdal.no\0"
+"nanao.ishikawa.jp\0"
+"yoshida.shizuoka.jp\0ibm\0"
+"\xd0\xbc\xd0\xba\xd0\xb4\0"
+"austin.museum\0outsystemscloud.com\0"
+"ichihara.chiba.jp\0"
+"cookingchannel\0"
+"sch.sa\0corsica\0"
+"ice\0"
+"kiso.nagano.jp\0"
+"gs.ol.no\0from-wi.com\0"
+"friuli-venezia-giulia.it\0mc.it\0"
+"prd.mg\0software\0"
+"aq.it\0ba.it\0"
+"toho.fukuoka.jp\0"
+"fjaler.no\0"
+"hareid.no\0"
+"dnsalias.com\0"
+"stange.no\0"
+"htc\0"
+"nanto.toyama.jp\0icu\0"
+"kristiansund.no\0"
+"yekaterinburg.ru\0"
+"certification.aero\0"
+"harstad.no\0"
+"ichinomiya.aichi.jp\0"
+"ibestad.no\0"
+"logistics.aero\0"
+"arendal.no\0"
+"yaese.okinawa.jp\0hoylandet.no\0midsund.no\0"
+"endoftheinternet.org\0"
+"ohtawara.tochigi.jp\0"
+"koeln.museum\0"
+"kyonan.chiba.jp\0"
+"meme\0to.leg.br\0"
+"hashikami.aomori.jp\0"
+"k12.tx.us\0"
+"association.aero\0"
+"k12.dc.us\0"
+"gorizia.it\0dealer\0"
+"miho.ibaraki.jp\0kotoura.tottori.jp\0"
+"takazaki.miyazaki.jp\0"
+"asaminami.hiroshima.jp\0skierva.no\0ifm\0"
+"homeftp.net\0"
+"naval.museum\0"
+"histoire.museum\0mango\0"
+"bristol.museum\0"
+"vologda.su\0"
+"ontario.museum\0"
+"\xd0\xbc\xd0\xbe\xd0\xbd\0"
+"*.compute.estate\0"
+"higashiyoshino.nara.jp\0alt.za\0"
+"chino.nagano.jp\0"
+"gjerstad.no\0menu\0"
+"rl.no\0"
+"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0zappos\0s3-external-1.amazonaws.com\0from-sc.com\0"
+"chelyabinsk.ru\0"
+"haram.no\0"
+"fujikawa.shizuoka.jp\0"
+"microlight.aero\0"
+"automotive.museum\0virtual.museum\0"
+"yurihonjo.akita.jp\0akiruno.tokyo.jp\0plantation.museum\0"
+"myqnapcloud.com\0"
+"rn.it\0tuxfamily.org\0"
+"lu.it\0me.it\0noto.ishikawa.jp\0laakesvuemie.no\0"
+"bokn.no\0"
+"takaoka.toyama.jp\0"
+"is-an-anarchist.com\0"
+"yakumo.hokkaido.jp\0ogano.saitama.jp\0"
+"bestbuy\0"
+"ayabe.kyoto.jp\0ma.us\0theater\0"
+"mosjoen.no\0"
+"rissa.no\0"
+"amagasaki.hyogo.jp\0"
+"taishi.osaka.jp\0snillfjord.no\0vologda.ru\0s3-us-west-2.amazonaws.com\0"
+"macerata.it\0"
+"stj\xc3\xb8rdalshalsen.no\0"
+"dazaifu.fukuoka.jp\0"
+"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
+"sch.zm\0ventures\0"
+"florence.it\0brasil.museum\0"
+"rzeszow.pl\0homedepot\0"
+"piw.gov.pl\0design\0"
+"sardegna.it\0alibaba\0"
+"arna.no\0"
+"tsuga.tochigi.jp\0"
+"shichikashuku.miyagi.jp\0"
+"ddns.me\0"
+"kumano.hiroshima.jp\0nakatane.kagoshima.jp\0k12.de.us\0seat\0"
+"pa.gov.pl\0"
+"rennes\xc3\xb8y.no\0"
+"nishiaizu.fukushima.jp\0"
+"avellino.it\0"
+"cnt.br\0eu.int\0bolzano.it\0"
+"kiyama.saga.jp\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
+"heroy.nordland.no\0"
+"ggee\0"
+"from-ne.com\0"
+"chuo.chiba.jp\0kyoto\0"
+"shinto.gunma.jp\0"
+"network\0"
+"*.platform.sh\0"
+"science\0"
+"hasami.nagasaki.jp\0"
+"lib.me.us\0"
+"marine.ru\0"
+"rackmaze.net\0"
+"baths.museum\0uscountryestate.museum\0damnserver.com\0"
+"ing\0"
+"kvinnherad.no\0siellak.no\0"
+"chat\0"
+"net.ac\0tambov.ru\0ink\0"
+"net.ae\0toyono.osaka.jp\0nishiazai.shiga.jp\0"
+"net.af\0niki.hokkaido.jp\0"
+"net.ag\0r\xc3\xa1isa.no\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
+"net.ai\0"
+"harima.hyogo.jp\0"
+"net.al\0int\0dinosaur.museum\0"
+"liguria.it\0"
+"net.ba\0health.nz\0seek\0"
+"net.ar\0net.bb\0"
+"net.au\0router.management\0"
+"net.bh\0"
+"net.az\0"
+"tabuse.yamaguchi.jp\0ae.org\0"
+"tokai.aichi.jp\0khv.ru\0"
+"net.bm\0zoological.museum\0"
+"net.bo\0wegrow.pl\0"
+"fantasyleague.cc\0"
+"net.br\0"
+"net.bs\0"
+"net.bt\0"
+"fortworth.museum\0"
+"net.ci\0"
+"net.bz\0luxe\0"
+"serveblog.net\0"
+"pistoia.it\0"
+"net.cm\0uchiko.ehime.jp\0"
+"net.cn\0"
+"net.co\0izena.okinawa.jp\0iwata.shizuoka.jp\0"
+"r\xc3\xa6lingen.no\0zp.gov.pl\0"
+"nagano.jp\0"
+"net.cu\0monzaedellabrianza.it\0k12.co.us\0\xec\x82\xbc\xec\x84\xb1\0"
+"tube\0"
+"net.cw\0"
+"net.cy\0time.no\0"
+"aerobatic.aero\0"
+"net.dm\0"
+"press.cy\0net.do\0"
+"komono.mie.jp\0"
+"cim.br\0"
+"net.ec\0"
+"kagoshima.jp\0rochester.museum\0plo.ps\0myvnc.com\0"
+"net.eg\0"
+"ruhr\0"
+"leka.no\0"
+"net.dz\0obu.aichi.jp\0jcb\0"
+"and.museum\0"
+"krym.ua\0"
+"ako.hyogo.jp\0"
+"oketo.hokkaido.jp\0"
+"helsinki\0"
+"net.et\0misato.akita.jp\0bbs.tr\0"
+"sd.cn\0kostroma.ru\0"
+"\xe5\xae\xae\xe5\x9f\x8e.jp\0jcp\0"
+"hb.cn\0"
+"ist\0"
+"onyourside\0"
+"ba.leg.br\0"
+"mi.it\0toyama.jp\0me.tz\0"
+"aver\xc3\xb8y.no\0k-uralsk.ru\0me.uk\0"
+"net.ge\0bg.it\0"
+"net.gg\0hyllestad.no\0"
+"singles\0"
+"yasaka.nagano.jp\0"
+"security\0from-az.net\0"
+"net.gl\0sardinia.it\0sakai.osaka.jp\0me.us\0"
+"ushiku.ibaraki.jp\0r\xc3\xa5holt.no\0"
+"net.gn\0as.us\0itv\0"
+"net.gp\0"
+"educator.aero\0net.gr\0dsmynas.org\0"
+"net.gt\0technology\0"
+"vennesla.no\0dunlop\0"
+"takayama.gifu.jp\0"
+"net.gy\0"
+"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0"
+"net.hk\0"
+"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0\xc3\xa5lg\xc3\xa5rd.no\0ferrero\0"
+"net.hn\0"
+"minamiyamashiro.kyoto.jp\0"
+"unicom\0"
+"massa-carrara.it\0"
+"net.ht\0net.id\0"
+"health.vn\0"
+"iwc\0"
+"net.il\0hizen.saga.jp\0"
+"net.im\0owani.aomori.jp\0k12.tn.us\0"
+"net.in\0os.hedmark.no\0"
+"trieste.it\0mc.eu.org\0"
+"net.iq\0"
+"net.ir\0"
+"passenger-association.aero\0net.is\0"
+"stokke.no\0"
+"net.je\0us.org\0"
+"sweetpepper.org\0"
+"iwakura.aichi.jp\0"
+"lardal.no\0"
+"lancashire.museum\0eidskog.no\0"
+"blogsyte.com\0"
+"net.jo\0"
+"broke-it.net\0"
+"channel\0from-ok.com\0"
+"net.kg\0"
+"net.ki\0vista\0"
+"sakyo.kyoto.jp\0"
+"akaiwa.okayama.jp\0verisign\0"
+"lib.ma.us\0"
+"net.kn\0is-into-cars.com\0"
+"lib.as.us\0lt.eu.org\0"
+"grainger\0"
+"maniwa.okayama.jp\0net.la\0"
+"net.lb\0"
+"net.lc\0"
+"usui.fukuoka.jp\0nagi.okayama.jp\0"
+"cc.or.us\0"
+"amur.ru\0tom.ru\0jio\0"
+"ryugasaki.ibaraki.jp\0jeju.kr\0sko.gov.pl\0"
+"net.ky\0"
+"asti.it\0net.kz\0"
+"net.lk\0"
+"montreal.museum\0"
+"sibenik.museum\0"
+"gr.it\0sakuragawa.ibaraki.jp\0"
+"bi.it\0"
+"net.ma\0oceanographique.museum\0"
+"net.lr\0"
+"kamioka.akita.jp\0"
+"ikaruga.nara.jp\0epson\0"
+"net.me\0wy.us\0"
+"net.lv\0hoyanger.no\0"
+"net.ly\0"
+"lakas.hu\0gr.jp\0takagi.nagano.jp\0net.mk\0"
+"net.ml\0"
+"stadt.museum\0school\0"
+"kahoku.yamagata.jp\0karmoy.no\0"
+"net.mo\0"
+"kawajima.saitama.jp\0"
+"treviso.it\0kamiamakusa.kumamoto.jp\0net.ms\0pittsburgh.museum\0"
+"net.mt\0"
+"koganei.tokyo.jp\0net.mu\0"
+"net.mv\0net.nf\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0"
+"net.mw\0net.ng\0"
+"yazu.tottori.jp\0net.mx\0"
+"net.my\0net.ni\0"
+"net.mz\0"
+"jlc\0"
+"hichiso.gifu.jp\0tatarstan.ru\0"
+"am.leg.br\0"
+"shinichi.hiroshima.jp\0onagawa.miyagi.jp\0net.nr\0"
+"jll\0"
+"togo.aichi.jp\0"
+"lipsy\0"
+"net.nz\0k12.in.us\0"
+"ishikawa.jp\0net.om\0"
+"naklo.pl\0globo\0"
+"gv.ao\0"
+"net.pa\0"
+"yamanouchi.nagano.jp\0koebenhavn.museum\0"
+"gv.at\0net.pe\0"
+"mihama.mie.jp\0net.ph\0jmp\0"
+"theatre\0"
+"sa.edu.au\0"
+"net.pk\0"
+"wildlife.museum\0vanylven.no\0net.pl\0"
+"sagae.yamagata.jp\0botany.museum\0"
+"net.pn\0abbott\0"
+"nishikawa.yamagata.jp\0"
+"selfip.net\0"
+"net.qa\0"
+"net.pr\0aigo\0jnj\0"
+"net.ps\0ryukyu\0"
+"austrheim.no\0net.pt\0"
+"takahashi.okayama.jp\0"
+"mi.th\0lib.sd.us\0"
+"nishiawakura.okayama.jp\0net.py\0"
+"sh.cn\0"
+"mo.cn\0tempio-olbia.it\0gamo.shiga.jp\0weir\0"
+"org.ac\0sb.ua\0"
+"org.ae\0hotels\0"
+"org.af\0"
+"org.ag\0fetsund.no\0"
+"takatori.nara.jp\0"
"org.ai\0"
-"org.al\0"
-"org.an\0"
-"tax\0"
-"org.ba\0soundandvision.museum\0trust.museum\0"
-"org.ar\0org.bb\0takasago.hyogo.jp\0"
-"engine.aero\0"
-"org.au\0kursk.ru\0is-very-bad.org\0"
-"\xe6\x94\xbf\xe5\xba\x9c\0"
-"org.bh\0"
-"7.bg\0org.bi\0sola.no\0is-a-socialist.com\0"
-"org.az\0"
-"hitachi.ibaraki.jp\0"
+"orange\0"
+"mihama.wakayama.jp\0tuva.su\0"
+"org.al\0seoul.kr\0"
+"active\0"
+"lerdal.no\0servehumour.com\0"
+"jot\0"
+"org.ba\0ingatlan.hu\0"
+"org.ar\0org.bb\0"
+"po.gov.pl\0"
+"yasugi.shimane.jp\0is-an-actor.com\0"
+"org.au\0net.sa\0barclays\0joy\0"
+"net.sb\0mi.us\0"
+"net.sc\0"
+"org.bh\0echizen.fukui.jp\0net.sd\0nissan\0"
+"org.bi\0net.ru\0"
+"org.az\0\xe7\xb5\x84\xe7\xbb\x87.hk\0"
+"net.rw\0net.sg\0"
+"a\xc3\xa9roport.ci\0net.sh\0"
"org.bm\0"
+"tateyama.chiba.jp\0"
"org.bo\0"
-"rome.it\0"
-"tci\0"
-"org.br\0tsukiyono.gunma.jp\0"
-"org.bs\0ulm.museum\0"
+"uji.kyoto.jp\0net.sl\0"
+"org.br\0mantova.it\0"
+"org.bs\0s\xc3\xb8r-odal.no\0net.so\0nissay\0"
"org.bt\0"
-"padova.it\0iyo.ehime.jp\0"
"org.bw\0"
-"sa.edu.au\0org.ci\0"
-"org.bz\0shintoku.hokkaido.jp\0"
-"stc\0"
-"detroit.museum\0geelvinck.museum\0"
-"org.cn\0"
-"org.co\0sande.more-og-romsdal.no\0"
-"sakata.yamagata.jp\0"
-"sicily.it\0"
-"org.cu\0lib.ak.us\0"
+"aosta.it\0net.st\0*.triton.zone\0"
+"org.ci\0"
+"org.bz\0hakusan.ishikawa.jp\0kudoyama.wakayama.jp\0leirfjord.no\0"
+"tos.it\0space.museum\0"
+"ikeda.hokkaido.jp\0net.th\0iamallama.com\0"
+"net.sy\0"
+"org.cn\0langevag.no\0net.tj\0"
+"org.co\0hirono.iwate.jp\0"
+"shunan.yamaguchi.jp\0net.tm\0"
+"rikubetsu.hokkaido.jp\0net.tn\0inc.hk\0"
+"net.to\0ap.leg.br\0"
+"org.cu\0kameyama.mie.jp\0net.ua\0"
+"iwaizumi.iwate.jp\0losangeles.museum\0hob\xc3\xb8l.no\0net.tr\0"
"org.cw\0"
-"vang.no\0"
-"maritimo.museum\0"
+"net.tt\0"
+"org.cy\0"
+"afamilycompany\0"
+"ggf.br\0tuva.ru\0net.tw\0"
+"wada.nagano.jp\0"
"org.dm\0"
-"lapy.pl\0"
-"org.do\0lom.no\0\xd0\xbc\xd0\xbe\xd0\xbd\0"
-"stranda.no\0"
-"sicilia.it\0takasu.hokkaido.jp\0kunitomi.miyazaki.jp\0sugito.saitama.jp\0"
-"org.ec\0"
-"tel\0"
-"org.ee\0"
-"nishimera.miyazaki.jp\0"
-"org.eg\0"
-"aichi.jp\0koto.tokyo.jp\0"
-"org.dz\0"
-"maryland.museum\0"
-"minami.kyoto.jp\0homeftp.net\0"
-"giving\0"
-"ro.it\0turin.it\0wroclaw.pl\0"
-"cc.pr.us\0"
-"org.es\0from-mt.com\0from-nd.com\0"
-"org.et\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0"
-"langevag.no\0"
-"yamanouchi.nagano.jp\0"
-"r\xc3\xa6lingen.no\0fairwinds\0est-a-la-masion.com\0"
-"hakui.ishikawa.jp\0"
-"kuzumaki.iwate.jp\0sharp\0"
-"toyono.osaka.jp\0saitama.saitama.jp\0"
-"singles\0"
-"military.museum\0"
-"eniwa.hokkaido.jp\0"
-"jerusalem.museum\0k12.wy.us\0is-a-designer.com\0"
-"itayanagi.aomori.jp\0"
-"trustee.museum\0"
+"schweiz.museum\0"
+"org.do\0net.uk\0nikon\0"
+"govt.nz\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0"
+"org.ec\0sexy\0"
+"org.ee\0chesapeakebay.museum\0bingo\0"
+"org.eg\0kamijima.ehime.jp\0net.vc\0"
+"tenei.fukushima.jp\0\xc3\xa5""fjord.no\0net.ve\0"
+"org.dz\0izumiotsu.osaka.jp\0"
+"yamagata.ibaraki.jp\0obninsk.su\0"
+"net.uy\0net.vi\0"
+"kuji.iwate.jp\0net.uz\0"
+"net.vn\0hdfcbank\0ftpaccess.cc\0"
+"org.es\0"
+"org.et\0"
+"trentinosudtirol.it\0nakasatsunai.hokkaido.jp\0"
+"franziskaner.museum\0sf.no\0lib.nm.us\0"
+"net.vu\0"
+"shibuya.tokyo.jp\0funahashi.toyama.jp\0"
+"gx.cn\0"
+"press.se\0mk.ua\0"
+"esashi.hokkaido.jp\0"
+"gamvik.no\0"
+"abr.it\0"
"org.ge\0"
-"amami.kagoshima.jp\0"
-"parachuting.aero\0org.gg\0"
-"org.gh\0ostroleka.pl\0"
-"org.gi\0jondal.no\0stuff-4-sale.org\0"
-"org.gn\0"
-"servebbs.com\0"
-"org.gp\0urawa.saitama.jp\0"
-"org.gr\0lo.it\0"
-"h\xc3\xb8nefoss.no\0"
-"org.gt\0"
-"from-nj.com\0"
-"cc.wi.us\0"
+"gs.va.no\0"
+"org.gg\0net.ws\0"
+"org.gh\0mo.it\0lomza.pl\0zhitomir.ua\0cupcake.is\0"
+"org.gi\0"
+"beiarn.no\0"
+"org.gl\0"
+"is-by.us\0"
+"ip6.arpa\0org.gn\0"
+"org.gp\0sd.us\0"
+"org.gr\0otofuke.hokkaido.jp\0"
+"org.gt\0kfh\0"
+"alsace\0exposed\0"
+"nogi.tochigi.jp\0london.museum\0"
+"aircraft.aero\0org.gy\0"
+"courses\0"
"org.hk\0"
"org.hn\0"
-"oystre-slidre.no\0k12.fl.us\0"
-"nat.tn\0"
-"encyclopedic.museum\0lib.nm.us\0"
-"minamiaiki.nagano.jp\0"
-"kv\xc3\xa6nangen.no\0oppdal.no\0k12.ri.us\0"
+"dlugoleka.pl\0"
+"sorreisa.no\0mk.eu.org\0"
"org.ht\0"
-"org.hu\0dagestan.ru\0"
-"gangwon.kr\0"
-"rad\xc3\xb8y.no\0"
-"*.yokohama.jp\0mochizuki.nagano.jp\0shimoda.shizuoka.jp\0"
-"org.im\0"
-"org.in\0kunneppu.hokkaido.jp\0"
-"marriott\0"
-"org.iq\0"
-"org.ir\0lodi.it\0shirakawa.gifu.jp\0kumamoto.kumamoto.jp\0"
-"org.is\0alabama.museum\0photo\0"
-"org.je\0"
-"porn\0"
-"kristiansand.no\0from-nh.com\0"
-"rokunohe.aomori.jp\0"
-"org.jo\0"
-"la.us\0"
-"chichibu.saitama.jp\0"
-"afjord.no\0"
-"tel.tr\0"
-"asn.au\0k12.ky.us\0"
-"org.kg\0"
-"okawa.fukuoka.jp\0"
-"org.ki\0"
-"za.net\0"
-"badajoz.museum\0"
-"tenkawa.nara.jp\0post\0"
+"org.hu\0nishiizu.shizuoka.jp\0net.za\0"
+"shimizu.shizuoka.jp\0"
+"shiwa.iwate.jp\0natori.miyagi.jp\0haebaru.okinawa.jp\0"
+"eu-central-1.compute.amazonaws.com\0"
+"bern.museum\0"
+"org.il\0mihara.hiroshima.jp\0"
+"org.im\0higashishirakawa.gifu.jp\0aviation.museum\0"
+"org.in\0"
+"from-mn.com\0"
+"org.iq\0net.zm\0"
+"org.ir\0"
+"org.is\0"
+"jewelry\0static.land\0"
+"org.je\0youtube\0"
+"trentinosuedtirol.it\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
+"donetsk.ua\0\xd0\xbe\xd1\x80\xd0\xb3\0"
+"salerno.it\0shoo.okayama.jp\0stockholm\0"
+"shibata.miyagi.jp\0"
+"kia\0"
+"beeldengeluid.museum\0"
+"org.jo\0levanger.no\0"
+"touch.museum\0"
+"tsukigata.hokkaido.jp\0no-ip.ca\0qa2.com\0"
+"takahata.yamagata.jp\0"
+"shirosato.ibaraki.jp\0"
+"org.kg\0mlbfan.org\0"
+"abashiri.hokkaido.jp\0higashisumiyoshi.osaka.jp\0"
+"org.ki\0kim\0"
"org.km\0"
-"org.kn\0"
-"ohi.fukui.jp\0org.kp\0"
-"org.la\0"
-"\xe6\xa0\x83\xe6\x9c\xa8.jp\0org.lb\0"
-"org.lc\0"
-"caltanissetta.it\0"
-"monza.it\0"
-"vega.no\0"
-"grosseto.it\0"
-"council.aero\0org.ky\0pictures\0"
-"org.kz\0"
-"org.lk\0s3-website-ap-southeast-2.amazonaws.com\0"
-"togo.aichi.jp\0wajima.ishikawa.jp\0tado.mie.jp\0"
-"org.ma\0"
-"org.lr\0dyndns.biz\0"
-"org.ls\0"
-"saga.jp\0"
-"org.me\0h\xc3\xb8yanger.no\0"
-"narashino.chiba.jp\0org.lv\0"
-"org.mg\0and.museum\0"
-"sos.pl\0"
-"org.ly\0lib.mt.us\0lib.nd.us\0"
-"tohnosho.chiba.jp\0poznan.pl\0"
-"org.mk\0"
-"org.ml\0"
-"s3-website-ap-southeast-1.amazonaws.com\0"
-"org.mn\0tmall\0"
+"org.kn\0boldlygoingnowhere.org\0"
+"org.kp\0"
+"org.la\0vikna.no\0"
+"org.lb\0"
+"org.lc\0porsgrunn.no\0consulado.st\0"
+"tsubata.ishikawa.jp\0"
+"tur.ar\0gz.cn\0org.ky\0rv.ua\0"
+"org.kz\0cc.va.us\0"
+"org.lk\0press.ma\0"
+"camera\0"
+"org.ma\0\xc3\xb8ystre-slidre.no\0yalta.ua\0"
+"org.lr\0"
+"na.it\0org.ls\0lu.eu.org\0me.eu.org\0"
+"bo.it\0org.me\0sauherad.no\0"
+"org.lv\0"
+"org.mg\0"
+"columbus.museum\0kazimierz-dolny.pl\0e12.ve\0cloudns.pro\0"
+"tur.br\0toon.ehime.jp\0org.ly\0"
+"org.mk\0watchandclock.museum\0kvafjord.no\0"
+"seirou.niigata.jp\0org.ml\0"
+"org.mn\0rj.leg.br\0"
"org.mo\0"
-"cheltenham.museum\0org.na\0sor-aurdal.no\0"
-"kusatsu.shiga.jp\0"
+"mine.nu\0"
+"org.na\0"
+"bifuka.hokkaido.jp\0volkenkunde.museum\0"
"org.ms\0"
-"am.br\0toyone.aichi.jp\0org.mt\0"
-"org.mu\0plumbing\0"
-"org.mv\0bielawa.pl\0"
+"org.mt\0"
+"org.mu\0"
+"org.mv\0dyndns.biz\0"
"org.mw\0org.ng\0"
-"org.mx\0"
-"org.my\0"
-"work\0"
-"toyama.jp\0"
-"fh.se\0"
-"pol.dz\0"
-"gripe\0wales\0"
-"tenei.fukushima.jp\0iwakuni.yamaguchi.jp\0po.gov.pl\0"
-"family.museum\0"
-"org.nr\0"
-"bilbao.museum\0sf.no\0"
-"hida.gifu.jp\0"
-"lyngen.no\0"
-"yokoshibahikari.chiba.jp\0"
-"kamchatka.ru\0"
-"nirasaki.yamanashi.jp\0top\0"
-"brunel.museum\0"
-"org.nz\0"
-"meiwa.gunma.jp\0"
-"org.om\0"
-"hino.tottori.jp\0boleslawiec.pl\0"
-"hareid.no\0"
-"taa.it\0"
-"org.pa\0"
-"tagami.niigata.jp\0"
-"komi.ru\0"
-"kurogi.fukuoka.jp\0nakatombetsu.hokkaido.jp\0naha.okinawa.jp\0"
+"urbinopesaro.it\0org.mx\0fedex\0"
+"org.my\0org.ni\0varggat.no\0"
+"org.mz\0"
+"lindesnes.no\0mandal.no\0"
+"volyn.ua\0"
+"aoste.it\0"
+"hakone.kanagawa.jp\0org.nr\0"
+"date.hokkaido.jp\0money\0nokia\0lv.eu.org\0"
+"toga.toyama.jp\0"
+"yamanobe.yamagata.jp\0org.nz\0"
+"itako.ibaraki.jp\0skole.museum\0"
+"maritimo.museum\0org.om\0"
+"from-ny.net\0"
+"nosegawa.nara.jp\0org.pa\0"
"org.pe\0"
-"wakuya.miyagi.jp\0org.pf\0"
-"org.ph\0"
-"org.pk\0"
-"higashi.fukushima.jp\0kushiro.hokkaido.jp\0org.pl\0"
-"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0is-a-llama.com\0"
-"desa.id\0org.pn\0"
-"leksvik.no\0"
-"org.qa\0"
-"shirako.chiba.jp\0org.pr\0"
-"org.ps\0"
-"org.pt\0"
-"gamvik.no\0org.py\0"
-"ikawa.akita.jp\0"
-"aircraft.aero\0"
-"obama.fukui.jp\0"
-"england.museum\0graz.museum\0lib.mo.us\0"
-"akita.akita.jp\0nakagawa.hokkaido.jp\0"
-"davvenj\xc3\xa1rga.no\0"
-"embaixada.st\0"
-"ambulance.aero\0"
-"pol.ht\0"
-"chuo.osaka.jp\0"
-"l\xc3\xb8ten.no\0ubs\0"
-"limited\0"
-"bergbau.museum\0h\xc3\xa6gebostad.no\0"
-"savona.it\0"
-"org.ro\0uk.com\0"
-"ski.museum\0org.sa\0"
+"org.pf\0"
+"kamitsue.oita.jp\0blogspot.com.cy\0"
+"satx.museum\0org.ph\0"
+"zgorzelec.pl\0"
+"mill.museum\0"
+"ishikari.hokkaido.jp\0minami.tokushima.jp\0org.pk\0better-than.tv\0"
+"org.pl\0gift\0"
+"\xe4\xb8\xaa\xe4\xba\xba.hk\0"
+"org.pn\0"
+"*.api.githubcloud.com\0"
+"watch\0"
+"meldal.no\0org.qa\0"
+"org.pr\0is-a-bulls-fan.com\0"
+"org.ps\0blogspot.com.ee\0"
+"org.pt\0events\0"
+"finance\0blogspot.com.eg\0"
+"codespot.com\0"
+"beppu.oita.jp\0bytom.pl\0"
+"org.py\0"
+"izhevsk.ru\0"
+"h\xc3\xa1pmir.no\0"
+"blogspot.com.ar\0"
+"sn.cn\0"
+"mw.gov.pl\0education\0blogspot.com.au\0"
+"hl.cn\0"
+"circus.museum\0"
+"shinshiro.aichi.jp\0"
+"suwalki.pl\0"
+"kijo.miyazaki.jp\0sunndal.no\0snz.ru\0kpn\0"
+"citi\0target\0"
+"exchange\0"
+"uchinomi.kagawa.jp\0"
+"ms.it\0"
+"shiki.saitama.jp\0org.ro\0"
+"ca.it\0tokashiki.okinawa.jp\0blogspot.com.br\0"
+"org.sa\0cn-north-1.compute.amazonaws.com.cn\0"
"org.sb\0"
-"ushistory.museum\0org.rs\0org.sc\0"
-"org.sd\0"
-"org.ru\0org.se\0amsterdam\0"
-"coop.ht\0"
-"usarts.museum\0org.sg\0"
-"org.sh\0"
-"iwate.iwate.jp\0"
-"tuva.ru\0"
-"org.sl\0"
-"stadt.museum\0"
+"org.rs\0org.sc\0"
+"moma.museum\0org.sd\0"
+"yugawara.kanagawa.jp\0org.ru\0org.se\0"
+"org.sg\0mo.us\0blogspot.com.by\0"
+"mad.museum\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0org.sh\0"
+"yatomi.aichi.jp\0"
+"limanowa.pl\0"
+"city\0"
+"org.sl\0ddns.net\0"
+"recreation.aero\0blogspot.com.co\0"
"org.sn\0"
-"org.so\0"
-"kisosaki.mie.jp\0"
-"shunan.yamaguchi.jp\0"
-"ohira.miyagi.jp\0wake.okayama.jp\0kyuragi.saga.jp\0org.st\0"
-"kumano.mie.jp\0org.sv\0"
-"porsanger.no\0org.sy\0"
-"trentino-sudtirol.it\0org.sz\0org.tj\0gda.pl\0"
-"tj\xc3\xb8me.no\0"
-"museum.tt\0"
-"org.tm\0lifestyle\0"
+"horokanai.hokkaido.jp\0org.so\0"
+"krd\0lat\0"
+"bolt.hu\0ojiya.niigata.jp\0"
+"childrensgarden.museum\0law\0"
+"fribourg.museum\0org.st\0"
+"org.sv\0"
+"kaminoyama.yamagata.jp\0dali.museum\0"
+"higashiura.aichi.jp\0org.sy\0"
+"rieti.it\0org.sz\0org.tj\0"
+"v\xc3\xa6r\xc3\xb8y.no\0"
+"taiji.wakayama.jp\0ms.kr\0"
+"machida.tokyo.jp\0org.tm\0"
"org.tn\0"
-"org.to\0"
-"altoadige.it\0"
-"org.ua\0tui\0"
+"neyagawa.osaka.jp\0org.to\0"
+"wiw.gov.pl\0"
+"org.ua\0"
"org.tr\0"
-"r\xc3\xb8yken.no\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0"
-"coop.br\0org.tt\0"
-"brumunddal.no\0rv.ua\0gr.com\0"
-"ingatlan.hu\0org.tw\0org.ug\0finance\0"
-"itakura.gunma.jp\0"
-"mt.it\0semboku.akita.jp\0minami-alps.yamanashi.jp\0"
-"uvic.museum\0org.uk\0"
-"nishikata.tochigi.jp\0"
-"hk.cn\0"
-"namegawa.saitama.jp\0"
-"rentals\0"
-"volda.no\0org.vc\0"
+"zagan.pl\0mex.com\0"
+"org.tt\0"
+"org.tw\0org.ug\0caseih\0"
+"tec.ve\0"
+"ikusaka.nagano.jp\0"
+"jeonnam.kr\0org.uk\0"
+"ascoli-piceno.it\0"
+"homesecuritymac.com\0"
+"miyako.iwate.jp\0yoshino.nara.jp\0"
+"lupin\0blogspot.com.es\0"
+"org.vc\0"
+"is-a-anarchist.com\0"
"org.ve\0"
-"kariya.aichi.jp\0asn.lv\0"
-"jp.net\0"
-"museumvereniging.museum\0philately.museum\0project.museum\0stordal.no\0lib.nv.us\0org.uy\0org.vi\0"
-"org.uz\0football\0"
-"!city.sendai.jp\0"
-"lebesby.no\0vladimir.ru\0"
-"org.vn\0"
-"games.hu\0"
-"kawakami.nara.jp\0"
-"priv.hu\0"
-"takamatsu.kagawa.jp\0foundation\0"
-"fetsund.no\0org.vu\0"
-"yotsukaido.chiba.jp\0"
-"lv.ua\0"
-"osen.no\0"
-"soma.fukushima.jp\0fujisawa.kanagawa.jp\0"
-"reggioemilia.it\0"
-"\xed\x95\x9c\xea\xb5\xad\0"
-"bando.ibaraki.jp\0"
-"leka.no\0"
-"oshima.tokyo.jp\0"
-"presidio.museum\0st.no\0org.ws\0"
-"space-to-rent.com\0"
-"delaware.museum\0"
-"kiyama.saga.jp\0"
-"omaha.museum\0azure\0"
-"matsukawa.nagano.jp\0kannami.shizuoka.jp\0"
-"nakhodka.ru\0"
-"suifu.ibaraki.jp\0"
-"safety.aero\0songdalen.no\0"
-"utazas.hu\0guge\0"
-"kahoku.ishikawa.jp\0"
-"gotsu.shimane.jp\0koge.tottori.jp\0"
-"home.dyndns.org\0"
-"trentinostirol.it\0kobayashi.miyazaki.jp\0"
-"sm.ua\0"
-"at.it\0monza-e-della-brianza.it\0"
-"ishigaki.okinawa.jp\0musashimurayama.tokyo.jp\0"
-"defense.tn\0"
-"kosei.shiga.jp\0"
-"nichinan.tottori.jp\0"
-"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0"
-"surgut.ru\0"
-"taito.tokyo.jp\0"
-"isleofman.museum\0"
-"oksnes.no\0"
-"volkenkunde.museum\0"
-"minamimaki.nagano.jp\0"
-"cologne\0"
-"call\0"
+"chizu.tottori.jp\0monash\0"
+"dscloud.biz\0"
+"tananger.no\0"
+"org.uy\0org.vi\0"
+"org.uz\0"
+"ca.na\0myshopblocks.com\0"
+"ing.pa\0org.vn\0"
+"stalbans.museum\0lds\0"
+"kr.eu.org\0"
+"isernia.it\0"
+"matsue.shimane.jp\0org.vu\0dev.static.land\0"
+"tomobe.ibaraki.jp\0"
+"xenapponazure.com\0"
+"hn.cn\0farmequipment.museum\0"
+"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0"
+"org.ws\0forgot.her.name\0"
+"catania.it\0"
+"fukumitsu.toyama.jp\0koya.wakayama.jp\0"
+"agents.aero\0"
+"bs.it\0"
+"hidaka.kochi.jp\0"
+"konsulat.gov.pl\0"
+"aso.kumamoto.jp\0walmart\0"
+"froland.no\0"
+"hughes\0"
+"ne.jp\0onga.fukuoka.jp\0"
+"yamanashi.yamanashi.jp\0"
+"presse.km\0"
+"watarai.mie.jp\0"
+"ass.km\0"
+"h\xc3\xa6gebostad.no\0"
+"bandai.fukushima.jp\0"
+"org.za\0"
+"is-into-cartoons.com\0"
+"tochio.niigata.jp\0"
+"futaba.fukushima.jp\0"
+"production.aero\0ne.kr\0"
+"monzaebrianza.it\0"
+"lel.br\0"
+"frosinone.it\0is-a-therapist.com\0"
+"org.zm\0"
+"futtsu.chiba.jp\0"
+"tamakawa.fukushima.jp\0"
+"nankoku.kochi.jp\0fuji.shizuoka.jp\0"
+"dsmynas.net\0"
+"myphotos.cc\0"
+"\xe4\xb8\x89\xe9\x87\x8d.jp\0presse.ml\0pvt.k12.ma.us\0"
+"bnpparibas\0"
+"karuizawa.nagano.jp\0"
+"irish\0"
+"*.transurl.be\0"
+"hitachi.ibaraki.jp\0kalisz.pl\0"
+"beep.pl\0"
+"kushimoto.wakayama.jp\0cc.na\0"
+"yk.ca\0"
+"kawanishi.nara.jp\0"
+"nanbu.yamanashi.jp\0"
+"tagajo.miyagi.jp\0"
+"chikushino.fukuoka.jp\0ikeda.gifu.jp\0eu-west-1.compute.amazonaws.com\0cloudns.org\0"
+"lib.ne.us\0"
+"lib.il.us\0"
+"hl.no\0akdn\0liaison\0"
+"ota.gunma.jp\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0"
+"suedtirol.it\0shitara.aichi.jp\0jinsekikogen.hiroshima.jp\0"
+"szczytno.pl\0nc.tr\0"
+"usculture.museum\0sochi.su\0"
+"rr.leg.br\0"
+"shaw\0"
+"blogspot.com.mt\0"
+"sp.it\0"
+"flesberg.no\0blogspot.com.ng\0"
+"ce.it\0olsztyn.pl\0"
+"achi.nagano.jp\0"
+"go.dyndns.org\0"
+"shoes\0"
+"geometre-expert.fr\0ms.us\0nc.us\0"
+"ca.us\0"
+"virtueeldomein.nl\0"
+"online\0"
+"alto-adige.it\0opencraft.hosting\0"
+"naturalhistorymuseum.museum\0"
+"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
+"\xe5\x81\xa5\xe5\xba\xb7\0"
+"!www.ck\0valle-aosta.it\0ne.pw\0rns.tn\0"
+"cincinnati.museum\0"
+"rs.leg.br\0sc.leg.br\0*.transurl.eu\0"
+"gateway.museum\0"
+"roan.no\0"
+"togakushi.nagano.jp\0oshima.tokyo.jp\0"
+"higashi.fukushima.jp\0musashimurayama.tokyo.jp\0"
+"is-certified.com\0"
+"kaga.ishikawa.jp\0quicksytes.com\0"
+"k12.ut.us\0"
+"christiansburg.museum\0vindafjord.no\0k12.pa.us\0"
+"kazan.ru\0blogspot.com.tr\0"
+"claims\0knightpoint.systems\0"
+"ueda.nagano.jp\0ringebu.no\0"
+"leikanger.no\0"
+"lol\0works\0"
+"chiba.jp\0science-fiction.museum\0murmansk.su\0world\0"
+"nago.okinawa.jp\0"
+"jelenia-gora.pl\0goldpoint\0"
+"nahari.kochi.jp\0estate.museum\0"
+"mysecuritycamera.com\0"
+"hanamaki.iwate.jp\0ube.yamaguchi.jp\0sorfold.no\0"
+"fermo.it\0"
+"lincoln\0"
+"lpl\0"
+"country\0"
+"whoswho\0"
+"hioki.kagoshima.jp\0musashino.tokyo.jp\0muosat.no\0lib.ms.us\0lib.nc.us\0"
+"my.id\0"
+"bu.no\0"
+"north.museum\0is-a-soxfan.org\0"
+"blackfriday\0"
+"parma.it\0"
+"group\0"
+"cc.vi.us\0"
+"masfjorden.no\0"
+"trentino-sued-tirol.it\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
+"iizuna.nagano.jp\0sor-varanger.no\0engineering\0"
+"man\0"
+"nishihara.kumamoto.jp\0"
+"sveio.no\0ne.ug\0map\0microsoft\0"
+"her\xc3\xb8y.nordland.no\0mba\0"
+"sr.it\0kouyama.kagoshima.jp\0"
+"ne.tz\0"
+"canon\0"
+"kasugai.aichi.jp\0"
+"guitars\0"
+"oarai.ibaraki.jp\0selfip.org\0serveminecraft.net\0"
+"teo.br\0kochi.jp\0berlev\xc3\xa5g.no\0ne.us\0"
+"murmansk.ru\0"
+"mel\xc3\xb8y.no\0shia\0"
+"grp.lk\0"
+"mcd\0"
+"ome.tokyo.jp\0"
+"izunokuni.shizuoka.jp\0"
+"dyndns-work.com\0"
+"rnu.tn\0"
+"okawa.fukuoka.jp\0misaki.okayama.jp\0"
+"hakuba.nagano.jp\0"
+"owariasahi.aichi.jp\0s\xc3\xb8rfold.no\0"
+"rn.leg.br\0"
+"clinique\0"
+"gmail\0ltd\0"
+"state.museum\0"
+"readmyblog.org\0"
+"blogspot.com.uy\0"
+"niiza.saitama.jp\0"
+"v\xc3\xa5gan.no\0williamhill\0"
+"rawa-maz.pl\0"
"historisches.museum\0"
-"asker.no\0hornindal.no\0from-tx.com\0"
-"jgora.pl\0"
-"barrell-of-knowledge.info\0"
-"l\xc3\xa6rdal.no\0"
-"rzeszow.pl\0"
-"izu.shizuoka.jp\0"
-"jewish.museum\0aejrie.no\0"
-"blogspot.co.at\0priv.at\0"
-"lombardy.it\0"
-"minamiise.mie.jp\0school\0"
-"botanicalgarden.museum\0freemasonry.museum\0lur\xc3\xb8y.no\0"
-"omihachiman.shiga.jp\0"
-"tr.it\0hokkaido.jp\0miyoshi.hiroshima.jp\0klodzko.pl\0camp\0"
-"suisse.museum\0\xe5\x81\xa5\xe5\xba\xb7\0"
-"denmark.museum\0"
-"in.net\0"
-"trysil.no\0is-a-green.com\0"
-"lib.ia.us\0"
+"abira.hokkaido.jp\0"
+"audible\0med\0"
+"from-mi.com\0"
+"insurance.aero\0hita.oita.jp\0"
+"is-a-techie.com\0"
+"id.au\0"
+"men\0"
+"kr\xc3\xa5""anghke.no\0meo\0"
+"ro.leg.br\0"
+"takaishi.osaka.jp\0www.ro\0"
+"himeji.hyogo.jp\0"
+"sakuho.nagano.jp\0*.transurl.nl\0"
+"priv.hu\0"
+"aki.kochi.jp\0"
+"arida.wakayama.jp\0"
+"nm.cn\0"
+"kawagoe.mie.jp\0"
+"pubol.museum\0"
+"cc.pr.us\0mini\0"
+"square.museum\0chernihiv.ua\0"
+"church\0"
+"spb.ru\0"
+"contractors\0"
+"ci.it\0ulan-ude.ru\0"
+"avoues.fr\0mint\0"
+"trentino-stirol.it\0"
+"lincoln.museum\0"
+"tottori.jp\0"
+"campidano-medio.it\0oamishirasato.chiba.jp\0spb.su\0"
+"aichi.jp\0"
+"hisamitsu\0"
+"kurobe.toyama.jp\0mopar\0drud.io\0"
+"hisayama.fukuoka.jp\0"
+"time.museum\0"
+"skjerv\xc3\xb8y.no\0from-de.com\0"
+"ehime.jp\0biei.hokkaido.jp\0"
+"koriyama.fukushima.jp\0"
+"mugi.tokushima.jp\0idrett.no\0"
+"mil\0"
+"shop\0\xd8\xb9\xd8\xb1\xd8\xa8\0"
+"mit\0"
+"show\0us-gov-west-1.compute.amazonaws.com\0"
+"takko.aomori.jp\0"
+"kamoenai.hokkaido.jp\0tadotsu.kagawa.jp\0kiwi\0"
+"jamison.museum\0dupont\0"
+"flora.no\0"
+"tokushima.jp\0"
+"bounceme.net\0"
+"garden.museum\0paderborn.museum\0hjelmeland.no\0"
+"priv.at\0"
+"glass.museum\0plumbing\0"
+"training\0compute.amazonaws.com.cn\0"
+"*.yokohama.jp\0g\xc3\xa1\xc5\x8bgaviika.no\0"
+"stj\xc3\xb8rdal.no\0v\xc3\xa5gs\xc3\xb8y.no\0"
+"vlaanderen\0"
+"rebun.hokkaido.jp\0cyon.site\0"
+"hiraya.nagano.jp\0mlb\0hu.com\0"
+"sakae.nagano.jp\0"
+"kitashiobara.fukushima.jp\0"
+"chernigov.ua\0"
+"ce.leg.br\0"
+"st.no\0lib.mo.us\0radio\0za.bz\0"
+"engineer.aero\0matsuura.nagasaki.jp\0toyosato.shiga.jp\0"
+"lib.ca.us\0"
+"bunkyo.tokyo.jp\0\xd1\x80\xd1\x83\xd1\x81\0"
+"sx.cn\0"
+"cloudns.eu\0"
+"keisen.fukuoka.jp\0webhop.me\0"
+"mma\0"
+"actor\0mls\0"
+"karpacz.pl\0is-a-conservative.com\0"
+"ninja\0"
+"misasa.tottori.jp\0rightathome\0"
+"id.ir\0sv.it\0"
+"buyshouses.net\0"
+"oceanographic.museum\0aurskog-holand.no\0"
+"uonuma.niigata.jp\0"
+"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0"
+"telefonica\0"
+"monza-e-della-brianza.it\0snasa.no\0"
+"kozagawa.wakayama.jp\0"
+"kragero.no\0"
+"isteingeek.de\0"
+"sandiego.museum\0"
+"agematsu.nagano.jp\0"
+"kitahiroshima.hokkaido.jp\0toyonaka.osaka.jp\0"
+"bergbau.museum\0"
+"moe\0"
+"trentino-suedtirol.it\0ralingen.no\0"
+"jewelry.museum\0lenug.su\0"
+"presse.ci\0"
+"shirakawa.fukushima.jp\0takashima.shiga.jp\0moi\0wroc.pl\0"
+"norton\0"
+"mom\0"
+"takino.hyogo.jp\0kviteseid.no\0waw.pl\0"
+"google\0"
+"dvrdns.org\0is-leet.com\0"
+"market\0"
+"co.ae\0"
+"lenvik.no\0"
+,
+
+"co.ag\0hanawa.fukushima.jp\0"
+"gmina.pl\0"
+"mov\0"
+"kihoku.ehime.jp\0bir.ru\0cloudns.in\0"
+"onna.okinawa.jp\0"
+"bygland.no\0"
+"far.br\0kongsberg.no\0"
+"co.ao\0act.au\0id.lv\0"
+"aetna\0"
+"co.bb\0id.ly\0"
+"co.at\0"
+"nab\0"
+"utashinai.hokkaido.jp\0"
+"obama.nagasaki.jp\0elverum.no\0"
+"co.bi\0ato.br\0soni.nara.jp\0"
+"homelinux.com\0"
+"omitama.ibaraki.jp\0"
+"motobu.okinawa.jp\0cloudns.cc\0"
+"fujisawa.kanagawa.jp\0boots\0co.ca\0"
+"bauern.museum\0"
+"nba\0"
+"se.leg.br\0"
+"co.bw\0lib.id.us\0starhub\0support\0"
+"co.ci\0"
+"tj.cn\0seki.gifu.jp\0"
+"co.cl\0yuza.yamagata.jp\0"
+"co.cm\0"
+"scienceandhistory.museum\0"
+"co.cr\0alesund.no\0from-va.com\0"
+"abu.yamaguchi.jp\0"
+"presse.fr\0shiriuchi.hokkaido.jp\0"
+"storage\0"
+"county.museum\0"
+"no.it\0tula.su\0msd\0"
+"yamanashi.jp\0bod\xc3\xb8.no\0"
+"nagareyama.chiba.jp\0larvik.no\0co.cz\0"
+"konyvelo.hu\0co.dk\0"
+"from.hr\0laspezia.it\0"
+"chuvashia.ru\0"
+"m\xc3\xa5s\xc3\xb8y.no\0"
+"sakata.yamagata.jp\0"
+"kishiwada.osaka.jp\0synology.me\0"
+"suli.hu\0sakai.ibaraki.jp\0pisz.pl\0"
+"ally\0"
+"susono.shizuoka.jp\0"
+"komae.tokyo.jp\0"
+"takasaki.gunma.jp\0"
+"nature.museum\0"
+"mtn\0"
+"valle-daosta.it\0"
+"black\0"
+"mtr\0xerox\0"
+"nec\0"
+"tokyo.jp\0shimosuwa.nagano.jp\0hamaroy.no\0drud.us\0"
+"nichinan.miyazaki.jp\0"
+"championship.aero\0surnadal.no\0"
+"jor.br\0ichiba.tokushima.jp\0"
+"yandex\0"
+"tsukuba.ibaraki.jp\0"
+"sa.com\0"
+"honefoss.no\0"
+"biz.bb\0"
+"museum.tt\0"
+"lewismiller.museum\0biz.at\0"
+"skierv\xc3\xa1.no\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
+"co.gg\0net\0tula.ru\0"
+"fhsk.se\0new\0"
+"biz.az\0niimi.okayama.jp\0orland.no\0"
+"co.gl\0shimane.shimane.jp\0silk\0"
+"capetown\0"
+"iwakuni.yamaguchi.jp\0"
+"pordenone.it\0nfl\0"
+"gifu.gifu.jp\0"
+"sula.no\0"
+"pointto.us\0"
+"orskog.no\0porsanger.no\0"
+"co.gy\0hemnes.no\0"
+"ns.ca\0tonosho.kagawa.jp\0"
+"realty\0"
+"fujisato.akita.jp\0"
+"comunica\xc3\xa7\xc3\xb5""es.museum\0"
+"lib.ok.us\0"
+"ngo\0sina\0"
+"co.id\0"
+"co.hu\0hiraizumi.iwate.jp\0mitoyo.kagawa.jp\0firmdale\0"
+"toyota\0"
+"inabe.mie.jp\0karelia.ru\0"
+"cq.cn\0cc.wa.us\0"
+"biz.cy\0"
+"naoshima.kagawa.jp\0rzgw.gov.pl\0ck.ua\0"
+"co.il\0iijima.nagano.jp\0biz.dk\0"
+"co.im\0historicalsociety.museum\0"
+"co.in\0nhk\0"
+"numazu.shizuoka.jp\0\xd1\x81\xd1\x80\xd0\xb1\0observer\0"
+"szczecin.pl\0ricoh\0"
+"co.ir\0wodzislaw.pl\0"
+"iida.nagano.jp\0zaporizhzhe.ua\0"
+"co.it\0"
+"co.je\0horonobe.hokkaido.jp\0"
+"est-le-patron.com\0"
+"\xe5\xb2\xa9\xe6\x89\x8b.jp\0karelia.su\0"
+"atm.pl\0"
+"is-a-doctor.com\0"
+"kainan.tokushima.jp\0"
+"himi.toyama.jp\0nm.us\0barrell-of-knowledge.info\0"
+"utazu.kagawa.jp\0id.us\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
+"tomioka.gunma.jp\0russia.museum\0kutno.pl\0"
+"tran\xc3\xb8y.no\0"
+"co.jp\0lillehammer.no\0"
"minamiboso.chiba.jp\0"
-"karmoy.no\0k12.nm.us\0"
-"mil.ac\0a.bg\0film\0"
-"liaison\0"
-"mil.ae\0"
-"bologna.it\0museum.mv\0from-co.net\0"
-"museum.mw\0"
-"kaneyama.fukushima.jp\0"
-"mil.al\0"
-"val-daosta.it\0"
-"okaya.nagano.jp\0pol.tr\0"
-"mil.ba\0museum.no\0business\0uno\0"
-"mil.ar\0macerata.it\0"
-"government.aero\0cc.me.us\0"
-"toba.mie.jp\0watarai.mie.jp\0meguro.tokyo.jp\0help\0"
-"shiksha\0"
-"mil.az\0abruzzo.it\0"
-"barclaycard\0"
-"uol\0"
-"mil.bo\0museum.om\0lib.ca.us\0"
-"naval.museum\0"
-"mil.br\0abashiri.hokkaido.jp\0"
-"dyndns-work.com\0"
-"fot.br\0"
-"s\xc3\xb8rfold.no\0"
-"mus.br\0"
-"mil.by\0website\0from-dc.com\0"
-"\xe6\x96\xb0\xe6\xbd\x9f.jp\0"
-"mil.cl\0"
-"scholarships\0"
-"mil.cn\0"
-"aero\0mil.co\0"
-"avocat.fr\0kawahara.tottori.jp\0"
-"heroy.nordland.no\0"
-"arakawa.tokyo.jp\0"
-"care\0"
-"austrheim.no\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0"
-"tur.ar\0"
-"humanities.museum\0"
-"showa.fukushima.jp\0monash\0"
-"tr.no\0"
-"yoita.niigata.jp\0"
-"mil.do\0"
-"nakatsugawa.gifu.jp\0"
-"mil.ec\0mt.us\0nd.us\0casa\0"
-"sirdal.no\0cars\0iki.fi\0"
-"mil.eg\0youth.museum\0k12.mn.us\0sa.com\0"
-"tur.br\0cash\0"
-"h.bg\0"
-"tsubame.niigata.jp\0"
-"davvenjarga.no\0"
-"shimizu.hokkaido.jp\0"
-"budapest\0"
-"sagae.yamagata.jp\0"
-"kirov.ru\0"
-"br.it\0cb.it\0mie.jp\0"
-"bd.se\0"
-"\xe6\x9d\xb1\xe4\xba\xac.jp\0"
-"game-host.org\0"
-"yachiyo.ibaraki.jp\0"
-"h\xc3\xa1pmir.no\0"
-"otake.hiroshima.jp\0"
-"blogspot.co.il\0"
-"marylhurst.museum\0"
-"mil.ge\0"
-"shikama.miyagi.jp\0"
-"mini\0"
-"mil.gh\0tobishima.aichi.jp\0podzone.net\0"
-"avoues.fr\0"
-"here\0lifeinsurance\0is-an-engineer.com\0"
-"komagane.nagano.jp\0fish\0endofinternet.net\0"
-"lajolla.museum\0"
-"dlugoleka.pl\0"
-"mol.it\0"
-"mil.gt\0"
-"museum\0castle.museum\0udm.ru\0"
-"katsuura.chiba.jp\0"
-"arts.museum\0"
-"kuromatsunai.hokkaido.jp\0minowa.nagano.jp\0"
-"hadano.kanagawa.jp\0lawyer\0"
-"oryol.ru\0guru\0"
-"mil.hn\0mifune.kumamoto.jp\0"
-"yaizu.shizuoka.jp\0"
-"lecce.it\0"
-"mil.id\0"
-"m\xc3\xa1latvuopmi.no\0\xe5\x9c\xa8\xe7\xba\xbf\0"
-"vet\0"
-"olecko.pl\0"
-"newjersey.museum\0"
-"celtic.museum\0delivery\0"
-"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0"
-"mil.in\0"
-"k12.ok.us\0supplies\0\xd0\xbe\xd1\x80\xd0\xb3\0"
-"mil.iq\0"
-"ouda.nara.jp\0chihayaakasaka.osaka.jp\0iwi.nz\0"
-"o.bg\0skjak.no\0"
-"travel.pl\0"
+"news.hu\0"
+"group.aero\0"
+"tochigi.tochigi.jp\0maritime.museum\0"
+"biz.et\0net.eu.org\0"
+"kibichuo.okayama.jp\0"
+"management\0dyndns-home.com\0"
+"ina.nagano.jp\0service.gov.uk\0"
+"shriram\0"
+"from-ar.com\0"
+"co.kr\0"
+"co.lc\0"
+"wien\0"
+"mukawa.hokkaido.jp\0bedzin.pl\0express\0"
+"hokuto.hokkaido.jp\0"
+"nakadomari.aomori.jp\0"
+"frontdoor\0"
+"amami.kagoshima.jp\0kisosaki.mie.jp\0"
+"birdart.museum\0seljord.no\0"
+"artgallery.museum\0"
+"co.ma\0"
+"co.ls\0dating\0reliance\0"
+"mckinsey\0"
+"obama.fukui.jp\0kaneyama.fukushima.jp\0co.me\0"
+"omihachiman.shiga.jp\0co.mg\0"
+"ushuaia.museum\0"
+"morimachi.shizuoka.jp\0namdalseid.no\0"
+"iwanuma.miyagi.jp\0limited\0"
+"hellas.museum\0cloudns.us\0"
+"co.na\0\xc3\xa5snes.no\0"
+"yasuda.kochi.jp\0"
+"miharu.fukushima.jp\0"
+"nu.ca\0biz.id\0co.mu\0preservation.museum\0"
+"amex\0"
+"minamiise.mie.jp\0co.mw\0nerdpol.ovh\0"
+"co.ni\0"
+"co.mz\0gniezno.pl\0archi\0"
+"lib.ny.us\0co.nl\0"
+"a.bg\0co.no\0"
+"res.aero\0aremark.no\0"
+"air-traffic-control.aero\0aizumisato.fukushima.jp\0"
+"exeter.museum\0priv.pl\0"
+"if.ua\0"
+"cc.la.us\0infiniti\0site\0"
+"blogspot.com\0"
+"yamato.fukushima.jp\0"
+"co.nz\0"
+"iiyama.nagano.jp\0"
+"botanicgarden.museum\0co.om\0"
+"minoh.osaka.jp\0gs.aa.no\0"
"for-our.info\0"
-"mobi.gp\0embetsu.hokkaido.jp\0"
-"rennesoy.no\0"
-"aomori.jp\0hiroshima.jp\0"
-"monzaedellabrianza.it\0"
-"mil.jo\0"
-"ci.it\0trento.it\0coop.tt\0"
-"cc.al.us\0academy\0"
-"seika.kyoto.jp\0hyuga.miyazaki.jp\0"
-"design.museum\0cc.ms.us\0cc.nc.us\0is-certified.com\0"
-"\xe5\xa8\xb1\xe4\xb9\x90\0"
-"mil.kg\0za.org\0"
-"norfolk.museum\0"
-"mil.km\0"
-"naturalhistory.museum\0lib.dc.us\0"
-"wales.museum\0"
-"mil.kr\0coop.mv\0"
-"coop.mw\0"
-"nagasaki.nagasaki.jp\0"
-"toyokawa.aichi.jp\0imari.saga.jp\0landrover\0"
-"fhv.se\0"
-"mil.kz\0"
-"roros.no\0java\0"
-"toki.gifu.jp\0ina.saitama.jp\0"
-"for-more.biz\0"
-"vip\0"
-"\xe4\xb8\xaa\xe4\xba\xba.hk\0careers\0"
-"idrett.no\0kustanai.ru\0"
-"mil.lv\0"
-"mil.mg\0"
-"chofu.tokyo.jp\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0"
-"writesthisblog.com\0"
-"oirase.aomori.jp\0olkusz.pl\0"
-"com.ac\0ballooning.aero\0"
-"com.af\0\xe7\xbd\x91\xe7\xbb\x9c\0"
-"airline.aero\0com.ag\0"
-"nakijin.okinawa.jp\0"
-"com.ai\0vossevangen.no\0"
-"shinichi.hiroshima.jp\0marumori.miyagi.jp\0"
-"com.al\0mil.mv\0"
-"mil.ng\0"
-"com.an\0"
-"\xe6\x94\xbf\xe5\xba\x9c.hk\0mil.my\0paris\0tips\0"
-"trentinos-tirol.it\0kashima.ibaraki.jp\0"
-"com.ba\0v.bg\0degree\0"
-"com.ar\0com.bb\0caserta.it\0tranibarlettaandria.it\0"
-"lebtimnetz.de\0"
-"joboji.iwate.jp\0takatsuki.osaka.jp\0gniezno.pl\0travel.tt\0"
-"com.au\0mil.no\0"
-"in-the-band.net\0"
-"com.aw\0"
-"com.bh\0"
-"com.bi\0"
-"com.az\0mito.ibaraki.jp\0"
-"coop.py\0"
-"kashima.kumamoto.jp\0pomorskie.pl\0"
-"com.bm\0"
-"shiki.saitama.jp\0sandvikcoromant\0"
-"com.bo\0cc.as.us\0"
-"minato.tokyo.jp\0mil.nz\0"
-"labour.museum\0coffee\0"
-"com.br\0pg.it\0shintomi.miyazaki.jp\0"
-"com.bs\0cc.nj.us\0"
-"com.bt\0bytom.pl\0"
-"ichiba.tokushima.jp\0"
-"qc.com\0"
-"kakamigahara.gifu.jp\0"
-"com.by\0com.ci\0"
-"com.bz\0ichihara.chiba.jp\0"
-"mil.pe\0"
-"uji.kyoto.jp\0"
-"com.cm\0nesna.no\0"
-"com.cn\0mil.ph\0"
-"com.co\0\xc4\x8d\xc3\xa1hcesuolo.no\0k12.id.us\0\xe8\x87\xba\xe7\x81\xa3\0melbourne\0"
-"kahoku.yamagata.jp\0"
-"mil.pl\0"
-"selje.no\0"
-"tatebayashi.gunma.jp\0shinjo.okayama.jp\0\xe9\x9b\x86\xe5\x9b\xa2\0"
-"com.cu\0com.de\0"
-"higashikurume.tokyo.jp\0"
-"com.cw\0mil.qa\0club.tw\0"
-"v\xc3\xa5ler.hedmark.no\0"
-"town.museum\0"
-"nagasu.kumamoto.jp\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0"
-"com.dm\0"
-"ninomiya.kanagawa.jp\0so.gov.pl\0\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0"
-"com.do\0coop.km\0mil.py\0"
-"elasticbeanstalk.com\0"
-"nachikatsuura.wakayama.jp\0"
-"com.ec\0"
-"cim.br\0ogata.akita.jp\0"
-"com.ee\0"
-"komoro.nagano.jp\0"
-"com.eg\0a.se\0"
-"priv.pl\0"
-"com.dz\0yuki.ibaraki.jp\0utazu.kagawa.jp\0geisei.kochi.jp\0"
-"city.hu\0dovre.no\0energy\0"
-"ny.us\0"
-"com.es\0"
-"com.et\0tsurugi.ishikawa.jp\0nakagusuku.okinawa.jp\0"
-"bajddar.no\0shouji\0"
-"blogspot.co.uk\0"
-"meeres.museum\0mil.ru\0"
-"chita.aichi.jp\0"
-"mil.rw\0naturbruksgymn.se\0"
-"mil.sh\0"
-"seto.aichi.jp\0vision\0"
-"agents.aero\0"
-"com.fr\0verbania.it\0"
-"com.ge\0"
-"shiriuchi.hokkaido.jp\0"
-"cc.az.us\0"
-"com.gh\0creditcard\0"
-"com.gi\0"
-"pn.it\0mil.st\0"
-"maritime.museum\0priv.no\0"
-"jus.br\0genova.it\0"
-"haugesund.no\0"
-"com.gn\0pesaro-urbino.it\0"
-"rubtsovsk.ru\0mil.sy\0"
-"com.gp\0kyowa.hokkaido.jp\0mil.tj\0"
-"com.gr\0"
-"mil.tm\0"
-"com.gt\0ishikawa.jp\0android\0"
-"kazan.ru\0mil.to\0"
-"k12.ia.us\0"
-"izumi.kagoshima.jp\0mil.tr\0"
-"com.gy\0is-a-libertarian.com\0"
-"noshiro.akita.jp\0"
-"com.hk\0"
-"mil.tw\0"
-"com.hn\0est.pr\0management\0se.net\0"
-"mil.tz\0"
-"com.hr\0"
-"grane.no\0"
-"experts-comptables.fr\0com.ht\0"
-"bauern.museum\0nkz.ru\0"
-"webcam\0"
-"iwanai.hokkaido.jp\0okinoshima.shimane.jp\0"
-"mil.vc\0"
-"hamura.tokyo.jp\0"
-"sorreisa.no\0mil.ve\0"
-"com.im\0brussels.museum\0juif.museum\0cc.ia.us\0sa-east-1.compute.amazonaws.com\0"
-"com.io\0h.se\0mil.uy\0"
-"com.iq\0priv.me\0cc.tx.us\0from-ca.com\0"
-"hitoyoshi.kumamoto.jp\0"
-"com.is\0"
-"salvadordali.museum\0"
-"ishikawa.okinawa.jp\0"
-"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0algard.no\0ris\xc3\xb8r.no\0"
-"k12.ca.us\0"
-"homeip.net\0"
-"k12.or.us\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0docs\0frogans\0"
-"com.jo\0groks-the.info\0"
-"askvoll.no\0aver\xc3\xb8y.no\0"
-"ogose.saitama.jp\0gliwice.pl\0"
-"sakhalin.ru\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0"
-"otsuchi.iwate.jp\0"
-"com.kg\0"
-"keisen.fukuoka.jp\0"
-"com.ki\0"
-"yonaguni.okinawa.jp\0"
-"from-ma.com\0"
-"wed\0"
-"com.km\0"
-"kv\xc3\xa6""fjord.no\0cherkassy.ua\0cc.ca.us\0"
-"chikuzen.fukuoka.jp\0com.kp\0"
-"com.la\0nyc.museum\0"
-"pu.it\0hirata.fukushima.jp\0suzaka.nagano.jp\0com.lb\0"
-"com.lc\0cc.oh.us\0"
-"dnsalias.net\0"
-"zhitomir.ua\0"
-"midori.gunma.jp\0kawai.nara.jp\0"
-"com.ky\0masfjorden.no\0"
-"wazuka.kyoto.jp\0gotemba.shizuoka.jp\0com.kz\0"
-"com.lk\0"
-"fujieda.shizuoka.jp\0opole.pl\0"
-"lib.fl.us\0homelinux.com\0"
-"sar.it\0bydgoszcz.pl\0"
-"bristol.museum\0parts\0photos\0"
-"ogawa.saitama.jp\0"
-"com.lr\0"
-"shibetsu.hokkaido.jp\0"
-"party\0"
-"liguria.it\0com.lv\0"
-"com.mg\0m\xc3\xa5lselv.no\0herokussl.com\0"
-"adv.br\0oga.akita.jp\0"
-"com.ly\0"
-"com.mk\0north.museum\0"
-"com.ml\0agrinet.tn\0prod\0"
-"gs.vf.no\0"
-"prof\0"
-"com.mo\0yolasite.com\0"
-"com.na\0"
-"com.ms\0"
-"com.mt\0"
-"com.mu\0ar.com\0"
-"com.mv\0com.nf\0"
-"com.mw\0com.ng\0o.se\0"
-"com.mx\0swidnica.pl\0"
-"com.my\0"
-"yamada.iwate.jp\0"
-"landes.museum\0stathelle.no\0doha\0"
-"togitsu.nagasaki.jp\0"
-"trani-andria-barletta.it\0sr.gov.pl\0"
-"asakawa.fukushima.jp\0joyo.kyoto.jp\0"
-"laz.it\0com.nr\0"
-"usculture.museum\0"
-"yamaguchi.jp\0"
-"tottori.jp\0ota.gunma.jp\0"
-"midsund.no\0"
-"sannohe.aomori.jp\0"
-"lancashire.museum\0com.om\0"
-"olsztyn.pl\0"
-"com.pa\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0"
-"eisenbahn.museum\0paroch.k12.ma.us\0s3-us-gov-west-1.amazonaws.com\0no.com\0from-vt.com\0"
-"dgca.aero\0com.pe\0vn.ua\0"
-"com.pf\0win\0blogspot.co.nz\0"
-"bykle.no\0"
-"oshima.yamaguchi.jp\0com.ph\0"
-"honjo.saitama.jp\0nishikawa.yamagata.jp\0"
-"lakas.hu\0com.pk\0"
-"*.nagoya.jp\0fuji.shizuoka.jp\0com.pl\0"
-"com.qa\0"
-"xj.cn\0tomari.hokkaido.jp\0com.pr\0"
-"j\xc3\xb8lster.no\0com.ps\0"
-"sumoto.hyogo.jp\0com.pt\0"
-"kuriyama.hokkaido.jp\0nasushiobara.tochigi.jp\0"
-"barcelona.museum\0aurskog-h\xc3\xb8land.no\0"
-"com.py\0marketing\0s3-website-sa-east-1.amazonaws.com\0"
-"kayabe.hokkaido.jp\0"
-"minamata.kumamoto.jp\0shima.mie.jp\0"
-"mulhouse.museum\0gs.svalbard.no\0"
-"red.sv\0"
-"ngo.lk\0com.re\0"
-"hachirogata.akita.jp\0kanoya.kagoshima.jp\0"
-"massacarrara.it\0anjo.aichi.jp\0chijiwa.nagasaki.jp\0"
-"from-hi.com\0"
-"is-into-games.com\0"
-"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0"
-"ina.ibaraki.jp\0"
-"com.ro\0"
-"com.sa\0"
-"com.sb\0mobi.tt\0"
-"com.sc\0neat-url.com\0"
-"com.sd\0"
-"drobak.no\0lillehammer.no\0com.ru\0com.se\0"
+"ogimi.okinawa.jp\0"
+"usarts.museum\0nextdirect\0"
+"oi.kanagawa.jp\0"
+"university.museum\0museum.mv\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
+"pharmacien.fr\0museum.mw\0andoy.no\0pictures\0taifun-dns.de\0"
+"delta\0"
+"newhampshire.museum\0"
+"biz.ki\0"
+"rec.br\0co.pl\0"
+"puglia.it\0"
+"co.pn\0"
+"nanyo.yamagata.jp\0museum.no\0"
+"nikaho.akita.jp\0"
+"handa.aichi.jp\0"
+"priv.no\0co.pw\0"
+"rec.co\0herokussl.com\0"
+"mo\xc3\xa5reke.no\0now\0viajes\0go.leg.br\0"
+"okayama.okayama.jp\0museum.om\0"
+"wiki\0"
+"aguni.okinawa.jp\0"
+"computer.museum\0"
+"jp.eu.org\0"
+"k12.al.us\0club\0"
+"ozu.kumamoto.jp\0"
+"og.ao\0"
+"hayashima.okayama.jp\0"
+"karasjohka.no\0"
+"co.rs\0"
+"usdecorativearts.museum\0nra\0"
+"wajima.ishikawa.jp\0"
+"yahaba.iwate.jp\0biz.mv\0co.rw\0"
+"biz.mw\0"
+"zama.kanagawa.jp\0kr.com\0"
+"biz.ni\0"
+"malvik.no\0obi\0"
+"priv.me\0"
+"ujitawara.kyoto.jp\0malselv.no\0orsta.no\0doctor\0"
+"matsushige.tokushima.jp\0"
+"biz.nr\0"
+"co.st\0"
+"dance\0"
+"yoshida.saitama.jp\0"
+"co.th\0"
+"kamisunagawa.hokkaido.jp\0from-ri.com\0"
+"c.bg\0co.sz\0co.tj\0nrw\0"
+"wine\0"
+"co.tm\0"
+"cc.ks.us\0co.ua\0"
+"sicilia.it\0catering\0"
+"okegawa.saitama.jp\0"
+"elk.pl\0co.tt\0"
+"assisi.museum\0nagoya\0"
"kiho.mie.jp\0"
-"com.rw\0com.sg\0"
-"com.sh\0mobi.tz\0xbox\0"
-"k12.co.us\0"
-"lease\0"
-"com.sl\0"
-"wme\0"
-"com.sn\0"
-"l\xc3\xb8renskog.no\0com.so\0"
-"com.st\0"
-"cosenza.it\0com.sv\0"
-"masoy.no\0"
-"sasaguri.fukuoka.jp\0"
-"com.sy\0"
-"assabu.hokkaido.jp\0kanmaki.nara.jp\0com.tj\0"
-"zaporizhzhe.ua\0"
-"tamakawa.fukushima.jp\0faith\0"
-"com.tm\0"
-"ug.gov.pl\0com.tn\0"
-"com.to\0cc.co.us\0"
-"voronezh.ru\0com.ua\0"
-"rc.it\0com.tr\0"
-"hokksund.no\0\xc3\xa1k\xc5\x8boluokta.no\0"
-"com.tt\0"
-"mel\xc3\xb8y.no\0"
-"\xe6\x84\x9b\xe5\xaa\x9b.jp\0shichinohe.aomori.jp\0"
-"com.tw\0com.ug\0"
-"kisofukushima.nagano.jp\0"
-"kepno.pl\0"
-"artgallery.museum\0zgrad.ru\0"
-"nome.pt\0"
-"inc.hk\0"
-"control.aero\0"
-"gamagori.aichi.jp\0ngo.ph\0"
-"sa.au\0""2.bg\0com.vc\0"
-"biratori.hokkaido.jp\0matsushige.tokushima.jp\0"
-"topology.museum\0com.ve\0"
-"ichinomiya.aichi.jp\0"
-"semine.miyagi.jp\0saarland\0"
-"com.uy\0com.vi\0"
-"valle-aosta.it\0nakayama.yamagata.jp\0com.uz\0"
-"dn.ua\0"
-"ws.na\0"
-"com.vn\0"
-"act.edu.au\0durham.museum\0"
-"reggio-emilia.it\0bizen.okayama.jp\0yamada.toyama.jp\0"
-"mansions.museum\0podzone.org\0"
-"tomobe.ibaraki.jp\0minamiyamashiro.kyoto.jp\0matsubushi.saitama.jp\0"
-"glas.museum\0"
-"lc.it\0rikubetsu.hokkaido.jp\0engineer\0"
-"com.vu\0"
-"nishitosa.kochi.jp\0"
-"yaroslavl.ru\0"
-"fj.cn\0"
-"makinohara.shizuoka.jp\0"
-"saka.hiroshima.jp\0"
-"mobi.na\0vagsoy.no\0sevastopol.ua\0"
-"sa.cr\0"
-"lib.mi.us\0com.ws\0"
-"naoshima.kagawa.jp\0"
-"mobi.ng\0hobby-site.org\0"
-"tokai.ibaraki.jp\0"
-"catania.it\0shinagawa.tokyo.jp\0"
-"sannan.hyogo.jp\0"
-"rotorcraft.aero\0amot.no\0"
-"sanofi\0"
-"tas.gov.au\0"
-"fc.it\0kochi.kochi.jp\0"
-"kemerovo.ru\0"
-"leangaviika.no\0"
-"gyeongnam.kr\0consulado.st\0"
-"leirfjord.no\0"
-"hayashima.okayama.jp\0koka.shiga.jp\0"
-"autos\0is-by.us\0"
-"smile\0"
-"conf.au\0"
-"9.bg\0wtc\0"
-"wtf\0"
-"nsw.edu.au\0aurland.no\0chrome\0"
-"otaki.saitama.jp\0"
-"yosemite.museum\0parti.se\0"
-"kawanishi.nara.jp\0"
-"baltimore.museum\0yoga\0"
-"es.kr\0"
-"heroy.more-og-romsdal.no\0"
-"omotego.fukushima.jp\0"
-"british.museum\0"
-"ishinomaki.miyagi.jp\0"
-"game.tw\0cc.vt.us\0"
-"umi.fukuoka.jp\0ikusaka.nagano.jp\0"
-"sh.cn\0"
-"judaica.museum\0gjemnes.no\0itau\0"
-"slupsk.pl\0"
-"musashino.tokyo.jp\0"
-"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0"
-"malatvuopmi.no\0from-pa.com\0"
-"tomakomai.hokkaido.jp\0"
-"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0"
-"unbi.ba\0nid.io\0"
-"szex.hu\0"
-"wassamu.hokkaido.jp\0naka.ibaraki.jp\0"
-"kawasaki.miyagi.jp\0"
-"daiwa.hiroshima.jp\0"
-"is-very-sweet.org\0"
-"naganohara.gunma.jp\0"
-"solund.no\0"
-"gose.nara.jp\0"
-"juegos\0"
-"sa.it\0"
-"emergency.aero\0hawaii.museum\0"
-"\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
-"medio-campidano.it\0hiroo.hokkaido.jp\0"
-"svizzera.museum\0doomdns.org\0"
-"hioki.kagoshima.jp\0"
-"edu.ac\0"
-"yokosuka.kanagawa.jp\0"
-"ipiranga\0"
-"edu.af\0tono.iwate.jp\0takagi.nagano.jp\0"
-"edu.al\0nuoro.it\0\xe5\xb3\xb6\xe6\xa0\xb9.jp\0inagi.tokyo.jp\0"
-"sogndal.no\0room\0endofinternet.org\0"
-"edu.an\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0yuasa.wakayama.jp\0"
-"berlev\xc3\xa5g.no\0"
-"edu.ba\0"
-"edu.ar\0edu.bb\0taketomi.okinawa.jp\0"
-"crimea.ua\0"
-"edu.au\0"
-"video\0"
-"edu.bh\0"
-"edu.bi\0"
-"edu.az\0"
-"anthropology.museum\0is-a-anarchist.com\0"
-"kartuzy.pl\0xin\0"
-"edu.bm\0"
-"watari.miyagi.jp\0"
-"edu.bo\0flatanger.no\0roan.no\0"
-"edu.br\0"
-"edu.bs\0homedns.org\0"
-"edu.bt\0"
-"imabari.ehime.jp\0"
-"edu.ci\0\xd1\x80\xd1\x83\xd1\x81\0"
-"edu.bz\0kumiyama.kyoto.jp\0"
-"is-a-financialadvisor.com\0"
-"izhevsk.ru\0"
-"edu.cn\0"
-"edu.co\0sandnessj\xc3\xb8""en.no\0"
-"sardegna.it\0"
-"awaji.hyogo.jp\0"
-"soni.nara.jp\0"
-"edu.cu\0"
-"edu.cw\0clinton.museum\0\xc3\xa5mli.no\0ks.ua\0"
-"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0"
-"gol.no\0"
-"pisz.pl\0"
-"monmouth.museum\0"
-"edu.dm\0z-1.compute-1.amazonaws.com\0"
-"edu.do\0"
-"ah.cn\0"
-"edu.ec\0"
-"mo.cn\0izumiotsu.osaka.jp\0"
-"edu.ee\0"
-"dental\0"
-"edu.eg\0cartoonart.museum\0"
-"trentinoalto-adige.it\0"
-"ks.us\0"
-"edu.dz\0homelinux.net\0"
-"epilepsy.museum\0"
-"nakanoto.ishikawa.jp\0shiraoka.saitama.jp\0"
-"stateofdelaware.museum\0k12.ks.us\0"
-"izumozaki.niigata.jp\0"
-"kamisu.ibaraki.jp\0"
-"edu.es\0discovery.museum\0"
-"edu.et\0airtel\0"
-"palermo.it\0"
-"yura.wakayama.jp\0"
-"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0"
-"go.ci\0romsa.no\0"
-"omigawa.chiba.jp\0niihama.ehime.jp\0"
-"villas\0"
-"edu.ge\0"
-"pug.it\0matsuura.nagasaki.jp\0"
-"comunica\xc3\xa7\xc3\xb5""es.museum\0dyndns-ip.com\0"
-"edu.gh\0"
-"edu.gi\0br\xc3\xb8nn\xc3\xb8y.no\0rahkkeravju.no\0sn\xc3\xa5sa.no\0"
-"go.cr\0ulsan.kr\0"
-"agency\0"
-"edu.gn\0"
-"stavanger.no\0"
-"edu.gp\0"
-"edu.gr\0"
-"artcenter.museum\0"
-"edu.gt\0"
-"fitjar.no\0"
-"aosta.it\0"
-"yoshino.nara.jp\0publ.pt\0"
-"edu.hk\0"
-"edu.hn\0higashiizu.shizuoka.jp\0"
-"nf.ca\0investments\0"
-"trentinosued-tirol.it\0imakane.hokkaido.jp\0"
-"naie.hokkaido.jp\0"
-"illustration.museum\0"
-"edu.ht\0fujiyoshida.yamanashi.jp\0"
-"chiyoda.gunma.jp\0"
-"science-fiction.museum\0"
-"so.it\0"
-"kamikoani.akita.jp\0"
-"edu.in\0"
-"gv.ao\0"
-"kyotanabe.kyoto.jp\0nabari.mie.jp\0"
-"edu.iq\0"
-"edu.is\0"
-"gv.at\0edu.it\0"
+"tn.it\0co.ug\0"
+"nu.it\0"
+"ismaili\0"
+"cs.it\0co.tz\0"
+"co.uk\0"
+"decorativearts.museum\0naumburg.museum\0biz.pk\0"
+"botanicalgarden.museum\0biz.pl\0"
+"computer\0"
+"\xe6\x95\x99\xe8\x82\xb2.hk\0"
"stuff-4-sale.us\0"
-"yamagata.yamagata.jp\0"
-"pasadena.museum\0"
-"kawai.iwate.jp\0ryuoh.shiga.jp\0"
-"saltdal.no\0stokke.no\0"
-"tychy.pl\0makeup\0"
-"surnadal.no\0gos.pk\0"
-"edu.jo\0"
-"fermo.it\0fujimi.saitama.jp\0"
-"wakkanai.hokkaido.jp\0"
-"nara.nara.jp\0"
-"edu.kg\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0"
-"edu.ki\0aa.no\0"
-"mo.it\0"
-"kvinnherad.no\0"
-"oamishirasato.chiba.jp\0sumita.iwate.jp\0"
-"edu.km\0from-nm.com\0"
-"edu.kn\0"
-"cc.wy.us\0"
-"fukui.fukui.jp\0koryo.nara.jp\0edu.kp\0"
-"edu.la\0"
-"edu.lb\0"
-"edu.lc\0"
-"kounosu.saitama.jp\0fuchu.toyama.jp\0"
-"dominic.ua\0lib.ar.us\0"
-"\xe7\xae\x87\xe4\xba\xba.hk\0edu.ky\0"
-"edu.kz\0"
-"edu.lk\0"
-"go.id\0mantova.it\0funahashi.toyama.jp\0"
+"biz.pr\0co.us\0"
+"co.ve\0caravan\0"
+"ntt\0"
+"co.vi\0"
+"toyo.kochi.jp\0co.uz\0"
+"izumozaki.niigata.jp\0sel.no\0"
+"uzs.gov.pl\0"
+"quebec.museum\0"
+"funagata.yamagata.jp\0"
+"yoka.hyogo.jp\0"
+"brand.se\0"
+"ryokami.saitama.jp\0dscloud.mobi\0"
+"uy.com\0"
+"trentino-aadige.it\0ide.kyoto.jp\0saarland\0"
+"off\0"
+"aland.fi\0"
+"rocks\0"
+"slask.pl\0"
+"nore-og-uvdal.no\0"
+"semboku.akita.jp\0"
+"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0"
+"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0"
+"chijiwa.nagasaki.jp\0"
+"eastafrica.museum\0radom.pl\0"
+"motegi.tochigi.jp\0"
+"aya.miyazaki.jp\0ariake.saga.jp\0spy.museum\0"
+"shinagawa.tokyo.jp\0"
+"utsunomiya.tochigi.jp\0"
+"higashi.fukuoka.jp\0izumi.kagoshima.jp\0solund.no\0"
+"kagoshima.kagoshima.jp\0"
+"homelinux.net\0"
+"cloudns.pw\0"
+"olbia-tempio.it\0"
+"from-ms.com\0from-nc.com\0"
+"soccer\0"
+"biz.tj\0"
+"egersund.no\0yuzhno-sakhalinsk.ru\0"
+"science.museum\0"
+"bryne.no\0paroch.k12.ma.us\0"
+"s3.eu-central-1.amazonaws.com\0"
+"co.za\0"
+"biz.ua\0"
+"yoro.gifu.jp\0biz.tr\0"
+"spydeberg.no\0"
+"e.bg\0biz.tt\0"
+"nyc\0"
+"conf.au\0"
+"cleaning\0"
+"yuki.ibaraki.jp\0"
+"cc.fl.us\0co.zm\0"
+"wellbeingzone.eu\0"
+"tp.it\0"
+"og.it\0"
+"parliament.nz\0"
+"gmbh\0"
+"ando.nara.jp\0"
+"\xe6\x95\x8e\xe8\x82\xb2.hk\0"
+"biz.vn\0"
+"rec.nf\0"
+"jerusalem.museum\0selfip.biz\0"
+"azumino.nagano.jp\0grimstad.no\0"
+"kamikawa.hyogo.jp\0wiih.gov.pl\0"
+"olbiatempio.it\0"
+"sango.nara.jp\0"
+"store\0"
+"notaires.km\0"
+"inuyama.aichi.jp\0"
+"is-gone.com\0"
+"shakotan.hokkaido.jp\0"
+"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0"
+"jus.br\0fhapp.xyz\0"
+"rovigo.it\0yamagata.jp\0"
+"reg.dk\0"
+"k12.vt.us\0"
+"kamitonda.wakayama.jp\0turystyka.pl\0"
+"children.museum\0"
+"c.la\0"
+"kyiv.ua\0"
+"weatherchannel\0"
+"okinawa.okinawa.jp\0"
+"lotte\0"
+"in.na\0"
+"ivgu.no\0from-nj.com\0"
+"basketball\0"
+"is-a-hunter.com\0"
+"imageandsound.museum\0"
+"lotto\0one\0"
+"in.ni\0osen.no\0"
+"ong\0"
+"krodsherad.no\0"
+"lib.tx.us\0"
+"a.se\0"
+"arita.saga.jp\0biz.zm\0"
+"kamishihoro.hokkaido.jp\0onl\0lib.de.us\0"
+"g.bg\0omigawa.chiba.jp\0"
+"nagaoka.niigata.jp\0"
+"belgorod.ru\0"
+"cc.wi.us\0neustar\0"
+"fuoisku.no\0"
+"namegata.ibaraki.jp\0"
+"sakahogi.gifu.jp\0takahagi.ibaraki.jp\0rec.ro\0"
+"omura.nagasaki.jp\0"
+"tokigawa.saitama.jp\0"
+"tr.it\0hoteles\0"
+"hanamigawa.chiba.jp\0"
+"mortgage\0"
+"ooo\0"
+"eu.org\0"
+"tn.us\0"
+"il.us\0rodeo\0"
+"dc.us\0shouji\0"
+"tamatsukuri.ibaraki.jp\0"
+"blogspot.co.at\0"
+"caa.aero\0"
+"ski.no\0"
+"steiermark.museum\0"
+"civilization.museum\0"
+"blogspot.vn\0"
+"kitagata.gifu.jp\0utsira.no\0"
+"ono.fukui.jp\0imdb\0"
+"lefrak\0*.githubcloudusercontent.com\0"
+"fukuchiyama.kyoto.jp\0cloudns.info\0"
+"symantec\0"
+"giving\0"
+"firestone\0quest\0"
+"tjmaxx\0"
+"shintomi.miyazaki.jp\0"
+"org\0"
+"grozny.su\0pay\0"
+"floro.no\0"
+"rec.ve\0"
+"it.ao\0"
+"tv.bb\0"
+"biev\xc3\xa1t.no\0in.rs\0"
+"takahama.fukui.jp\0"
+"ebiz.tw\0chirurgiens-dentistes-en-france.fr\0"
+"higashikawa.hokkaido.jp\0"
+"wallonie.museum\0dovre.no\0"
+"lipetsk.ru\0"
+"tv.bo\0\xd1\x83\xd0\xba\xd1\x80\0"
+"broker.aero\0skin\0"
+"tv.br\0"
+"fredrikstad.no\0hobby-site.org\0"
+"sano.tochigi.jp\0"
+"arezzo.it\0q-a.eu.org\0"
+"metlife\0"
+"gokase.miyazaki.jp\0tr.no\0aurland.no\0c.se\0in.th\0"
+"lib.dc.us\0"
+"i.bg\0"
+"is-a-cubicle-slave.com\0blogspot.re\0"
+"akune.kagoshima.jp\0"
+"gucci\0from-wv.com\0js.org\0"
+"tt.im\0in.ua\0"
+"cc.ky.us\0"
+"matsudo.chiba.jp\0kiwa.mie.jp\0e-burg.ru\0"
+"viking\0"
+"ott\0"
+"ud.it\0blogspot.ro\0"
+"karate.museum\0royrvik.no\0"
+"prochowice.pl\0warmia.pl\0smart\0"
+"nanbu.tottori.jp\0"
+"hino.tottori.jp\0americana.museum\0grozny.ru\0blogspot.rs\0"
+"erotica.hu\0trentinoalto-adige.it\0"
+"blogspot.ru\0blogspot.se\0"
+"steinkjer.no\0blogspot.sg\0"
+"blogspot.si\0"
+"vgs.no\0in.us\0"
+"wzmiuw.gov.pl\0de.us\0blogspot.sk\0"
"chippubetsu.hokkaido.jp\0"
-"hamburg.museum\0\xc3\xa5snes.no\0"
-"tsuga.tochigi.jp\0"
-"sciences.museum\0"
-"edu.lr\0"
-"luster.no\0vinnica.ua\0"
-"edu.me\0"
-"edu.lv\0"
-"edu.mg\0"
-"edu.ly\0cultural.museum\0ftpaccess.cc\0"
-"kagamino.okayama.jp\0"
-"edu.mk\0rygge.no\0"
-"go.it\0hirono.fukushima.jp\0daito.osaka.jp\0edu.ml\0"
-"salangen.no\0tromsa.no\0reviews\0"
-"edu.mn\0"
-"edu.mo\0"
-"sv.it\0"
-"cymru.museum\0e-burg.ru\0cc.ri.us\0"
-"tsumagoi.gunma.jp\0gorlice.pl\0"
-"edu.ms\0"
-"nm.cn\0\xe5\x8d\x83\xe8\x91\x89.jp\0nonoichi.ishikawa.jp\0edu.mt\0"
-"ayagawa.kagawa.jp\0edu.mv\0"
-"edu.mw\0edu.ng\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0poltava.ua\0"
-"go.jp\0edu.mx\0"
-"edu.my\0ma.us\0k12.al.us\0"
-"kyotamba.kyoto.jp\0"
-"k12.mi.us\0"
-"onna.okinawa.jp\0"
-"stryn.no\0"
-"pescara.it\0edu.nr\0"
-"county.museum\0"
-"\xe5\x95\x86\xe6\xa0\x87\0"
-"tm.fr\0komae.tokyo.jp\0"
-"msk.ru\0"
-"bialowieza.pl\0"
-"haram.no\0\xd1\x81\xd1\x80\xd0\xb1\0sells-for-u.com\0"
-"go.kr\0"
-"trapani.it\0takahama.fukui.jp\0nayoro.hokkaido.jp\0ibaraki.ibaraki.jp\0"
-"forde.no\0edu.om\0"
-"ao.it\0"
-"ah.no\0edu.pa\0"
-"trentino-suedtirol.it\0"
-"mesaverde.museum\0cc.ky.us\0"
-"taishin.fukushima.jp\0erimo.hokkaido.jp\0"
-"edu.pe\0"
-"como.it\0edu.pf\0"
-"edu.ph\0"
-"yamada.fukuoka.jp\0"
-"edu.pk\0ga.us\0"
-"edu.pl\0"
-"edu.pn\0"
-"production.aero\0sk\xc3\xa1nit.no\0"
-"lucania.it\0"
-"sandnes.no\0edu.qa\0"
-"edu.pr\0garden\0"
-"nt.au\0edu.ps\0"
-"mar.it\0edu.pt\0"
-"fukagawa.hokkaido.jp\0toyosato.shiga.jp\0"
-"tm.hu\0edu.py\0"
-"friulivenezia-giulia.it\0hiphop\0"
-"coastaldefence.museum\0"
-"chiyoda.tokyo.jp\0mragowo.pl\0"
-"nt.ca\0"
-"valle-daosta.it\0"
-"hinode.tokyo.jp\0"
-"lacaixa\0"
-"watches\0"
-"xxx\0"
-"field.museum\0missoula.museum\0d\xc3\xb8nna.no\0science\0hu.com\0"
-"tadaoka.osaka.jp\0"
-"hayakawa.yamanashi.jp\0"
-"dnsalias.org\0"
-"edu.sa\0"
-"edu.sb\0"
-"edu.rs\0edu.sc\0lib.id.us\0"
-"ogori.fukuoka.jp\0notogawa.shiga.jp\0edu.sd\0"
-"repbody.aero\0id.au\0edu.ru\0k12.nj.us\0"
-"loyalist.museum\0edu.rw\0edu.sg\0"
-"xyz\0"
-"moka.tochigi.jp\0dynathome.net\0"
-"kimino.wakayama.jp\0edu.sl\0nissan\0"
-"veterinaire.km\0"
-"kokubunji.tokyo.jp\0edu.sn\0"
-"os.hordaland.no\0"
-"tm.km\0artsandcrafts.museum\0is-a-musician.com\0"
-"*.kitakyushu.jp\0iitate.fukushima.jp\0"
-"edu.st\0"
-"av.it\0urayasu.chiba.jp\0edu.sv\0"
-"florida.museum\0ninja\0"
-"edu.sy\0"
-"nemuro.hokkaido.jp\0edu.tj\0"
+"\xe7\xbd\x91\xe7\xb5\xa1.hk\0pet\0blogspot.sn\0"
+"\xe9\xb3\xa5\xe5\x8f\x96.jp\0drobak.no\0"
+"ovh\0"
+"za.com\0blogspot.td\0"
+"ichinomiya.chiba.jp\0ikata.ehime.jp\0yuasa.wakayama.jp\0"
+"degree\0"
+"takasu.hokkaido.jp\0herokuapp.com\0"
+"miners.museum\0"
+"fukuoka.jp\0moriguchi.osaka.jp\0lodingen.no\0"
+"selje.no\0"
+"trentinoaadige.it\0minowa.nagano.jp\0rnrt.tn\0"
+"mat.br\0verran.no\0"
+"is.eu.org\0"
+"bar.pro\0"
+"cards\0"
+"friulivgiulia.it\0cdn77-ssl.net\0"
+"kawakami.nagano.jp\0blogspot.co.id\0"
+"epilepsy.museum\0blogspot.tw\0blogspot.ug\0"
+"schule\0\xe7\x82\xb9\xe7\x9c\x8b\0"
+"aizuwakamatsu.fukushima.jp\0"
+"isla.pr\0capitalone\0selfip.com\0"
+"hornindal.no\0tychy.pl\0"
+"blogspot.co.il\0"
+"yachiyo.ibaraki.jp\0phd\0"
+"nara.nara.jp\0redstone\0"
+"iglesias-carbonia.it\0blogspot.mr\0"
+"osakikamijima.hiroshima.jp\0kimino.wakayama.jp\0"
+"kids.us\0no.com\0"
+"mar.it\0"
+"mochizuki.nagano.jp\0"
+"blogspot.mx\0"
+"blogspot.my\0"
+"terni.it\0tra.kp\0"
+"casino\0blogspot.nl\0"
+"kmpsp.gov.pl\0"
+"pid\0"
+"blogspot.no\0"
+"tatsuno.hyogo.jp\0"
+"it.eu.org\0"
+"sakura.tochigi.jp\0staples\0from-oh.com\0"
+"pin\0"
+"cymru\0dynalias.net\0"
+"togane.chiba.jp\0e.se\0"
+"klepp.no\0"
+"k.bg\0"
+"inazawa.aichi.jp\0"
+"moss.no\0"
+"khabarovsk.ru\0"
+"tv.im\0"
+"blogspot.pe\0"
+"forde.no\0so.gov.pl\0website\0"
+"space-to-rent.com\0"
+"indianmarket.museum\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
+"tv.it\0"
+"tobe.ehime.jp\0"
+"aisai.aichi.jp\0hinode.tokyo.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0us-west-1.compute.amazonaws.com\0"
+"miyagi.jp\0delaware.museum\0"
+"aerodrome.aero\0immo\0"
+"ollo\0blogspot.qa\0"
+"ny.us\0blogspot.pt\0"
+"hatsukaichi.hiroshima.jp\0kvinesdal.no\0"
+"kalmykia.su\0"
+"nishigo.fukushima.jp\0"
+"otsu.shiga.jp\0"
+"r\xc3\xb8mskog.no\0"
+"gyokuto.kumamoto.jp\0"
+"lifeinsurance\0"
+"games.hu\0kotohira.kagawa.jp\0"
+"brumunddal.no\0"
+"blogspot.is\0"
+"blogspot.it\0"
+"civilisation.museum\0"
+"saijo.ehime.jp\0"
+"nishinomiya.hyogo.jp\0"
+"kuzumaki.iwate.jp\0stor-elvdal.no\0"
+"blogspot.jp\0"
+"in.eu.org\0"
+"solutions\0"
"s\xc3\xb8rum.no\0"
-"yawatahama.ehime.jp\0oyamazaki.kyoto.jp\0moroyama.saitama.jp\0"
-"edu.tm\0"
-"shinyoshitomi.fukuoka.jp\0\xd1\x80\xd1\x84\0"
-"fuel.aero\0hellas.museum\0go.pw\0edu.to\0"
-"edu.ua\0"
-"edu.tr\0"
-"zlg.br\0edu.tt\0"
-"tm.mc\0edu.tw\0fitness\0s3-us-west-2.amazonaws.com\0"
-"iwaizumi.iwate.jp\0kitakata.miyazaki.jp\0"
-"hembygdsforbund.museum\0"
-"kumano.hiroshima.jp\0"
-"tm.mg\0sec.ps\0"
-"cremona.it\0"
-"railway.museum\0"
-"r\xc3\xa5""de.no\0is-a-lawyer.com\0"
-"nishiizu.shizuoka.jp\0wajiki.tokushima.jp\0"
-"edu.vc\0"
-"shimonoseki.yamaguchi.jp\0"
-"edu.ve\0"
-"tt.im\0edu.uy\0bingo\0"
-"ibestad.no\0"
-"komatsu.ishikawa.jp\0meiwa.mie.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
-"cadaques.museum\0"
-"edu.vn\0"
-"cyber.museum\0"
-"ud.it\0aki.kochi.jp\0"
-"veterinaire.fr\0"
-"tm.no\0royrvik.no\0boats\0youtube\0"
-"toshima.tokyo.jp\0"
-"edu.vu\0"
-"hazu.aichi.jp\0yoka.hyogo.jp\0"
-"mo.us\0k12.az.us\0boldlygoingnowhere.org\0"
-"shimamaki.hokkaido.jp\0"
-"mizuho.tokyo.jp\0conf.lv\0go.th\0"
-"c.bg\0"
-"go.tj\0"
-"indiana.museum\0edu.ws\0"
-"kamifurano.hokkaido.jp\0ryugasaki.ibaraki.jp\0"
-"giske.no\0safe\0"
-"miyagi.jp\0"
-"matta-varjjat.no\0"
-"caa.aero\0firmdale\0"
-"ojiya.niigata.jp\0"
-"go.ug\0"
-"tm.pl\0"
-"go.tz\0"
-"sakegawa.yamagata.jp\0"
-"alvdal.no\0"
-"os.hedmark.no\0"
-"hizen.saga.jp\0"
-"pb.ao\0chicago.museum\0fuossko.no\0"
-"srv.br\0azurewebsites.net\0"
-"or.at\0"
-"br\xc3\xb8nn\xc3\xb8ysund.no\0"
-"or.bi\0"
-"higashimatsuyama.saitama.jp\0"
-"l\xc3\xa1hppi.no\0"
-"\xe5\x85\xac\xe5\x8f\xb8.cn\0koga.fukuoka.jp\0cern\0"
-"notodden.no\0"
-"katano.osaka.jp\0"
-"dinosaur.museum\0windmill.museum\0"
-"yonezawa.yamagata.jp\0"
-"id.ir\0kasahara.gifu.jp\0"
-"tm.ro\0"
-"sex.hu\0college\0"
-"or.ci\0starnberg.museum\0hm.no\0bloomberg\0"
-"cal.it\0rns.tn\0"
-"\xe5\x85\xac\xe5\x8f\xb8.hk\0tm.se\0"
-"web.co\0"
-"land\0"
-"saga.saga.jp\0"
-"or.cr\0"
-"navuotna.no\0"
-"onojo.fukuoka.jp\0"
-"global\0"
-"lib.va.us\0"
-"j.bg\0"
-"web.do\0"
-"kagoshima.jp\0misato.akita.jp\0"
-"webhop.info\0"
-"nagahama.shiga.jp\0"
-"bt.it\0taku.saga.jp\0"
-"kraanghke.no\0"
-"sakurai.nara.jp\0"
-"cc.mn.us\0"
-"culture.museum\0guernsey.museum\0nt.no\0"
-"tachiarai.fukuoka.jp\0"
-"plc.co.im\0historisch.museum\0"
-"aisho.shiga.jp\0"
-"coldwar.museum\0"
-"motobu.okinawa.jp\0ibaraki.osaka.jp\0"
-"news.hu\0sale\0"
-"id.lv\0"
-"anthro.museum\0"
-"sondrio.it\0"
-"id.ly\0lib.pa.us\0"
-"finearts.museum\0"
-"matsuno.ehime.jp\0yun\0"
-"t\xc3\xb8nsberg.no\0"
-"sciencecenter.museum\0baidar.no\0muosat.no\0"
-"lind\xc3\xa5s.no\0v\xc3\xa1rgg\xc3\xa1t.no\0kiev.ua\0"
-"scrapping.cc\0"
-"av.tr\0"
-"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0"
-"kitagata.gifu.jp\0ota.tokyo.jp\0"
-"j\xc3\xb8rpeland.no\0"
-"krakow.pl\0"
-"zt.ua\0"
-"kirovograd.ua\0"
-"vb.it\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0kicks-ass.net\0"
-"telefonica\0"
-"fundacio.museum\0"
-"tomika.gifu.jp\0"
-"bodo.no\0"
-"cuneo.it\0!city.nagoya.jp\0"
-"neues.museum\0bryansk.ru\0nm.us\0"
-"mielno.pl\0"
-"elburg.museum\0"
-"american.museum\0"
-"skanit.no\0"
-"web.id\0sakawa.kochi.jp\0"
-"q.bg\0"
-"or.id\0"
-"lavagis.no\0tydal.no\0"
-"hachijo.tokyo.jp\0"
-"gs.nl.no\0vestvagoy.no\0yekaterinburg.ru\0"
-"uchihara.ibaraki.jp\0"
-"trentino-aadige.it\0pesarourbino.it\0masaki.ehime.jp\0sukagawa.fukushima.jp\0"
-"c.la\0"
-"nt.ro\0homelinux.org\0"
-"pordenone.it\0chuo.fukuoka.jp\0okegawa.saitama.jp\0"
-"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0"
-"voyage\0\xe5\xa4\xa7\xe6\x8b\xbf\0"
-"or.it\0isumi.chiba.jp\0takehara.hiroshima.jp\0"
-"cc.ne.us\0"
-"soja.okayama.jp\0naruto.tokushima.jp\0"
-"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"exchange\0"
-"kaho.fukuoka.jp\0tosa.kochi.jp\0"
-"asago.hyogo.jp\0kawatana.nagasaki.jp\0sex.pl\0kred\0"
-"or.jp\0zip\0"
-"sapo\0"
-"honjyo.akita.jp\0"
-"skaun.no\0knowsitall.info\0"
-"stuttgart.museum\0\xc3\xb8rsta.no\0k12.tn.us\0"
-"tcm.museum\0"
-"kani.gifu.jp\0"
-"eu.com\0"
-"pp.az\0milan.it\0hikari.yamaguchi.jp\0buzz\0"
-"gs.hl.no\0enterprises\0"
-"miho.ibaraki.jp\0"
-"codespot.com\0"
-"milano.it\0"
-"perso.ht\0"
-"kunstsammlung.museum\0od.ua\0"
-"oyama.tochigi.jp\0or.kr\0"
-"estate.museum\0"
-"cc.gu.us\0"
-"web.lk\0"
-"balsan.it\0vi.it\0shikaoi.hokkaido.jp\0"
-"quebec.museum\0"
-"sarl\0"
-"moriguchi.osaka.jp\0"
-"leikanger.no\0safety\0\xe6\x96\xb0\xe9\x97\xbb\0"
-"hangout\0"
-"yamashina.kyoto.jp\0yoshida.saitama.jp\0"
-"research.aero\0"
-"x.bg\0from-ct.com\0"
-"kimobetsu.hokkaido.jp\0"
-"artdeco.museum\0levanger.no\0"
-"b\xc3\xb8mlo.no\0skanland.no\0"
-"pro.az\0"
-"or.na\0"
-"kanie.aichi.jp\0"
-"web.nf\0"
-"or.mu\0donetsk.ua\0"
-"russia.museum\0"
-"pro.br\0cr.it\0mizumaki.fukuoka.jp\0"
-"*.nom.br\0hara.nagano.jp\0inami.wakayama.jp\0"
-"uscountryestate.museum\0"
-"pi.it\0ujiie.tochigi.jp\0"
-"is-a-guru.com\0"
-"creation.museum\0"
-"higashishirakawa.gifu.jp\0\xe5\x85\xab\xe5\x8d\xa6\0"
-"sciencesnaturelles.museum\0"
-"bonn.museum\0sondre-land.no\0s\xc3\xb8r-aurdal.no\0"
-"ham-radio-op.net\0"
-"id.us\0"
-"oki.fukuoka.jp\0"
-"b\xc3\xa1hccavuotna.no\0"
-"katowice.pl\0"
-"\xe5\xa4\xa7\xe5\x88\x86.jp\0takayama.nagano.jp\0nishinoshima.shimane.jp\0nyc.mn\0"
-"folkebibl.no\0vladivostok.ru\0"
-"halden.no\0"
-"ninohe.iwate.jp\0"
-"\xe6\x95\x99\xe8\x82\xb2.hk\0"
-"ebiz.tw\0"
-"gujo.gifu.jp\0rebun.hokkaido.jp\0dentist\0"
-"lindesnes.no\0"
-"s\xc3\xb8ndre-land.no\0"
-"tamamura.gunma.jp\0akashi.hyogo.jp\0toda.saitama.jp\0"
-"pro.ec\0web.pk\0blackfriday\0"
-"zara\0"
-"for-the.biz\0"
-"vadso.no\0"
-"chocolate.museum\0c.se\0"
-"chikuhoku.nagano.jp\0"
-"or.pw\0"
-"e164.arpa\0tushu\0"
-"komono.mie.jp\0"
-"ok.us\0is-a-photographer.com\0"
-"nuernberg.museum\0is-slick.com\0"
-"\xe4\xba\xac\xe9\x83\xbd.jp\0tonosho.kagawa.jp\0"
-"k12.ec\0"
-"mikasa.hokkaido.jp\0"
-"tom.ru\0viva\0"
-"a\xc3\xa9roport.ci\0"
-"umb.it\0iwafune.tochigi.jp\0mazowsze.pl\0\xd1\x83\xd0\xba\xd1\x80\0"
-"bel.tr\0"
-"rakkestad.no\0"
-"bievat.no\0"
-"saxo\0"
-"fuefuki.yamanashi.jp\0"
-"research.museum\0"
-"ragusa.it\0nadex\0"
-"jar.ru\0"
-"busan.kr\0"
-"rovno.ua\0"
-"pilot.aero\0"
-"dell-ogliastra.it\0"
-"space.museum\0"
-"asakuchi.okayama.jp\0"
-"kafjord.no\0"
-"sakado.saitama.jp\0"
-"k12.ut.us\0"
-"matsushima.miyagi.jp\0"
-"or.th\0web.tj\0"
-"communication.museum\0naturalsciences.museum\0"
-"pro.ht\0rawa-maz.pl\0"
-"ashiya.hyogo.jp\0"
-"udmurtia.ru\0ck.ua\0"
-"eastcoast.museum\0gs.va.no\0motorcycles\0praxi\0"
-"web.tr\0"
+"sekikawa.niigata.jp\0comcast\0"
+"fnd.br\0kitaakita.akita.jp\0nakanoto.ishikawa.jp\0"
+"hof.no\0withyoutube.com\0"
+"store.nf\0pnc\0"
"cechire.com\0"
-"choshi.chiba.jp\0"
-"avellino.it\0kuchinotsu.nagasaki.jp\0"
-"or.ug\0"
-"or.tz\0"
-"ap-southeast-2.compute.amazonaws.com\0"
-"kusatsu.gunma.jp\0okawa.kochi.jp\0yamaga.kumamoto.jp\0hikone.shiga.jp\0"
-"selfip.info\0"
-"urausu.hokkaido.jp\0taki.mie.jp\0"
-"essex.museum\0"
-"group\0"
-"or.us\0web.ve\0"
-"tama.tokyo.jp\0"
-"l\xc3\xb8""dingen.no\0today\0likescandy.com\0"
-"iizuka.fukuoka.jp\0"
-"\xe4\xb8\xad\xe4\xbf\xa1\0"
-"takamori.kumamoto.jp\0"
-"kibichuo.okayama.jp\0"
-"kristiansund.no\0"
-"dallas.museum\0diamonds\0"
-"daegu.kr\0"
-"svalbard.no\0"
-"rocher\0"
-"chonan.chiba.jp\0"
-"evenassi.no\0"
-"cinema.museum\0bardu.no\0"
-"midori.chiba.jp\0starostwo.gov.pl\0"
+"mikawa.yamagata.jp\0blogspot.kr\0"
+"kalmykia.ru\0"
+"shikatsu.aichi.jp\0tv.na\0"
+"niepce.museum\0"
+"blogspot.li\0"
+"hirokawa.fukuoka.jp\0"
"balestrand.no\0"
-"homeunix.net\0"
-"forsand.no\0"
-"\xe3\x82\xb3\xe3\x83\xa0\0"
-"steiermark.museum\0"
-"kamiizumi.saitama.jp\0fukumitsu.toyama.jp\0"
-"from-ar.com\0"
-"gosen.niigata.jp\0"
-"s\xc3\xb8gne.no\0chernivtsi.ua\0vi.us\0"
-"takahama.aichi.jp\0kamiichi.toyama.jp\0"
-"memorial.museum\0k12.va.us\0"
-"hitachiota.ibaraki.jp\0taiwa.miyagi.jp\0"
-"odo.br\0minamiuonuma.niigata.jp\0\xe5\x85\xac\xe5\x8f\xb8\0"
-"shimada.shizuoka.jp\0"
-"mobi\0oyer.no\0cr.ua\0"
-"\xe6\xb2\x96\xe7\xb8\x84.jp\0"
-"pro.na\0b\xc3\xa1hcavuotna.no\0\xd7\xa7\xd7\x95\xd7\x9d\0"
-"ogano.saitama.jp\0"
-"\xe6\xb8\xb8\xe6\x88\x8f\0"
-"pro.mv\0"
-"environmentalconservation.museum\0"
-"takatsuki.shiga.jp\0"
-"www.ro\0"
-"furukawa.miyagi.jp\0"
-"balat.no\0cc.va.us\0"
-"h\xc3\xb8ylandet.no\0schule\0"
-"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0"
-"aostavalley.it\0ferrara.it\0kashiwazaki.niigata.jp\0"
-"consulting.aero\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0"
-"k12.ct.us\0"
-"forli-cesena.it\0warszawa.pl\0"
-"media.aero\0moda\0"
-"kuki.saitama.jp\0"
-"b\xc3\xa1jddar.no\0vikna.no\0k12.pa.us\0"
-"pro.om\0boutique\0"
-"katsuragi.wakayama.jp\0"
-"esashi.hokkaido.jp\0urakawa.hokkaido.jp\0hamatama.saga.jp\0"
-"kg.kr\0"
-"appspot.com\0"
+"realestate\0"
+"faith\0"
+"hk.com\0"
+"saves-the-whales.com\0"
+"kawaguchi.saitama.jp\0blogspot.lt\0blogspot.md\0"
+"g.se\0blogspot.lu\0"
+"lib.co.us\0"
+"m.bg\0"
+"is-a-lawyer.com\0"
+"blogspot.mk\0"
+"tamba.hyogo.jp\0"
+"bosch\0"
+"moka.tochigi.jp\0cc.ak.us\0autos\0br.com\0from-ut.com\0"
+"i.ng\0"
+"ushistory.museum\0"
+"nanmoku.gunma.jp\0pruszkow.pl\0"
+"kokonoe.oita.jp\0"
+"woodside\0"
+"jondal.no\0blogspot.fi\0"
+"lahppi.no\0"
+"naturalsciences.museum\0"
+"ok.us\0"
+"utazas.hu\0"
+"hachijo.tokyo.jp\0googlecode.com\0"
+"trading\0blogspot.fr\0"
+"tsubetsu.hokkaido.jp\0creation.museum\0risor.no\0nyc.mn\0"
+"!city.nagoya.jp\0"
+"field.museum\0"
+"servequake.com\0"
+"sex.hu\0fujitsu\0"
+"is-a-painter.com\0"
+"kherson.ua\0"
+"minato.osaka.jp\0abbvie\0"
+"otsuki.yamanashi.jp\0circle\0blogspot.gr\0"
+"i.ph\0"
+"muenchen.museum\0"
+"pro\0"
+"us-east-1.amazonaws.com\0blogspot.hk\0"
+"oshu.iwate.jp\0"
+"pru\0richardli\0"
+"k12.ri.us\0"
+"blogspot.hr\0"
+"blogspot.hu\0blogspot.ie\0"
+"institute\0"
+"clothing\0"
+"berkeley.museum\0cipriani\0"
+"tv.sd\0"
+"rodoy.no\0"
+"homelinux.org\0blogspot.co.uk\0"
+"ssl.origin.cdn77-secure.org\0blogspot.in\0"
+"info\0conf.lv\0"
+"blogspot.ba\0"
+"aibetsu.hokkaido.jp\0blogspot.be\0"
+"adv.br\0sr.gov.pl\0\xe5\xb7\xa5\xe8\xa1\x8c\0"
+"blogspot.bg\0"
+"blogspot.bj\0"
+"pub\0"
+"fujimi.saitama.jp\0from-tn.com\0"
+"friulivenezia-giulia.it\0"
+"i.se\0"
+"blogspot.ca\0"
+"health.museum\0poker\0"
+"o.bg\0steam.museum\0"
+"fuossko.no\0"
+"berlevag.no\0"
+"giske.no\0blogspot.cf\0"
+"tomigusuku.okinawa.jp\0ashikaga.tochigi.jp\0tv.tr\0for-the.biz\0blogspot.ch\0"
+"stavanger.no\0"
+"store.ve\0blogspot.cl\0"
+"abeno.osaka.jp\0town.museum\0"
"mashiko.tochigi.jp\0"
-"kuban.ru\0"
-"kawanehon.shizuoka.jp\0"
-"africa\0"
-"suldal.no\0pp.ru\0pp.se\0cc.pa.us\0"
-"modena.it\0"
-"krym.ua\0"
-"pro.pr\0"
-"goshiki.hyogo.jp\0"
-"sasebo.nagasaki.jp\0"
-"marine.ru\0"
-"nanporo.hokkaido.jp\0"
-"sa.gov.au\0frogn.no\0is-a-cpa.com\0"
-"vaksdal.no\0"
-"tomiya.miyagi.jp\0"
-"orskog.no\0"
-"\xe5\x9f\xbc\xe7\x8e\x89.jp\0"
-"missile.museum\0theater.museum\0"
-"nanto.toyama.jp\0jeonbuk.kr\0"
-"unj\xc3\xa1rga.no\0"
-"crotone.it\0"
-"2000.hu\0\xe7\x8f\xa0\xe5\xae\x9d\0"
-"pp.ua\0"
-"broker\0"
-"kui.hiroshima.jp\0"
-"aerobatic.aero\0x.se\0lugansk.ua\0"
-"perso.sn\0"
-"palace.museum\0hob\xc3\xb8l.no\0plo.ps\0"
-"agriculture.museum\0"
-"nozawaonsen.nagano.jp\0mitsuke.niigata.jp\0parliament.nz\0"
-"hattfjelldal.no\0"
-"jeonnam.kr\0mielec.pl\0"
-"wallonie.museum\0"
-"shimabara.nagasaki.jp\0"
-"higashimurayama.tokyo.jp\0"
-"k12.pr.us\0works\0"
-"sado.niigata.jp\0world\0"
-"eid.no\0"
-"nishiwaki.hyogo.jp\0minamisanriku.miyagi.jp\0perso.tn\0"
-"hanamigawa.chiba.jp\0"
-"mikawa.yamagata.jp\0"
-"odesa.ua\0"
-"obuse.nagano.jp\0"
-"from-md.com\0"
-"en.it\0koga.ibaraki.jp\0"
-"lincoln.museum\0aure.no\0gildeskal.no\0belgorod.ru\0"
-"pro.tt\0"
-"sibenik.museum\0"
-"re.it\0"
-"storage\0"
-"kinokawa.wakayama.jp\0"
-"sci.eg\0"
-"manchester.museum\0"
-"rs.ba\0"
-"4.bg\0"
-"k12.tr\0"
-"minamioguni.kumamoto.jp\0"
-"pro.vn\0chat\0dyndns.tv\0"
-"dp.ua\0"
-"nom.ad\0"
-"nom.ag\0fed.us\0"
-"kanna.gunma.jp\0inabe.mie.jp\0izumi.osaka.jp\0re.kr\0"
-"dielddanuorri.no\0"
-"le.it\0"
-"firm.ht\0"
-"modalen.no\0"
-"hitachiomiya.ibaraki.jp\0taishi.osaka.jp\0"
-"kin.okinawa.jp\0"
-"windows\0"
-"sc.cn\0"
-"k12.vi\0"
-"qld.gov.au\0lib.al.us\0"
-"firm.in\0yashiro.hyogo.jp\0"
-"manno.kagawa.jp\0"
-"\xe9\xa4\x90\xe5\x8e\x85\0"
-"kuroiso.tochigi.jp\0"
-"abogado\0"
-"okinawa\0kicks-ass.org\0"
-"ford\0"
-"bellevue.museum\0"
-"shizuoka.jp\0"
-"misaki.osaka.jp\0"
-"fe.it\0karuizawa.nagano.jp\0"
-"wa.edu.au\0nom.co\0dyndns.ws\0"
-"miyako.fukuoka.jp\0earth\0"
-"film.hu\0"
-"takahashi.okayama.jp\0"
-"suita.osaka.jp\0"
-"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0toyota.yamaguchi.jp\0"
-"firm.co\0"
-"xz.cn\0sakae.nagano.jp\0"
-"fareast.ru\0is-a-soxfan.org\0"
-"la-spezia.it\0tempio-olbia.it\0"
+"tv.tz\0is-a-geek.com\0"
+"pa.it\0progressive\0"
+"orkdal.no\0"
+"torino.museum\0"
+"notaires.fr\0corporation.museum\0otago.museum\0blogspot.de\0"
+"chase\0blogspot.cv\0"
+"blogspot.cz\0"
+"blogspot.dk\0"
+"parliament.cy\0bridgestone\0"
+"pwc\0dyndns-at-home.com\0"
+"essex.museum\0"
+"inzai.chiba.jp\0oita.oita.jp\0"
+"ringsaker.no\0"
+"genova.it\0"
"radoy.no\0"
-"shimofusa.chiba.jp\0"
-"issmarterthanyou.com\0"
-"okuma.fukushima.jp\0"
-"is-an-entertainer.com\0"
-"ustka.pl\0"
-"nexus\0"
-"is-into-anime.com\0"
-"kadogawa.miyazaki.jp\0"
-"gc.ca\0mj\xc3\xb8ndalen.no\0holmestrand.no\0divttasvuotna.no\0"
-"art.br\0puglia.it\0maniwa.okayama.jp\0"
-"workinggroup.aero\0"
-"yoshimi.saitama.jp\0"
-"channel\0"
-"ac.ae\0"
-"nom.es\0"
-"storfjord.no\0"
-"owariasahi.aichi.jp\0hotmail\0"
-"astronomy.museum\0"
-"losangeles.museum\0"
-"trentino-sud-tirol.it\0"
-"ac.at\0"
-"ac.be\0crafts.museum\0"
-"nom.fr\0rishirifuji.hokkaido.jp\0kamikawa.saitama.jp\0"
-"kouhoku.saga.jp\0akiruno.tokyo.jp\0"
-"art.do\0pubol.museum\0"
-"not.br\0vallee-aoste.it\0"
-"hanggliding.aero\0"
-"ravenna.it\0"
-"katsuyama.fukui.jp\0kitahata.saga.jp\0"
-"builders\0"
-"art.dz\0"
-"ac.ci\0"
-"choyo.kumamoto.jp\0"
-"ac.cn\0kawajima.saitama.jp\0"
-"shimoichi.nara.jp\0global.ssl.fastly.net\0"
-"rl.no\0"
-"ac.cr\0za.bz\0"
-"tobe.ehime.jp\0"
-"scor\0"
-"leasing.aero\0presse.km\0"
-"scot\0"
-"makurazaki.kagoshima.jp\0tome.miyagi.jp\0"
-"andriatranibarletta.it\0"
-"takarazuka.hyogo.jp\0"
-"air.museum\0"
-"kanra.gunma.jp\0"
-"sumoto.kumamoto.jp\0"
-"ambulance.museum\0"
-"motorcycle.museum\0isteingeek.de\0"
-"sc.kr\0"
-"journal.aero\0"
-"wiki.br\0mc.it\0kusu.oita.jp\0"
-"cloudcontrolapp.com\0"
-"inami.toyama.jp\0"
-"presse.ml\0"
-"broke-it.net\0"
-"assn.lk\0montreal.museum\0"
-"egyptian.museum\0"
-"legal\0"
-"nom.km\0its.me\0"
-"art.ht\0"
-"kotoura.tottori.jp\0"
-"lutsk.ua\0"
-"chino.nagano.jp\0"
-"mitou.yamaguchi.jp\0"
-"ujitawara.kyoto.jp\0yomitan.okinawa.jp\0"
-"rieti.it\0sera.hiroshima.jp\0joetsu.niigata.jp\0"
-"unjarga.no\0"
-"ac.gn\0watch\0"
-"nishihara.okinawa.jp\0*.platform.sh\0"
-"beauxarts.museum\0"
-"kviteseid.no\0rissa.no\0"
-"toei.aichi.jp\0"
-"nom.mg\0"
-"piedmont.it\0"
-"kongsberg.no\0"
-"kunstunddesign.museum\0flakstad.no\0rennebu.no\0"
-"campobasso.it\0nowaruda.pl\0gdansk.pl\0"
-"lib.hi.us\0"
-"events\0"
-"ac.id\0"
-"touch.museum\0narviika.no\0"
-"kamitsue.oita.jp\0"
-"gon.pk\0"
-"ac.im\0"
-"ac.in\0"
-"glass\0"
-"ac.ir\0"
-"firm.ve\0"
-"murakami.niigata.jp\0"
-"furano.hokkaido.jp\0"
-"melhus.no\0"
-"ha.cn\0andria-trani-barletta.it\0computer\0"
-"gives\0"
-"saku.nagano.jp\0"
-"sx.cn\0ac.jp\0"
-"coloradoplateau.museum\0livinghistory.museum\0is-a-candidate.org\0"
-"flog.br\0"
-"rsvp\0"
-"nom.pa\0"
-"nom.pe\0"
-"sweden.museum\0namsos.no\0"
-"tanabe.wakayama.jp\0"
-"beiarn.no\0"
-"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0handa.aichi.jp\0edogawa.tokyo.jp\0nom.pl\0"
-"snoasa.no\0"
-"ac.kr\0abb\0"
-"tokigawa.saitama.jp\0"
-"surgery\0"
-"nakanojo.gunma.jp\0takino.hyogo.jp\0"
-"construction\0"
-"tinn.no\0"
-"ta.it\0\xe6\x97\xb6\xe5\xb0\x9a\0"
-"kitadaito.okinawa.jp\0"
-"ac.ma\0"
-"vlog.br\0"
-"kirkenes.no\0"
-"urbino-pesaro.it\0town\0"
-"ac.me\0solutions\0"
-"gouv.fr\0novara.it\0"
-"gs.jan-mayen.no\0"
-"mat.br\0"
-"nom.re\0"
-"filatelia.museum\0"
-"aco\0"
-"pistoia.it\0"
-"versailles.museum\0"
-"community.museum\0rennes\xc3\xb8y.no\0nom.ro\0"
-"agr.br\0chikugo.fukuoka.jp\0"
-"ac.mu\0stavern.no\0homeunix.org\0"
-"ac.mw\0"
-"mutsuzawa.chiba.jp\0"
-"virtual.museum\0"
-"intl.tn\0art.pl\0"
-"dnepropetrovsk.ua\0"
-"ppg.br\0"
-"firm.ro\0"
-"tas.au\0kautokeino.no\0"
-"na.it\0"
-"kvanangen.no\0pub.sa\0sc.ug\0"
-"ads\0"
-"gx.cn\0sc.tz\0"
-"gouv.ht\0"
-"somna.no\0fl.us\0toys\0"
-"kutchan.hokkaido.jp\0ac.nz\0"
-"iveland.no\0nordkapp.no\0"
-"rovigo.it\0"
-"\xc3\xa5""fjord.no\0sc.us\0"
-"veneto.it\0report\0"
-"nalchik.ru\0lib.ok.us\0"
-"iwaki.fukushima.jp\0yatsuka.shimane.jp\0"
-"lindas.no\0tvedestrand.no\0ac.pa\0nom.tm\0k12.sc.us\0omega\0"
-"mjondalen.no\0"
-"obihiro.hokkaido.jp\0cri.nz\0"
-"matsumoto.kagoshima.jp\0"
-"state.museum\0fl\xc3\xa5.no\0rauma.no\0vennesla.no\0tires\0"
-"afl\0"
-"gouv.bj\0"
-"ac.pr\0"
-"usuki.oita.jp\0"
-"oregon.museum\0"
-"matsusaka.mie.jp\0tochio.niigata.jp\0lebork.pl\0"
-"stat.no\0"
-"balsfjord.no\0karlsoy.no\0"
-"mugi.tokushima.jp\0art.sn\0"
-"freight.aero\0gouv.ci\0"
-"coach\0"
-"marche.it\0nishiawakura.okayama.jp\0"
-"kids.us\0"
-"shimonita.gunma.jp\0kitagawa.miyazaki.jp\0"
-"tv.bb\0firm.nf\0"
+"supplies\0"
+"hamburg\0"
+"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0"
+"holtalen.no\0"
+"kimobetsu.hokkaido.jp\0"
+"virtuel.museum\0"
+"skiptvet.no\0"
+"kinko.kagoshima.jp\0sakhalin.ru\0"
+"komagane.nagano.jp\0"
+"finnoy.no\0homesecuritypc.com\0"
+"k12.az.us\0point2this.com\0"
+"florida.museum\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0"
+"sex.pl\0"
+"cloudns.club\0"
+"blogspot.co.ke\0"
+"uk.net\0"
+"minamiawaji.hyogo.jp\0"
+"habmer.no\0"
+"\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0"
+"pe.ca\0oregon.museum\0mutual\0flynnhub.com\0"
+"ug.gov.pl\0store.ro\0"
"udine.it\0"
-"nagasaki.jp\0"
-"dni.us\0"
-"luroy.no\0"
-"tv.bo\0education.museum\0cooking\0"
-"kagawa.jp\0"
-"ac.rs\0"
-"tv.br\0aq.it\0ba.it\0"
-"usgarden.museum\0ac.ru\0ac.se\0"
-"ac.rw\0aig\0"
-"panama.museum\0bahcavuotna.no\0stord.no\0"
-"shibuya.tokyo.jp\0"
+"*.nom.br\0"
+"lib.tn.us\0"
+"iz.hr\0k.se\0"
+"q.bg\0"
+"luzern.museum\0mobile\0"
+"jl.cn\0"
+"clinton.museum\0"
+"cc.ma.us\0blogspot.ae\0"
+"kanie.aichi.jp\0"
+"building.museum\0"
+"gs.rl.no\0store.st\0"
+"pc.it\0pub.sa\0cool\0blogspot.al\0"
+"podzone.net\0blogspot.am\0myds.me\0"
+"coop\0ogawa.saitama.jp\0gulen.no\0"
+"matsumae.hokkaido.jp\0public.museum\0"
+"sweden.museum\0"
+"mobily\0"
+"tx.us\0"
+"lyngen.no\0"
+"shibetsu.hokkaido.jp\0"
+"slg.br\0"
+"trentinosud-tirol.it\0"
+"halden.no\0"
+"shiiba.miyazaki.jp\0"
+"kartuzy.pl\0vision\0dsmynas.com\0"
+"holiday\0"
+"sanda.hyogo.jp\0"
+"kaita.hiroshima.jp\0"
+"photography.museum\0"
+"blogspot.co.nz\0"
+"askoy.no\0"
+"iglesiascarbonia.it\0bjark\xc3\xb8y.no\0"
+"sera.hiroshima.jp\0hidaka.hokkaido.jp\0"
+"uozu.toyama.jp\0cpa.pro\0"
+"omasvuotna.no\0"
+"mragowo.pl\0consulting\0"
+"\xe5\x85\xab\xe5\x8d\xa6\0"
"rehab\0"
-"consultant.aero\0harstad.no\0"
-"spjelkavik.no\0moareke.no\0"
-"ono.fukui.jp\0"
-"ac.th\0"
-"imageandsound.museum\0"
-"ac.sz\0ac.tj\0"
-"malbork.pl\0"
-"usa.oita.jp\0"
-"bahn.museum\0educational.museum\0"
-"stjordalshalsen.no\0"
-"kozagawa.wakayama.jp\0"
-"uozu.toyama.jp\0"
-"ac.ug\0s3-us-west-1.amazonaws.com\0"
-"education\0"
-"ac.tz\0"
-"pharmaciens.km\0ac.uk\0"
-"hachinohe.aomori.jp\0"
-"of.by\0ha.no\0"
-"qsl.br\0to.it\0okayama.jp\0higashi.okinawa.jp\0"
-"online\0"
-"maebashi.gunma.jp\0"
-"valleaosta.it\0kushimoto.wakayama.jp\0"
-"pomorze.pl\0"
-"salat.no\0"
-"surrey.museum\0"
-"ichinoseki.iwate.jp\0seat\0"
-"tokai.aichi.jp\0abiko.chiba.jp\0numata.gunma.jp\0for-better.biz\0"
-"tas.edu.au\0nationalheritage.museum\0"
-"ac.vn\0sopot.pl\0"
-"tambov.ru\0"
-"redstone\0"
-"mx.na\0est-le-patron.com\0"
-"amli.no\0"
-"higashiosaka.osaka.jp\0auto.pl\0"
-"omitama.ibaraki.jp\0"
-"dynalias.com\0"
-"no.it\0"
-"bir.ru\0"
-"haibara.shizuoka.jp\0"
-"suwa.nagano.jp\0"
-"recreation.aero\0jewishart.museum\0rade.no\0"
-"shingu.fukuoka.jp\0warmia.pl\0"
-"flesberg.no\0hemne.no\0"
-"minamidaito.okinawa.jp\0"
-"station.museum\0bo.telemark.no\0"
-"kitanakagusuku.okinawa.jp\0"
-"nesodden.no\0vologda.ru\0casino\0"
-"itoigawa.niigata.jp\0"
-"misawa.aomori.jp\0tsubata.ishikawa.jp\0maibara.shiga.jp\0"
-"exchange.aero\0"
-"tv.im\0seek\0"
-"toon.ehime.jp\0"
-"kyiv.ua\0"
-"tirol\0"
-"tv.it\0"
-"phoenix.museum\0"
-"stjordal.no\0"
-"yonabaru.okinawa.jp\0"
-"akabira.hokkaido.jp\0aguni.okinawa.jp\0"
-"yugawara.kanagawa.jp\0"
-"kiyose.tokyo.jp\0"
-"powiat.pl\0lomza.pl\0"
-"lans.museum\0mex.com\0"
-"gifu.gifu.jp\0"
-"sel.no\0lib.ut.us\0"
-"e.bg\0film.museum\0"
-"fortmissoula.museum\0"
-"itano.tokushima.jp\0yamanobe.yamagata.jp\0"
-"honjo.akita.jp\0ginan.gifu.jp\0"
+"air.museum\0hol.no\0"
+"privatizehealthinsurance.net\0"
+"shop.ht\0"
+"shop.hu\0"
+"\xe6\x94\xbf\xe5\x8a\xa1\0"
+"nsupdate.info\0"
+"africa\0"
+"sklep.pl\0"
+"zaporizhzhia.ua\0"
+"montblanc\0"
+"adv.mz\0"
+"koshigaya.saitama.jp\0m\xc4\x81ori.nz\0odessa.ua\0"
+"brunel.museum\0s3.amazonaws.com\0"
+"lillesand.no\0jaworzno.pl\0"
+"m.se\0panasonic\0"
+"oishida.yamagata.jp\0lib.in.us\0"
+"s.bg\0sciences.museum\0"
+"is-a-geek.org\0"
+"force.museum\0spacekit.io\0"
+"frei.no\0dnepropetrovsk.ua\0police.uk\0"
+"nisshin.aichi.jp\0"
+"katsuura.chiba.jp\0"
+"jgora.pl\0"
+"in.net\0"
+"pe.it\0taku.saga.jp\0"
+"isleofman.museum\0"
+"lixil\0"
+"hyogo.jp\0"
+"pa.us\0"
+"campidanomedio.it\0"
+"pc.pl\0"
+"yakumo.shimane.jp\0"
+"flickr\0"
+"ibara.okayama.jp\0"
+"lexus\0"
+"taito.tokyo.jp\0"
+"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0hitachi\0"
+"cranbrook.museum\0khakassia.ru\0"
+"setagaya.tokyo.jp\0"
+"pe.kr\0voss.no\0"
+"res.in\0williamsburg.museum\0cuisinella\0"
+"toshima.tokyo.jp\0"
+"ancona.it\0koga.ibaraki.jp\0gold\0"
+"barclaycard\0directory\0"
+"golf\0"
+"omotego.fukushima.jp\0"
+"gifts\0"
+"maori.nz\0"
+"tarumizu.kagoshima.jp\0"
+"khakassia.su\0"
+"valdaosta.it\0"
+"melhus.no\0"
+"analytics\0"
+"stream\0"
+"wazuka.kyoto.jp\0"
+"warabi.saitama.jp\0"
+"red\0"
+"trani-barletta-andria.it\0nsn.us\0"
+"hokuryu.hokkaido.jp\0"
+"iyo.ehime.jp\0"
+"freight.aero\0agrigento.it\0"
+"futsu.nagasaki.jp\0"
+"ericsson\0mitsubishi\0ren\0"
+"iizuka.fukuoka.jp\0"
+"karlsoy.no\0"
+"vladikavkaz.ru\0"
+"sandnes.no\0qvc\0"
+"o.se\0webhop.biz\0"
+"ashiya.hyogo.jp\0h\xc3\xa5.no\0"
+"familyds.com\0"
+"u.bg\0lesja.no\0"
+"basel.museum\0pagefrontapp.com\0"
+"jewishart.museum\0"
+"vic.au\0"
+"gda.pl\0"
+"towada.aomori.jp\0cc.me.us\0"
+"vladikavkaz.su\0"
+"cc.as.us\0goog\0"
+"online.museum\0"
+"doomdns.org\0"
+"lamborghini\0is-an-actress.com\0"
+"pg.it\0bialystok.pl\0"
+"enna.it\0kunitomi.miyazaki.jp\0"
+"hakodate.hokkaido.jp\0*.kunden.ortsinfo.at\0"
+"es.leg.br\0"
+"friuli-veneziagiulia.it\0mimata.miyazaki.jp\0blogspot.co.za\0"
+"health-carereform.com\0"
+"reggio-calabria.it\0museum\0\xe5\x85\xac\xe5\x8f\xb8\0"
+"dielddanuorri.no\0"
+"perugia.it\0"
+"takikawa.hokkaido.jp\0"
+"laquila.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0"
+"fukuyama.hiroshima.jp\0yokoze.saitama.jp\0pt.eu.org\0"
+"farmstead.museum\0"
+"ril\0"
+"oe.yamagata.jp\0"
+"store.bb\0rio\0is-a-liberal.com\0"
+"rip\0"
+"arakawa.tokyo.jp\0"
+"medio-campidano.it\0baby\0"
+"przeworsk.pl\0"
+"citadel\0"
+"kuriyama.hokkaido.jp\0doshi.yamanashi.jp\0"
+"entomology.museum\0"
+"merckmsd\0"
+"dyroy.no\0notteroy.no\0"
+"reggiocalabria.it\0mj\xc3\xb8ndalen.no\0"
+"hamura.tokyo.jp\0"
+"madrid\0thruhere.net\0"
+"saka.hiroshima.jp\0"
+"gunma.jp\0mito.ibaraki.jp\0mobi\0annefrank.museum\0nebraska.museum\0"
+"from-nm.com\0"
+"kozaki.chiba.jp\0aknoluokta.no\0\xe6\xb8\xb8\xe6\x88\x8f\0is-an-accountant.com\0is-very-good.org\0"
+"kosei.shiga.jp\0"
+"zippo\0"
+"urawa.saitama.jp\0"
+"togura.nagano.jp\0ama.shimane.jp\0"
+"avianca\0"
+"nayoro.hokkaido.jp\0vistaprint\0"
+"w.bg\0"
+"sennan.osaka.jp\0appspot.com\0"
+"tmall\0"
+"garden\0store.dk\0"
+"cc.wy.us\0"
+"federation.aero\0"
+"fie.ee\0takanabe.miyazaki.jp\0hinohara.tokyo.jp\0"
+"ishikawa.okinawa.jp\0"
+"uhren.museum\0undersea.museum\0moda\0"
+"halloffame.museum\0wskr.gov.pl\0cisco\0"
+"brescia.it\0vb.it\0"
+"pi.it\0cyon.link\0"
+"sugito.saitama.jp\0sncf\0dyndns-office.com\0"
+"szex.hu\0american.museum\0"
+"katsuragi.nara.jp\0"
+"sowa.ibaraki.jp\0kiyokawa.kanagawa.jp\0"
+"delmenhorst.museum\0"
+"mizuho.tokyo.jp\0trondheim.no\0"
+"flight.aero\0"
+"exchange.aero\0wa.edu.au\0furniture.museum\0dynalias.org\0"
+"hitra.no\0"
+"toscana.it\0"
+"wakayama.jp\0"
+"muni.il\0savona.it\0ikano\0"
+"miyazaki.miyazaki.jp\0"
+"vegarshei.no\0"
+"oy.lc\0"
+"emiliaromagna.it\0dy.fi\0"
+"hyatt\0"
+"\xe5\x85\xb5\xe5\xba\xab.jp\0"
+"from-hi.com\0"
+"carbonia-iglesias.it\0"
+"tkmaxx\0"
+"agdenes.no\0"
+"ebino.miyazaki.jp\0k12.md.us\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0nid.io\0"
+"kasahara.gifu.jp\0k12.ga.us\0"
+"k12.ar.us\0"
+"dolls.museum\0"
+"sandefjord.no\0"
"r\xc3\xa1hkker\xc3\xa1vju.no\0"
-"bar\0"
-"presse.ci\0bbc\0"
-"bo.it\0"
-"minakami.gunma.jp\0"
-"hapmir.no\0cc.mi.us\0is-a-teacher.com\0"
-"kasugai.aichi.jp\0"
-"jewelry.museum\0gulen.no\0dvag\0"
-"engerdal.no\0"
-"achi.nagano.jp\0serveftp.net\0"
-"khv.ru\0"
-"morotsuka.miyazaki.jp\0tarama.okinawa.jp\0ruhr\0"
-"laakesvuemie.no\0is-a-caterer.com\0"
-"onga.fukuoka.jp\0"
-"khmelnytskyi.ua\0"
-"messina.it\0bcn\0"
+"sherbrooke.museum\0rendalen.no\0"
+"fl\xc3\xa5.no\0"
"fhs.no\0"
-"berlin.museum\0alipay\0infiniti\0"
-"adult.ht\0"
-"tv.na\0name\0"
-"vao.it\0zachpomor.pl\0"
-"\xc3\xa5rdal.no\0herokuapp.com\0"
-"karatsu.saga.jp\0gov.nc.tr\0"
-"sydney\0uy.com\0"
-"imperia.it\0turen.tn\0"
-"time.museum\0"
-"\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0"
-"lighting\0"
-"matsubara.osaka.jp\0rnu.tn\0"
-"seaport.museum\0"
-"assassination.museum\0"
-"ikeda.fukui.jp\0iinet\0"
-"doosan\0"
-"it.ao\0idv.hk\0e12.ve\0"
-"shari.hokkaido.jp\0nahari.kochi.jp\0"
-"trader.aero\0nh.us\0"
-"takatori.nara.jp\0"
-"columbia.museum\0"
-"city\0is-a-player.com\0"
-"presse.fr\0shimoji.okinawa.jp\0numazu.shizuoka.jp\0upow.gov.pl\0"
-"arna.no\0"
-"muroto.kochi.jp\0"
-"l.bg\0"
-"kamogawa.chiba.jp\0"
-"mosvik.no\0"
-"frankfurt.museum\0mo-i-rana.no\0"
-"nichinan.miyazaki.jp\0"
-"kitagawa.kochi.jp\0"
-"kr\xc3\xb8""dsherad.no\0skierv\xc3\xa1.no\0us.com\0from-oh.com\0"
-"arao.kumamoto.jp\0"
-"ryazan.ru\0"
-"hurum.no\0"
-"kitashiobara.fukushima.jp\0ichinohe.iwate.jp\0"
-"louvre.museum\0moma.museum\0of.no\0"
-"\xe4\xb8\x89\xe9\x87\x8d.jp\0shingu.wakayama.jp\0"
-"cupcake.is\0"
-"limanowa.pl\0zuerich\0"
-"decorativearts.museum\0"
-"gouv.rw\0lib.ct.us\0"
-"andria-barletta-trani.it\0market\0"
-"nomi.ishikawa.jp\0nakano.nagano.jp\0"
-"irish\0"
-"logistics.aero\0molde.no\0axa\0industries\0"
-"nagano.jp\0gouv.sn\0"
-"technology.museum\0"
-"press.museum\0s3-fips-us-gov-west-1.amazonaws.com\0"
-"munakata.fukuoka.jp\0"
-"rodoy.no\0"
-"bolt.hu\0"
-"flor\xc3\xb8.no\0khabarovsk.ru\0"
-"yachiyo.chiba.jp\0miyama.fukuoka.jp\0"
-"sanuki.kagawa.jp\0"
-"im.it\0"
-"bid\0"
-"kitaura.miyazaki.jp\0tv.sd\0"
-"shizukuishi.iwate.jp\0"
-"corsica\0"
-"pavia.it\0usui.fukuoka.jp\0"
-"chesapeakebay.museum\0bio\0"
-"atami.shizuoka.jp\0"
-"nanae.hokkaido.jp\0"
-"saitama.jp\0"
-"ggf.br\0"
-"s.bg\0"
-"shobara.hiroshima.jp\0himi.toyama.jp\0"
-"biz\0takko.aomori.jp\0"
-"guovdageaidnu.no\0"
-"shishikui.tokushima.jp\0"
-"massa-carrara.it\0shimokawa.hokkaido.jp\0"
-"erotika.hu\0oppeg\xc3\xa5rd.no\0"
-"sayo.hyogo.jp\0"
-"bentley\0"
-"eidfjord.no\0hamaroy.no\0"
-"bv.nl\0tv.tr\0"
-"smola.no\0"
-"ohira.tochigi.jp\0"
-"botanicgarden.museum\0"
-"ot.it\0pd.it\0"
-"halsa.no\0troms\xc3\xb8.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0"
-"fr\xc3\xa6na.no\0"
-"niigata.jp\0takayama.gifu.jp\0koshimizu.hokkaido.jp\0tv.tz\0"
+"fukaya.saitama.jp\0"
+"kwpsp.gov.pl\0kerryhotels\0"
+"hasuda.saitama.jp\0vanguard\0"
+"umaji.kochi.jp\0royken.no\0"
+"\xe5\x80\x8b\xe4\xba\xba.hk\0clinic\0"
+"ivanovo.ru\0"
+"is-a-nascarfan.com\0"
+"s.se\0lib.pa.us\0"
+"y.bg\0sap\0"
+"niyodogawa.kochi.jp\0"
+"intl.tn\0"
+"surgeonshall.museum\0sas\0"
+"funabashi.chiba.jp\0karumai.iwate.jp\0from-wy.com\0"
+"cc.mi.us\0"
+"sbi\0voting\0"
+"ogori.fukuoka.jp\0"
+"ivanovo.su\0"
+"turin.it\0"
+"ishinomaki.miyagi.jp\0"
+"sca\0"
+"nishi.osaka.jp\0ptz.ru\0scb\0"
+"aikawa.kanagawa.jp\0sbs\0"
+"ninomiya.kanagawa.jp\0"
+"daplie.me\0"
+"hammarfeasta.no\0"
+"trentino-a-adige.it\0"
+"al.eu.org\0"
+"bardu.no\0"
+"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0"
+"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0"
+"ppg.br\0education.museum\0"
+"openair.museum\0"
+"higashichichibu.saitama.jp\0"
+"from-dc.com\0"
+"ashiya.fukuoka.jp\0"
+"brussels.museum\0s\xc3\xa1lat.no\0"
+"omsk.ru\0"
+"genkai.saga.jp\0dnsalias.net\0"
+"band\0"
+"mypets.ws\0shop.ro\0"
+"sucks\0"
+"sukagawa.fukushima.jp\0bamble.no\0bank\0"
+"kayabe.hokkaido.jp\0yura.wakayama.jp\0"
+"daigo.ibaraki.jp\0"
+"run\0"
+"esp.br\0"
+"eng.br\0mediocampidano.it\0is-a-photographer.com\0"
+"tarnobrzeg.pl\0"
+"cancerresearch\0ses\0"
+"southwest.museum\0accountant\0"
+"tokushima.tokushima.jp\0sande.m\xc3\xb8re-og-romsdal.no\0"
+"sew\0"
+"isshiki.aichi.jp\0sex\0"
+"andria-trani-barletta.it\0andriatranibarletta.it\0"
+"shop.pl\0"
+"seranishi.hiroshima.jp\0"
+"midori.chiba.jp\0"
+"sasebo.nagasaki.jp\0sfr\0"
+"kanonji.kagawa.jp\0"
+"yamashina.kyoto.jp\0rwe\0"
+"lib.ut.us\0"
+"u.se\0"
+"est-a-la-masion.com\0"
+"ibigawa.gifu.jp\0"
+"kameoka.kyoto.jp\0toba.mie.jp\0"
+"iveland.no\0arab\0"
+"sciencesnaturelles.museum\0"
+"cam.it\0"
+"cc.sd.us\0"
+"koge.tottori.jp\0cn.com\0"
+"wake.okayama.jp\0bjugn.no\0podzone.org\0"
+"gs.sf.no\0"
+"oppdal.no\0"
+"ito.shizuoka.jp\0"
+"psse.gov.pl\0"
+"sayo.hyogo.jp\0sydney.museum\0"
+"niigata.jp\0"
+"hashimoto.wakayama.jp\0"
+"hagi.yamaguchi.jp\0gb.net\0"
+"ichikawamisato.yamanashi.jp\0"
+"kamikoani.akita.jp\0legnica.pl\0"
+"msk.ru\0fage\0"
+"ohda.shimane.jp\0"
+"saiki.oita.jp\0"
+"yokawa.hyogo.jp\0"
+"lazio.it\0matsuno.ehime.jp\0shimodate.ibaraki.jp\0"
+"isen.kagoshima.jp\0"
+"onojo.fukuoka.jp\0"
+"siljan.no\0"
+"properties\0"
+"msk.su\0"
+"lubin.pl\0"
+"sandvik\0"
+"tottori.tottori.jp\0"
+"toyama.toyama.jp\0"
+"cinema.museum\0"
+"ski\0"
+"british.museum\0"
+"daisen.akita.jp\0"
+"fail\0"
+"ninohe.iwate.jp\0"
+"otama.fukushima.jp\0"
+"nakagawa.nagano.jp\0at-band-camp.net\0"
+"louvre.museum\0"
+"tsu.mie.jp\0"
+"sky\0"
+"kawanishi.hyogo.jp\0"
+"is-a-geek.net\0"
+"tas.edu.au\0"
+"fujixerox\0"
+"storfjord.no\0chukotka.ru\0"
+"ogawara.miyagi.jp\0lucerne.museum\0vf.no\0w.se\0"
+"saintlouis.museum\0"
+"forli-cesena.it\0tomakomai.hokkaido.jp\0swinoujscie.pl\0"
+"gok.pk\0"
+"maintenance.aero\0jx.cn\0"
+"zlg.br\0gub.uy\0"
+"sue.fukuoka.jp\0moto\0"
+"toyota.aichi.jp\0"
+"tamamura.gunma.jp\0evenes.no\0"
+"misugi.mie.jp\0watari.miyagi.jp\0artanddesign.museum\0donna.no\0"
+"stathelle.no\0knowsitall.info\0"
+"yoichi.hokkaido.jp\0hamamatsu.shizuoka.jp\0"
+"fukuchi.fukuoka.jp\0"
+"po.it\0"
+"airline.aero\0"
+"ut.us\0"
+"tokorozawa.saitama.jp\0"
+"novara.it\0"
+"s3-eu-west-1.amazonaws.com\0"
+"office\0"
+"kumano.mie.jp\0cambridge.museum\0"
+"myoko.niigata.jp\0"
+"otari.nagano.jp\0starnberg.museum\0"
+"bauhaus\0movie\0"
+"oppegard.no\0"
+"data\0"
+"iwate.jp\0"
+"kpmg\0soy\0"
+"stalowa-wola.pl\0"
+"hakata.fukuoka.jp\0miura.kanagawa.jp\0date\0"
+"stranda.no\0from-mo.com\0"
+"koori.fukushima.jp\0okutama.tokyo.jp\0"
+"matsumoto.nagano.jp\0interactive.museum\0k12.nj.us\0"
+"research.museum\0tab\0"
+"starachowice.pl\0"
+"umig.gov.pl\0fans\0reise\0"
+"safety.aero\0"
+"yusuhara.kochi.jp\0kudamatsu.yamaguchi.jp\0intelligence.museum\0"
"\xc3\xa5l.no\0"
-"solar\0"
-"belluno.it\0"
-"interactive.museum\0lib.co.us\0us-west-2.compute.amazonaws.com\0"
-"shikatsu.aichi.jp\0"
-"nobeoka.miyazaki.jp\0"
-"torsken.no\0"
-"\xe9\x95\xb7\xe9\x87\x8e.jp\0iki.nagasaki.jp\0"
-"express.aero\0"
-"nysa.pl\0"
-"miyawaka.fukuoka.jp\0gbiz\0"
-"catanzaro.it\0"
-"kiyosu.aichi.jp\0ikaruga.nara.jp\0"
-,
-
-"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0"
-"kitahiroshima.hokkaido.jp\0"
-"\xe9\x95\xb7\xe5\xb4\x8e.jp\0"
-"student.aero\0kopervik.no\0hof.no\0"
-"tula.ru\0"
-"izumizaki.fukushima.jp\0"
-"g\xc3\xa1ivuotna.no\0cc.tn.us\0"
-"fyresdal.no\0bms\0media\0ryukyu\0"
-"miyakonojo.miyazaki.jp\0"
-"mosj\xc3\xb8""en.no\0nv.us\0bmw\0navy\0"
-"iwakura.aichi.jp\0"
-"\xe4\xbd\x9b\xe5\xb1\xb1\0"
-"bnl\0"
-"lib.wa.us\0"
-"sabae.fukui.jp\0motosu.gifu.jp\0"
-"z.bg\0"
-"miharu.fukushima.jp\0"
-"higashiyama.kyoto.jp\0"
-"skierva.no\0"
-"laspezia.it\0"
-"if.ua\0"
-"himeshima.oita.jp\0"
-"imb.br\0caravan\0"
-"ct.it\0utashinai.hokkaido.jp\0"
-"bom\0"
-"pictet\0"
-"boo\0"
-"biella.it\0"
-"gouv.km\0risor.no\0"
-"bot\0"
-"\xc3\xa5s.no\0gotdns.org\0"
-"oskol.ru\0dyndns-blog.com\0"
-"gokase.miyazaki.jp\0tonaki.okinawa.jp\0"
-"salon\0"
-"averoy.no\0press\0"
-"halloffame.museum\0h\xc3\xa1""bmer.no\0"
-"*.sendai.jp\0"
-"oseto.nagasaki.jp\0"
-"usantiques.museum\0"
-"cab\0"
-"download\0"
-"nord-odal.no\0"
-"unsa.ba\0museet.museum\0galsa.no\0gb.com\0"
-"muko.kyoto.jp\0"
-"zero\0"
-"yasugi.shimane.jp\0cal\0"
-"torino.museum\0"
-"kami.kochi.jp\0gouv.ml\0"
-"idv.tw\0cba\0network\0"
-"yokawa.hyogo.jp\0car\0"
-"cat\0"
-"americana.museum\0e.se\0"
+"balsan.it\0saratov.ru\0"
+"mihama.aichi.jp\0"
+"hair\0"
+"coop.ht\0netflix\0"
+"citic\0"
+"stat.no\0"
+"qc.ca\0broker\0"
+"tax\0"
+"oslo.no\0servepics.com\0"
+"iki.nagasaki.jp\0"
+"chitose.hokkaido.jp\0joburg\0"
+"misato.wakayama.jp\0srl\0"
+"gosen.niigata.jp\0y.se\0"
+"shikaoi.hokkaido.jp\0"
+"kanegasaki.iwate.jp\0sosnowiec.pl\0"
+"ap.gov.pl\0"
+"yorii.saitama.jp\0"
+"sohu\0"
+"srt\0"
+"vald-aosta.it\0tsubame.niigata.jp\0cc.mo.us\0"
+"togliatti.su\0tci\0sells-for-u.com\0"
+"kurume.fukuoka.jp\0"
+"servebeer.com\0"
+"coop.br\0"
+"americanexpress\0"
+"oyodo.nara.jp\0hamar.no\0stc\0"
+"watch-and-clock.museum\0"
+"niihama.ehime.jp\0open\0"
+"tmp.br\0"
+"statoil\0"
+"tdk\0"
+"emilia-romagna.it\0roros.no\0"
+"experts-comptables.fr\0"
+"farm\0"
+"toyota.yamaguchi.jp\0"
+"consulting.aero\0photography\0serveftp.net\0"
+"army\0"
+"m\xc3\xa5lselv.no\0"
+"cheap\0"
+"fundacio.museum\0organic\0ngrok.io\0"
+"stuttgart.museum\0"
+"sassari.it\0"
+"tel\0"
+"tysnes.no\0"
+"itabashi.tokyo.jp\0americanfamily\0"
+"law.za\0"
+"ichikawa.chiba.jp\0"
+"fast\0"
+"hammerfest.no\0"
+"sogne.no\0"
+"bozen.it\0vlaanderen.museum\0"
+"airtraffic.aero\0k12.sc.us\0myactivedirectory.com\0"
+"here-for-more.info\0"
+"arpa\0"
+"\xd5\xb0\xd5\xa1\xd5\xb5\0"
+"messina.it\0airforce\0"
+"ogaki.gifu.jp\0"
+"h\xc3\xa1mm\xc3\xa1rfeasta.no\0"
+"nuoro.it\0detroit.museum\0"
+"western.museum\0"
+"konan.aichi.jp\0"
+"s\xc3\xb8mna.no\0"
+"brindisi.it\0miasa.nagano.jp\0"
+"karasjok.no\0"
+"\xd7\xa7\xd7\x95\xd7\x9d\0"
+"yuu.yamaguchi.jp\0thd\0"
+"song\0"
+"podlasie.pl\0"
+"productions\0"
+"from-tx.com\0"
+"rybnik.pl\0mykolaiv.ua\0"
+"is-with-theband.com\0"
+"kawara.fukuoka.jp\0komoro.nagano.jp\0"
+"karm\xc3\xb8y.no\0"
+"kautokeino.no\0"
+"tr\xc3\xb8gstad.no\0"
+"showa.yamanashi.jp\0sony\0"
+"maebashi.gunma.jp\0onomichi.hiroshima.jp\0"
+"lukow.pl\0"
+"kanazawa.ishikawa.jp\0"
+"vik.no\0flowers\0"
+"services\0"
+"ukiha.fukuoka.jp\0dyndns-blog.com\0"
+"piacenza.it\0"
+"midtre-gauldal.no\0"
+"asda\0"
+"vardo.no\0"
+"kawahara.tottori.jp\0"
+"engine.aero\0deatnu.no\0arte\0"
+"ntr.br\0"
+"\xe6\x85\x88\xe5\x96\x84\0"
+"airbus\0"
+"tjx\0"
+"sellsyourhome.org\0"
+"\xe5\x95\x86\xe5\x9f\x8e\0"
+"avocat.pro\0"
+"caltanissetta.it\0massacarrara.it\0"
+"zapto.org\0"
+"saga.saga.jp\0overhalla.no\0"
+"l\xc3\xb8renskog.no\0"
+"chonan.chiba.jp\0"
+"cartier\0stuff-4-sale.org\0"
+"stavern.no\0"
+"friulive-giulia.it\0bbva\0"
+"misawa.aomori.jp\0"
+"hashima.gifu.jp\0"
+"groundhandling.aero\0from-pr.com\0"
+"fujimino.saitama.jp\0ulm.museum\0"
+"okuma.fukushima.jp\0shizuoka.shizuoka.jp\0vuelos\0"
+"zamami.okinawa.jp\0cloudns.biz\0"
+"bmoattachments.org\0geekgalaxy.com\0"
+"tachiarai.fukuoka.jp\0"
+"haus\0"
+"aquarium.museum\0manchester.museum\0"
+"gitlab.io\0"
+"chiropractic.museum\0olayangroup\0"
+"*.bd\0"
+"izu.shizuoka.jp\0"
+"fujieda.shizuoka.jp\0study\0"
+"labor.museum\0r\xc3\xa5""de.no\0"
+"uz.ua\0"
+"songdalen.no\0"
+"ostrowwlkp.pl\0kh.ua\0emerck\0"
+"cc.ms.us\0cc.nc.us\0"
+"*.bn\0s3-us-west-1.amazonaws.com\0"
+"sakurai.nara.jp\0haugesund.no\0cc.ca.us\0"
+"ltd.co.im\0"
+"pu.it\0architecture.museum\0sondre-land.no\0"
+"sakura.chiba.jp\0gs.hl.no\0est.pr\0"
+"fc.it\0\xc3\xb8ksnes.no\0"
+"ginoza.okinawa.jp\0v\xc3\xa5ler.\xc3\xb8stfold.no\0"
+"takamatsu.kagawa.jp\0"
+"asia\0*.ck\0"
+"hepforge.org\0"
+"\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0"
+"ardal.no\0top\0"
+"bruxelles.museum\0skj\xc3\xa5k.no\0"
+"is-an-engineer.com\0"
+"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0"
+"erni\0"
+"ashoro.hokkaido.jp\0pippu.hokkaido.jp\0dudinka.ru\0"
+"sologne.museum\0"
+"ap-southeast-2.compute.amazonaws.com\0"
+"akagi.shimane.jp\0aquarelle\0"
+"es.kr\0"
+"land\0"
+"yamal.ru\0"
+"4u.com\0"
+"shari.hokkaido.jp\0"
+"kvanangen.no\0"
+"sasaguri.fukuoka.jp\0tgory.pl\0"
+"yoga\0"
+"k12.nh.us\0juniper\0"
+"k12.gu.us\0"
+"*.er\0"
+"embetsu.hokkaido.jp\0"
+"trento.it\0shimogo.fukushima.jp\0castle.museum\0"
+"portlligat.museum\0"
+"tourism.tn\0"
+"eco.br\0"
+"*.fj\0"
+"*.fk\0"
+"kumamoto.jp\0"
+"sumy.ua\0"
+"eid.no\0"
+"modelling.aero\0kui.hiroshima.jp\0ubs\0"
+"mie.jp\0"
+"trv\0"
+"abruzzo.it\0java\0"
+"aomori.aomori.jp\0beta.bounty-full.com\0"
+"homebuilt.aero\0social\0"
+"shirataka.yamagata.jp\0"
+"f\xc3\xb8rde.no\0v\xc3\xa5g\xc3\xa5.no\0qpon\0repair\0"
+"gos.pk\0myasustor.com\0"
+"*.gu\0"
+"cc.ne.us\0"
+"nom.ad\0"
+"umbria.it\0movistar\0"
+"nom.ag\0rahkkeravju.no\0"
+"erotika.hu\0england.museum\0"
+"fe.it\0gs.bu.no\0"
+"serveirc.com\0"
+"\xe6\x84\x9b\xe5\xaa\x9b.jp\0"
+"\xe9\xa6\x99\xe5\xb7\x9d.jp\0"
+"tui\0"
+"bronnoysund.no\0"
+"page\0"
+"judaica.museum\0"
+"nanporo.hokkaido.jp\0"
+"lajolla.museum\0wales.museum\0name\0divttasvuotna.no\0"
+"coop.tt\0hermes\0"
+"ragusa.it\0game-server.cc\0"
+"fuefuki.yamanashi.jp\0"
+"friuli-v-giulia.it\0"
+"walbrzych.pl\0"
+"civilwar.museum\0"
+"*.jm\0"
+"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0uda.nara.jp\0"
+"cesenaforli.it\0"
+"rankoshi.hokkaido.jp\0"
+"shinkamigoto.nagasaki.jp\0tvs\0"
+"ekloges.cy\0kawakami.nara.jp\0"
+"coop.mv\0"
+"nom.co\0iwaki.fukushima.jp\0godo.gifu.jp\0*.ke\0coop.mw\0"
+"video.hu\0minami.kyoto.jp\0locker\0shiksha\0"
+"ichinohe.iwate.jp\0nerima.tokyo.jp\0"
+"*.kh\0"
+"servehalflife.com\0"
+"cityeats\0"
+"kitchen\0"
+"today\0work\0"
+"childrens.museum\0test.tj\0"
+"yamada.toyama.jp\0"
+"sa.gov.au\0ravenna.it\0"
+"kred\0"
+"crimea.ua\0"
+"avocat.fr\0*.kw\0"
+"ena.gifu.jp\0webhop.org\0"
+"bato.tochigi.jp\0kuzbass.ru\0"
+"bostik\0"
+"rauma.no\0"
+"dnsalias.org\0"
+"dclk\0"
+"nishimera.miyazaki.jp\0"
+"nord-odal.no\0tunk.org\0"
+"kisofukushima.nagano.jp\0pl.eu.org\0"
+"nom.es\0"
+"okinawa.jp\0wakayama.wakayama.jp\0"
+"lib.al.us\0restaurant\0"
+"*.mm\0"
+"hachirogata.akita.jp\0"
+"andriabarlettatrani.it\0minamiizu.shizuoka.jp\0"
+"vn.ua\0"
+"spot\0"
+"kamikawa.hokkaido.jp\0"
+"tsk.ru\0"
+"fi.cr\0akkeshi.hokkaido.jp\0"
+"hattfjelldal.no\0"
+"coop.py\0"
+"nom.fr\0"
"vr.it\0"
-"omi.niigata.jp\0"
-"togane.chiba.jp\0toyako.hokkaido.jp\0"
-"samara.ru\0"
-"nakagawa.fukuoka.jp\0urasoe.okinawa.jp\0cbn\0"
-"nordre-land.no\0"
-"aquila.it\0gonohe.aomori.jp\0fukusaki.hyogo.jp\0"
-"yodobashi\0"
-"rimini.it\0sakaiminato.tottori.jp\0"
-"plc.ly\0"
-"erotica.hu\0"
-"eurovision\0"
-"jefferson.museum\0gs.bu.no\0"
-"uki.kumamoto.jp\0augustow.pl\0"
-"gs.ol.no\0sexy\0"
-"v\xc3\xa5ler.\xc3\xb8stfold.no\0"
-"ayase.kanagawa.jp\0"
-"vard\xc3\xb8.no\0"
-"recipes\0"
-"varese.it\0asahi.mie.jp\0"
-"yuzhno-sakhalinsk.ru\0"
-"pr.it\0nango.fukushima.jp\0"
-"oharu.aichi.jp\0wakasa.fukui.jp\0"
-"avianca\0"
-"govt.nz\0"
-"ruovat.no\0"
-"kujukuri.chiba.jp\0"
-"weather\0"
-"ut.us\0"
-"odawara.kanagawa.jp\0"
-"shriram\0"
-"niiza.saitama.jp\0"
-"siljan.no\0"
-"ae.org\0"
-"latina.it\0iwamizawa.hokkaido.jp\0"
-"itami.hyogo.jp\0"
-"stange.no\0ceo\0"
-"gifu.jp\0yamato.fukushima.jp\0toyo.kochi.jp\0"
-"cfa\0"
+"temasek\0"
+"fg.it\0setouchi.okayama.jp\0test.ru\0"
+"uri.arpa\0center\0"
+"esan.hokkaido.jp\0*.np\0"
+"\xe9\xab\x98\xe7\x9f\xa5.jp\0asahi.mie.jp\0hawaii.museum\0"
+"ostrowiec.pl\0"
+"srv.br\0chel.ru\0"
+"tsuru.yamanashi.jp\0"
+"yame.fukuoka.jp\0"
+"chikuma.nagano.jp\0"
+"dreamhosters.com\0"
+"environmentalconservation.museum\0valley.museum\0"
+"\xe5\x85\xac\xe7\x9b\x8a\0"
+"mallorca.museum\0"
+"ichinoseki.iwate.jp\0"
+"prato.it\0"
+"tatsuno.nagano.jp\0"
+"anthro.museum\0*.pg\0"
+"yamamoto.miyagi.jp\0gets-it.net\0"
+"kagamino.okayama.jp\0"
+"coop.km\0"
+"ayagawa.kagawa.jp\0"
+"valle.no\0"
"kamakura.kanagawa.jp\0"
-"cfd\0"
-"otago.museum\0"
-"baghdad.museum\0"
-"buy\0"
+"discover\0"
+"yonago.tottori.jp\0"
+"s\xc3\xb8r-varanger.no\0"
+"honjo.akita.jp\0"
+"inami.wakayama.jp\0k12.mt.us\0raid\0"
+"cbg.ru\0"
+"kitami.hokkaido.jp\0shingu.hyogo.jp\0nishinoomote.kagoshima.jp\0ostre-toten.no\0"
+"gorge.museum\0"
+"kunimi.fukushima.jp\0"
+"kitakata.fukushima.jp\0cyber.museum\0"
+"nakanojo.gunma.jp\0misaki.osaka.jp\0"
+"bmd.br\0tranibarlettaandria.it\0tourism.pl\0"
+"inami.toyama.jp\0"
+"reisen\0"
+"nsw.edu.au\0"
+"torsken.no\0uno\0"
+"farm.museum\0"
+"ab.ca\0boston\0"
+"archaeology.museum\0"
+"nom.km\0museumvereniging.museum\0"
+"bloomberg\0"
+"0.bg\0"
+"belluno.it\0"
+"\xe9\x9d\x92\xe6\xa3\xae.jp\0nishiwaki.hyogo.jp\0lacaixa\0uol\0"
+"nagasu.kumamoto.jp\0"
+"tatamotors\0"
+"vt.it\0gs.st.no\0"
+"navy\0"
+"kr.it\0"
+"fi.it\0"
+"ballangen.no\0"
+"sor-fron.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0"
+"mod.gi\0nom.mg\0j\xc3\xb8rpeland.no\0"
+"intel\0"
+"ups\0"
+"kemerovo.ru\0taobao\0"
+"honeywell\0"
+"varoy.no\0"
+"pars\0land-4-sale.us\0"
+"paris\0"
+"modern.museum\0s\xc3\xb8rreisa.no\0living\0"
+"katsuyama.fukui.jp\0nom.ni\0"
+"military.museum\0"
+"rokunohe.aomori.jp\0"
+"granvin.no\0"
+"ino.kochi.jp\0"
+"kasuya.fukuoka.jp\0"
"vicenza.it\0"
-"ip6.arpa\0"
-"skedsmo.no\0l.se\0"
-"okinawa.jp\0marugame.kagawa.jp\0"
-"\xc3\xb8yer.no\0"
+"furubira.hokkaido.jp\0loabat.no\0"
+"taishi.hyogo.jp\0"
+"travelchannel\0"
+"wlocl.pl\0"
+"mypep.link\0"
+"ohi.fukui.jp\0k12.mn.us\0"
+"otoineppu.hokkaido.jp\0githubusercontent.com\0"
+"tado.mie.jp\0"
+"final\0"
+"nom.pa\0jamal.ru\0"
+"amusement.aero\0ltd.cy\0"
+"nom.pe\0psp.gov.pl\0"
+"kirkenes.no\0"
+"kagamiishi.fukushima.jp\0"
+"val-d-aosta.it\0kannami.shizuoka.jp\0auspost\0"
+"nom.pl\0"
+"fosnes.no\0"
+"opoczno.pl\0"
+"firebaseapp.com\0"
+"cologne\0"
+"akishima.tokyo.jp\0"
+"lib.ee\0"
+"tagami.niigata.jp\0horten.no\0from-nv.com\0"
+"fm.br\0"
+"sabae.fukui.jp\0omi.nagano.jp\0"
+"insure\0"
+"lib.vt.us\0"
+"nagasaki.nagasaki.jp\0"
+"fukui.fukui.jp\0is-a-teacher.com\0"
+"2.bg\0"
+"gallo\0"
+"*.ye\0scrapper-site.net\0github.io\0"
+"guide\0"
+"co.com\0"
+"fujimi.nagano.jp\0nom.re\0"
+"research.aero\0oizumi.gunma.jp\0"
+"vv.it\0muroran.hokkaido.jp\0s\xc3\xb8ndre-land.no\0"
+"ullensaker.no\0"
+"sandnessjoen.no\0nannestad.no\0"
+"equipment\0vet\0"
+"nikko.tochigi.jp\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0"
+"nom.ro\0winners\0"
+"*.kobe.jp\0"
+"talk\0"
+"geelvinck.museum\0"
+"ltd.gi\0"
+"plants.museum\0"
+"omaezaki.shizuoka.jp\0"
+"fujishiro.ibaraki.jp\0"
+"place\0"
+"imizu.toyama.jp\0marketing\0"
+"monza-brianza.it\0*.zw\0"
+"nakai.kanagawa.jp\0ddnsking.com\0"
+"romsa.no\0"
+"ltd.hk\0"
+"bieszczady.pl\0"
+"toyokawa.aichi.jp\0"
"aukra.no\0"
-"luzern.museum\0"
-"mihama.mie.jp\0"
-"fukushima.hokkaido.jp\0kembuchi.hokkaido.jp\0\xe6\x85\x88\xe5\x96\x84\0"
-"gsm.pl\0"
-"savannahga.museum\0"
-"sanjo.niigata.jp\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0"
-"lesja.no\0vik.no\0"
-"minamiizu.shizuoka.jp\0"
-"tran\xc3\xb8y.no\0"
-"lgbt\0"
-"joshkar-ola.ru\0"
-"hemsedal.no\0sarpsborg.no\0"
-"gob.ar\0calabria.it\0kurashiki.okayama.jp\0"
-"irkutsk.ru\0"
-"osaki.miyagi.jp\0ginowan.okinawa.jp\0neustar\0"
-"higashinaruse.akita.jp\0taketa.oita.jp\0nagatoro.saitama.jp\0"
-"ventures\0from-mo.com\0"
-"mishima.shizuoka.jp\0"
-"vaga.no\0"
-"sano.tochigi.jp\0"
-"k12.in.us\0"
-"gob.bo\0partners\0"
-"mediocampidano.it\0kumakogen.ehime.jp\0"
-"dyr\xc3\xb8y.no\0lier.no\0groks-this.info\0"
-"tsuruta.aomori.jp\0"
-"tosu.saga.jp\0office-on-the.net\0"
-"bzh\0"
-"grong.no\0"
-"attorney\0"
-"oji.nara.jp\0"
-"gob.cl\0"
-"froland.no\0meloy.no\0"
-"taranto.it\0uk.net\0"
-"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0"
-"school.museum\0cc.il.us\0"
-"s.se\0"
-"marketplace.aero\0plc.uk\0"
-"ontario.museum\0"
-"ranzan.saitama.jp\0"
-"ct.us\0"
-"memorial\0"
-"gob.do\0media.hu\0lib.ks.us\0"
-"reise\0"
-"horonobe.hokkaido.jp\0"
-"gob.ec\0"
-"yamal.ru\0"
-"yamato.kanagawa.jp\0"
-"dr.na\0"
-"spydeberg.no\0"
-"zgora.pl\0"
-"verona.it\0"
-"gob.es\0"
-"jeju.kr\0"
-"chiropractic.museum\0doomdns.com\0"
-"kozaki.chiba.jp\0"
-"monza-brianza.it\0isen.kagoshima.jp\0glogow.pl\0"
-"uchiko.ehime.jp\0yasu.shiga.jp\0"
-"sandvik\0eu-west-1.compute.amazonaws.com\0"
-"suedtirol.it\0czest.pl\0"
-"kashiba.nara.jp\0yuza.yamagata.jp\0"
-"tondabayashi.osaka.jp\0toyama.toyama.jp\0"
-"\xe6\x95\x8e\xe8\x82\xb2.hk\0k12.vt.us\0"
-"astrakhan.ru\0nfshost.com\0"
-"!city.kobe.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0"
-"enebakk.no\0"
-"travel\0"
-"sandiego.museum\0yokohama\0"
-"valleeaoste.it\0parma.it\0kochi.jp\0kunohe.iwate.jp\0"
-"izumisano.osaka.jp\0szczecin.pl\0"
-"sellsyourhome.org\0"
-"gob.gt\0"
-"dyndns-remote.com\0"
-"pippu.hokkaido.jp\0"
-"com\0z.se\0is-a-bookkeeper.com\0"
-"kotohira.kagawa.jp\0"
-"is-found.org\0"
-"gob.hn\0radom.pl\0"
-"christiansburg.museum\0"
-"tomigusuku.okinawa.jp\0swiebodzin.pl\0"
-"bihoro.hokkaido.jp\0minato.osaka.jp\0"
-"firenze.it\0"
-"pr.us\0"
-"takanabe.miyazaki.jp\0"
-"jinsekikogen.hiroshima.jp\0"
-"computer.museum\0"
-"dad\0"
-"kikuchi.kumamoto.jp\0sakura.tochigi.jp\0"
-"otsu.shiga.jp\0"
-"larvik.no\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0"
-"berg.no\0cc.dc.us\0"
-"tateyama.toyama.jp\0"
-"is-an-actor.com\0"
-"rg.it\0"
-"kep.tr\0from-la.net\0"
-"ln.cn\0"
-"from-wv.com\0is-a-hunter.com\0"
-"day\0"
-"kokonoe.oita.jp\0"
-"wi.us\0"
-"schmidt\0"
-"6.bg\0portland.museum\0k12.wa.us\0"
-"crs\0csc\0"
-"groundhandling.aero\0cahcesuolo.no\0"
-"francaise.museum\0dyndns-free.com\0"
-"media.pl\0"
-"dr.tr\0b.ssl.fastly.net\0"
-"everbank\0"
-"kitakata.fukushima.jp\0"
-"montblanc\0"
-"tanohata.iwate.jp\0nishi.osaka.jp\0reisen\0"
-"rindal.no\0hamburg\0"
-"koriyama.fukushima.jp\0ena.gifu.jp\0"
-"foundation.museum\0"
-"axis.museum\0"
-"helsinki.museum\0cc.wa.us\0myphotos.cc\0"
-"vic.edu.au\0"
-"cloudapp.net\0"
-"yamaxun\0"
-"trading\0"
-"viterbo.it\0lg.jp\0ise.mie.jp\0"
-"lillesand.no\0"
-"lib.me.us\0"
-"okoppe.hokkaido.jp\0oyodo.nara.jp\0"
-"shinshinotsu.hokkaido.jp\0tobetsu.hokkaido.jp\0"
-"magadan.ru\0tennis\0"
-"\xe5\xba\x83\xe5\xb3\xb6.jp\0mobara.chiba.jp\0"
-"ltd.co.im\0"
-"fet.no\0elb.amazonaws.com\0"
-"kamikawa.hyogo.jp\0sango.nara.jp\0gob.mx\0"
-"alta.no\0"
-"sowa.ibaraki.jp\0"
-"g\xc3\xa1\xc5\x8bgaviika.no\0"
-"tattoo\0"
-"fg.it\0konan.shiga.jp\0"
-"off.ai\0country\0"
-"dev\0"
-"rn.it\0samukawa.kanagawa.jp\0"
-"baidu\0"
-"port.fr\0carbonia-iglesias.it\0miyoshi.tokushima.jp\0tabuse.yamaguchi.jp\0sosnowiec.pl\0adult\0"
-"in-addr.arpa\0gran.no\0"
-"gob.pa\0serveftp.org\0"
-"hidaka.hokkaido.jp\0"
-"nesseby.no\0"
-"satosho.okayama.jp\0"
-"gob.pe\0"
-"flights\0"
-"andriabarlettatrani.it\0"
-"nagato.yamaguchi.jp\0host\0"
-"nes.akershus.no\0gob.pk\0dvrdns.org\0"
-"miyota.nagano.jp\0"
-"embroidery.museum\0karasjohka.no\0"
-"from-ky.com\0"
-"trieste.it\0ashoro.hokkaido.jp\0"
-"dealer\0"
-"saigawa.fukuoka.jp\0"
-"spiegel\0"
-"atlanta.museum\0romskog.no\0"
-"l\xc3\xa4ns.museum\0evje-og-hornnes.no\0"
-"valled-aosta.it\0karasuyama.tochigi.jp\0"
-"ing.pa\0"
-"siracusa.it\0minano.saitama.jp\0"
-"isahaya.nagasaki.jp\0hagi.yamaguchi.jp\0"
-"!city.kitakyushu.jp\0uto.kumamoto.jp\0forex\0"
-"murayama.yamagata.jp\0virgin\0"
-"norddal.no\0cherkasy.ua\0codes\0"
-"misato.saitama.jp\0"
-"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0"
-"iwata.shizuoka.jp\0"
-"tjome.no\0mango\0"
-"greta.fr\0"
-"eu.int\0minokamo.gifu.jp\0oi.kanagawa.jp\0"
-"accident-prevention.aero\0"
-"hirokawa.fukuoka.jp\0"
-"kainan.tokushima.jp\0"
-"gob.sv\0"
-"gub.uy\0"
-"black\0"
-"noda.chiba.jp\0"
-"tanagura.fukushima.jp\0abu.yamaguchi.jp\0"
-"is-a-painter.com\0"
-"ikeda.hokkaido.jp\0"
-"mitoyo.kagawa.jp\0"
-"gausdal.no\0"
-"kvafjord.no\0"
-"philadelphiaarea.museum\0santafe.museum\0cruises\0"
-"ringerike.no\0"
-"ven.it\0kamisato.saitama.jp\0przeworsk.pl\0"
-"\xe7\x82\xb9\xe7\x9c\x8b\0"
-"ask\xc3\xb8y.no\0"
-"suli.hu\0is-an-accountant.com\0"
-"lu.it\0me.it\0\xe7\xa7\xbb\xe5\x8a\xa8\0"
-"flanders.museum\0"
-"anquan\0"
-"s\xc3\xb8rreisa.no\0"
-"gob.ve\0"
-"treviso.it\0"
-"crew.aero\0"
-"jaguar\0"
-"barlettatraniandria.it\0happou.akita.jp\0"
-"annefrank.museum\0is-a-bulls-fan.com\0"
-"medecin.km\0jamal.ru\0dyndns-mail.com\0"
-"toyota.aichi.jp\0"
-"\xe6\x9c\xba\xe6\x9e\x84\0"
-"muos\xc3\xa1t.no\0"
-"monzaebrianza.it\0"
-"lg.ua\0"
-"dnp\0"
-"archaeological.museum\0"
-"ichikawa.chiba.jp\0kami.miyagi.jp\0"
-"media.museum\0"
-"ge.it\0unnan.shimane.jp\0walbrzych.pl\0"
-"namdalseid.no\0dog\0"
-"australia.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0"
-"shop.ht\0ascolipiceno.it\0"
-"trading.aero\0shop.hu\0tr\xc3\xa6na.no\0"
-"wroc.pl\0"
-"kharkiv.ua\0"
-"slattum.no\0"
-"zj.cn\0"
-"amursk.ru\0"
-"miyazaki.jp\0nishinoomote.kagoshima.jp\0"
-"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0"
-"ora.gunma.jp\0"
-"chattanooga.museum\0naturalhistorymuseum.museum\0uhren.museum\0"
-"emilia-romagna.it\0\xe9\xa6\x99\xe5\xb7\x9d.jp\0"
-"spb.ru\0"
-"kiso.nagano.jp\0"
-"gop.pk\0vote\0"
-"krokstadelva.no\0leitungsen.de\0"
-"ogi.saga.jp\0"
-"broker.aero\0"
-"asaka.saitama.jp\0"
-"dnipropetrovsk.ua\0"
-"minamiechizen.fukui.jp\0kagamiishi.fukushima.jp\0"
-"voto\0"
-"ostroda.pl\0"
-"noheji.aomori.jp\0stalowa-wola.pl\0"
-"jolster.no\0"
-"iijima.nagano.jp\0"
-"blog.br\0gs.cn\0tainai.niigata.jp\0kouzushima.tokyo.jp\0cheap\0"
-"kharkov.ua\0cc.wv.us\0"
-"s3-website-us-gov-west-1.amazonaws.com\0"
-"tj.cn\0onagawa.miyagi.jp\0"
-"naples.it\0miyako.iwate.jp\0yaita.tochigi.jp\0eat\0"
-"nord-aurdal.no\0servegame.org\0"
-"money\0blogdns.org\0"
-"lib.mn.us\0"
-"aoste.it\0"
-"westfalen.museum\0"
-"kasaoka.okayama.jp\0"
-"bc.ca\0"
-"shia\0"
-"*.kawasaki.jp\0"
-"skodje.no\0"
-"\xe7\x86\x8a\xe6\x9c\xac.jp\0"
-"varoy.no\0"
-"kaga.ishikawa.jp\0cloudfront.net\0"
-"ss.it\0"
-"shimane.jp\0ryokami.saitama.jp\0yamanakako.yamanashi.jp\0durban\0"
-"randaberg.no\0"
-"jobs.tt\0"
-"bjugn.no\0z-2.compute-1.amazonaws.com\0"
-"futaba.fukushima.jp\0"
-"kms.ru\0"
-"zamami.okinawa.jp\0"
-"laquila.it\0"
-"mobily\0"
-"club\0"
-"edu\0"
-"a.prod.fastly.net\0"
-"tamatsukuri.ibaraki.jp\0"
-"kamoenai.hokkaido.jp\0"
-"f\xc3\xb8rde.no\0"
-"al.it\0"
-"ube.yamaguchi.jp\0"
-"ms.it\0"
-"higashiagatsuma.gunma.jp\0"
-"pacific.museum\0"
-"gz.cn\0"
-"dyndns.org\0"
-"otari.nagano.jp\0"
-"miyazaki.miyazaki.jp\0"
-"texas.museum\0hosting\0"
-"mincom.tn\0"
-"huissier-justice.fr\0"
-"\xc3\xa5lg\xc3\xa5rd.no\0fusa.no\0lib.ny.us\0mtpc\0panerai\0"
-"chieti.it\0fujikawaguchiko.yamanashi.jp\0blogspot.com.ar\0"
-"gs.fm.no\0"
-"chikushino.fukuoka.jp\0"
-"blogspot.com.au\0"
-"iiyama.nagano.jp\0"
-"ms.kr\0"
-"tohma.hokkaido.jp\0tara.saga.jp\0"
-"is-gone.com\0"
-"friuli-vegiulia.it\0saito.miyazaki.jp\0"
-"ringebu.no\0"
-"bj.cn\0me.tz\0blogspot.com.br\0"
-"raisa.no\0me.uk\0"
-"tokuyama.yamaguchi.jp\0"
-"isesaki.gunma.jp\0"
-"kunst.museum\0"
-"childrens.museum\0me.us\0"
-"mihara.hiroshima.jp\0"
-"jogasz.hu\0"
-"sayama.saitama.jp\0"
-"k12.me.us\0"
-"bale.museum\0s\xc3\xb8r-odal.no\0"
-"cambridge.museum\0"
-"shimotsuke.tochigi.jp\0"
-"harima.hyogo.jp\0"
-"varggat.no\0barcelona\0"
-"kunimi.fukushima.jp\0"
-"gallery.museum\0"
-"kitayama.wakayama.jp\0"
-"nov.ru\0"
-"kasumigaura.ibaraki.jp\0taiki.mie.jp\0"
-"lierne.no\0is-a-doctor.com\0"
-"lidl\0"
-"al.no\0\xeb\x8b\xb7\xeb\x84\xb7\0dyndns-office.com\0"
-"kunisaki.oita.jp\0ricoh\0"
-"biev\xc3\xa1t.no\0"
-"yamagata.jp\0ibara.okayama.jp\0"
-"shirakawa.fukushima.jp\0"
-"is-a-nurse.com\0"
-"sagamihara.kanagawa.jp\0"
-"verdal.no\0"
-"fie.ee\0shoes\0"
-"blogspot.com.es\0"
-"tachikawa.tokyo.jp\0"
-"valley.museum\0oracle\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0"
-"yuzawa.niigata.jp\0higashiizumo.shimane.jp\0"
-"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0"
-"katori.chiba.jp\0"
-"vic.gov.au\0center.museum\0ulan-ude.ru\0life\0"
-"machida.tokyo.jp\0better-than.tv\0"
-"hino.tokyo.jp\0"
-"tokoname.aichi.jp\0"
-"kawachinagano.osaka.jp\0"
-"minnesota.museum\0"
-"steinkjer.no\0"
-"trentino-stirol.it\0hamatonbetsu.hokkaido.jp\0"
-"reggio-calabria.it\0"
-"etnedal.no\0vdonsk.ru\0cc.sd.us\0"
-"plaza.museum\0"
-"nx.cn\0band\0"
-"flowers\0"
-"bank\0"
-"agematsu.nagano.jp\0"
-"passenger-association.aero\0mod.gi\0"
-"settsu.osaka.jp\0"
-"shimokitayama.nara.jp\0"
-"washingtondc.museum\0apartments\0is-a-blogger.com\0"
-"at-band-camp.net\0"
-"med.pro\0"
-"torino.it\0"
-"merseine.nu\0"
-"ine.kyoto.jp\0"
-"\xe9\xb3\xa5\xe5\x8f\x96.jp\0"
-"komforb.se\0"
-"porsgrunn.no\0"
-"noboribetsu.hokkaido.jp\0kameoka.kyoto.jp\0"
-"analytics\0"
-"cng.br\0"
-"vladikavkaz.ru\0cc.md.us\0"
-"page\0"
-"friuli-veneziagiulia.it\0shimamoto.osaka.jp\0uw.gov.pl\0"
-"microlight.aero\0canada.museum\0koebenhavn.museum\0"
-"olbia-tempio.it\0yukuhashi.fukuoka.jp\0allfinanz\0"
-"aerodrome.aero\0"
-"\xe6\x84\x9b\xe7\x9f\xa5.jp\0"
-"beppu.oita.jp\0nishiazai.shiga.jp\0"
-"minami.tokushima.jp\0kaneyama.yamagata.jp\0"
-"amber.museum\0from-ga.com\0"
-"kita.kyoto.jp\0"
-"sakyo.kyoto.jp\0fund\0"
-"modern.museum\0"
-"ebina.kanagawa.jp\0"
-"kuzbass.ru\0"
-"namegata.ibaraki.jp\0nowruz\0"
-"nc.tr\0"
-"like\0"
+"czest.pl\0"
+"nom.tm\0cloudapp.net\0"
+"\xe7\xbb\x84\xe7\xb9\x94.hk\0acct.pro\0"
+"juif.museum\0"
+"gose.nara.jp\0"
+"kakogawa.hyogo.jp\0"
+"taiwa.miyagi.jp\0"
+"club.aero\0fot.br\0"
+"lombardy.it\0tsumagoi.gunma.jp\0colonialwilliamsburg.museum\0"
+"ebetsu.hokkaido.jp\0"
+"serveftp.org\0"
+"n\xc3\xa1vuotna.no\0vig\0"
+"kepno.pl\0"
+"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0"
+"nanjo.okinawa.jp\0"
+"koshimizu.hokkaido.jp\0"
+"agriculture.museum\0vin\0"
+"ens.tn\0"
+"kaminokawa.tochigi.jp\0vip\0"
+"yamagata.nagano.jp\0"
+"immobilien\0"
+"lundbeck\0"
+"\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
+"cherkasy.ua\0"
+"browsersafetymark.io\0"
+"namerikawa.toyama.jp\0"
+"oirm.gov.pl\0"
+"mizunami.gifu.jp\0nagiso.nagano.jp\0"
+"4.bg\0mesaverde.museum\0cloudfunctions.net\0"
+"kasuga.fukuoka.jp\0muncie.museum\0pioneer\0"
+"suzaka.nagano.jp\0kr.ua\0audi\0"
+"malbork.pl\0cc.nm.us\0"
+"cc.id.us\0"
+"ferrara.it\0"
+"recipes\0"
+"gobo.wakayama.jp\0"
+"ltd.lk\0"
+"fm.it\0roma.museum\0"
+"turek.pl\0"
+"anjo.aichi.jp\0"
+"vt.us\0"
+"artdeco.museum\0"
+"kita.tokyo.jp\0\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0"
+"ad.jp\0"
+"parts\0"
+"beer\0"
+"yasuoka.nagano.jp\0flatanger.no\0"
+"pilot.aero\0"
+"party\0"
+"hiratsuka.kanagawa.jp\0"
+"hemsedal.no\0"
+"nom.za\0"
+"vana\0"
+"miyashiro.saitama.jp\0strand.no\0"
+"kawanabe.kagoshima.jp\0smolensk.ru\0dynathome.net\0"
+"hdfc\0"
"valledaosta.it\0"
-"tromso.no\0"
-"fukui.jp\0"
-"b\xc3\xb8.telemark.no\0jpn.com\0"
-"kumagaya.saitama.jp\0"
+"nishihara.okinawa.jp\0"
+"yaita.tochigi.jp\0deal\0"
+"contemporary.museum\0"
+"minamifurano.hokkaido.jp\0"
+"kin.okinawa.jp\0engerdal.no\0"
+"games\0"
+"amber.museum\0"
+"simbirsk.ru\0"
+"sn\xc3\xa5""ase.no\0"
+"*.alces.network\0"
+"\xe6\x89\x8b\xe6\x9c\xba\0"
+"unzen.nagasaki.jp\0"
+"shikabe.hokkaido.jp\0hirado.nagasaki.jp\0no.eu.org\0"
+"minano.saitama.jp\0"
+"murata.miyagi.jp\0itau\0"
+"kitagawa.kochi.jp\0"
+"gr.com\0"
+"windmill.museum\0in-the-band.net\0"
+"express.aero\0\xd9\x82\xd8\xb7\xd8\xb1\0"
+"fm.no\0"
+"6.bg\0wajiki.tokushima.jp\0"
+"bonn.museum\0"
+"shiraoka.saitama.jp\0"
+"ah.cn\0"
+"pvt.ge\0anan.tokushima.jp\0"
+"bibai.hokkaido.jp\0katsuragi.wakayama.jp\0chuo.yamanashi.jp\0"
+"ra.it\0naroy.no\0buryatia.ru\0"
+"tatebayashi.gunma.jp\0wakasa.tottori.jp\0swatch\0"
+"oshino.yamanashi.jp\0dyndns-mail.com\0"
+"earth\0"
+"vestre-slidre.no\0"
+"cahcesuolo.no\0"
+"wios.gov.pl\0wanggou\0"
+"matsukawa.nagano.jp\0tyumen.ru\0"
+"kolobrzeg.pl\0"
+"morotsuka.miyazaki.jp\0olkusz.pl\0"
+"taxi\0"
+"bloxcms.com\0"
+"filatelia.museum\0vagsoy.no\0"
+"luroy.no\0"
+"yabuki.fukushima.jp\0sokndal.no\0"
+"pccw\0"
+"polkowice.pl\0"
+"name.hr\0"
+"vercelli.it\0"
+"aquila.it\0"
+"vdonsk.ru\0melbourne\0"
+"yamagata.gifu.jp\0"
+"oji.nara.jp\0snaase.no\0"
+"kakegawa.shizuoka.jp\0chocolate.museum\0"
+"kashiba.nara.jp\0"
+"hamatama.saga.jp\0kirovograd.ua\0"
+"lancia\0"
+"name.et\0"
+"wakasa.fukui.jp\0lans.museum\0"
+"freebox-os.com\0"
+"takanezawa.tochigi.jp\0ltd.uk\0"
+"beauty\0"
+"cng.br\0eiheiji.fukui.jp\0"
+"taishin.fukushima.jp\0versicherung\0"
+"nishiarita.saga.jp\0"
+"national.museum\0mattel\0wed\0"
+"\xe9\xa3\x9f\xe5\x93\x81\0"
+"kikuchi.kumamoto.jp\0"
+"nz.eu.org\0"
+"global.ssl.fastly.net\0"
+"sanuki.kagawa.jp\0"
+"iwate.iwate.jp\0"
+"gc.ca\0"
+"kakamigahara.gifu.jp\0selfip.info\0"
+"belau.pw\0"
+"kita.osaka.jp\0lib.ri.us\0"
+"8.bg\0"
+"museumcenter.museum\0"
"charter.aero\0"
-"gent\0"
-"barum.no\0nannestad.no\0homeunix.com\0"
-"medecin.fr\0"
-"bern.museum\0batsfjord.no\0al.us\0getmyip.com\0"
-"fan\0"
-"jetzt\0"
-"alaska.museum\0zhytomyr.ua\0ms.us\0nc.us\0"
-"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0"
-"k12.ms.us\0k12.nc.us\0"
-"surgeonshall.museum\0"
-"g.bg\0from-me.org\0"
-"auction\0"
-"gs.mr.no\0"
-"osakikamijima.hiroshima.jp\0nanao.ishikawa.jp\0"
-"yanaizu.fukushima.jp\0muika.niigata.jp\0"
-"hjartdal.no\0"
-"ca.it\0kawakami.nagano.jp\0support\0"
-"co.ae\0"
-"co.ag\0"
-"naroy.no\0limo\0"
-"kawara.fukuoka.jp\0katsushika.tokyo.jp\0"
-"bungoono.oita.jp\0"
-"co.ao\0esq\0"
-"co.ba\0"
-"co.bb\0"
-"simple-url.com\0"
-"co.at\0etc.br\0"
-"\xc3\xa5krehamn.no\0vestre-slidre.no\0barclays\0link\0"
-"kiryu.gunma.jp\0hamamatsu.shizuoka.jp\0"
-"lib.or.us\0"
-"taira.toyama.jp\0"
-"co.bi\0"
-"kazimierz-dolny.pl\0"
-"krasnoyarsk.ru\0"
-"gucci\0"
-"wanggou\0"
-"co.ca\0"
-"yamatsuri.fukushima.jp\0"
-"paris.museum\0"
-"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0"
-"co.bw\0"
-"omi.nagano.jp\0"
-"co.ci\0aquarelle\0"
-"co.cl\0"
-"co.cm\0"
-"nakagawa.tokushima.jp\0"
-"zushi.kanagawa.jp\0tokorozawa.saitama.jp\0"
-"eus\0from-ne.com\0"
-"co.cr\0szkola.pl\0"
-"as.us\0"
-"oiso.kanagawa.jp\0xihuan\0blogspot.com.tr\0"
-"nj.us\0k12.as.us\0"
-"conference.aero\0"
-"n.bg\0"
-"shop.pl\0"
-"ca.na\0n\xc3\xa6r\xc3\xb8y.no\0"
-"takaishi.osaka.jp\0"
-"miyazu.kyoto.jp\0\xe5\x85\xac\xe7\x9b\x8a\0"
-"abr.it\0taiji.wakayama.jp\0"
-"v\xc3\xa5gs\xc3\xb8y.no\0bar.pro\0kchr.ru\0lanbib.se\0"
-"traeumtgerade.de\0"
-"ch.it\0"
-"cc.ak.us\0"
-"mypets.ws\0"
-"owani.aomori.jp\0"
-"iwate.jp\0"
-"\xe4\xb8\xad\xe5\x9b\xbd\0feedback\0"
-"dyndns-at-work.com\0"
-"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0organic\0"
-"k12.il.us\0"
-"yabu.hyogo.jp\0"
-"stjohn.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0"
-"davvesiida.no\0sucks\0temasek\0"
-"drammen.no\0"
-"aip.ee\0co.gg\0"
-"kumejima.okinawa.jp\0"
-"london\0"
-"tolga.no\0"
-"sakura.chiba.jp\0fit\0"
-"tjeldsund.no\0"
-"rec.br\0gushikami.okinawa.jp\0"
-"navigation.aero\0"
-"co.gy\0"
-"sanda.hyogo.jp\0daigo.ibaraki.jp\0uenohara.yamanashi.jp\0"
-"az.us\0"
-"nakatane.kagoshima.jp\0"
-"labor.museum\0wang\0"
-"matera.it\0shirataka.yamagata.jp\0swatch\0selfip.net\0"
+"name.cy\0berlin.museum\0"
+"suzu.ishikawa.jp\0kv.ua\0"
+"sa.gov.pl\0"
+"kharkov.ua\0cc.co.us\0"
+"government.aero\0"
+"rc.it\0"
+"name.eg\0norfolk.museum\0"
+"oxford.museum\0"
+"salzburg.museum\0"
+"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0"
+"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0"
+"chicago.museum\0"
+"anan.nagano.jp\0"
+"hidaka.saitama.jp\0"
+"minamidaito.okinawa.jp\0"
+"name.az\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0tienda\0"
+"badajoz.museum\0\xe9\x9b\x86\xe5\x9b\xa2\0"
+"net-freaks.com\0"
+"trentinos-tirol.it\0"
+"wmflabs.org\0"
+"rockart.museum\0swidnica.pl\0makeup\0"
+"univ.sn\0dell\0"
+"settlers.museum\0"
+"madrid.museum\0"
+"tsurugi.ishikawa.jp\0gran.no\0"
+"imb.br\0"
+"nakagawa.hokkaido.jp\0manno.kagawa.jp\0"
+"trust.museum\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0"
+"k12.nv.us\0win\0"
"fashion\0"
-"pars\0"
-"yugawa.fukushima.jp\0"
-"rec.co\0k12.ny.us\0"
-"co.id\0"
-"co.hu\0lib.vt.us\0"
-"jelenia-gora.pl\0"
-"u.bg\0"
-"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0"
-"ito.shizuoka.jp\0maison\0"
-"miyada.nagano.jp\0"
-"co.im\0yakutia.ru\0"
-"co.in\0"
-"live\0"
-"venice.it\0"
-"co.ir\0aizubange.fukushima.jp\0shizuoka.shizuoka.jp\0principe.st\0"
-"co.it\0"
-"co.je\0cc.ar.us\0review\0"
-"heguri.nara.jp\0center\0from-ny.net\0"
-"sanfrancisco.museum\0"
-"akune.kagoshima.jp\0"
-"casadelamoneda.museum\0edeka\0"
-"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0fukuchiyama.kyoto.jp\0"
-"nissedal.no\0ivanovo.ru\0"
-"co.jp\0"
-"ia.us\0"
-"vantaa.museum\0"
-"yanagawa.fukuoka.jp\0"
-"aeroclub.aero\0tx.us\0"
-"urbinopesaro.it\0"
-"army\0fly\0"
-"fukudomi.saga.jp\0oguni.yamagata.jp\0"
-"val-d-aosta.it\0"
-"historyofscience.museum\0tranby.no\0"
-"andasuolo.no\0"
-"yoshinogari.saga.jp\0co.kr\0"
-"championship.aero\0co.lc\0public.museum\0"
-"nerima.tokyo.jp\0"
-"moscow.museum\0cymru\0"
-"site\0"
-"namerikawa.toyama.jp\0"
-"cc.hi.us\0"
-"tsuruga.fukui.jp\0"
-"arpa\0news\0nokia\0"
-"co.ma\0vf.no\0"
-"verm\xc3\xb6gensberater\0"
-"co.ls\0cmw.ru\0ca.us\0"
-"co.me\0"
-"grandrapids.museum\0nuremberg.museum\0oh.us\0"
-"shibukawa.gunma.jp\0"
-"fujioka.gunma.jp\0asahi.yamagata.jp\0oshino.yamanashi.jp\0"
-"foo\0quebec\0"
-"co.na\0"
-"campidano-medio.it\0"
-"austin.museum\0"
-"\xe7\xbb\x84\xe7\xbb\x87.hk\0co.mu\0"
-"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0"
-"co.mw\0"
-"yatomi.aichi.jp\0daejeon.kr\0"
-"steigen.no\0"
-"ogimi.okinawa.jp\0"
-"equipment.aero\0settlers.museum\0"
-"psc.br\0nara.jp\0tsugaru.aomori.jp\0co.nl\0"
-"co.no\0"
-"university.museum\0"
-"nakagawa.nagano.jp\0email\0"
-"sveio.no\0"
-"ed.ao\0donostia.museum\0kommunalforbund.se\0"
-"cleaning\0technology\0"
-"co.nz\0gal\0"
-"forsale\0"
-"carraramassa.it\0"
-"co.om\0"
-"emiliaromagna.it\0"
-"birdart.museum\0"
-"scrapper-site.net\0"
-"oceanographic.museum\0"
-"aca.pro\0karelia.ru\0"
-"atsuma.hokkaido.jp\0hidaka.wakayama.jp\0"
-"handson.museum\0"
-"chuo.yamanashi.jp\0frl\0"
-"co.pl\0"
-"gjerstad.no\0"
-"co.pn\0"
+"agano.niigata.jp\0"
+"mol.it\0kamiichi.toyama.jp\0lyngdal.no\0"
+"wuoz.gov.pl\0best\0eating-organic.net\0"
+"tozawa.yamagata.jp\0"
+"meeres.museum\0"
+"indian.museum\0"
+"kutchan.hokkaido.jp\0kosuge.yamanashi.jp\0snoasa.no\0"
+"higashi.okinawa.jp\0meguro.tokyo.jp\0origins\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0"
+"auto\0"
"bearalvahki.no\0"
-"piemonte.it\0"
-"ed.ci\0amsterdam.museum\0hk.com\0"
-"taishi.hyogo.jp\0"
-"arte\0"
-"jor.br\0shinshiro.aichi.jp\0kyowa.akita.jp\0"
-"g.se\0"
-"vt.it\0koto.shiga.jp\0um.gov.pl\0"
-"co.pw\0cbg.ru\0"
-"ed.cr\0vald-aosta.it\0"
-"blogspot.re\0"
-"midatlantic.museum\0"
-"modum.no\0"
-"blogspot.ro\0"
-"riodejaneiro.museum\0"
-"gdn\0"
-"cisco\0blogspot.ru\0blogspot.se\0"
-"brand.se\0bbva\0gea\0blogspot.sg\0"
-"utah.museum\0porsangu.no\0"
-"sakai.osaka.jp\0"
-"linz.museum\0co.rs\0blogspot.sk\0"
-"trentino-a-adige.it\0aero.tt\0"
-"realestate.pl\0"
-"bjark\xc3\xb8y.no\0co.rw\0"
-"pt.it\0esan.hokkaido.jp\0"
-"hsbc\0"
-"kawanishi.yamagata.jp\0rec.nf\0"
-"blogspot.td\0"
-"taxi.aero\0"
-"kamigori.hyogo.jp\0aoki.nagano.jp\0"
-"ferrero\0lotte\0"
-"whaling.museum\0"
-"\xe9\xab\x98\xe7\x9f\xa5.jp\0blogdns.net\0"
-"broadway\0"
-"co.st\0\xe5\xb9\xbf\xe4\xb8\x9c\0"
-"aero.mv\0"
-"ama.aichi.jp\0iwama.ibaraki.jp\0uruma.okinawa.jp\0hamada.shimane.jp\0co.th\0"
-"lotto\0"
-"co.sz\0co.tj\0"
-"is-not-certified.com\0"
-"samegawa.fukushima.jp\0hatogaya.saitama.jp\0"
-"co.tm\0"
-"zoological.museum\0evenes.no\0blogspot.tw\0"
-"b\xc3\xb8.nordland.no\0n\xc3\xb8tter\xc3\xb8y.no\0co.ua\0"
-"nishio.aichi.jp\0shibecha.hokkaido.jp\0"
-"magazine.aero\0"
-"co.tt\0\xe4\xb8\x96\xe7\x95\x8c\0"
-"\xeb\x8b\xb7\xec\xbb\xb4\0"
-"nordreisa.no\0co.ug\0"
-"kvalsund.no\0ggee\0"
-"co.tz\0blogspot.mr\0"
-"jobs\0giessen.museum\0co.uk\0verm\xc3\xb6gensberatung\0"
-"n.se\0"
-"yamamoto.miyagi.jp\0"
-"asia\0uzhgorod.ua\0"
-"blogspot.mx\0"
-"burghof.museum\0"
-"co.us\0"
-"higashiura.aichi.jp\0blogspot.nl\0"
-"columbus.museum\0co.ve\0"
-"nnov.ru\0yachts\0blogspot.no\0"
-"bjerkreim.no\0co.vi\0"
-"co.uz\0"
-"sekigahara.gifu.jp\0"
-"osteroy.no\0\xe9\xa6\x99\xe6\xb8\xaf\0"
-"kinko.kagoshima.jp\0"
-"tsubetsu.hokkaido.jp\0"
-"eiheiji.fukui.jp\0yawata.kyoto.jp\0yamatokoriyama.nara.jp\0"
-"sasayama.hyogo.jp\0"
-"equipment\0"
-"takamori.nagano.jp\0"
-"hobol.no\0university\0"
-"itabashi.tokyo.jp\0"
-"school.na\0chel.ru\0"
-"kuroishi.aomori.jp\0"
-"timekeeping.museum\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0"
-"reggiocalabria.it\0"
-"rec.ro\0"
-"alsace\0"
-"royken.no\0"
-"ed.jp\0gunma.jp\0"
-"amusement.aero\0giehtavuoatna.no\0"
-"blogspot.pt\0"
-"*.bd\0hokuryu.hokkaido.jp\0"
-"and\xc3\xb8y.no\0"
-"trd.br\0"
-"osakasayama.osaka.jp\0"
-"systems\0"
-"asahikawa.hokkaido.jp\0"
-"takazaki.miyazaki.jp\0school.nz\0"
-"\xe5\x95\x86\xe6\xa5\xad.tw\0"
-"*.bn\0tosashimizu.kochi.jp\0dabur\0"
-"cranbrook.museum\0usa.museum\0cv.ua\0"
-"daisen.akita.jp\0shirosato.ibaraki.jp\0"
-"perugia.it\0blogspot.it\0"
-"atsugi.kanagawa.jp\0"
-"oyabe.toyama.jp\0"
-"skedsmokorset.no\0cc.in.us\0gle\0"
-"*.ck\0hurdal.no\0u.se\0"
-"bunkyo.tokyo.jp\0"
-"mad.museum\0"
-"blogspot.jp\0"
-"eco.br\0"
-"wa.gov.au\0k\xc3\xa5""fjord.no\0\xc3\xb8rland.no\0space\0"
-"oita.jp\0mukawa.hokkaido.jp\0"
-"lib.la.us\0"
-"bialystok.pl\0szczytno.pl\0democrat\0"
-"*.cy\0webhop.org\0"
-"neyagawa.osaka.jp\0"
-"horology.museum\0audio\0commbank\0"
-"ashiya.fukuoka.jp\0"
-"hiratsuka.kanagawa.jp\0"
-"grimstad.no\0rec.ve\0"
-"blogspot.kr\0"
-"tokyo\0"
-"dellogliastra.it\0shiiba.miyazaki.jp\0"
-"gmo\0"
-"yaotsu.gifu.jp\0"
-"\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0"
-"kaisei.kanagawa.jp\0"
-"tonsberg.no\0"
-"gmx\0"
-"b\xc3\xa5tsfjord.no\0law.pro\0suzuki\0"
-"oristano.it\0"
-"tsukui.kanagawa.jp\0yokkaichi.mie.jp\0"
-"*.er\0"
-"capebreton.museum\0n\xc3\xa1vuotna.no\0sunndal.no\0"
-"nishi.fukuoka.jp\0"
-"otsuki.kochi.jp\0"
-"*.fj\0*.kobe.jp\0zakopane.pl\0"
-"*.fk\0vt.us\0"
-"lig.it\0nishikatsura.yamanashi.jp\0"
-"valdaosta.it\0takahata.yamagata.jp\0"
-"1.bg\0"
-"podhale.pl\0capital\0"
-"kamo.niigata.jp\0cool\0"
-"goo\0"
-"gop\0"
-"larsson.museum\0"
-"coop\0"
-"blogspot.fi\0"
-"got\0"
-"gov\0piacenza.it\0hisayama.fukuoka.jp\0"
-"cincinnati.museum\0"
-"frog.museum\0hitachi\0"
-"kr.it\0fujinomiya.shizuoka.jp\0blogspot.fr\0"
-"vistaprint\0"
-"kodaira.tokyo.jp\0"
-"*.gu\0ed.pw\0nsn.us\0"
-"hu.net\0"
-"fi.cr\0horokanai.hokkaido.jp\0gwangju.kr\0"
-"yamagata.nagano.jp\0"
-"lubin.pl\0blogspot.gr\0"
-"modelling.aero\0rendalen.no\0kostroma.ru\0from-sc.com\0"
-"tarnobrzeg.pl\0"
-"ivgu.no\0comsec\0"
-"broadcast.museum\0"
-"buryatia.ru\0blogspot.hk\0"
-"kl\xc3\xa6""bu.no\0"
-"*.il\0"
-"study\0"
-"kameyama.mie.jp\0wakasa.tottori.jp\0"
-"bas.it\0kanzaki.saga.jp\0"
-"cc.de.us\0blogspot.hu\0blogspot.ie\0"
-"hasama.oita.jp\0"
-"ri.it\0dynalias.net\0"
-"\xe6\x94\xbf\xe5\x8a\xa1\0"
-"toscana.it\0shikokuchuo.ehime.jp\0"
-"aknoluokta.no\0sor-varanger.no\0"
-"kasamatsu.gifu.jp\0kawaue.gifu.jp\0blogspot.in\0"
-"*.jm\0"
-"ina.nagano.jp\0"
-"venezia.it\0misato.shimane.jp\0"
-"is-very-good.org\0blogspot.be\0"
-"*.ke\0tananger.no\0lib.sc.us\0dating\0"
-"kakegawa.shizuoka.jp\0skin\0"
-"8.bg\0"
-"omachi.nagano.jp\0ichikawamisato.yamanashi.jp\0*.kh\0blogspot.bj\0"
-"yashio.saitama.jp\0"
-"blogspot.ca\0"
-"arq.br\0takayama.gunma.jp\0"
-"kagoshima.kagoshima.jp\0cancerresearch\0"
-"miami\0"
-"mihama.aichi.jp\0blogspot.cf\0"
-"blogspot.ch\0"
-"*.kw\0bindal.no\0"
-"li.it\0"
-"nationalfirearms.museum\0"
-"rochester.museum\0"
-"shibata.miyagi.jp\0"
-"blogspot.de\0"
-"blogspot.cv\0"
-"leirvik.no\0"
-"blogspot.cz\0"
-"civilwar.museum\0krodsherad.no\0eng.pro\0blogspot.dk\0"
-"kamiamakusa.kumamoto.jp\0"
-"nic.in\0umbria.it\0"
-"*.mm\0stv.ru\0"
-"noto.ishikawa.jp\0webhop.biz\0"
-"kiyosato.hokkaido.jp\0ueda.nagano.jp\0miyake.nara.jp\0"
-"scienceandhistory.museum\0"
-"nittedal.no\0"
-"gorge.museum\0"
-"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0"
-"*.ni\0"
-"fi.it\0*.mz\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0"
-"vibovalentia.it\0"
-"*.np\0"
-"sigdal.no\0skype\0"
-"ono.fukushima.jp\0"
-"mutsu.aomori.jp\0omachi.saga.jp\0"
-"yn.cn\0"
-"rost.no\0company\0"
-"trainer.aero\0scienceandindustry.museum\0"
-"kitaakita.akita.jp\0"
-"entertainment.aero\0"
-"fuettertdasnetz.de\0"
-"contemporary.museum\0"
-"higashiyodogawa.osaka.jp\0"
-"*.pg\0"
-"aioi.hyogo.jp\0"
-"newyork.museum\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0"
-"does-it.net\0"
-"her\xc3\xb8y.nordland.no\0"
-"sosa.chiba.jp\0uryu.hokkaido.jp\0hirakata.osaka.jp\0"
-"valle.no\0"
-"circus.museum\0"
-"citic\0"
-"sn.cn\0"
-"fukuyama.hiroshima.jp\0hiv\0"
-"lenvik.no\0"
-"nieruchomosci.pl\0"
-"higashihiroshima.hiroshima.jp\0ohtawara.tochigi.jp\0"
-"lib.nj.us\0"
-"direct\0"
-"blogspot.ae\0"
-"kamaishi.iwate.jp\0omura.nagasaki.jp\0kaminoyama.yamagata.jp\0"
-"s\xc3\xa1lat.no\0"
-"towada.aomori.jp\0"
-"klabu.no\0"
-"padua.it\0"
-"kr.ua\0"
-"bio.br\0morimachi.shizuoka.jp\0"
-"assisi.museum\0"
-"tone.ibaraki.jp\0tsuno.miyazaki.jp\0"
-"sells-for-less.com\0"
-"hichiso.gifu.jp\0czeladz.pl\0"
-"hvaler.no\0"
-"paragliding.aero\0asnes.no\0"
-"tako.chiba.jp\0"
-"house.museum\0"
-"anan.nagano.jp\0mihama.wakayama.jp\0"
-"heritage.museum\0andebu.no\0from-wy.com\0"
-"service.gov.uk\0"
-"chambagri.fr\0"
-"istmein.de\0"
-"myoko.niigata.jp\0from-az.net\0"
-"wy.us\0"
-"yamakita.kanagawa.jp\0"
-"garden.museum\0"
-"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0"
-"qld.au\0gok.pk\0"
-"schokoladen.museum\0"
-"southcarolina.museum\0"
-"nativeamerican.museum\0s3-website-us-west-1.amazonaws.com\0is-a-personaltrainer.com\0"
-"hirosaki.aomori.jp\0"
-"homes\0"
-"fineart.museum\0"
-"crown\0"
-"nrw.museum\0"
-"from-in.com\0"
-"kaufen\0"
-"grue.no\0lib.az.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0"
-"far.br\0arita.saga.jp\0"
-"bronnoy.no\0lipetsk.ru\0ri.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0is-a-conservative.com\0"
-"honbetsu.hokkaido.jp\0"
-"lib.ne.us\0selfip.org\0"
-"tmp.br\0wakayama.jp\0"
-"lodingen.no\0"
-"moriya.ibaraki.jp\0shioya.tochigi.jp\0"
-"dolls.museum\0health.museum\0"
-"trentinoaadige.it\0"
-"ascoli-piceno.it\0fukushima.fukushima.jp\0"
-"takasaki.gunma.jp\0"
-"how\0"
-"bandai.fukushima.jp\0takaharu.miyazaki.jp\0"
-"muenster.museum\0"
-"statoil\0"
-"himeji.hyogo.jp\0"
-"asti.it\0"
-"certification.aero\0santabarbara.museum\0yorkshire.museum\0sandnessjoen.no\0hasvik.no\0"
-"bus.museum\0africa.com\0"
-"ky.us\0"
-"sennan.osaka.jp\0nic.tj\0"
-"lib.gu.us\0"
-"k12.la.us\0"
-"konyvelo.hu\0trolley.museum\0bradesco\0is-a-liberal.com\0"
-"mihama.chiba.jp\0misato.miyagi.jp\0madrid\0"
-"yalta.ua\0accenture\0"
-"b\xc3\xa1l\xc3\xa1t.no\0"
-"fujisawa.iwate.jp\0saiki.oita.jp\0"
-"countryestate.museum\0*.ye\0"
-"yuu.yamaguchi.jp\0"
-"airguard.museum\0horten.no\0"
-"lukow.pl\0"
-"nhs.uk\0"
-"forum.hu\0"
-"ag.it\0chiryu.aichi.jp\0nankoku.kochi.jp\0"
-"asahi.ibaraki.jp\0"
-"tr\xc3\xb8gstad.no\0"
-"mn.it\0setouchi.okayama.jp\0"
-"utsira.no\0cc.la.us\0*.za\0ibm\0"
-"uda.nara.jp\0kitagata.saga.jp\0arakawa.saitama.jp\0\xe5\x95\x86\xe5\x9f\x8e\0"
-"hole.no\0"
-"he.cn\0shiraoi.hokkaido.jp\0mimata.miyazaki.jp\0"
-"shingo.aomori.jp\0tateyama.chiba.jp\0kaita.hiroshima.jp\0"
-"database.museum\0vodka\0"
-"lardal.no\0ice\0"
-"spy.museum\0*.zm\0"
-"hiraizumi.iwate.jp\0"
-"airtraffic.aero\0"
-"trentinoaltoadige.it\0"
-"enna.it\0"
-"association.aero\0*.zw\0"
-"funagata.yamagata.jp\0"
-"kaluga.ru\0clinic\0icu\0"
-"okayama.okayama.jp\0"
-"is-a-techie.com\0"
-"nl.ca\0virtuel.museum\0"
-"waw.pl\0"
-"is-a-rockstar.com\0"
-"higashimatsushima.miyagi.jp\0iruma.saitama.jp\0"
-"yusui.kagoshima.jp\0kalisz.pl\0"
-"from-va.com\0"
-"hiranai.aomori.jp\0"
-"te.it\0beer\0"
-"mallorca.museum\0svelvik.no\0"
-"career\0"
-"tver.ru\0"
+"ah.no\0"
+"amsterdam.museum\0"
+"collegefan.org\0"
+"ln.cn\0yoshioka.gunma.jp\0"
+"toyone.aichi.jp\0"
+"webhop.net\0"
+"sanjo.niigata.jp\0eastcoast.museum\0"
+"re.it\0h\xc3\xb8yanger.no\0"
+"kuchinotsu.nagasaki.jp\0"
+"zara\0"
+"okagaki.fukuoka.jp\0"
+"date.fukushima.jp\0"
+"accident-prevention.aero\0design.aero\0"
+"kyoto.jp\0homesense\0piaget\0wme\0"
+"hanyu.saitama.jp\0nuremberg.museum\0utah.museum\0"
+"historichouses.museum\0"
+"moscow.museum\0stateofdelaware.museum\0"
+"from-al.com\0"
+"denmark.museum\0"
+"sukumo.kochi.jp\0"
+"nexus\0"
+"trentino-altoadige.it\0"
+"smile\0"
+"iwama.ibaraki.jp\0karikatur.museum\0\xe6\x9b\xb8\xe7\xb1\x8d\0"
+"re.kr\0"
+"suisse.museum\0"
+"from-ca.com\0"
+"usantiques.museum\0"
+"vyatka.ru\0\xe5\x8f\xb0\xe7\x81\xa3\0guge\0"
+"\xce\xb5\xce\xbb\0"
+"yusui.kagoshima.jp\0sytes.net\0"
+"shimotsuke.tochigi.jp\0"
+"k12.oh.us\0stufftoread.com\0"
+"hikimi.shimane.jp\0"
+"qc.com\0googleapis.com\0"
+"goodyear\0"
+"nalchik.ru\0"
+"desi\0"
+"bremanger.no\0"
+"chuo.tokyo.jp\0"
+"wow\0"
+"christmas\0cricket\0"
+"kchr.ru\0"
+"bale.museum\0"
+"nalchik.su\0"
+"ogawa.ibaraki.jp\0"
+"toda.saitama.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0surgery\0"
+"kita.kyoto.jp\0gjesdal.no\0energy\0"
+"zachpomor.pl\0"
+"\xe8\xb4\xad\xe7\x89\xa9\0"
+"tydal.no\0wielun.pl\0"
+"otaki.nagano.jp\0"
+"sasayama.hyogo.jp\0fed.us\0"
+"cc.tn.us\0"
+"cc.il.us\0"
+"motoyama.kochi.jp\0broadcast.museum\0cc.dc.us\0"
+"suwa.nagano.jp\0"
+"voagat.no\0"
+"off.ai\0nagara.chiba.jp\0"
+"rg.it\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0"
+"os.hordaland.no\0hu.net\0"
+"ge.it\0"
+"al.it\0"
+"olecko.pl\0"
+"shibukawa.gunma.jp\0"
+"bergamo.it\0"
+"mielno.pl\0ga.us\0"
};
static const quint16 tldChunkCount = 2;
-static const quint32 tldChunks[] = {65528, 84704};
+static const quint32 tldChunks[] = {65512, 93761};
QT_END_NAMESPACE
diff --git a/src/corelib/io/qurltlds_p.h.INFO b/src/corelib/io/qurltlds_p.h.INFO
index 7e5c0bb19f..3f3d808a21 100644
--- a/src/corelib/io/qurltlds_p.h.INFO
+++ b/src/corelib/io/qurltlds_p.h.INFO
@@ -9,8 +9,8 @@ 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>.
-The file qurltlds_p.h was last generated Wednesday,
-February 11th 14:36 2015.
+The file qurltlds_p.h was last generated Thursday,
+October 20th 8:40 2016.
----
[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp
index 86fd63ead4..ed454d5442 100644
--- a/src/corelib/json/qjsondocument.cpp
+++ b/src/corelib/json/qjsondocument.cpp
@@ -260,22 +260,28 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati
Creates a QJsonDocument from the QVariant \a variant.
If the \a variant contains any other type than a QVariantMap,
- QVariantHash, QVariantList or QStringList, the returned document
- document is invalid.
+ QVariantHash, QVariantList or QStringList, the returned document is invalid.
\sa toVariant()
*/
QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
{
QJsonDocument doc;
- if (variant.type() == QVariant::Map) {
+ switch (variant.type()) {
+ case QVariant::Map:
doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
- } else if (variant.type() == QVariant::Hash) {
+ break;
+ case QVariant::Hash:
doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
- } else if (variant.type() == QVariant::List) {
+ break;
+ case QVariant::List:
doc.setArray(QJsonArray::fromVariantList(variant.toList()));
- } else if (variant.type() == QVariant::StringList) {
+ break;
+ case QVariant::StringList:
doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
+ break;
+ default:
+ break;
}
return doc;
}
@@ -344,10 +350,9 @@ QByteArray QJsonDocument::toJson() const
#ifndef QT_JSON_READONLY
QByteArray QJsonDocument::toJson(JsonFormat format) const
{
- if (!d)
- return QByteArray();
-
QByteArray json;
+ if (!d)
+ return json;
if (d->header->root()->isArray())
QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact));
diff --git a/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt
new file mode 100644
index 0000000000..8c08f48528
--- /dev/null
+++ b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt
@@ -0,0 +1,29 @@
+Copyright (c) 2007-2008, Apple, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Apple, Inc. nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index a78397e46c..7799113d30 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -140,14 +140,12 @@ nacl {
unix|integrity {
SOURCES += \
kernel/qcore_unix.cpp \
- kernel/qcrashhandler.cpp \
kernel/qeventdispatcher_unix.cpp \
kernel/qtimerinfo_unix.cpp
!darwin|nacl: SOURCES += kernel/qelapsedtimer_unix.cpp
HEADERS += \
kernel/qcore_unix_p.h \
- kernel/qcrashhandler_p.h \
kernel/qeventdispatcher_unix_p.h \
kernel/qpoll_p.h \
kernel/qtimerinfo_unix_p.h
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index adefea4f09..a4a4e50f10 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1004,7 +1004,7 @@ bool QCoreApplication::notifyInternal2(QObject *receiver, QEvent *event)
approaches are listed below:
\list 1
\li Reimplementing \l {QWidget::}{paintEvent()}, \l {QWidget::}{mousePressEvent()} and so
- on. This is the commonest, easiest, and least powerful way.
+ on. This is the most common, easiest, and least powerful way.
\li Reimplementing this function. This is very powerful, providing
complete control; but only one subclass can be active at a time.
diff --git a/src/corelib/kernel/qcrashhandler.cpp b/src/corelib/kernel/qcrashhandler.cpp
deleted file mode 100644
index 46bb8b7c11..0000000000
--- a/src/corelib/kernel/qcrashhandler.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-/*************************************************************************
- *
- * stacktrace.c 1.2 1998/12/21
- *
- * Copyright (c) 1998 by Bjorn Reese <breese@imada.ou.dk>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#include "qplatformdefs.h"
-#include "private/qcrashhandler_p.h"
-#include "qbytearray.h" // for qvsnprintf()
-
-#ifndef QT_NO_CRASHHANDLER
-
-#include <stdio.h>
-#include <signal.h>
-#include <stdlib.h>
-
-QT_BEGIN_NAMESPACE
-
-QtCrashHandler QSegfaultHandler::callback = 0;
-
-#if defined(__GLIBC__) && (__GLIBC__ >= 2) && !defined(__UCLIBC__) && !defined(QT_LINUXBASE)
-QT_BEGIN_INCLUDE_NAMESPACE
-# include "qstring.h"
-# include <execinfo.h>
-QT_END_INCLUDE_NAMESPACE
-
-static void print_backtrace(FILE *outb)
-{
- void *stack[128];
- int stack_size = backtrace(stack, sizeof(stack) / sizeof(void *));
- char **stack_symbols = backtrace_symbols(stack, stack_size);
- fprintf(outb, "Stack [%d]:\n", stack_size);
- if(FILE *cppfilt = popen("c++filt", "rw")) {
- dup2(fileno(outb), fileno(cppfilt));
- for(int i = stack_size-1; i>=0; --i)
- fwrite(stack_symbols[i], 1, strlen(stack_symbols[i]), cppfilt);
- pclose(cppfilt);
- } else {
- for(int i = stack_size-1; i>=0; --i)
- fprintf(outb, "#%d %p [%s]\n", i, stack[i], stack_symbols[i]);
- }
-}
-static void init_backtrace(char **, int)
-{
-}
-
-#else /* Don't use the GLIBC callback */
-/* Code sourced from: */
-QT_BEGIN_INCLUDE_NAMESPACE
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#if defined(Q_OS_IRIX) && defined(USE_LIBEXC)
-# include <libexc.h>
-#endif
-QT_END_INCLUDE_NAMESPACE
-
-
-static char *globalProgName = NULL;
-static bool backtrace_command(FILE *outb, const char *format, ...)
-{
-
- bool ret = false;
- char buffer[50];
-
- /*
- * Please note that vsnprintf() is not ASync safe (ie. cannot safely
- * be used from a signal handler.) If this proves to be a problem
- * then the cmd string can be built by more basic functions such as
- * strcpy, strcat, and a home-made integer-to-ascii function.
- */
- va_list args;
- char cmd[512];
- va_start(args, format);
- qvsnprintf(cmd, 512, format, args);
- va_end(args);
-
- char *foo = cmd;
-#if 0
- foo = "echo hi";
-#endif
- if(FILE *inb = popen(foo, "r")) {
- while(!feof(inb)) {
- int len = fread(buffer, 1, sizeof(buffer), inb);
- if(!len)
- break;
- if(!ret) {
- fwrite("Output from ", 1, strlen("Output from "), outb);
- strtok(cmd, " ");
- fwrite(cmd, 1, strlen(cmd), outb);
- fwrite("\n", 1, 1, outb);
- ret = true;
- }
- fwrite(buffer, 1, len, outb);
- }
- fclose(inb);
- }
- return ret;
-}
-
-static void init_backtrace(char **argv, int argc)
-{
- if(argc >= 1)
- globalProgName = argv[0];
-}
-
-static void print_backtrace(FILE *outb)
-{
- /*
- * In general dbx seems to do a better job than gdb.
- *
- * Different dbx implementations require different flags/commands.
- */
-#if defined(Q_OS_AIX)
- if(backtrace_command(outb, "dbx -a %d 2>/dev/null <<EOF\n"
- "where\n"
- "detach\n"
- "EOF\n",
- (int)getpid()))
- return;
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_FREEBSD)
- /*
- * FreeBSD insists on sending a SIGSTOP to the process we
- * attach to, so we let the debugger send a SIGCONT to that
- * process after we have detached.
- */
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "detach\n"
- "shell kill -CONT %d\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid(), (int)getpid()))
- return;
-#elif defined(Q_OS_HPUX)
- /*
- * HP decided to call their debugger xdb.
- *
- * This does not seem to work properly yet. The debugger says
- * "Note: Stack traces may not be possible until you are
- * stopped in user code." on HP-UX 09.01
- *
- * -L = line-oriented interface.
- * "T [depth]" gives a stacktrace with local variables.
- * The final "y" is confirmation to the quit command.
- */
- if(backtrace_command(outb, "xdb -P %d -L %s 2>&1 <<EOF\n"
- "T 50\n"
- "q\ny\n"
- "EOF\n",
- (int)getpid(), globalProgName))
- return;
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_IRIX)
- /*
- * "set $page=0" drops hold mode
- * "dump ." displays the contents of the variables
- */
- if(backtrace_command(outb, "dbx -p %d 2>/dev/null <<EOF\n"
- "set \\$page=0\n"
- "where\n"
-# if !defined(__GNUC__)
- /* gcc does not generate this information */
- "dump .\n"
-# endif
- "detach\n"
- "EOF\n",
- (int)getpid()))
- return;
-
-# if defined(USE_LIBEXC)
- if(trace_back_stack_and_print())
- return;
-# endif
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "echo ---\\n\n"
- "frame 5\n" /* Skip signal handler frames */
- "set \\$x = 50\n"
- "while (\\$x)\n" /* Print local variables for each frame */
- "info locals\n"
- "up\n"
- "set \\$x--\n"
- "end\n"
- "echo ---\\n\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_OSF)
- if(backtrace_command(outb, "dbx -pid %d %s 2>/dev/null <<EOF\n"
- "where\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- (int)getpid(), globalProgName))
- return;
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_SCO)
- /*
- * SCO OpenServer dbx is like a catch-22. The 'detach' command
- * depends on whether ptrace(S) support detaching or not. If it
- * is supported then 'detach' must be used, otherwise the process
- * will be killed upon dbx exit. If it isn't supported then 'detach'
- * will cause the process to be killed. We do not want it to be
- * killed.
- *
- * Out of two evils, the omission of 'detach' was chosen because
- * it worked on our system.
- */
- if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n"
- "where\n"
- "quit\nEOF\n",
- globalProgName, (int)getpid()))
- return;
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_SOLARIS)
- if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n"
- "where\n"
- "detach\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
- "echo ---\\n\n"
- "frame 5\n" /* Skip signal handler frames */
- "set \\$x = 50\n"
- "while (\\$x)\n" /* Print local variables for each frame */
- "info locals\n"
- "up\n"
- "set \\$x--\n"
- "end\n"
- "echo ---\\n\n"
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
- if(backtrace_command(outb, "/usr/proc/bin/pstack %d",
- (int)getpid()))
- return;
- /*
- * Other Unices (AIX, HPUX, SCO) also have adb, but
- * they seem unable to attach to a running process.)
- */
- if(backtrace_command(outb, "adb %s 2>&1 <<EOF\n"
- "0t%d:A\n" /* Attach to pid */
- "\\$c\n" /* print stacktrace */
- ":R\n" /* Detach */
- "\\$q\n" /* Quit */
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#elif defined(Q_OS_INTEGRITY)
- /* abort */
- CheckSuccess(Failure);
-#else /* All other platforms */
- /*
- * TODO: SCO/UnixWare 7 must be something like (not tested)
- * debug -i c <pid> <<EOF\nstack -f 4\nquit\nEOF\n
- */
-# if !defined(__GNUC__)
- if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n"
- "where\n"
- "detach\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-# endif
- if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n"
- "set prompt\n"
- "where\n"
-#if 0
- "echo ---\\n\n"
- "frame 4\n"
- "set \\$x = 50\n"
- "while (\\$x)\n"
- "info locals\n"
- "up\n"
- "set \\$x--\n"
- "end\n"
- "echo ---\\n\n"
-#endif
- "detach\n"
- "quit\n"
- "EOF\n",
- globalProgName, (int)getpid()))
- return;
-#endif
- const char debug_err[] = "No debugger found\n";
- fwrite(debug_err, strlen(debug_err), 1, outb);
-}
-/* end of copied code */
-#endif
-
-
-void qt_signal_handler(int sig)
-{
- signal(sig, SIG_DFL);
- if(QSegfaultHandler::callback) {
- (*QSegfaultHandler::callback)();
- _exit(1);
- }
- FILE *outb = stderr;
- if(char *crash_loc = ::getenv("QT_CRASH_OUTPUT")) {
- if(FILE *new_outb = fopen(crash_loc, "w")) {
- fprintf(stderr, "Crash (backtrace written to %s)!!!\n", crash_loc);
- outb = new_outb;
- }
- } else {
- fprintf(outb, "Crash!!!\n");
- }
- print_backtrace(outb);
- if(outb != stderr)
- fclose(outb);
- _exit(1);
-}
-
-
-void
-QSegfaultHandler::initialize(char **argv, int argc)
-{
- init_backtrace(argv, argc);
-
- struct sigaction SignalAction;
- SignalAction.sa_flags = 0;
- SignalAction.sa_handler = qt_signal_handler;
- sigemptyset(&SignalAction.sa_mask);
- sigaction(SIGSEGV, &SignalAction, NULL);
- sigaction(SIGBUS, &SignalAction, NULL);
-}
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_CRASHHANDLER
diff --git a/src/corelib/kernel/qt_attribution.json b/src/corelib/kernel/qt_attribution.json
new file mode 100644
index 0000000000..37764a5330
--- /dev/null
+++ b/src/corelib/kernel/qt_attribution.json
@@ -0,0 +1,13 @@
+{
+ "Id": "qeventdispatcher_cf",
+ "Name": "QEventDispatcher on macOS",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core on macOS.",
+ "Path": "qeventdispatcher_cf_p.h",
+
+ "Description": "Implementation of QAbstractEventDispatcher for macOS.",
+ "License": "BSD 3-clause \"New\" or \"Revised\" License",
+ "LicenseId": "BSD-3-Clause",
+ "LicenseFile": "QEVENTDISPATCHER_CF_LICENSE.txt",
+ "Copyright": "Copyright (c) 2007-2008, Apple, Inc."
+}
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index 6d39233aa7..4a5738a6dc 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -533,7 +533,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
*/
/*!
- \fn void QTimer::singleShot(std::chrono::duration<Rep, Period> value, const QObject *receiver, const char *member)
+ \fn void QTimer::singleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member)
\since 5.8
\overload
\reentrant
@@ -545,13 +545,13 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
create a local QTimer object.
The \a receiver is the receiving object and the \a member is the slot. The
- time interval is given in the duration object \a value.
+ time interval is given in the duration object \a msec.
\sa start()
*/
/*!
- \fn void QTimer::singleShot(std::chrono::duration<Rep, Period> value, Qt::TimerType timerType, const QObject *receiver, const char *member)
+ \fn void QTimer::singleShot(std::chrono::milliseconds msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
\since 5.8
\overload
\reentrant
@@ -563,18 +563,18 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
create a local QTimer object.
The \a receiver is the receiving object and the \a member is the slot. The
- time interval is given in the duration object \a value. The \a timerType affects the
+ time interval is given in the duration object \a msec. The \a timerType affects the
accuracy of the timer.
\sa start()
*/
/*!
- \fn void QTimer::start(std::chrono::duration<Rep, Period> value)
+ \fn void QTimer::start(std::chrono::milliseconds msec)
\since 5.8
\overload
- Starts or restarts the timer with a timeout of duration \a value.
+ Starts or restarts the timer with a timeout of duration \a msec milliseconds.
If the timer is already running, it will be
\l{QTimer::stop()}{stopped} and restarted.
diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h
index 1567fe760c..4f934d0367 100644
--- a/src/corelib/kernel/qtimer.h
+++ b/src/corelib/kernel/qtimer.h
@@ -165,38 +165,40 @@ Q_SIGNALS:
public:
#if QT_HAS_INCLUDE(<chrono>) || defined(Q_QDOC)
- template <class Rep, class Period>
- void setInterval(std::chrono::duration<Rep, Period> value)
+ Q_ALWAYS_INLINE
+ void setInterval(std::chrono::milliseconds value)
{
- setInterval(std::chrono::duration_cast<std::chrono::milliseconds>(value).count());
+ setInterval(value.count());
}
+ Q_ALWAYS_INLINE
std::chrono::milliseconds intervalAsDuration() const
{
return std::chrono::milliseconds(interval());
}
+ Q_ALWAYS_INLINE
std::chrono::milliseconds remainingTimeAsDuration() const
{
return std::chrono::milliseconds(remainingTime());
}
- template <class Rep, class Period>
- static void singleShot(std::chrono::duration<Rep, Period> value, const QObject *receiver, const char *member)
+ Q_ALWAYS_INLINE
+ static void singleShot(std::chrono::milliseconds value, const QObject *receiver, const char *member)
{
- singleShot(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()), receiver, member);
+ singleShot(int(value.count()), receiver, member);
}
- template <class Rep, class Period>
- static void singleShot(std::chrono::duration<Rep, Period> value, Qt::TimerType timerType, const QObject *receiver, const char *member)
+ Q_ALWAYS_INLINE
+ static void singleShot(std::chrono::milliseconds value, Qt::TimerType timerType, const QObject *receiver, const char *member)
{
- singleShot(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()), timerType, receiver, member);
+ singleShot(int(value.count()), timerType, receiver, member);
}
- template <class Rep, class Period>
- void start(std::chrono::duration<Rep, Period> value)
+ Q_ALWAYS_INLINE
+ void start(std::chrono::milliseconds value)
{
- start(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()));
+ start(int(value.count()));
}
#endif
@@ -215,15 +217,13 @@ private:
const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj);
#if QT_HAS_INCLUDE(<chrono>)
- template <class Rep, class Period>
- static Qt::TimerType defaultTypeFor(std::chrono::duration<Rep, Period> interval)
- { return defaultTypeFor(int(std::chrono::duration_cast<std::chrono::milliseconds>(interval).count())); }
+ static Qt::TimerType defaultTypeFor(std::chrono::milliseconds interval)
+ { return defaultTypeFor(int(interval.count())); }
- template <class Rep, class Period>
- static void singleShotImpl(std::chrono::duration<Rep, Period> interval, Qt::TimerType timerType,
+ static void singleShotImpl(std::chrono::milliseconds interval, Qt::TimerType timerType,
const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj)
{
- singleShotImpl(int(std::chrono::duration_cast<std::chrono::milliseconds>(interval).count()),
+ singleShotImpl(int(interval.count()),
timerType, receiver, slotObj);
}
#endif
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp
index e9996c204d..65b011b439 100644
--- a/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/src/corelib/mimetypes/qmimeprovider.cpp
@@ -712,6 +712,10 @@ QMimeXMLProvider::QMimeXMLProvider(QMimeDatabasePrivate *db)
initResources();
}
+QMimeXMLProvider::~QMimeXMLProvider()
+{
+}
+
bool QMimeXMLProvider::isValid()
{
return true;
diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h
index b6028191f7..e6fc47bf80 100644
--- a/src/corelib/mimetypes/qmimeprovider_p.h
+++ b/src/corelib/mimetypes/qmimeprovider_p.h
@@ -138,6 +138,7 @@ class QMimeXMLProvider : public QMimeProviderBase
{
public:
QMimeXMLProvider(QMimeDatabasePrivate *db);
+ ~QMimeXMLProvider();
virtual bool isValid() Q_DECL_OVERRIDE;
virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE;
diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h
index 81c7c5268c..ded102d32d 100644
--- a/src/corelib/thread/qorderedmutexlocker_p.h
+++ b/src/corelib/thread/qorderedmutexlocker_p.h
@@ -89,8 +89,8 @@ public:
void unlock()
{
if (locked) {
- if (mtx1) mtx1->unlock();
if (mtx2) mtx2->unlock();
+ if (mtx1) mtx1->unlock();
locked = false;
}
}
@@ -100,7 +100,7 @@ public:
// mtx1 is already locked, mtx2 not... do we need to unlock and relock?
if (mtx1 == mtx2)
return false;
- if (mtx1 < mtx2) {
+ if (std::less<QMutex *>()(mtx1, mtx2)) {
mtx2->lock();
return true;
}
diff --git a/src/corelib/tools/CLDR_LICENSE.txt b/src/corelib/tools/CLDR_LICENSE.txt
new file mode 100644
index 0000000000..ad28161436
--- /dev/null
+++ b/src/corelib/tools/CLDR_LICENSE.txt
@@ -0,0 +1,31 @@
+Copyright © 1991-2016 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h
index 6e472e8b22..038f4149c3 100644
--- a/src/corelib/tools/qalgorithms.h
+++ b/src/corelib/tools/qalgorithms.h
@@ -42,6 +42,10 @@
#include <QtCore/qglobal.h>
+#if defined(Q_CC_MSVC)
+#include <intrin.h>
+#endif
+
QT_BEGIN_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index 50b9f0decb..896b4a3840 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -873,6 +873,7 @@ QString QDate::toString(Qt::DateFormat format) const
return toStringTextDate(*this);
#endif
case Qt::ISODate:
+ case Qt::ISODateWithMs:
return toStringIsoDate(jd);
}
}
@@ -1569,7 +1570,9 @@ int QTime::msec() const
If \a format is Qt::ISODate, the string format corresponds to the
ISO 8601 extended specification for representations of dates,
- which is also HH:mm:ss.
+ represented by HH:mm:ss. To include milliseconds in the ISO 8601
+ date, use the \a format Qt::ISODateWithMs, which corresponds to
+ HH:mm:ss.zzz.
If the \a format is Qt::SystemLocaleShortDate or
Qt::SystemLocaleLongDate, the string format depends on the locale
@@ -1611,6 +1614,8 @@ QString QTime::toString(Qt::DateFormat format) const
return QLocale().toString(*this, QLocale::ShortFormat);
case Qt::DefaultLocaleLongDate:
return QLocale().toString(*this, QLocale::LongFormat);
+ case Qt::ISODateWithMs:
+ return QString::asprintf("%02d:%02d:%02d.%03d", hour(), minute(), second(), msec());
case Qt::RFC2822Date:
case Qt::ISODate:
case Qt::TextDate:
@@ -1642,9 +1647,11 @@ QString QTime::toString(Qt::DateFormat format) const
\row \li z \li the milliseconds without leading zeroes (0 to 999)
\row \li zzz \li the milliseconds with leading zeroes (000 to 999)
\row \li AP or A
- \li use AM/PM display. \e A/AP will be replaced by either "AM" or "PM".
+ \li use AM/PM display. \e A/AP will be replaced by either
+ QLocale::amText() or QLocale::pmText().
\row \li ap or a
- \li use am/pm display. \e a/ap will be replaced by either "am" or "pm".
+ \li use am/pm display. \e a/ap will be replaced by a lower-case version of
+ QLocale::amText() or QLocale::pmText().
\row \li t \li the timezone (for example "CEST")
\endtable
@@ -1653,7 +1660,8 @@ QString QTime::toString(Qt::DateFormat format) const
expression. Two consecutive single quotes ("''") are replaced by a singlequote
in the output. Formats without separators (e.g. "HHmm") are currently not supported.
- Example format strings (assuming that the QTime is 14:13:09.042)
+ Example format strings (assuming that the QTime is 14:13:09.042 and the system
+ locale is \c{en_US})
\table
\header \li Format \li Result
@@ -1917,7 +1925,8 @@ static QTime fromIsoTimeString(const QStringRef &string, Qt::DateFormat format,
}
}
- if (format == Qt::ISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) {
+ const bool isISODate = format == Qt::ISODate || format == Qt::ISODateWithMs;
+ if (isISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) {
if (isMidnight24)
*isMidnight24 = true;
hour = 0;
@@ -1959,6 +1968,7 @@ QTime QTime::fromString(const QString& string, Qt::DateFormat format)
case Qt::RFC2822Date:
return rfcDateImpl(string).time;
case Qt::ISODate:
+ case Qt::ISODateWithMs:
case Qt::TextDate:
default:
return fromIsoTimeString(&string, format, 0);
@@ -3715,7 +3725,9 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC)
depending on the timeSpec() of the QDateTime. If the timeSpec()
is Qt::UTC, Z will be appended to the string; if the timeSpec() is
Qt::OffsetFromUTC, the offset in hours and minutes from UTC will
- be appended to the string.
+ be appended to the string. To include milliseconds in the ISO 8601
+ date, use the \a format Qt::ISODateWithMs, which corresponds to
+ YYYY-MM-DDTHH:mm:ss.zzz[Z|[+|-]HH:mm].
If the \a format is Qt::SystemLocaleShortDate or
Qt::SystemLocaleLongDate, the string format depends on the locale
@@ -3786,7 +3798,8 @@ QString QDateTime::toString(Qt::DateFormat format) const
return buf;
}
#endif
- case Qt::ISODate: {
+ case Qt::ISODate:
+ case Qt::ISODateWithMs: {
const QPair<QDate, QTime> p = getDateTime(d);
const QDate &dt = p.first;
const QTime &tm = p.second;
@@ -3794,7 +3807,7 @@ QString QDateTime::toString(Qt::DateFormat format) const
if (buf.isEmpty())
return QString(); // failed to convert
buf += QLatin1Char('T');
- buf += tm.toString(Qt::ISODate);
+ buf += tm.toString(format);
switch (getSpec(d)) {
case Qt::UTC:
buf += QLatin1Char('Z');
@@ -4653,7 +4666,8 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
dateTime.setOffsetFromUtc(rfc.utcOffset);
return dateTime;
}
- case Qt::ISODate: {
+ case Qt::ISODate:
+ case Qt::ISODateWithMs: {
const int size = string.size();
if (size < 10)
return QDateTime();
@@ -4701,7 +4715,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
// Might be end of day (24:00, including variants), which QTime considers invalid.
// ISO 8601 (section 4.2.3) says that 24:00 is equivalent to 00:00 the next day.
bool isMidnight24 = false;
- QTime time = fromIsoTimeString(isoString, Qt::ISODate, &isMidnight24);
+ QTime time = fromIsoTimeString(isoString, format, &isMidnight24);
if (!time.isValid())
return QDateTime();
if (isMidnight24)
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index c25ee5ffbe..ca04c2bd44 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -1072,20 +1072,14 @@ QLocale::Country QLocale::country() const
QString QLocale::name() const
{
Language l = language();
-
- QString result = d->languageCode();
-
if (l == C)
- return result;
+ return d->languageCode();
Country c = country();
if (c == AnyCountry)
- return result;
-
- result.append(QLatin1Char('_'));
- result.append(d->countryCode());
+ return d->languageCode();
- return result;
+ return d->languageCode() + QLatin1Char('_') + d->countryCode();
}
static qlonglong toIntegral_helper(const QLocaleData *d, const QChar *data, int len, bool *ok,
@@ -2987,12 +2981,14 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
}
}
- for (int i = num_str.length()/* - cnt_thousand_sep*/; i < precision; ++i)
- num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0'));
+ const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0'));
+ const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/;
+ if (zeroPadding > 0)
+ num_str.prepend(QString(zeroPadding, resultZero));
if ((flags & ShowBase)
&& base == 8
- && (num_str.isEmpty() || num_str[0].unicode() != QLatin1Char('0')))
+ && (num_str.isEmpty() || num_str.at(0).unicode() != QLatin1Char('0')))
num_str.prepend(QLatin1Char('0'));
// LeftAdjusted overrides this flag ZeroPadded. sprintf only padds
@@ -3011,8 +3007,8 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group,
else if (base == 2 && flags & ShowBase)
num_pad_chars -= 2;
- for (int i = 0; i < num_pad_chars; ++i)
- num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0'));
+ if (num_pad_chars > 0)
+ num_str.prepend(QString(num_pad_chars, resultZero));
}
if (flags & CapitalEorX)
diff --git a/src/corelib/tools/qlocale.qdoc b/src/corelib/tools/qlocale.qdoc
index 88b071e161..d419172356 100644
--- a/src/corelib/tools/qlocale.qdoc
+++ b/src/corelib/tools/qlocale.qdoc
@@ -94,26 +94,6 @@
QLocale's data is based on Common Locale Data Repository v29.
- The double-to-string and string-to-double conversion functions are
- covered by the following licenses:
-
- \legalese
- Copyright (c) 1991 by AT&T.
-
- Permission to use, copy, modify, and distribute this software for any
- purpose without fee is hereby granted, provided that this entire notice
- is included in all copies of any software which is or includes a copy
- or modification of this software and in all copies of the supporting
- documentation for such software.
-
- THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
- REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-
- This product includes software developed by the University of
- California, Berkeley and its contributors.
-
\sa QString::arg(), QString::toInt(), QString::toDouble(),
QInputMethod::locale()
*/
diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp
index e7f86ddf6b..4a30daa72c 100644
--- a/src/corelib/tools/qregularexpression.cpp
+++ b/src/corelib/tools/qregularexpression.cpp
@@ -548,7 +548,7 @@ QT_BEGIN_NAMESPACE
\inmodule QtCore
\reentrant
- \brief The QRegularExpressionMatch class provides the results of a matching
+ \brief The QRegularExpressionMatch class provides the results of matching
a QRegularExpression against a string.
\since 5.0
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index dd57af9f0f..3161c41063 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -446,6 +446,16 @@ extern "C" int qt_ucstrncmp_mips_dsp_asm(const ushort *a,
// Unicode case-sensitive compare two same-sized strings
static int ucstrncmp(const QChar *a, const QChar *b, int l)
{
+#ifdef __OPTIMIZE_SIZE__
+ const QChar *end = a + l;
+ while (a < end) {
+ if (int diff = (int)a->unicode() - (int)b->unicode())
+ return diff;
+ ++a;
+ ++b;
+ }
+ return 0;
+#else
#if defined(__mips_dsp)
if (l >= 8) {
return qt_ucstrncmp_mips_dsp_asm(reinterpret_cast<const ushort*>(a),
@@ -473,7 +483,7 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l)
- reinterpret_cast<const QChar *>(ptr + distance + idx)->unicode();
}
}
-# if defined(Q_COMPILER_LAMBDA) && !defined(__OPTIMIZE_SIZE__)
+# if defined(Q_COMPILER_LAMBDA)
const auto &lambda = [=](int i) -> int {
return reinterpret_cast<const QChar *>(ptr)[i].unicode()
- reinterpret_cast<const QChar *>(ptr + distance)[i].unicode();
@@ -484,51 +494,50 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l)
if (!l)
return 0;
- union {
- const QChar *w;
- const quint32 *d;
- quintptr value;
- } sa, sb;
- sa.w = a;
- sb.w = b;
-
// check alignment
- if ((sa.value & 2) == (sb.value & 2)) {
+ if ((reinterpret_cast<quintptr>(a) & 2) == (reinterpret_cast<quintptr>(b) & 2)) {
// both addresses have the same alignment
- if (sa.value & 2) {
+ if (reinterpret_cast<quintptr>(a) & 2) {
// both addresses are not aligned to 4-bytes boundaries
// compare the first character
- if (*sa.w != *sb.w)
- return sa.w->unicode() - sb.w->unicode();
+ if (*a != *b)
+ return a->unicode() - b->unicode();
--l;
- ++sa.w;
- ++sb.w;
+ ++a;
+ ++b;
// now both addresses are 4-bytes aligned
}
// both addresses are 4-bytes aligned
// do a fast 32-bit comparison
- const quint32 *e = sa.d + (l >> 1);
- for ( ; sa.d != e; ++sa.d, ++sb.d) {
- if (*sa.d != *sb.d) {
- if (*sa.w != *sb.w)
- return sa.w->unicode() - sb.w->unicode();
- return sa.w[1].unicode() - sb.w[1].unicode();
+ const quint32 *da = reinterpret_cast<const quint32 *>(a);
+ const quint32 *db = reinterpret_cast<const quint32 *>(b);
+ const quint32 *e = da + (l >> 1);
+ for ( ; da != e; ++da, ++db) {
+ if (*da != *db) {
+ a = reinterpret_cast<const QChar *>(da);
+ b = reinterpret_cast<const QChar *>(db);
+ if (*a != *b)
+ return a->unicode() - b->unicode();
+ return a[1].unicode() - b[1].unicode();
}
}
// do we have a tail?
- return (l & 1) ? sa.w->unicode() - sb.w->unicode() : 0;
+ a = reinterpret_cast<const QChar *>(da);
+ b = reinterpret_cast<const QChar *>(db);
+ return (l & 1) ? a->unicode() - b->unicode() : 0;
} else {
// one of the addresses isn't 4-byte aligned but the other is
- const QChar *e = sa.w + l;
- for ( ; sa.w != e; ++sa.w, ++sb.w) {
- if (*sa.w != *sb.w)
- return sa.w->unicode() - sb.w->unicode();
+ const QChar *e = a + l;
+ for ( ; a != e; ++a, ++b) {
+ if (*a != *b)
+ return a->unicode() - b->unicode();
}
}
return 0;
+#endif
}
static int ucstrncmp(const QChar *a, const uchar *c, int l)
diff --git a/src/corelib/tools/qt_attribution.json b/src/corelib/tools/qt_attribution.json
new file mode 100644
index 0000000000..eec2cd6795
--- /dev/null
+++ b/src/corelib/tools/qt_attribution.json
@@ -0,0 +1,13 @@
+{
+ "Id": "cldr-data",
+ "Name": "Unicode CLDR (Unicode Common Locale Data Repository)",
+ "QDocModule": "qtcore",
+ "QtUsage": "Used in Qt Core (QTimeZone). Disable the timezone feature to avoid.",
+ "Files": "qlocale_data_p.h",
+
+ "Description": "QTimeZone includes data obtained from the CLDR data files.",
+ "License": "Unicode Data Files and Software License",
+ "LicenseId": "Unicode-TOU",
+ "LicenseFile": "CLDR_LICENSE.txt",
+ "Copyright": "Copyright (C) 1991-2016 Unicode, Inc."
+}
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 63a21ec75c..e423d9af0c 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -218,28 +218,8 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
\section2 License
This class includes data obtained from the CLDR data files under the terms
- of the Unicode license.
-
- \legalese
- COPYRIGHT AND PERMISSION NOTICE
-
- Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under
- the Terms of Use in http://www.unicode.org/copyright.html.
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of the Unicode data files and any associated documentation (the "Data
- Files") or Unicode software and any associated documentation (the "Software")
- to deal in the Data Files or Software without restriction, including without
- limitation the rights to use, copy, modify, merge, publish, distribute, and/or
- sell copies of the Data Files or Software, and to permit persons to whom the
- Data Files or Software are furnished to do so, provided that (a) the above
- copyright notice(s) and this permission notice appear with all copies of the
- Data Files or Software, (b) both the above copyright notice(s) and this
- permission notice appear in associated documentation, and (c) there is clear
- notice in each modified Data File or in the Software as well as in the
- documentation associated with the Data File(s) or Software that the data or
- software has been modified.
- \endlegalese
+ of the Unicode Data Files and Software License. See
+ \l{Unicode CLDR (Unicode Common Locale Data Repository)} for the details.
\sa QDateTime
*/
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index 47b0b2d4be..fb80bbd6b8 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -174,7 +174,7 @@ qtConfig(timezone) {
}
qtConfig(regularexpression) {
- include($$PWD/../../3rdparty/pcre_dependency.pri)
+ QMAKE_USE_PRIVATE += pcre
HEADERS += tools/qregularexpression.h
SOURCES += tools/qregularexpression.cpp
diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp
index eb57ad1816..c90173db76 100644
--- a/src/dbus/qdbusabstractinterface.cpp
+++ b/src/dbus/qdbusabstractinterface.cpp
@@ -761,18 +761,25 @@ QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &m
switch (count) {
case 8:
argList.prepend(arg8);
+ // fall through
case 7:
argList.prepend(arg7);
+ // fall through
case 6:
argList.prepend(arg6);
+ // fall through
case 5:
argList.prepend(arg5);
+ // fall through
case 4:
argList.prepend(arg4);
+ // fall through
case 3:
argList.prepend(arg3);
+ // fall through
case 2:
argList.prepend(arg2);
+ // fall through
case 1:
argList.prepend(arg1);
}
@@ -819,18 +826,25 @@ QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, const
switch (count) {
case 8:
argList.prepend(arg8);
+ // fall through
case 7:
argList.prepend(arg7);
+ // fall through
case 6:
argList.prepend(arg6);
+ // fall through
case 5:
argList.prepend(arg5);
+ // fall through
case 4:
argList.prepend(arg4);
+ // fall through
case 3:
argList.prepend(arg3);
+ // fall through
case 2:
argList.prepend(arg2);
+ // fall through
case 1:
argList.prepend(arg1);
}
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp
index a59496bce8..027ce935d6 100644
--- a/src/dbus/qdbusserver.cpp
+++ b/src/dbus/qdbusserver.cpp
@@ -110,7 +110,7 @@ QDBusServer::~QDBusServer()
QDBusConnectionManager::instance()->removeConnection(name);
d->serverConnectionNames.clear();
}
- d->serverObject = nullptr;
+ d->serverObject = Q_NULLPTR;
d->ref.store(0);
d->deleteLater();
}
diff --git a/src/gui/configure.json b/src/gui/configure.json
index 318efe5401..f4e2faf08b 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -7,6 +7,7 @@
"commandline": {
"options": {
+ "android-style-assets": "boolean",
"angle": "boolean",
"directfb": "boolean",
"directwrite": "boolean",
@@ -164,7 +165,6 @@
},
"mirclient": {
"label": "Mir client libraries",
- "export": "",
"test": "qpa/mirclient",
"sources": [
{ "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api" }
@@ -172,7 +172,6 @@
},
"mtdev": {
"label": "mtdev",
- "export": "",
"test": "unix/mtdev",
"sources": [
{ "type": "pkgConfig", "args": "mtdev" }
@@ -203,7 +202,6 @@
},
"wayland_server": {
"label": "Wayland Server",
- "export": "",
"test": "qpa/wayland-server",
"sources": [
{ "type": "pkgConfig", "args": "wayland-server" }
@@ -414,6 +412,11 @@
"condition": "features.accessibility && features.xcb && features.dbus",
"output": [ "privateFeature", "feature" ]
},
+ "android-style-assets": {
+ "label": "Android Style Assets",
+ "condition": "config.android",
+ "output": [ "privateFeature" ]
+ },
"angle": {
"label": "ANGLE",
"autoDetect": "features.opengles2 || features.opengl-dynamic",
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index a6eaadd6c5..5f8cbe2cbe 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -9,6 +9,7 @@ QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf
MODULE_PLUGIN_TYPES = \
platforms \
+ platforms/darwin \
xcbglintegrations \
platformthemes \
platforminputcontexts \
diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri
index 3c4d2c0bbf..bac00f7e95 100644
--- a/src/gui/image/image.pri
+++ b/src/gui/image/image.pri
@@ -74,7 +74,7 @@ SOURCES += \
qtConfig(png) {
HEADERS += image/qpnghandler_p.h
SOURCES += image/qpnghandler.cpp
- include($$PWD/../../3rdparty/png_dependency.pri)
+ QMAKE_USE_PRIVATE += libpng
}
# SIMD
diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h
index 583499be76..ed7b7ff7ae 100644
--- a/src/gui/image/qiconloader_p.h
+++ b/src/gui/image/qiconloader_p.h
@@ -95,7 +95,6 @@ public:
QIcon::State state) = 0;
QString filename;
QIconDirInfo dir;
- static int count;
};
struct ScalableEntry : public QIconLoaderEngineEntry
@@ -124,18 +123,18 @@ public:
QIconLoaderEngine(const QString& iconName = QString());
~QIconLoaderEngine();
- void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state);
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
- QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state);
- QIconEngine *clone() const;
- bool read(QDataStream &in);
- bool write(QDataStream &out) const;
+ void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QIconEngine *clone() const Q_DECL_OVERRIDE;
+ bool read(QDataStream &in) Q_DECL_OVERRIDE;
+ bool write(QDataStream &out) const Q_DECL_OVERRIDE;
private:
- QString key() const;
+ QString key() const Q_DECL_OVERRIDE;
bool hasIcon() const;
void ensureLoaded();
- void virtual_hook(int id, void *data);
+ void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
QIconLoaderEngineEntry *entryForSize(const QSize &size);
QIconLoaderEngine(const QIconLoaderEngine &other);
QThemeIconInfo m_info;
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 8bbcfa612d..9e911bdcea 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -5062,7 +5062,7 @@ static Q_CONSTEXPR QPixelFormat pixelformats[] = {
/*ALPHA USAGE*/ QPixelFormat::IgnoresAlpha,
/*ALPHA POSITION*/ QPixelFormat::AtBeginning,
/*PREMULTIPLIED*/ QPixelFormat::NotPremultiplied,
- /*INTERPRETATION*/ QPixelFormat::UnsignedInteger,
+ /*INTERPRETATION*/ QPixelFormat::UnsignedByte,
/*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian),
//QImage::Format_RGB444:
QPixelFormat(QPixelFormat::RGB,
diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp
index 9bd098b7b1..c646ee96b4 100644
--- a/src/gui/image/qimage_conversions.cpp
+++ b/src/gui/image/qimage_conversions.cpp
@@ -930,12 +930,12 @@ static bool convert_indexed8_to_RGB16_inplace(QImageData *data, Qt::ImageConvers
const int dest_pad = (dst_bytes_per_line >> 1) - width;
quint16 colorTableRGB16[256];
- if (data->colortable.isEmpty()) {
+ const int tableSize = data->colortable.size();
+ if (tableSize == 0) {
for (int i = 0; i < 256; ++i)
colorTableRGB16[i] = qConvertRgb32To16(qRgb(i, i, i));
} else {
// 1) convert the existing colors to RGB16
- const int tableSize = data->colortable.size();
for (int i = 0; i < tableSize; ++i)
colorTableRGB16[i] = qConvertRgb32To16(data->colortable.at(i));
data->colortable = QVector<QRgb>();
diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp
index 21127eebbd..f14355bc01 100644
--- a/src/gui/kernel/qclipboard.cpp
+++ b/src/gui/kernel/qclipboard.cpp
@@ -425,8 +425,9 @@ void QClipboard::setPixmap(const QPixmap &pixmap, Mode mode)
/*!
\fn QMimeData *QClipboard::mimeData(Mode mode) const
- Returns a reference to a QMimeData representation of the current
- clipboard data.
+ Returns a pointer to a QMimeData representation of the current
+ clipboard data (can be NULL if the given \a mode is not
+ supported by the platform).
The \a mode argument is used to control which part of the system
clipboard is used. If \a mode is QClipboard::Clipboard, the
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 76386a30a0..14f94951d0 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -352,6 +352,16 @@ void QWindowGeometrySpecification::applyTo(QWindow *window) const
static QWindowGeometrySpecification windowGeometrySpecification = Q_WINDOW_GEOMETRY_SPECIFICATION_INITIALIZER;
/*!
+ \macro qGuiApp
+ \relates QGuiApplication
+
+ A global pointer referring to the unique application object.
+ Only valid for use when that object is a QGuiApplication.
+
+ \sa QCoreApplication::instance(), qApp
+*/
+
+/*!
\class QGuiApplication
\brief The QGuiApplication class manages the GUI application's control
flow and main settings.
diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp
index 3c1552c31e..1d519e84f9 100644
--- a/src/gui/kernel/qplatformscreen.cpp
+++ b/src/gui/kernel/qplatformscreen.cpp
@@ -342,6 +342,10 @@ void QPlatformScreen::resizeMaximizedWindows()
for (int i = 0; i < windows.size(); ++i) {
QWindow *w = windows.at(i);
+ // Skip non-platform windows, e.g., offscreen windows.
+ if (!w->handle())
+ continue;
+
if (platformScreenForWindow(w) != this)
continue;
diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp
index d7dc0faceb..000d727380 100644
--- a/src/gui/kernel/qsurfaceformat.cpp
+++ b/src/gui/kernel/qsurfaceformat.cpp
@@ -41,6 +41,8 @@
#include <QtCore/qatomic.h>
#include <QtCore/QDebug>
+#include <QOpenGLContext>
+#include <QtGui/qguiapplication.h>
#ifdef major
#undef major
@@ -761,6 +763,16 @@ Q_GLOBAL_STATIC(QSurfaceFormat, qt_default_surface_format)
*/
void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format)
{
+#ifndef QT_NO_OPENGL
+ if (qApp) {
+ QOpenGLContext *globalContext = QOpenGLContext::globalShareContext();
+ if (globalContext && globalContext->isValid()) {
+ qWarning("Warning: Setting a new default format with a different version or profile "
+ "after the global shared context is created may cause issues with context "
+ "sharing.");
+ }
+ }
+#endif
*qt_default_surface_format() = format;
}
diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp
index 08aa625112..1f2528dd5c 100644
--- a/src/gui/kernel/qwindowsysteminterface.cpp
+++ b/src/gui/kernel/qwindowsysteminterface.cpp
@@ -165,11 +165,11 @@ void QWindowSystemInterface::handleEnterLeaveEvent(QWindow *enter, QWindow *leav
handleEnterEvent(enter, local, global);
}
-void QWindowSystemInterface::handleWindowActivated(QWindow *tlw, Qt::FocusReason r)
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowActivated, QWindow *tlw, Qt::FocusReason r)
{
QWindowSystemInterfacePrivate::ActivatedWindowEvent *e =
new QWindowSystemInterfacePrivate::ActivatedWindowEvent(tlw, r);
- QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
+ QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
}
void QWindowSystemInterface::handleWindowStateChanged(QWindow *tlw, Qt::WindowState newState)
@@ -197,10 +197,25 @@ void QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState
/*!
If \a oldRect is null, Qt will use the previously reported geometry instead.
*/
-void QWindowSystemInterface::handleGeometryChange(QWindow *tlw, const QRect &newRect, const QRect &oldRect)
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleGeometryChange, QWindow *tlw, const QRect &newRect, const QRect &oldRect)
{
QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw, QHighDpi::fromNativePixels(newRect, tlw), QHighDpi::fromNativePixels(oldRect, tlw));
- QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
+ QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
+}
+
+QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion &region)
+ : WindowSystemEvent(Expose)
+ , window(window)
+ , isExposed(window && window->handle() ? window->handle()->isExposed() : false)
+ , region(region)
+{
+}
+
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleExposeEvent, QWindow *tlw, const QRegion &region)
+{
+ QWindowSystemInterfacePrivate::ExposeEvent *e =
+ new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw));
+ QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
}
void QWindowSystemInterface::handleCloseEvent(QWindow *tlw, bool *accepted)
@@ -405,15 +420,6 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
}
-
-QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion &region)
- : WindowSystemEvent(Expose)
- , window(window)
- , isExposed(window && window->handle() ? window->handle()->isExposed() : false)
- , region(region)
-{
-}
-
int QWindowSystemInterfacePrivate::windowSystemEventsQueued()
{
return windowSystemEventQueue.count();
@@ -634,20 +640,20 @@ QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchEvent, QWindow *tlw, ulong timestam
QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
}
-void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, QTouchDevice *device,
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, QTouchDevice *device,
Qt::KeyboardModifiers mods)
{
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
- handleTouchCancelEvent(w, time, device, mods);
+ handleTouchCancelEvent<Delivery>(w, time, device, mods);
}
-void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device,
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, ulong timestamp, QTouchDevice *device,
Qt::KeyboardModifiers mods)
{
QWindowSystemInterfacePrivate::TouchEvent *e =
new QWindowSystemInterfacePrivate::TouchEvent(w, timestamp, QEvent::TouchCancel, device,
QList<QTouchEvent::TouchPoint>(), mods);
- QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
+ QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
}
void QWindowSystemInterface::handleScreenOrientationChange(QScreen *screen, Qt::ScreenOrientation orientation)
@@ -684,13 +690,6 @@ void QWindowSystemInterface::handleThemeChange(QWindow *tlw)
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
}
-void QWindowSystemInterface::handleExposeEvent(QWindow *tlw, const QRegion &region)
-{
- QWindowSystemInterfacePrivate::ExposeEvent *e =
- new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw));
- QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
-}
-
void QWindowSystemInterface::deferredFlushWindowSystemEvents(QEventLoop::ProcessEventsFlags flags)
{
Q_ASSERT(QThread::currentThread() == QGuiApplication::instance()->thread());
diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h
index 6fade3cc4c..3be3c3188c 100644
--- a/src/gui/kernel/qwindowsysteminterface.h
+++ b/src/gui/kernel/qwindowsysteminterface.h
@@ -150,11 +150,19 @@ public:
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleTouchEvent(QWindow *w, ulong timestamp, QTouchDevice *device,
const QList<struct TouchPoint> &points, Qt::KeyboardModifiers mods = Qt::NoModifier);
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleTouchCancelEvent(QWindow *w, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier);
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier);
// rect is relative to parent
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleGeometryChange(QWindow *w, const QRect &newRect, const QRect &oldRect = QRect());
+
+ // region is in local coordinates, do not confuse with geometry which is parent-relative
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
+ static void handleExposeEvent(QWindow *tlw, const QRegion &region);
+
static void handleCloseEvent(QWindow *w, bool *accepted = Q_NULLPTR);
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
@@ -162,6 +170,7 @@ public:
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleLeaveEvent(QWindow *w);
static void handleEnterLeaveEvent(QWindow *enter, QWindow *leave, const QPointF &local = QPointF(), const QPointF& global = QPointF());
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleWindowActivated(QWindow *w, Qt::FocusReason r = Qt::OtherFocusReason);
static void handleWindowStateChanged(QWindow *w, Qt::WindowState newState);
@@ -169,9 +178,6 @@ public:
static void handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate = false);
- // region is in local coordinates, do not confuse with geometry which is parent-relative
- static void handleExposeEvent(QWindow *tlw, const QRegion &region);
-
#ifndef QT_NO_DRAGANDDROP
// Drag and drop. These events are sent immediately.
static QPlatformDragQtResponse handleDrag(QWindow *w, const QMimeData *dropData, const QPoint &p, Qt::DropActions supportedActions);
diff --git a/src/gui/opengl/KHRONOS_LICENSE.txt b/src/gui/opengl/KHRONOS_LICENSE.txt
new file mode 100644
index 0000000000..63b1e1f940
--- /dev/null
+++ b/src/gui/opengl/KHRONOS_LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2013-2014 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp
index e0f469cbcb..4833617377 100644
--- a/src/gui/opengl/qopenglframebufferobject.cpp
+++ b/src/gui/opengl/qopenglframebufferobject.cpp
@@ -1492,6 +1492,7 @@ bool QOpenGLFramebufferObject::bindDefault()
if (ctx) {
ctx->functions()->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject());
QOpenGLContextPrivate::get(ctx)->qgl_current_fbo_invalid = true;
+ QOpenGLContextPrivate::get(ctx)->qgl_current_fbo = Q_NULLPTR;
}
#ifdef QT_DEBUG
else
diff --git a/src/gui/opengl/qt_attribution.json b/src/gui/opengl/qt_attribution.json
new file mode 100644
index 0000000000..d3ff10d803
--- /dev/null
+++ b/src/gui/opengl/qt_attribution.json
@@ -0,0 +1,32 @@
+[
+ {
+ "Id": "opengl-headers",
+ "Name": "OpenGL Headers",
+ "QDocModule": "qtgui",
+ "Description": "OpenGL header generated from the Khronos OpenGL / OpenGL ES XML API Registry.",
+ "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.",
+ "Path": "qopenglext.h",
+
+ "Homepage": "https://www.khronos.org/",
+ "Version": "Revision 27684",
+ "License": "MIT License",
+ "LicenseId": "MIT",
+ "LicenseFile": "KHRONOS_LICENSE.txt",
+ "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc."
+ },
+ {
+ "Id": "opengl-es2-headers",
+ "Name": "OpenGL ES 2 Headers",
+ "QDocModule": "qtgui",
+ "Description": "OpenGL ES 2 header generated from the Khronos OpenGL / OpenGL ES XML API Registry.",
+ "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.",
+ "Path": "qopengles2ext.h",
+
+ "Homepage": "https://www.khronos.org/",
+ "Version": "Revision 27673",
+ "License": "MIT License",
+ "LicenseId": "MIT",
+ "LicenseFile": "KHRONOS_LICENSE.txt",
+ "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc."
+ }
+]
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 928a56fd2f..2716d92d13 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -836,10 +836,7 @@ static const uint *QT_FASTCALL convertGrayscale8FromARGB32PM(uint *buffer, const
}
template <QPixelLayout::BPP bpp> static
-uint QT_FASTCALL fetchPixel(const uchar *, int)
-{
- Q_UNREACHABLE();
-}
+uint QT_FASTCALL fetchPixel(const uchar *src, int index);
template <>
inline uint QT_FASTCALL fetchPixel<QPixelLayout::BPP1LSB>(const uchar *src, int index)
@@ -1557,11 +1554,92 @@ static const QRgba64 *QT_FASTCALL fetchUntransformed64(QRgba64 *buffer, const Op
}
}
-template<TextureBlendType blendType, QPixelLayout::BPP bpp>
+// blendType is either BlendTransformed or BlendTransformedTiled
+template<TextureBlendType blendType>
+static const uint *QT_FASTCALL fetchTransformedARGB32PM(uint *buffer, const Operator *, const QSpanData *data,
+ int y, int x, int length)
+{
+ int image_width = data->texture.width;
+ int image_height = data->texture.height;
+
+ const qreal cx = x + qreal(0.5);
+ const qreal cy = y + qreal(0.5);
+
+ const uint *end = buffer + length;
+ uint *b = buffer;
+ if (data->fast_matrix) {
+ // The increment pr x in the scanline
+ int fdx = (int)(data->m11 * fixed_scale);
+ int fdy = (int)(data->m12 * fixed_scale);
+
+ int fx = int((data->m21 * cy
+ + data->m11 * cx + data->dx) * fixed_scale);
+ int fy = int((data->m22 * cy
+ + data->m12 * cx + data->dy) * fixed_scale);
+
+ while (b < end) {
+ int px = fx >> 16;
+ int py = fy >> 16;
+
+ if (blendType == BlendTransformedTiled) {
+ px %= image_width;
+ py %= image_height;
+ if (px < 0) px += image_width;
+ if (py < 0) py += image_height;
+ } else {
+ px = qBound(0, px, image_width - 1);
+ py = qBound(0, py, image_height - 1);
+ }
+ *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px];
+
+ fx += fdx;
+ fy += fdy;
+ ++b;
+ }
+ } else {
+ const qreal fdx = data->m11;
+ const qreal fdy = data->m12;
+ const qreal fdw = data->m13;
+
+ qreal fx = data->m21 * cy + data->m11 * cx + data->dx;
+ qreal fy = data->m22 * cy + data->m12 * cx + data->dy;
+ qreal fw = data->m23 * cy + data->m13 * cx + data->m33;
+
+ while (b < end) {
+ const qreal iw = fw == 0 ? 1 : 1 / fw;
+ const qreal tx = fx * iw;
+ const qreal ty = fy * iw;
+ int px = int(tx) - (tx < 0);
+ int py = int(ty) - (ty < 0);
+
+ if (blendType == BlendTransformedTiled) {
+ px %= image_width;
+ py %= image_height;
+ if (px < 0) px += image_width;
+ if (py < 0) py += image_height;
+ } else {
+ px = qBound(0, px, image_width - 1);
+ py = qBound(0, py, image_height - 1);
+ }
+ *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px];
+
+ fx += fdx;
+ fy += fdy;
+ fw += fdw;
+ //force increment to avoid /0
+ if (!fw) {
+ fw += fdw;
+ }
+ ++b;
+ }
+ }
+ return buffer;
+}
+
+template<TextureBlendType blendType> /* either BlendTransformed or BlendTransformedTiled */
static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const QSpanData *data,
int y, int x, int length)
{
- Q_STATIC_ASSERT(blendType == BlendTransformed || blendType == BlendTransformedTiled);
int image_width = data->texture.width;
int image_height = data->texture.height;
@@ -1569,12 +1647,9 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *,
const qreal cy = y + qreal(0.5);
const QPixelLayout *layout = &qPixelLayouts[data->texture.format];
- if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1
- Q_ASSERT(layout->bpp == bpp);
- // When templated 'fetch' should be inlined at compile time:
- const FetchPixelFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel<bpp>;
+ FetchPixelFunc fetch = qFetchPixel[layout->bpp];
- uint *const end = buffer + length;
+ const uint *end = buffer + length;
uint *b = buffer;
if (data->fast_matrix) {
// The increment pr x in the scanline
@@ -2510,17 +2585,12 @@ static const uint * QT_FASTCALL fetchTransformedBilinearARGB32PM(uint *buffer, c
}
// blendType = BlendTransformedBilinear or BlendTransformedBilinearTiled
-template<TextureBlendType blendType, QPixelLayout::BPP bpp>
+template<TextureBlendType blendType>
static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *,
const QSpanData *data, int y, int x, int length)
{
const QPixelLayout *layout = &qPixelLayouts[data->texture.format];
const QVector<QRgb> *clut = data->texture.colorTable;
- if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1
- Q_ASSERT(layout->bpp == bpp);
- // When templated 'fetch' should be inlined at compile time:
- const FetchPixelsFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixels[layout->bpp] : fetchPixels<bpp>;
- const FetchPixelFunc fetch1 = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel<bpp>;
int image_width = data->texture.width;
int image_height = data->texture.height;
@@ -2558,6 +2628,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
// The idea is first to do the interpolation between the row s1 and the row s2
// into an intermediate buffer, then we interpolate between two pixel of this buffer.
+ FetchPixelsFunc fetch = qFetchPixels[layout->bpp];
// +1 for the last pixel to interpolate with, and +1 for rounding errors.
uint buf1[buffer_size + 2];
uint buf2[buffer_size + 2];
@@ -2646,6 +2717,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
fx += fdx;
}
} else {
+ FetchPixelFunc fetch = qFetchPixel[layout->bpp];
uint buf1[buffer_size];
uint buf2[buffer_size];
uint *b = buffer;
@@ -2656,10 +2728,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
int x1 = (fx >> 16);
int x2;
fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2);
- buf1[i * 2 + 0] = fetch1(s1, x1);
- buf1[i * 2 + 1] = fetch1(s1, x2);
- buf2[i * 2 + 0] = fetch1(s2, x1);
- buf2[i * 2 + 1] = fetch1(s2, x2);
+
+ if (layout->bpp == QPixelLayout::BPP32) {
+ buf1[i * 2 + 0] = ((const uint*)s1)[x1];
+ buf1[i * 2 + 1] = ((const uint*)s1)[x2];
+ buf2[i * 2 + 0] = ((const uint*)s2)[x1];
+ buf2[i * 2 + 1] = ((const uint*)s2)[x2];
+ } else {
+ buf1[i * 2 + 0] = fetch(s1, x1);
+ buf1[i * 2 + 1] = fetch(s1, x2);
+ buf2[i * 2 + 0] = fetch(s2, x1);
+ buf2[i * 2 + 1] = fetch(s2, x2);
+ }
+
fx += fdx;
}
layout->convertToARGB32PM(buf1, buf1, len * 2, clut, 0);
@@ -2689,6 +2770,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
}
}
} else { //rotation
+ FetchPixelFunc fetch = qFetchPixel[layout->bpp];
uint buf1[buffer_size];
uint buf2[buffer_size];
uint *b = buffer;
@@ -2707,10 +2789,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
const uchar *s1 = data->texture.scanLine(y1);
const uchar *s2 = data->texture.scanLine(y2);
- buf1[i * 2 + 0] = fetch1(s1, x1);
- buf1[i * 2 + 1] = fetch1(s1, x2);
- buf2[i * 2 + 0] = fetch1(s2, x1);
- buf2[i * 2 + 1] = fetch1(s2, x2);
+
+ if (layout->bpp == QPixelLayout::BPP32) {
+ buf1[i * 2 + 0] = ((const uint*)s1)[x1];
+ buf1[i * 2 + 1] = ((const uint*)s1)[x2];
+ buf2[i * 2 + 0] = ((const uint*)s2)[x1];
+ buf2[i * 2 + 1] = ((const uint*)s2)[x2];
+ } else {
+ buf1[i * 2 + 0] = fetch(s1, x1);
+ buf1[i * 2 + 1] = fetch(s1, x2);
+ buf2[i * 2 + 0] = fetch(s2, x1);
+ buf2[i * 2 + 1] = fetch(s2, x2);
+ }
+
fx += fdx;
fy += fdy;
}
@@ -2757,6 +2848,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
qreal fy = data->m22 * cy + data->m12 * cx + data->dy;
qreal fw = data->m23 * cy + data->m13 * cx + data->m33;
+ FetchPixelFunc fetch = qFetchPixel[layout->bpp];
uint buf1[buffer_size];
uint buf2[buffer_size];
uint *b = buffer;
@@ -2784,10 +2876,18 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper
const uchar *s1 = data->texture.scanLine(y1);
const uchar *s2 = data->texture.scanLine(y2);
- buf1[i * 2 + 0] = fetch1(s1, x1);
- buf1[i * 2 + 1] = fetch1(s1, x2);
- buf2[i * 2 + 0] = fetch1(s2, x1);
- buf2[i * 2 + 1] = fetch1(s2, x2);
+
+ if (layout->bpp == QPixelLayout::BPP32) {
+ buf1[i * 2 + 0] = ((const uint*)s1)[x1];
+ buf1[i * 2 + 1] = ((const uint*)s1)[x2];
+ buf2[i * 2 + 0] = ((const uint*)s2)[x1];
+ buf2[i * 2 + 1] = ((const uint*)s2)[x2];
+ } else {
+ buf1[i * 2 + 0] = fetch(s1, x1);
+ buf1[i * 2 + 1] = fetch(s1, x2);
+ buf2[i * 2 + 0] = fetch(s2, x1);
+ buf2[i * 2 + 1] = fetch(s2, x2);
+ }
fx += fdx;
fy += fdy;
@@ -3193,32 +3293,23 @@ static SourceFetchProc sourceFetchUntransformed[QImage::NImageFormats] = {
};
static const SourceFetchProc sourceFetchGeneric[NBlendTypes] = {
- fetchUntransformed, // Untransformed
- fetchUntransformed, // Tiled
- fetchTransformed<BlendTransformed, QPixelLayout::BPPNone>, // Transformed
- fetchTransformed<BlendTransformedTiled, QPixelLayout::BPPNone>, // TransformedTiled
- fetchTransformedBilinear<BlendTransformedBilinear, QPixelLayout::BPPNone>, // TransformedBilinear
- fetchTransformedBilinear<BlendTransformedBilinearTiled, QPixelLayout::BPPNone> // TransformedBilinearTiled
+ fetchUntransformed, // Untransformed
+ fetchUntransformed, // Tiled
+ fetchTransformed<BlendTransformed>, // Transformed
+ fetchTransformed<BlendTransformedTiled>, // TransformedTiled
+ fetchTransformedBilinear<BlendTransformedBilinear>, // Bilinear
+ fetchTransformedBilinear<BlendTransformedBilinearTiled> // BilinearTiled
};
static SourceFetchProc sourceFetchARGB32PM[NBlendTypes] = {
fetchUntransformedARGB32PM, // Untransformed
fetchUntransformedARGB32PM, // Tiled
- fetchTransformed<BlendTransformed, QPixelLayout::BPP32>, // Transformed
- fetchTransformed<BlendTransformedTiled, QPixelLayout::BPP32>, // TransformedTiled
+ fetchTransformedARGB32PM<BlendTransformed>, // Transformed
+ fetchTransformedARGB32PM<BlendTransformedTiled>, // TransformedTiled
fetchTransformedBilinearARGB32PM<BlendTransformedBilinear>, // Bilinear
fetchTransformedBilinearARGB32PM<BlendTransformedBilinearTiled> // BilinearTiled
};
-static SourceFetchProc sourceFetchAny32[NBlendTypes] = {
- fetchUntransformed, // Untransformed
- fetchUntransformed, // Tiled
- fetchTransformed<BlendTransformed, QPixelLayout::BPP32>, // Transformed
- fetchTransformed<BlendTransformedTiled, QPixelLayout::BPP32>, // TransformedTiled
- fetchTransformedBilinear<BlendTransformedBilinear, QPixelLayout::BPP32>, // TransformedBilinear
- fetchTransformedBilinear<BlendTransformedBilinearTiled, QPixelLayout::BPP32> // TransformedBilinearTiled
-};
-
static const SourceFetchProc64 sourceFetchGeneric64[NBlendTypes] = {
fetchUntransformed64, // Untransformed
fetchUntransformed64, // Tiled
@@ -3234,8 +3325,6 @@ static inline SourceFetchProc getSourceFetch(TextureBlendType blendType, QImage:
return sourceFetchARGB32PM[blendType];
if (blendType == BlendUntransformed || blendType == BlendTiled)
return sourceFetchUntransformed[format];
- if (qPixelLayouts[format].bpp == QPixelLayout::BPP32)
- return sourceFetchAny32[blendType];
return sourceFetchGeneric[blendType];
}
diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h
index 45a3174734..e537c343bb 100644
--- a/src/gui/painting/qdrawhelper_p.h
+++ b/src/gui/painting/qdrawhelper_p.h
@@ -335,6 +335,8 @@ struct QSpanData
QGradientData gradient;
QTextureData texture;
};
+ QExplicitlySharedDataPointer<const QSharedData> cachedGradient;
+
void init(QRasterBuffer *rb, const QRasterPaintEngine *pe);
void setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode);
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index dd6bcdebec..d8aa727328 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -2314,6 +2314,8 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
= QRectF(sr.x() + clippedTargetRect.x() - r.x(), sr.y() + clippedTargetRect.y() - r.y(),
clippedTargetRect.width(), clippedTargetRect.height()).toRect();
+ clippedSourceRect = clippedSourceRect.intersected(img.rect());
+
uint dbpl = d->rasterBuffer->bytesPerLine();
uint sbpl = img.bytesPerLine();
@@ -4178,7 +4180,8 @@ void QRasterBuffer::flushToARGBImage(QImage *target) const
class QGradientCache
{
- struct CacheInfo
+public:
+ struct CacheInfo : public QSharedData
{
inline CacheInfo(QGradientStops s, int op, QGradient::InterpolationMode mode) :
stops(qMove(s)), opacity(op), interpolationMode(mode) {}
@@ -4189,12 +4192,9 @@ class QGradientCache
QGradient::InterpolationMode interpolationMode;
};
- typedef QMultiHash<quint64, CacheInfo> QGradientColorTableHash;
-
-public:
- typedef QPair<const QRgb *, const QRgba64 *> ColorBufferPair;
+ typedef QMultiHash<quint64, QExplicitlySharedDataPointer<const CacheInfo> > QGradientColorTableHash;
- inline ColorBufferPair getBuffer(const QGradient &gradient, int opacity) {
+ inline QExplicitlySharedDataPointer<const CacheInfo> getBuffer(const QGradient &gradient, int opacity) {
quint64 hash_val = 0;
const QGradientStops stops = gradient.stops();
@@ -4208,10 +4208,9 @@ public:
return addCacheElement(hash_val, gradient, opacity);
else {
do {
- const CacheInfo &cache_info = it.value();
- if (cache_info.stops == stops && cache_info.opacity == opacity && cache_info.interpolationMode == gradient.interpolationMode())
- return qMakePair(reinterpret_cast<const QRgb *>(cache_info.buffer32),
- reinterpret_cast<const QRgba64 *>(cache_info.buffer64));
+ const QExplicitlySharedDataPointer<const CacheInfo> &cache_info = it.value();
+ if (cache_info->stops == stops && cache_info->opacity == opacity && cache_info->interpolationMode == gradient.interpolationMode())
+ return cache_info;
++it;
} while (it != cache.constEnd() && it.key() == hash_val);
// an exact match for these stops and opacity was not found, create new cache
@@ -4225,18 +4224,16 @@ protected:
inline void generateGradientColorTable(const QGradient& g,
QRgba64 *colorTable,
int size, int opacity) const;
- ColorBufferPair addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) {
+ QExplicitlySharedDataPointer<const CacheInfo> addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) {
if (cache.size() == maxCacheSize()) {
// may remove more than 1, but OK
cache.erase(cache.begin() + (qrand() % maxCacheSize()));
}
- CacheInfo cache_entry(gradient.stops(), opacity, gradient.interpolationMode());
- generateGradientColorTable(gradient, cache_entry.buffer64, paletteSize(), opacity);
+ QExplicitlySharedDataPointer<CacheInfo> cache_entry(new CacheInfo (gradient.stops(), opacity, gradient.interpolationMode()));
+ generateGradientColorTable(gradient, cache_entry->buffer64, paletteSize(), opacity);
for (int i = 0; i < GRADIENT_STOPTABLE_SIZE; ++i)
- cache_entry.buffer32[i] = cache_entry.buffer64[i].toArgb32();
- CacheInfo &cache_value = cache.insert(hash_val, cache_entry).value();
- return qMakePair(reinterpret_cast<const QRgb *>(cache_value.buffer32),
- reinterpret_cast<const QRgba64 *>(cache_value.buffer64));
+ cache_entry->buffer32[i] = cache_entry->buffer64[i].toArgb32();
+ return cache.insert(hash_val, cache_entry).value();
}
QGradientColorTableHash cache;
@@ -4455,6 +4452,7 @@ Q_GUI_EXPORT extern QImage qt_imageForBrush(int brushStyle, bool invert);
void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode)
{
Qt::BrushStyle brushStyle = qbrush_style(brush);
+ cachedGradient.reset();
switch (brushStyle) {
case Qt::SolidPattern: {
type = Solid;
@@ -4471,9 +4469,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode
const QLinearGradient *g = static_cast<const QLinearGradient *>(brush.gradient());
gradient.alphaColor = !brush.isOpaque() || alpha != 256;
- QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha);
- gradient.colorTable64 = colorBuffers.second;
- gradient.colorTable32 = colorBuffers.first;
+ QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha);
+ cachedGradient = cacheInfo;
+ gradient.colorTable32 = cacheInfo->buffer32;
+ gradient.colorTable64 = cacheInfo->buffer64;
gradient.spread = g->spread();
@@ -4492,9 +4491,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode
const QRadialGradient *g = static_cast<const QRadialGradient *>(brush.gradient());
gradient.alphaColor = !brush.isOpaque() || alpha != 256;
- QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha);
- gradient.colorTable64 = colorBuffers.second;
- gradient.colorTable32 = colorBuffers.first;
+ QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha);
+ cachedGradient = cacheInfo;
+ gradient.colorTable32 = cacheInfo->buffer32;
+ gradient.colorTable64 = cacheInfo->buffer64;
gradient.spread = g->spread();
@@ -4517,9 +4517,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode
const QConicalGradient *g = static_cast<const QConicalGradient *>(brush.gradient());
gradient.alphaColor = !brush.isOpaque() || alpha != 256;
- QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha);
- gradient.colorTable64 = colorBuffers.second;
- gradient.colorTable32 = colorBuffers.first;
+ QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha);
+ cachedGradient = cacheInfo;
+ gradient.colorTable32 = cacheInfo->buffer32;
+ gradient.colorTable64 = cacheInfo->buffer64;
gradient.spread = QGradient::RepeatSpread;
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 6472481e7a..74b961f042 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -6439,7 +6439,8 @@ void QPainterPrivate::drawTextItem(const QPointF &p, const QTextItem &_ti, QText
updateState(state);
if (!ti.glyphs.numGlyphs) {
- // nothing to do
+ drawTextItemDecoration(q, p, ti.fontEngine, textEngine, ti.underlineStyle,
+ ti.flags, ti.width.toReal(), ti.charFormat);
} else if (ti.fontEngine->type() == QFontEngine::Multi) {
QFontEngineMulti *multi = static_cast<QFontEngineMulti *>(ti.fontEngine);
diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp
index f92a681eca..addd9c0c2c 100644
--- a/src/gui/painting/qpathclipper.cpp
+++ b/src/gui/painting/qpathclipper.cpp
@@ -1458,25 +1458,6 @@ QPathClipper::QPathClipper(const QPainterPath &subject,
bMask = clipPath.fillRule() == Qt::WindingFill ? ~0x0 : 0x1;
}
-template <typename Iterator, typename Equality>
-Iterator qRemoveDuplicates(Iterator begin, Iterator end, Equality eq)
-{
- if (begin == end)
- return end;
-
- Iterator last = begin;
- ++begin;
- Iterator insert = begin;
- for (Iterator it = begin; it != end; ++it) {
- if (!eq(*it, *last)) {
- *insert++ = *it;
- last = it;
- }
- }
-
- return insert;
-}
-
static void clear(QWingedEdge& list, int edge, QPathEdge::Traversal traversal)
{
QWingedEdge::TraversalStatus status;
@@ -1643,7 +1624,7 @@ bool QPathClipper::doClip(QWingedEdge &list, ClipperMode mode)
y_coords << list.vertex(i)->y;
std::sort(y_coords.begin(), y_coords.end());
- y_coords.resize(qRemoveDuplicates(y_coords.begin(), y_coords.end(), fuzzyCompare) - y_coords.begin());
+ y_coords.erase(std::unique(y_coords.begin(), y_coords.end(), fuzzyCompare), y_coords.end());
#ifdef QDEBUG_CLIPPER
printf("sorted y coords:\n");
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index d246c96da6..84e18a64dd 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -1924,7 +1924,7 @@ int QPdfEnginePrivate::writeCompressed(const char *src, int len)
}
int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height, int depth,
- int maskObject, int softMaskObject, bool dct)
+ int maskObject, int softMaskObject, bool dct, bool isMono)
{
int image = addXrefEntry(-1);
xprintf("<<\n"
@@ -1934,8 +1934,13 @@ int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height,
"/Height %d\n", width, height);
if (depth == 1) {
- xprintf("/ImageMask true\n"
- "/Decode [1 0]\n");
+ if (!isMono) {
+ xprintf("/ImageMask true\n"
+ "/Decode [1 0]\n");
+ } else {
+ xprintf("/BitsPerComponent 1\n"
+ "/ColorSpace /DeviceGray\n");
+ }
} else {
xprintf("/BitsPerComponent 8\n"
"/ColorSpace %s\n", (depth == 32) ? "/DeviceRGB" : "/DeviceGray");
@@ -2453,7 +2458,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
memcpy(rawdata, image.constScanLine(y), bytesPerLine);
rawdata += bytesPerLine;
}
- object = writeImage(data, w, h, d, 0, 0);
+ object = writeImage(data, w, h, d, 0, 0, false, is_monochrome(img.colorTable()));
} else {
QByteArray softMaskData;
bool dct = false;
diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h
index cb1a91e09f..a6aa2940c8 100644
--- a/src/gui/painting/qpdf_p.h
+++ b/src/gui/painting/qpdf_p.h
@@ -295,7 +295,7 @@ private:
int streampos;
int writeImage(const QByteArray &data, int width, int height, int depth,
- int maskObject, int softMaskObject, bool dct = false);
+ int maskObject, int softMaskObject, bool dct = false, bool isMono = false);
void writePage();
int addXrefEntry(int object, bool printostr = true);
diff --git a/src/gui/painting/qt_attribution.json b/src/gui/painting/qt_attribution.json
new file mode 100644
index 0000000000..f635cf98ac
--- /dev/null
+++ b/src/gui/painting/qt_attribution.json
@@ -0,0 +1,14 @@
+{
+ "Id": "grayraster",
+ "Name": "Anti-aliasing rasterizer from FreeType 2",
+ "QDocModule": "qtgui",
+ "QtUsage": "Used in Qt GUI.",
+ "Path": "qgrayraster.c",
+
+ "Description": "FreeType is a freely available software library to render fonts.",
+ "Homepage": "http://www.freetype.org",
+ "License": "Freetype Project License or GNU General Public License v2.0 only",
+ "LicenseId": "FTL or GPL-2.0",
+ "LicenseFile": "../../3rdparty/freetype/docs/LICENSE.TXT",
+ "Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg."
+}
diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp
index cb19a42688..31d832a9ce 100644
--- a/src/gui/text/qcssparser.cpp
+++ b/src/gui/text/qcssparser.cpp
@@ -746,8 +746,9 @@ static ColorData parseColorValue(QCss::Value v)
QVector<QCss::Value> colorDigits;
if (!p.parseExpr(&colorDigits))
return ColorData();
+ const int tokenCount = colorDigits.count();
- for (int i = 0; i < qMin(colorDigits.count(), 7); i += 2) {
+ for (int i = 0; i < qMin(tokenCount, 7); i += 2) {
if (colorDigits.at(i).type == Value::Percentage) {
colorDigits[i].variant = colorDigits.at(i).variant.toReal() * (255. / 100.);
colorDigits[i].type = Value::Number;
@@ -756,11 +757,15 @@ static ColorData parseColorValue(QCss::Value v)
}
}
+
+ if (tokenCount < 5)
+ return ColorData();
+
int v1 = colorDigits.at(0).variant.toInt();
int v2 = colorDigits.at(2).variant.toInt();
int v3 = colorDigits.at(4).variant.toInt();
int alpha = 255;
- if (colorDigits.count() >= 7) {
+ if (tokenCount >= 7) {
int alphaValue = colorDigits.at(6).variant.toInt();
if (rgba && alphaValue <= 1)
alpha = colorDigits.at(6).variant.toReal() * 255.;
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 7fcac9b9f2..d2da24ca94 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -804,7 +804,8 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo
Q_UNUSED(family);
Q_UNUSED(styleHint);
- QStringList retList;
+ QStringList preferredFallbacks;
+ QStringList otherFallbacks;
size_t writingSystem = std::find(scriptForWritingSystem,
scriptForWritingSystem + QFontDatabase::WritingSystemsCount,
@@ -825,18 +826,18 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo
QtFontFoundry *foundry = f->foundries[j];
for (int k = 0; k < foundry->count; ++k) {
- if (style == foundry->styles[k]->key.style) {
- if (foundry->name.isEmpty())
- retList.append(f->name);
- else
- retList.append(f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']'));
- break;
- }
+ QString name = foundry->name.isEmpty()
+ ? f->name
+ : f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']');
+ if (style == foundry->styles[k]->key.style)
+ preferredFallbacks.append(name);
+ else
+ otherFallbacks.append(name);
}
}
}
- return retList;
+ return preferredFallbacks + otherFallbacks;
}
static void initializeDb();
@@ -1659,9 +1660,6 @@ bool QFontDatabase::isFixedPitch(const QString &family,
bool QFontDatabase::isBitmapScalable(const QString &family,
const QString &style) const
{
- if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
- return true;
-
bool bitmapScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1702,9 +1700,6 @@ bool QFontDatabase::isBitmapScalable(const QString &family,
*/
bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style) const
{
- if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
- return true;
-
bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index d6af6d21a2..09b0475a84 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -1910,7 +1910,7 @@ void QFontEngineFT::unlockAlphaMapForGlyph()
static inline bool is2dRotation(const QTransform &t)
{
return qFuzzyCompare(t.m11(), t.m22()) && qFuzzyCompare(t.m12(), -t.m21())
- && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), 1.0);
+ && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), qreal(1.0));
}
QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g,
diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri
index 3fe47a6645..c1c52f2d1a 100644
--- a/src/gui/text/text.pri
+++ b/src/gui/text/text.pri
@@ -88,7 +88,7 @@ HEADERS += \
qtConfig(harfbuzz)|qtConfig(system-harfbuzz) {
DEFINES += QT_ENABLE_HARFBUZZ_NG
- include($$PWD/../../3rdparty/harfbuzz_dependency.pri)
+ QMAKE_USE_PRIVATE += harfbuzz
SOURCES += text/qharfbuzzng.cpp
HEADERS += text/qharfbuzzng_p.h
diff --git a/src/network/access/http2/http2frames.cpp b/src/network/access/http2/http2frames.cpp
index 978bee09b1..5a684c2f41 100644
--- a/src/network/access/http2/http2frames.cpp
+++ b/src/network/access/http2/http2frames.cpp
@@ -244,6 +244,24 @@ quint32 Frame::dataSize() const
return size;
}
+quint32 Frame::hpackBlockSize() const
+{
+ Q_ASSERT(validatePayload() == FrameStatus::goodFrame);
+
+ const auto frameType = type();
+ Q_ASSERT(frameType == FrameType::HEADERS ||
+ frameType == FrameType::PUSH_PROMISE ||
+ frameType == FrameType::CONTINUATION);
+
+ quint32 size = dataSize();
+ if (frameType == FrameType::PUSH_PROMISE) {
+ Q_ASSERT(size >= 4);
+ size -= 4;
+ }
+
+ return size;
+}
+
const uchar *Frame::dataBegin() const
{
Q_ASSERT(validatePayload() == FrameStatus::goodFrame);
@@ -260,6 +278,21 @@ const uchar *Frame::dataBegin() const
return src;
}
+const uchar *Frame::hpackBlockBegin() const
+{
+ Q_ASSERT(validatePayload() == FrameStatus::goodFrame);
+
+ const auto frameType = type();
+ Q_ASSERT(frameType == FrameType::HEADERS ||
+ frameType == FrameType::PUSH_PROMISE ||
+ frameType == FrameType::CONTINUATION);
+
+ const uchar *begin = dataBegin();
+ if (frameType == FrameType::PUSH_PROMISE)
+ begin += 4; // That's a promised stream, skip it.
+ return begin;
+}
+
FrameStatus FrameReader::read(QAbstractSocket &socket)
{
if (offset < frameHeaderSize) {
diff --git a/src/network/access/http2/http2frames_p.h b/src/network/access/http2/http2frames_p.h
index 84ba9c3662..e5f6d46c67 100644
--- a/src/network/access/http2/http2frames_p.h
+++ b/src/network/access/http2/http2frames_p.h
@@ -71,27 +71,29 @@ namespace Http2
struct Q_AUTOTEST_EXPORT Frame
{
Frame();
- // Reading these values without first forming a valid frame
- // (either reading it from a socket or building it) will result
- // in undefined behavior:
+ // Reading these values without first forming a valid frame (either reading
+ // it from a socket or building it) will result in undefined behavior:
FrameType type() const;
quint32 streamID() const;
FrameFlags flags() const;
quint32 payloadSize() const;
uchar padding() const;
- // In HTTP/2 a stream's priority is specified by its weight
- // and a stream (id) it depends on:
+ // In HTTP/2 a stream's priority is specified by its weight and a stream
+ // (id) it depends on:
bool priority(quint32 *streamID = nullptr,
uchar *weight = nullptr) const;
FrameStatus validateHeader() const;
FrameStatus validatePayload() const;
- // Number of payload bytes without padding and/or priority
+ // Number of payload bytes without padding and/or priority.
quint32 dataSize() const;
- // Beginning of payload without priority/padding
- // bytes.
+ // HEADERS data size for HEADERS, PUSH_PROMISE and CONTINUATION streams:
+ quint32 hpackBlockSize() const;
+ // Beginning of payload without priority/padding bytes.
const uchar *dataBegin() const;
+ // HEADERS data beginning for HEADERS, PUSH_PROMISE and CONTINUATION streams:
+ const uchar *hpackBlockBegin() const;
std::vector<uchar> buffer;
};
@@ -134,8 +136,7 @@ public:
void setFlags(FrameFlags flags);
void addFlag(FrameFlag flag);
- // All append functions also update frame's payload
- // length.
+ // All append functions also update frame's payload length.
template<typename ValueType>
void append(ValueType val)
{
@@ -161,16 +162,14 @@ public:
// Write as a single frame:
bool write(QAbstractSocket &socket) const;
- // Two types of frames we are sending are affected by
- // frame size limits: HEADERS and DATA. HEADERS' payload
- // (hpacked HTTP headers, following a frame header)
- // is always in our 'buffer', we send the initial HEADERS
+ // Two types of frames we are sending are affected by frame size limits:
+ // HEADERS and DATA. HEADERS' payload (hpacked HTTP headers, following a
+ // frame header) is always in our 'buffer', we send the initial HEADERS
// frame first and then CONTINUTATION frame(s) if needed:
bool writeHEADERS(QAbstractSocket &socket, quint32 sizeLimit);
- // With DATA frames the actual payload is never in our 'buffer',
- // it's a 'readPointer' from QNonContiguousData. We split
- // this payload as needed into DATA frames with correct
- // payload size fitting into frame size limit:
+ // With DATA frames the actual payload is never in our 'buffer', it's a
+ // 'readPointer' from QNonContiguousData. We split this payload as needed
+ // into DATA frames with correct payload size fitting into frame size limit:
bool writeDATA(QAbstractSocket &socket, quint32 sizeLimit,
const uchar *src, quint32 size);
private:
diff --git a/src/network/access/http2/http2protocol_p.h b/src/network/access/http2/http2protocol_p.h
index 5c46949e23..5d730404bb 100644
--- a/src/network/access/http2/http2protocol_p.h
+++ b/src/network/access/http2/http2protocol_p.h
@@ -127,6 +127,10 @@ enum Http2PredefinedParameters
maxConcurrentStreams = 100 // HTTP/2, 6.5.2
};
+// It's int, it has internal linkage, it's ok to have it in headers -
+// no ODR violation is possible.
+const quint32 lastValidStreamID((quint32(1) << 31) - 1); // HTTP/2, 5.1.1
+
extern const Q_AUTOTEST_EXPORT char Http2clientPreface[clientPrefaceLength];
enum class FrameStatus
diff --git a/src/network/access/http2/http2streams.cpp b/src/network/access/http2/http2streams.cpp
index 660100f5e4..fa39c1d57b 100644
--- a/src/network/access/http2/http2streams.cpp
+++ b/src/network/access/http2/http2streams.cpp
@@ -61,6 +61,15 @@ Stream::Stream(const HttpMessagePair &message, quint32 id, qint32 sendSize, qint
{
}
+Stream::Stream(const QString &cacheKey, quint32 id, qint32 recvSize)
+ : streamID(id),
+ // sendWindow is 0, this stream only receives data
+ recvWindow(recvSize),
+ state(remoteReserved),
+ key(cacheKey)
+{
+}
+
QHttpNetworkReply *Stream::reply() const
{
return httpPair.second;
@@ -99,6 +108,6 @@ QNonContiguousByteDevice *Stream::data() const
return httpPair.first.uploadByteDevice();
}
-}
+} // namespace Http2
QT_END_NAMESPACE
diff --git a/src/network/access/http2/http2streams_p.h b/src/network/access/http2/http2streams_p.h
index 8a825a5457..8465486ae8 100644
--- a/src/network/access/http2/http2streams_p.h
+++ b/src/network/access/http2/http2streams_p.h
@@ -51,10 +51,16 @@
// We mean it.
//
+#include "http2frames_p.h"
+#include "hpack_p.h"
+
#include <private/qhttpnetworkconnectionchannel_p.h>
#include <private/qhttpnetworkrequest_p.h>
#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+#include <vector>
QT_BEGIN_NAMESPACE
@@ -70,12 +76,16 @@ struct Q_AUTOTEST_EXPORT Stream
open,
halfClosedLocal,
halfClosedRemote,
+ remoteReserved,
closed
};
Stream();
+ // That's a ctor for a client-initiated stream:
Stream(const HttpMessagePair &message, quint32 streamID, qint32 sendSize,
qint32 recvSize);
+ // That's a reserved stream, created by PUSH_PROMISE from a server:
+ Stream(const QString &key, quint32 streamID, qint32 recvSize);
QHttpNetworkReply *reply() const;
const QHttpNetworkRequest &request() const;
@@ -92,9 +102,22 @@ struct Q_AUTOTEST_EXPORT Stream
qint32 recvWindow = 65535;
StreamState state = idle;
+ QString key; // for PUSH_PROMISE
+};
+
+struct PushPromise
+{
+ quint32 reservedID = 0;
+ // PUSH_PROMISE has its own HEADERS,
+ // usually similar to what request has:
+ HPack::HttpHeader pushHeader;
+ // Response has its own (normal) HEADERS:
+ HPack::HttpHeader responseHeader;
+ // DATA frames on a promised stream:
+ std::vector<Frame> dataFrames;
};
-}
+} // namespace Http2
QT_END_NAMESPACE
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 68a00c6837..3fa0c18dc0 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -108,6 +108,41 @@ HPack::HttpHeader build_headers(const QHttpNetworkRequest &request, quint32 maxH
return header;
}
+std::vector<uchar> assemble_hpack_block(const std::vector<Http2::Frame> &frames)
+{
+ std::vector<uchar> hpackBlock;
+
+ quint32 total = 0;
+ for (const auto &frame : frames)
+ total += frame.hpackBlockSize();
+
+ if (!total)
+ return hpackBlock;
+
+ hpackBlock.resize(total);
+ auto dst = hpackBlock.begin();
+ for (const auto &frame : frames) {
+ if (const auto hpackBlockSize = frame.hpackBlockSize()) {
+ const uchar *src = frame.hpackBlockBegin();
+ std::copy(src, src + hpackBlockSize, dst);
+ dst += hpackBlockSize;
+ }
+ }
+
+ return hpackBlock;
+}
+
+QUrl urlkey_from_request(const QHttpNetworkRequest &request)
+{
+ QUrl url;
+
+ url.setScheme(request.url().scheme());
+ url.setAuthority(request.url().authority(QUrl::FullyEncoded | QUrl::RemoveUserInfo));
+ url.setPath(QLatin1String(request.uri(false)));
+
+ return url;
+}
+
bool sum_will_overflow(qint32 windowSize, qint32 delta)
{
if (windowSize > 0)
@@ -131,6 +166,9 @@ QHttp2ProtocolHandler::QHttp2ProtocolHandler(QHttpNetworkConnectionChannel *chan
encoder(HPack::FieldLookupTable::DefaultSize, true)
{
continuedFrames.reserve(20);
+ bool ok = false;
+ const int env = qEnvironmentVariableIntValue("QT_HTTP2_ENABLE_PUSH_PROMISE", &ok);
+ pushPromiseEnabled = ok && env;
}
void QHttp2ProtocolHandler::_q_uploadDataReadyRead()
@@ -241,10 +279,25 @@ bool QHttp2ProtocolHandler::sendRequest()
if (!requests.size())
return true;
+ m_channel->state = QHttpNetworkConnectionChannel::WritingState;
+ // Check what was promised/pushed, maybe we do not have to send a request
+ // and have a response already?
+
+ for (auto it = requests.begin(), endIt = requests.end(); it != endIt;) {
+ const auto key = urlkey_from_request(it->first).toString();
+ if (!promisedData.contains(key)) {
+ ++it;
+ continue;
+ }
+ // Woo-hoo, we do not have to ask, the answer is ready for us:
+ HttpMessagePair message = *it;
+ it = requests.erase(it);
+ initReplyFromPushPromise(message, key);
+ }
+
const auto streamsToUse = std::min<quint32>(maxConcurrentStreams - activeStreams.size(),
requests.size());
auto it = requests.begin();
- m_channel->state = QHttpNetworkConnectionChannel::WritingState;
for (quint32 i = 0; i < streamsToUse; ++i) {
const qint32 newStreamID = createNewStream(*it);
if (!newStreamID) {
@@ -293,11 +346,11 @@ bool QHttp2ProtocolHandler::sendClientPreface()
// 6.5 SETTINGS
frameWriter.start(FrameType::SETTINGS, FrameFlag::EMPTY, Http2::connectionStreamID);
- // MAX frame size (16 kb), disable PUSH
+ // MAX frame size (16 kb), enable/disable PUSH
frameWriter.append(Settings::MAX_FRAME_SIZE_ID);
frameWriter.append(quint32(Http2::maxFrameSize));
frameWriter.append(Settings::ENABLE_PUSH_ID);
- frameWriter.append(quint32(0));
+ frameWriter.append(quint32(pushPromiseEnabled));
if (!frameWriter.write(*m_socket))
return false;
@@ -621,7 +674,7 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE()
// 6.6 PUSH_PROMISE.
Q_ASSERT(inboundFrame.type() == FrameType::PUSH_PROMISE);
- if (prefaceSent && !waitingForSettingsACK) {
+ if (!pushPromiseEnabled && prefaceSent && !waitingForSettingsACK) {
// This means, server ACKed our 'NO PUSH',
// but sent us PUSH_PROMISE anyway.
return connectionError(PROTOCOL_ERROR, "unexpected PUSH_PROMISE frame");
@@ -639,15 +692,19 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE()
}
const auto reservedID = qFromBigEndian<quint32>(inboundFrame.dataBegin());
- if (!reservedID || (reservedID & 0x1)) {
+ if ((reservedID & 1) || reservedID <= lastPromisedID ||
+ reservedID > Http2::lastValidStreamID) {
return connectionError(PROTOCOL_ERROR,
"PUSH_PROMISE with invalid promised stream ID");
}
- // "ignoring a PUSH_PROMISE frame causes the stream
- // state to become indeterminate" - let's RST_STREAM it then ...
- sendRST_STREAM(reservedID, REFUSE_STREAM);
- markAsReset(reservedID);
+ lastPromisedID = reservedID;
+
+ if (!pushPromiseEnabled) {
+ // "ignoring a PUSH_PROMISE frame causes the stream state to become
+ // indeterminate" - let's send RST_STREAM frame with REFUSE_STREAM code.
+ resetPromisedStream(inboundFrame, Http2::REFUSE_STREAM);
+ }
const bool endHeaders = inboundFrame.flags().testFlag(FrameFlag::END_HEADERS);
continuedFrames.clear();
@@ -710,7 +767,7 @@ void QHttp2ProtocolHandler::handleGOAWAY()
// "A server that is attempting to gracefully shut down a connection SHOULD
// send an initial GOAWAY frame with the last stream identifier set to 2^31-1
// and a NO_ERROR code."
- if (lastStreamID != (quint32(1) << 31) - 1 || errorCode != HTTP2_NO_ERROR)
+ if (lastStreamID != Http2::lastValidStreamID || errorCode != HTTP2_NO_ERROR)
return connectionError(PROTOCOL_ERROR, "GOAWAY invalid stream/error code");
lastStreamID = 1;
} else {
@@ -795,16 +852,24 @@ void QHttp2ProtocolHandler::handleCONTINUATION()
void QHttp2ProtocolHandler::handleContinuedHEADERS()
{
+ // 'Continued' HEADERS can be: the initial HEADERS/PUSH_PROMISE frame
+ // with/without END_HEADERS flag set plus, if no END_HEADERS flag,
+ // a sequence of one or more CONTINUATION frames.
Q_ASSERT(continuedFrames.size());
+ const auto firstFrameType = continuedFrames[0].type();
+ Q_ASSERT(firstFrameType == FrameType::HEADERS ||
+ firstFrameType == FrameType::PUSH_PROMISE);
const auto streamID = continuedFrames[0].streamID();
- if (continuedFrames[0].type() == FrameType::HEADERS) {
+ if (firstFrameType == FrameType::HEADERS) {
if (activeStreams.contains(streamID)) {
Stream &stream = activeStreams[streamID];
- if (stream.state != Stream::halfClosedLocal) {
- // If we're receiving headers, they're a response to a request we sent;
- // and we closed our end when we finished sending that.
+ if (stream.state != Stream::halfClosedLocal
+ && stream.state != Stream::remoteReserved) {
+ // We can receive HEADERS on streams initiated by our requests
+ // (these streams are in halfClosedLocal state) or remote-reserved
+ // streams from a server's PUSH_PROMISE.
finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError,
QLatin1String("HEADERS on invalid stream"));
sendRST_STREAM(streamID, CANCEL);
@@ -815,42 +880,49 @@ void QHttp2ProtocolHandler::handleContinuedHEADERS()
} else if (!streamWasReset(streamID)) {
return connectionError(PROTOCOL_ERROR, "HEADERS on invalid stream");
}
+ // Else: we cannot just ignore our peer's HEADERS frames - they change
+ // HPACK context - even though the stream was reset; apparently the peer
+ // has yet to see the reset.
}
- quint32 total = 0;
- for (const auto &frame : continuedFrames)
- total += frame.dataSize();
+ std::vector<uchar> hpackBlock(assemble_hpack_block(continuedFrames));
+ if (!hpackBlock.size()) {
+ // It could be a PRIORITY sent in HEADERS - already handled by this
+ // point in handleHEADERS. If it was PUSH_PROMISE (HTTP/2 8.2.1):
+ // "The header fields in PUSH_PROMISE and any subsequent CONTINUATION
+ // frames MUST be a valid and complete set of request header fields
+ // (Section 8.1.2.3) ... If a client receives a PUSH_PROMISE that does
+ // not include a complete and valid set of header fields or the :method
+ // pseudo-header field identifies a method that is not safe, it MUST
+ // respond with a stream error (Section 5.4.2) of type PROTOCOL_ERROR."
+ if (firstFrameType == FrameType::PUSH_PROMISE)
+ resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR);
- if (!total) {
- // It could be a PRIORITY sent in HEADERS - handled by this point.
return;
}
- std::vector<uchar> hpackBlock(total);
- auto dst = hpackBlock.begin();
- for (const auto &frame : continuedFrames) {
- if (!frame.dataSize())
- continue;
- const uchar *src = frame.dataBegin();
- std::copy(src, src + frame.dataSize(), dst);
- dst += frame.dataSize();
- }
-
- HPack::BitIStream inputStream{&hpackBlock[0],
- &hpackBlock[0] + hpackBlock.size()};
-
+ HPack::BitIStream inputStream{&hpackBlock[0], &hpackBlock[0] + hpackBlock.size()};
if (!decoder.decodeHeaderFields(inputStream))
return connectionError(COMPRESSION_ERROR, "HPACK decompression failed");
- if (continuedFrames[0].type() == FrameType::HEADERS) {
+ switch (firstFrameType) {
+ case FrameType::HEADERS:
if (activeStreams.contains(streamID)) {
Stream &stream = activeStreams[streamID];
updateStream(stream, decoder.decodedHeader());
+ // No DATA frames.
if (continuedFrames[0].flags() & FrameFlag::END_STREAM) {
finishStream(stream);
deleteActiveStream(stream.streamID);
}
}
+ break;
+ case FrameType::PUSH_PROMISE:
+ if (!tryReserveStream(continuedFrames[0], decoder.decodedHeader()))
+ resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR);
+ break;
+ default:
+ break;
}
}
@@ -923,10 +995,26 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
return true;
}
-void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers)
+void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers,
+ Qt::ConnectionType connectionType)
{
const auto httpReply = stream.reply();
- Q_ASSERT(httpReply);
+ Q_ASSERT(httpReply || stream.state == Stream::remoteReserved);
+
+ if (!httpReply) {
+ // It's a PUSH_PROMISEd HEADERS, no actual request/reply
+ // exists yet, we have to cache this data for a future
+ // (potential) request.
+
+ // TODO: the part with assignment is not especially cool
+ // or beautiful, good that at least QByteArray is implicitly
+ // sharing data. To be refactored (std::move).
+ Q_ASSERT(promisedData.contains(stream.key));
+ PushPromise &promise = promisedData[stream.key];
+ promise.responseHeader = headers;
+ return;
+ }
+
const auto httpReplyPrivate = httpReply->d_func();
for (const auto &pair : headers) {
const auto &name = pair.name;
@@ -951,18 +1039,30 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader
}
}
- emit httpReply->headerChanged();
+ if (connectionType == Qt::DirectConnection)
+ emit httpReply->headerChanged();
+ else
+ QMetaObject::invokeMethod(httpReply, "headerChanged", connectionType);
}
-void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame)
+void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame,
+ Qt::ConnectionType connectionType)
{
Q_ASSERT(frame.type() == FrameType::DATA);
+ auto httpReply = stream.reply();
+ Q_ASSERT(httpReply || stream.state == Stream::remoteReserved);
+
+ if (!httpReply) {
+ Q_ASSERT(promisedData.contains(stream.key));
+ PushPromise &promise = promisedData[stream.key];
+ // TODO: refactor this to use std::move.
+ promise.dataFrames.push_back(frame);
+ return;
+ }
if (const auto length = frame.dataSize()) {
const char *data = reinterpret_cast<const char *>(frame.dataBegin());
auto &httpRequest = stream.request();
- auto httpReply = stream.reply();
- Q_ASSERT(httpReply);
auto replyPrivate = httpReply->d_func();
replyPrivate->compressedData.append(data, length);
@@ -978,24 +1078,38 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame)
}
if (replyPrivate->shouldEmitSignals()) {
- emit httpReply->readyRead();
- emit httpReply->dataReadProgress(replyPrivate->totalProgress, replyPrivate->bodyLength);
+ if (connectionType == Qt::DirectConnection) {
+ emit httpReply->readyRead();
+ emit httpReply->dataReadProgress(replyPrivate->totalProgress,
+ replyPrivate->bodyLength);
+ } else {
+ QMetaObject::invokeMethod(httpReply, "readyRead", connectionType);
+ QMetaObject::invokeMethod(httpReply, "dataReadProgress", connectionType,
+ Q_ARG(qint64, replyPrivate->totalProgress),
+ Q_ARG(qint64, replyPrivate->bodyLength));
+ }
}
}
}
-void QHttp2ProtocolHandler::finishStream(Stream &stream)
+void QHttp2ProtocolHandler::finishStream(Stream &stream, Qt::ConnectionType connectionType)
{
+ Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply());
+
stream.state = Stream::closed;
auto httpReply = stream.reply();
- Q_ASSERT(httpReply);
- httpReply->disconnect(this);
- if (stream.data())
- stream.data()->disconnect(this);
+ if (httpReply) {
+ httpReply->disconnect(this);
+ if (stream.data())
+ stream.data()->disconnect(this);
- qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed";
+ if (connectionType == Qt::DirectConnection)
+ emit httpReply->finished();
+ else
+ QMetaObject::invokeMethod(httpReply, "finished", connectionType);
+ }
- emit httpReply->finished();
+ qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed";
}
void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorCode)
@@ -1009,18 +1123,20 @@ void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorC
void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, QNetworkReply::NetworkError error,
const QString &message)
{
+ Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply());
+
stream.state = Stream::closed;
- auto httpReply = stream.reply();
- Q_ASSERT(httpReply);
- httpReply->disconnect(this);
- if (stream.data())
- stream.data()->disconnect(this);
+ if (auto httpReply = stream.reply()) {
+ httpReply->disconnect(this);
+ if (stream.data())
+ stream.data()->disconnect(this);
+
+ // TODO: error message must be translated!!! (tr)
+ emit httpReply->finishedWithError(error, message);
+ }
qCWarning(QT_HTTP2) << "stream" << stream.streamID
<< "finished with error:" << message;
-
- // TODO: error message must be translated!!! (tr)
- emit httpReply->finishedWithError(error, message);
}
quint32 QHttp2ProtocolHandler::createNewStream(const HttpMessagePair &message)
@@ -1066,26 +1182,24 @@ void QHttp2ProtocolHandler::addToSuspended(Stream &stream)
void QHttp2ProtocolHandler::markAsReset(quint32 streamID)
{
- // For now, we trace only client's streams (created by us,
- // odd integer numbers).
- if (streamID & 0x1) {
- qCDebug(QT_HTTP2) << "stream" << streamID << "was reset";
- // This part is quite tricky: I have to clear this set
- // so that it does not become tOOO big.
- if (recycledStreams.size() > maxRecycledStreams) {
- // At least, I'm erasing the oldest first ...
- recycledStreams.erase(recycledStreams.begin(),
- recycledStreams.begin() +
- recycledStreams.size() / 2);
- }
+ Q_ASSERT(streamID);
+
+ qCDebug(QT_HTTP2) << "stream" << streamID << "was reset";
+ // This part is quite tricky: I have to clear this set
+ // so that it does not become tOOO big.
+ if (recycledStreams.size() > maxRecycledStreams) {
+ // At least, I'm erasing the oldest first ...
+ recycledStreams.erase(recycledStreams.begin(),
+ recycledStreams.begin() +
+ recycledStreams.size() / 2);
+ }
- const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(),
- streamID);
- if (it != recycledStreams.end() && *it == streamID)
- return;
+ const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(),
+ streamID);
+ if (it != recycledStreams.end() && *it == streamID)
+ return;
- recycledStreams.insert(it, streamID);
- }
+ recycledStreams.insert(it, streamID);
}
quint32 QHttp2ProtocolHandler::popStreamToResume()
@@ -1175,7 +1289,7 @@ quint32 QHttp2ProtocolHandler::allocateStreamID()
{
// With protocol upgrade streamID == 1 will become
// invalid. The logic must be updated.
- if (nextID > quint32(std::numeric_limits<qint32>::max()))
+ if (nextID > Http2::lastValidStreamID)
return 0;
const quint32 streamID = nextID;
@@ -1184,6 +1298,114 @@ quint32 QHttp2ProtocolHandler::allocateStreamID()
return streamID;
}
+bool QHttp2ProtocolHandler::tryReserveStream(const Http2::Frame &pushPromiseFrame,
+ const HPack::HttpHeader &requestHeader)
+{
+ Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE);
+
+ QMap<QByteArray, QByteArray> pseudoHeaders;
+ for (const auto &field : requestHeader) {
+ if (field.name == ":scheme" || field.name == ":path"
+ || field.name == ":authority" || field.name == ":method") {
+ if (field.value.isEmpty() || pseudoHeaders.contains(field.name))
+ return false;
+ pseudoHeaders[field.name] = field.value;
+ }
+ }
+
+ if (pseudoHeaders.size() != 4) {
+ // All four required, HTTP/2 8.1.2.3.
+ return false;
+ }
+
+ const auto method = pseudoHeaders[":method"].toLower();
+ if (method != "get" && method != "head")
+ return false;
+
+ QUrl url;
+ url.setScheme(QLatin1String(pseudoHeaders[":scheme"]));
+ url.setAuthority(QLatin1String(pseudoHeaders[":authority"]));
+ url.setPath(QLatin1String(pseudoHeaders[":path"]));
+
+ if (!url.isValid())
+ return false;
+
+ Q_ASSERT(activeStreams.contains(pushPromiseFrame.streamID()));
+ const Stream &associatedStream = activeStreams[pushPromiseFrame.streamID()];
+
+ const auto associatedUrl = urlkey_from_request(associatedStream.request());
+ if (url.adjusted(QUrl::RemovePath) != associatedUrl.adjusted(QUrl::RemovePath))
+ return false;
+
+ const auto urlKey = url.toString();
+ if (promisedData.contains(urlKey)) // duplicate push promise
+ return false;
+
+ const auto reservedID = qFromBigEndian<quint32>(pushPromiseFrame.dataBegin());
+ // By this time all sanity checks on reservedID were done already
+ // in handlePUSH_PROMISE. We do not repeat them, only those below:
+ Q_ASSERT(!activeStreams.contains(reservedID));
+ Q_ASSERT(!streamWasReset(reservedID));
+
+ auto &promise = promisedData[urlKey];
+ promise.reservedID = reservedID;
+ promise.pushHeader = requestHeader;
+
+ activeStreams.insert(reservedID, Stream(urlKey, reservedID, streamInitialRecvWindowSize));
+ return true;
+}
+
+void QHttp2ProtocolHandler::resetPromisedStream(const Frame &pushPromiseFrame,
+ Http2::Http2Error reason)
+{
+ Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE);
+ const auto reservedID = qFromBigEndian<quint32>(pushPromiseFrame.dataBegin());
+ sendRST_STREAM(reservedID, reason);
+ markAsReset(reservedID);
+}
+
+void QHttp2ProtocolHandler::initReplyFromPushPromise(const HttpMessagePair &message,
+ const QString &cacheKey)
+{
+ Q_ASSERT(promisedData.contains(cacheKey));
+ auto promise = promisedData.take(cacheKey);
+
+ qCDebug(QT_HTTP2) << "found cached/promised response on stream" << promise.reservedID;
+
+ bool replyFinished = false;
+ Stream *promisedStream = nullptr;
+ if (activeStreams.contains(promise.reservedID)) {
+ promisedStream = &activeStreams[promise.reservedID];
+ // Ok, we have an active (not closed yet) stream waiting for more frames,
+ // let's pretend we requested it:
+ promisedStream->httpPair = message;
+ } else {
+ // Let's pretent we're sending a request now:
+ Stream closedStream(message, promise.reservedID,
+ streamInitialSendWindowSize,
+ streamInitialRecvWindowSize);
+ closedStream.state = Stream::halfClosedLocal;
+ activeStreams.insert(promise.reservedID, closedStream);
+ promisedStream = &activeStreams[promise.reservedID];
+ replyFinished = true;
+ }
+
+ Q_ASSERT(promisedStream);
+
+ if (!promise.responseHeader.empty())
+ updateStream(*promisedStream, promise.responseHeader, Qt::QueuedConnection);
+
+ for (const auto &frame : promise.dataFrames)
+ updateStream(*promisedStream, frame, Qt::QueuedConnection);
+
+ if (replyFinished) {
+ // Good, we already have received ALL the frames of that PUSH_PROMISE,
+ // nothing more to do.
+ finishStream(*promisedStream, Qt::QueuedConnection);
+ deleteActiveStream(promisedStream->streamID);
+ }
+}
+
void QHttp2ProtocolHandler::connectionError(Http2::Http2Error errorCode,
const char *message)
{
diff --git a/src/network/access/qhttp2protocolhandler_p.h b/src/network/access/qhttp2protocolhandler_p.h
index 92c6851078..df0cf6a288 100644
--- a/src/network/access/qhttp2protocolhandler_p.h
+++ b/src/network/access/qhttp2protocolhandler_p.h
@@ -63,6 +63,7 @@
#include "http2/hpacktable_p.h"
#include "http2/hpack_p.h"
+#include <QtCore/qnamespace.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qglobal.h>
#include <QtCore/qobject.h>
@@ -123,9 +124,11 @@ private:
bool acceptSetting(Http2::Settings identifier, quint32 newValue);
- void updateStream(Stream &stream, const HPack::HttpHeader &headers);
- void updateStream(Stream &stream, const Http2::Frame &dataFrame);
- void finishStream(Stream &stream);
+ void updateStream(Stream &stream, const HPack::HttpHeader &headers,
+ Qt::ConnectionType connectionType = Qt::DirectConnection);
+ void updateStream(Stream &stream, const Http2::Frame &dataFrame,
+ Qt::ConnectionType connectionType = Qt::DirectConnection);
+ void finishStream(Stream &stream, Qt::ConnectionType connectionType = Qt::DirectConnection);
// Error code send by a peer (GOAWAY/RST_STREAM):
void finishStreamWithError(Stream &stream, quint32 errorCode);
// Locally encountered error:
@@ -194,7 +197,15 @@ private:
quint32 allocateStreamID();
bool validPeerStreamID() const;
bool goingAway = false;
-
+ bool pushPromiseEnabled = false;
+ quint32 lastPromisedID = Http2::connectionStreamID;
+ QHash<QString, Http2::PushPromise> promisedData;
+ bool tryReserveStream(const Http2::Frame &pushPromiseFrame,
+ const HPack::HttpHeader &requestHeader);
+ void resetPromisedStream(const Http2::Frame &pushPromiseFrame,
+ Http2::Http2Error reason);
+ void initReplyFromPushPromise(const HttpMessagePair &message,
+ const QString &cacheKey);
// Errors:
void connectionError(Http2::Http2Error errorCode,
const char *message);
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp
index f70f11d384..00f3468ebd 100644
--- a/src/network/access/qnetworkreplyhttpimpl.cpp
+++ b/src/network/access/qnetworkreplyhttpimpl.cpp
@@ -244,7 +244,8 @@ QNetworkReplyHttpImpl::QNetworkReplyHttpImpl(QNetworkAccessManager* const manage
QNetworkReplyHttpImpl::~QNetworkReplyHttpImpl()
{
- // Most work is done in private destructor
+ // This will do nothing if the request was already finished or aborted
+ emit abortHttpRequest();
}
void QNetworkReplyHttpImpl::close()
@@ -442,9 +443,6 @@ QNetworkReplyHttpImplPrivate::QNetworkReplyHttpImplPrivate()
QNetworkReplyHttpImplPrivate::~QNetworkReplyHttpImplPrivate()
{
- Q_Q(QNetworkReplyHttpImpl);
- // This will do nothing if the request was already finished or aborted
- emit q->abortHttpRequest();
}
/*
diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp
index 6d864a7d3e..2ad46918b2 100644
--- a/src/network/bearer/qnetworksession.cpp
+++ b/src/network/bearer/qnetworksession.cpp
@@ -48,6 +48,11 @@
#include "qnetworkconfigmanager_p.h"
+// for QNetworkSession::interface
+#ifdef interface
+# undef interface
+#endif
+
#ifndef QT_NO_BEARERMANAGEMENT
QT_BEGIN_NAMESPACE
diff --git a/src/network/configure.json b/src/network/configure.json
index 97bf92167d..124fa1718f 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -60,7 +60,14 @@
},
"condition": "config.win32 && !features.shared"
},
- { "libs": "-lssleay32 -llibeay32", "condition": "config.win32 && features.shared" },
+ {
+ "libs": "-lssleay32 -llibeay32",
+ "builds": {
+ "debug": "",
+ "release": ""
+ },
+ "condition": "config.win32 && features.shared"
+ },
{ "libs": "-lssl -lcrypto", "condition": "!config.win32" }
]
}
diff --git a/src/network/doc/src/external-resources.qdoc b/src/network/doc/src/external-resources.qdoc
new file mode 100644
index 0000000000..f033ddc729
--- /dev/null
+++ b/src/network/doc/src/external-resources.qdoc
@@ -0,0 +1,36 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** 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 Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \externalpage https://www.openssl.org/
+ \title OpenSSL Toolkit
+*/
+
+/*!
+ \externalpage https://www.openssl.org/source/license.html
+ \title OpenSSL License
+*/
diff --git a/src/network/doc/src/qtnetwork.qdoc b/src/network/doc/src/qtnetwork.qdoc
index f15b180625..7a95195da2 100644
--- a/src/network/doc/src/qtnetwork.qdoc
+++ b/src/network/doc/src/qtnetwork.qdoc
@@ -60,7 +60,37 @@
\list
\li \l{Qt Network C++ Classes}{C++ Classes}
\endlist
+
+ \section1 Licenses and Attributions
+
+ Qt Network is available under commercial licenses from \l{The Qt Company}.
+ In addition, it is available under the
+ \l{GNU Lesser General Public License, version 3}, or
+ the \l{GNU General Public License, version 2}.
+ See \l{Qt Licensing} for further details.
+
+ Qt Network can use the \l{OpenSSL Toolkit} as a backend. The library is then
+ linked against OpenSSL in a way that requires compliance with the \l{OpenSSL
+ License}. To allow linking OpenSSL with Qt Network under the GPL, following
+ exceptions to the GPL do apply:
+
+ \badcode
+ In addition, as a special exception, the copyright holders listed above give
+ permission to link the code of its release of Qt with the OpenSSL project's
+ "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
+ same license as the original version), and distribute the linked executables.
+
+ You must comply with the GNU General Public License version 2 in all
+ respects for all of the code used other than the "OpenSSL" code. If you
+ modify this file, you may extend this exception to your version of the file,
+ but you are not obligated to do so. If you do not wish to do so, delete
+ this exception statement from your version of this file.
+ \endcode
+
+ Also note shipping OpenSSL might cause \l{Import and Export Restrictions}
+ to apply.
*/
+
/*!
\module QtNetwork
\title Qt Network C++ Classes
diff --git a/src/network/doc/src/ssl.qdoc b/src/network/doc/src/ssl.qdoc
index 5ad2cfafc6..e4948c393c 100644
--- a/src/network/doc/src/ssl.qdoc
+++ b/src/network/doc/src/ssl.qdoc
@@ -33,7 +33,7 @@
\keyword SSL
The classes below provide support for secure network communication using
- the Secure Sockets Layer (SSL) protocol, using the OpenSSL Toolkit (\l{http://www.openssl.org/})
+ the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit}
to perform encryption and protocol handling.
From Qt version 5.2 onwards, the officially supported version for OpenSSL
@@ -67,16 +67,13 @@
To disable SSL support in a Qt build, configure Qt with the \c{-no-openssl}
option.
- \section1 Licensing Information
+ \section1 Import and Export Restrictions
- \note Due to import and export restrictions in some parts of the world, we
+ Due to import and export restrictions in some parts of the world, we
are unable to supply the OpenSSL Toolkit with Qt packages. Developers wishing
to use SSL communication in their deployed applications should either ensure
that their users have the appropriate libraries installed, or they should
consult a suitably qualified legal professional to ensure that applications
using code from the OpenSSL project are correctly certified for import
and export in relevant regions of the world.
-
- When the Qt Network module is built with SSL support, the library is linked
- against OpenSSL in a way that requires OpenSSL license compliance.
*/
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index 34a8025cdd..02bba2d293 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -850,7 +850,7 @@ bool QAbstractSocketPrivate::writeToSocket()
const char *ptr = writeBuffer.readPointer();
// Attempt to write it all in one chunk.
- qint64 written = socketEngine->write(ptr, nextSize);
+ qint64 written = nextSize ? socketEngine->write(ptr, nextSize) : Q_INT64_C(0);
if (written < 0) {
#if defined (QABSTRACTSOCKET_DEBUG)
qDebug() << "QAbstractSocketPrivate::writeToSocket() write error, aborting."
@@ -2504,7 +2504,7 @@ qint64 QAbstractSocket::writeData(const char *data, qint64 size)
if (!d->isBuffered && d->socketType == TcpSocket
&& d->socketEngine && d->writeBuffer.isEmpty()) {
// This code is for the new Unbuffered QTcpSocket use case
- qint64 written = d->socketEngine->write(data, size);
+ qint64 written = size ? d->socketEngine->write(data, size) : Q_INT64_C(0);
if (written < 0) {
d->setError(d->socketEngine->error(), d->socketEngine->errorString());
} else if (written < size) {
diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp
index f2bc3cec94..11d19682d8 100644
--- a/src/network/socket/qnativesocketengine.cpp
+++ b/src/network/socket/qnativesocketengine.cpp
@@ -873,6 +873,10 @@ qint64 QNativeSocketEngine::writeDatagram(const char *data, qint64 size, const Q
/*!
Writes a block of \a size bytes from \a data to the socket.
Returns the number of bytes written, or -1 if an error occurred.
+
+ Passing zero as the \a size parameter on a connected UDP socket
+ will send an empty datagram. For other socket types results are
+ unspecified.
*/
qint64 QNativeSocketEngine::write(const char *data, qint64 size)
{
diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp
index bd9b443602..f8e92d3f50 100644
--- a/src/network/socket/qnativesocketengine_winrt.cpp
+++ b/src/network/socket/qnativesocketengine_winrt.cpp
@@ -317,26 +317,31 @@ bool QNativeSocketEngine::initialize(qintptr socketDescriptor, QAbstractSocket::
// Start processing incoming data
if (d->socketType == QAbstractSocket::TcpSocket) {
HRESULT hr;
- QEventDispatcherWinRT::runOnXamlThread([d, &hr, socket, this]() {
+ QEventDispatcherWinRT::runOnXamlThread([&hr, socket, socketState, this]() {
+ Q_D(QNativeSocketEngine);
ComPtr<IBuffer> buffer;
HRESULT hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer);
RETURN_OK_IF_FAILED("initialize(): Could not create buffer");
ComPtr<IInputStream> stream;
hr = socket->get_InputStream(&stream);
RETURN_OK_IF_FAILED("initialize(): Could not obtain input stream");
- hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, d->readOp.GetAddressOf());
+ ComPtr<IAsyncBufferOperation> readOp;
+ hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf());
RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to read from the socket buffer (%s).",
socketDescription(this).constData());
- hr = d->readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
+ d->pendingReadOps.append(readOp);
+ d->socketState = socketState;
+ hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to set socket read callback (%s).",
socketDescription(this).constData());
return S_OK;
});
if (FAILED(hr))
return false;
+ } else {
+ d->socketState = socketState;
}
- d->socketState = socketState;
return true;
}
@@ -556,10 +561,12 @@ void QNativeSocketEngine::close()
ComPtr<IAsyncAction> action;
hr = socket3->CancelIOAsync(&action);
Q_ASSERT_SUCCEEDED(hr);
- hr = QWinRTFunctions::await(action);
+ hr = QWinRTFunctions::await(action, QWinRTFunctions::YieldThread, 5000);
// If there is no pending IO (no read established before) the function will fail with
// "function was called at an unexpected time" which is fine.
- if (hr != E_ILLEGAL_METHOD_CALL)
+ // Timeout is fine as well. The result will be the socket being hard reset instead of
+ // being closed gracefully
+ if (hr != E_ILLEGAL_METHOD_CALL && hr != ERROR_TIMEOUT)
Q_ASSERT_SUCCEEDED(hr);
return S_OK;
});
@@ -567,9 +574,9 @@ void QNativeSocketEngine::close()
}
#endif // _MSC_VER >= 1900
- if (d->readOp) {
+ for (ComPtr<IAsyncBufferOperation> readOp : d->pendingReadOps) {
ComPtr<IAsyncInfo> info;
- hr = d->readOp.As(&info);
+ hr = readOp.As(&info);
Q_ASSERT_SUCCEEDED(hr);
if (info) {
hr = info->Cancel();
@@ -933,9 +940,11 @@ void QNativeSocketEngine::establishRead()
hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer);
RETURN_HR_IF_FAILED("establishRead(): Failed to create buffer");
- hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, &d->readOp);
+ ComPtr<IAsyncBufferOperation> readOp;
+ hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf());
RETURN_HR_IF_FAILED("establishRead(): Failed to initiate socket read");
- hr = d->readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
+ d->pendingReadOps.append(readOp);
+ hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get());
RETURN_HR_IF_FAILED("establishRead(): Failed to register read callback");
return S_OK;
});
@@ -1410,7 +1419,15 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
}
Q_Q(QNativeSocketEngine);
+ for (int i = 0; i < pendingReadOps.count(); ++i) {
+ if (pendingReadOps.at(i).Get() == asyncInfo) {
+ pendingReadOps.takeAt(i);
+ break;
+ }
+ }
+ static QMutex mutex;
+ mutex.lock();
// A read in UnconnectedState will close the socket and return -1 and thus tell the caller,
// that the connection was closed. The socket cannot be closed here, as the subsequent read
// might fail then.
@@ -1463,6 +1480,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
if (notifyOnRead)
emit q->readReady();
+ mutex.unlock();
hr = QEventDispatcherWinRT::runOnXamlThread([buffer, q, this]() {
UINT32 readBufferLength;
@@ -1476,12 +1494,14 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async
hr = buffer->put_Length(0);
RETURN_HR_IF_FAILED("handleReadyRead(): Could not set buffer length");
+ ComPtr<IAsyncBufferOperation> readOp;
hr = stream->ReadAsync(buffer.Get(), readBufferLength, InputStreamOptions_Partial, &readOp);
if (FAILED(hr)) {
qErrnoWarning(hr, "handleReadyRead(): Could not read into socket stream buffer (%s).",
socketDescription(q).constData());
return S_OK;
}
+ pendingReadOps.append(readOp);
hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(this, &QNativeSocketEnginePrivate::handleReadyRead).Get());
if (FAILED(hr)) {
qErrnoWarning(hr, "handleReadyRead(): Failed to set socket read callback (%s).",
diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h
index 605f3631b9..79530d57f1 100644
--- a/src/network/socket/qnativesocketengine_winrt_p.h
+++ b/src/network/socket/qnativesocketengine_winrt_p.h
@@ -214,7 +214,7 @@ private:
{ return reinterpret_cast<ABI::Windows::Networking::Sockets::IDatagramSocket *>(socketDescriptor); }
Microsoft::WRL::ComPtr<ABI::Windows::Networking::Sockets::IStreamSocketListener> tcpListener;
Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> connectOp;
- Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>> readOp;
+ QVector<Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>>> pendingReadOps;
QBuffer readBytes;
QMutex readMutex;
bool emitOnNewDatagram;
diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri
index 8139af50af..79351017a6 100644
--- a/src/network/ssl/ssl.pri
+++ b/src/network/ssl/ssl.pri
@@ -79,6 +79,8 @@ qtConfig(ssl) {
# - libs in <OPENSSL_DIR>\lib\VC\static
# - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
+ include($$OUT_PWD/qtnetwork-config.pri)
+
CONFIG(debug, debug|release) {
LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG
} else {
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 5aa807b12c..42baf448ac 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -1293,14 +1293,19 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '5':
versionFlags |= QGLFormat::OpenGL_Version_1_5;
+ // fall through
case '4':
versionFlags |= QGLFormat::OpenGL_Version_1_4;
+ // fall through
case '3':
versionFlags |= QGLFormat::OpenGL_Version_1_3;
+ // fall through
case '2':
versionFlags |= QGLFormat::OpenGL_Version_1_2;
+ // fall through
case '1':
versionFlags |= QGLFormat::OpenGL_Version_1_1;
+ // fall through
default:
break;
}
@@ -1325,10 +1330,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '3':
versionFlags |= QGLFormat::OpenGL_Version_3_3;
+ // fall through
case '2':
versionFlags |= QGLFormat::OpenGL_Version_3_2;
+ // fall through
case '1':
versionFlags |= QGLFormat::OpenGL_Version_3_1;
+ // fall through
case '0':
break;
default:
@@ -1353,10 +1361,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '3':
versionFlags |= QGLFormat::OpenGL_Version_4_3;
+ // fall through
case '2':
versionFlags |= QGLFormat::OpenGL_Version_4_2;
+ // fall through
case '1':
versionFlags |= QGLFormat::OpenGL_Version_4_1;
+ // fall through
case '0':
break;
default:
diff --git a/src/platformheaders/nativecontexts/qeglnativecontext.h b/src/platformheaders/nativecontexts/qeglnativecontext.h
index 67a6d2b808..697b3ef3fd 100644
--- a/src/platformheaders/nativecontexts/qeglnativecontext.h
+++ b/src/platformheaders/nativecontexts/qeglnativecontext.h
@@ -41,7 +41,7 @@
#define QEGLNATIVECONTEXT_H
#include <QtCore/QMetaType>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/accessibility/accessibility.pri b/src/platformsupport/accessibility/accessibility.pri
deleted file mode 100644
index 924f6a512f..0000000000
--- a/src/platformsupport/accessibility/accessibility.pri
+++ /dev/null
@@ -1,9 +0,0 @@
-qtConfig(accessibility) {
- INCLUDEPATH += $$PWD
-
- HEADERS += \
- $$PWD/qaccessiblebridgeutils_p.h
-
- SOURCES += \
- $$PWD/qaccessiblebridgeutils.cpp
-}
diff --git a/src/platformsupport/accessibility/accessibility.pro b/src/platformsupport/accessibility/accessibility.pro
new file mode 100644
index 0000000000..5004dc8cbe
--- /dev/null
+++ b/src/platformsupport/accessibility/accessibility.pro
@@ -0,0 +1,16 @@
+TARGET = QtAccessibilitySupport
+MODULE = accessibility_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += \
+ qaccessiblebridgeutils_p.h
+
+SOURCES += \
+ qaccessiblebridgeutils.cpp
+
+load(qt_module)
diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp
index 935cff3e6c..f280e65c29 100644
--- a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp
+++ b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp
@@ -39,8 +39,6 @@
#include "qaccessiblebridgeutils_p.h"
#include <QtCore/qmath.h>
-#ifndef QT_NO_ACCESSIBILITY
-
QT_BEGIN_NAMESPACE
namespace QAccessibleBridgeUtils {
@@ -113,5 +111,3 @@ bool performEffectiveAction(QAccessibleInterface *iface, const QString &actionNa
} //namespace
QT_END_NAMESPACE
-
-#endif
diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
index 79b153a749..cf8e126894 100644
--- a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
+++ b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
@@ -51,10 +51,12 @@
// We mean it.
//
+#include <QtGui/private/qtguiglobal_p.h>
+
#include <QtCore/qstringlist.h>
#include <QtGui/qaccessible.h>
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
QT_BEGIN_NAMESPACE
@@ -65,6 +67,4 @@ namespace QAccessibleBridgeUtils {
QT_END_NAMESPACE
-#endif
-
#endif //QACCESSIBLEBRIDGEUTILS_H
diff --git a/src/platformsupport/cglconvenience/cglconvenience.pri b/src/platformsupport/cglconvenience/cglconvenience.pri
deleted file mode 100644
index 1de38bbd08..0000000000
--- a/src/platformsupport/cglconvenience/cglconvenience.pri
+++ /dev/null
@@ -1,11 +0,0 @@
-osx {
- INCLUDEPATH += $$PWD
-
- HEADERS += \
- $$PWD/cglconvenience_p.h
-
- OBJECTIVE_SOURCES += \
- $$PWD/cglconvenience.mm
-
- LIBS_PRIVATE += -framework AppKit -framework OpenGL
-}
diff --git a/src/platformsupport/cglconvenience/cglconvenience.pro b/src/platformsupport/cglconvenience/cglconvenience.pro
new file mode 100644
index 0000000000..0422a844aa
--- /dev/null
+++ b/src/platformsupport/cglconvenience/cglconvenience.pro
@@ -0,0 +1,18 @@
+TARGET = QtCglSupport
+MODULE = cgl_support
+
+QT = core-private gui
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += \
+ cglconvenience_p.h
+
+OBJECTIVE_SOURCES += \
+ cglconvenience.mm
+
+LIBS_PRIVATE += -framework AppKit -framework OpenGL
+
+load(qt_module)
diff --git a/src/platformsupport/clipboard/clipboard.pri b/src/platformsupport/clipboard/clipboard.pri
deleted file mode 100644
index cb8315d003..0000000000
--- a/src/platformsupport/clipboard/clipboard.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-mac {
- HEADERS += $$PWD/qmacmime_p.h
- OBJECTIVE_SOURCES += $$PWD/qmacmime.mm
-
- osx: LIBS_PRIVATE += -framework AppKit
-}
-
diff --git a/src/platformsupport/clipboard/clipboard.pro b/src/platformsupport/clipboard/clipboard.pro
new file mode 100644
index 0000000000..336d81fe46
--- /dev/null
+++ b/src/platformsupport/clipboard/clipboard.pro
@@ -0,0 +1,15 @@
+TARGET = QtClipboardSupport
+MODULE = clipboard_support
+
+QT = core-private gui
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += qmacmime_p.h
+SOURCES += qmacmime.mm
+
+macos: LIBS_PRIVATE += -framework AppKit
+
+load(qt_module)
diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm
index d48da8da15..6a6e033bec 100644
--- a/src/platformsupport/clipboard/qmacmime.mm
+++ b/src/platformsupport/clipboard/qmacmime.mm
@@ -414,8 +414,7 @@ QVariant QMacPasteboardMimeUnicodeText::convertToMime(const QString &mimetype, Q
if (flavor == QLatin1String("public.utf8-plain-text")) {
ret = QString::fromUtf8(firstData);
} else if (flavor == QLatin1String("public.utf16-plain-text")) {
- ret = QString(reinterpret_cast<const QChar *>(firstData.constData()),
- firstData.size() / sizeof(QChar));
+ ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData);
} else {
qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype));
}
@@ -429,7 +428,7 @@ QList<QByteArray> QMacPasteboardMimeUnicodeText::convertFromMime(const QString &
if (flavor == QLatin1String("public.utf8-plain-text"))
ret.append(string.toUtf8());
else if (flavor == QLatin1String("public.utf16-plain-text"))
- ret.append(QByteArray((char*)string.utf16(), string.length()*2));
+ ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string));
return ret;
}
diff --git a/src/platformsupport/devicediscovery/devicediscovery.pri b/src/platformsupport/devicediscovery/devicediscovery.pri
deleted file mode 100644
index f4e9103130..0000000000
--- a/src/platformsupport/devicediscovery/devicediscovery.pri
+++ /dev/null
@@ -1,13 +0,0 @@
-HEADERS += $$PWD/qdevicediscovery_p.h
-
-qtConfig(libudev) {
- SOURCES += $$PWD/qdevicediscovery_udev.cpp
- HEADERS += $$PWD/qdevicediscovery_udev_p.h
- QMAKE_USE_PRIVATE += libudev
-} else: qtConfig(evdev) {
- SOURCES += $$PWD/qdevicediscovery_static.cpp
- HEADERS += $$PWD/qdevicediscovery_static_p.h
-} else {
- SOURCES += $$PWD/qdevicediscovery_dummy.cpp
- HEADERS += $$PWD/qdevicediscovery_dummy_p.h
-}
diff --git a/src/platformsupport/devicediscovery/devicediscovery.pro b/src/platformsupport/devicediscovery/devicediscovery.pro
new file mode 100644
index 0000000000..b429b8b97e
--- /dev/null
+++ b/src/platformsupport/devicediscovery/devicediscovery.pro
@@ -0,0 +1,25 @@
+TARGET = QtDeviceDiscoverySupport
+MODULE = devicediscovery_support
+
+QT = core-private
+QT_FOR_CONFIG += gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += qdevicediscovery_p.h
+
+qtConfig(libudev) {
+ SOURCES += qdevicediscovery_udev.cpp
+ HEADERS += qdevicediscovery_udev_p.h
+ QMAKE_USE_PRIVATE += libudev
+} else: qtConfig(evdev) {
+ SOURCES += qdevicediscovery_static.cpp
+ HEADERS += qdevicediscovery_static_p.h
+} else {
+ SOURCES += qdevicediscovery_dummy.cpp
+ HEADERS += qdevicediscovery_dummy_p.h
+}
+
+load(qt_module)
diff --git a/src/platformsupport/eglconvenience/eglconvenience.pri b/src/platformsupport/eglconvenience/eglconvenience.pri
deleted file mode 100644
index 4a93d997fb..0000000000
--- a/src/platformsupport/eglconvenience/eglconvenience.pri
+++ /dev/null
@@ -1,32 +0,0 @@
-qtConfig(egl) {
- HEADERS += \
- $$PWD/qeglconvenience_p.h \
- $$PWD/qeglstreamconvenience_p.h \
- $$PWD/qt_egl_p.h
-
- SOURCES += \
- $$PWD/qeglconvenience.cpp \
- $$PWD/qeglstreamconvenience.cpp
-
- qtConfig(opengl) {
- HEADERS += $$PWD/qeglplatformcontext_p.h \
- $$PWD/qeglpbuffer_p.h
-
- SOURCES += $$PWD/qeglplatformcontext.cpp \
- $$PWD/qeglpbuffer.cpp
- }
-
- # Avoid X11 header collision, use generic EGL native types
- DEFINES += QT_EGL_NO_X11
-
- qtConfig(xlib) {
- HEADERS += \
- $$PWD/qxlibeglintegration_p.h
- SOURCES += \
- $$PWD/qxlibeglintegration.cpp
- LIBS_PRIVATE += $$QMAKE_LIBS_X11
- }
- CONFIG += egl
-
- LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD
-}
diff --git a/src/platformsupport/eglconvenience/eglconvenience.pro b/src/platformsupport/eglconvenience/eglconvenience.pro
new file mode 100644
index 0000000000..d364a42b3b
--- /dev/null
+++ b/src/platformsupport/eglconvenience/eglconvenience.pro
@@ -0,0 +1,43 @@
+TARGET = QtEglSupport
+MODULE = egl_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += \
+ qeglconvenience_p.h \
+ qeglstreamconvenience_p.h \
+ qt_egl_p.h
+
+SOURCES += \
+ qeglconvenience.cpp \
+ qeglstreamconvenience.cpp
+
+qtConfig(opengl) {
+ HEADERS += \
+ qeglplatformcontext_p.h \
+ qeglpbuffer_p.h
+
+ SOURCES += \
+ qeglplatformcontext.cpp \
+ qeglpbuffer.cpp
+}
+
+# Avoid X11 header collision, use generic EGL native types
+DEFINES += QT_EGL_NO_X11
+
+qtConfig(xlib) {
+ HEADERS += \
+ qxlibeglintegration_p.h
+ SOURCES += \
+ qxlibeglintegration.cpp
+ LIBS_PRIVATE += $$QMAKE_LIBS_X11
+}
+CONFIG += egl
+
+LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD
+
+load(qt_module)
diff --git a/src/platformsupport/eglconvenience/qeglconvenience_p.h b/src/platformsupport/eglconvenience/qeglconvenience_p.h
index fdd21b8f19..ab2b813515 100644
--- a/src/platformsupport/eglconvenience/qeglconvenience_p.h
+++ b/src/platformsupport/eglconvenience/qeglconvenience_p.h
@@ -54,7 +54,7 @@
#include <QtGui/QSurfaceFormat>
#include <QtCore/QVector>
#include <QtCore/QSizeF>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/eglconvenience/qeglpbuffer_p.h b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
index 4f9ea9d5f3..38370c0e62 100644
--- a/src/platformsupport/eglconvenience/qeglpbuffer_p.h
+++ b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
@@ -52,7 +52,7 @@
//
#include <qpa/qplatformoffscreensurface.h>
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
index f6b2b876f7..9d41eecd99 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
@@ -55,7 +55,7 @@
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformopenglcontext.h>
#include <QtCore/QVariant>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h
index a4c8245280..6c84f29613 100644
--- a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h
+++ b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h
@@ -52,7 +52,7 @@
//
#include <qglobal.h>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
// This provides runtime EGLDevice/Output/Stream support even when eglext.h in
// the sysroot is not up-to-date.
diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pri b/src/platformsupport/eventdispatchers/eventdispatchers.pri
deleted file mode 100644
index fb0f3b3827..0000000000
--- a/src/platformsupport/eventdispatchers/eventdispatchers.pri
+++ /dev/null
@@ -1,21 +0,0 @@
-unix {
-SOURCES +=\
- $$PWD/qunixeventdispatcher.cpp\
- $$PWD/qgenericunixeventdispatcher.cpp\
-
-HEADERS +=\
- $$PWD/qunixeventdispatcher_qpa_p.h\
- $$PWD/qgenericunixeventdispatcher_p.h\
-} else: win32 {
-SOURCES +=\
- $$PWD/qwindowsguieventdispatcher.cpp
-
-HEADERS +=\
- $$PWD/qwindowsguieventdispatcher_p.h
-}
-
-qtConfig(glib) {
- SOURCES +=$$PWD/qeventdispatcher_glib.cpp
- HEADERS +=$$PWD/qeventdispatcher_glib_p.h
- QMAKE_USE_PRIVATE += glib
-}
diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pro b/src/platformsupport/eventdispatchers/eventdispatchers.pro
new file mode 100644
index 0000000000..9d3ac4bbc6
--- /dev/null
+++ b/src/platformsupport/eventdispatchers/eventdispatchers.pro
@@ -0,0 +1,32 @@
+TARGET = QtEventDispatcherSupport
+MODULE = eventdispatcher_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+unix {
+ SOURCES += \
+ qunixeventdispatcher.cpp \
+ qgenericunixeventdispatcher.cpp
+
+ HEADERS += \
+ qunixeventdispatcher_qpa_p.h \
+ qgenericunixeventdispatcher_p.h
+} else {
+ SOURCES += \
+ qwindowsguieventdispatcher.cpp
+
+ HEADERS += \
+ qwindowsguieventdispatcher_p.h
+}
+
+qtConfig(glib) {
+ SOURCES += qeventdispatcher_glib.cpp
+ HEADERS += qeventdispatcher_glib_p.h
+ QMAKE_USE_PRIVATE += glib
+}
+
+load(qt_module)
diff --git a/src/platformsupport/fbconvenience/fbconvenience.pri b/src/platformsupport/fbconvenience/fbconvenience.pri
deleted file mode 100644
index 4634f57fb4..0000000000
--- a/src/platformsupport/fbconvenience/fbconvenience.pri
+++ /dev/null
@@ -1,11 +0,0 @@
-SOURCES += $$PWD/qfbscreen.cpp \
- $$PWD/qfbbackingstore.cpp \
- $$PWD/qfbwindow.cpp \
- $$PWD/qfbcursor.cpp \
- $$PWD/qfbvthandler.cpp
-
-HEADERS += $$PWD/qfbscreen_p.h \
- $$PWD/qfbbackingstore_p.h \
- $$PWD/qfbwindow_p.h \
- $$PWD/qfbcursor_p.h \
- $$PWD/qfbvthandler_p.h
diff --git a/src/platformsupport/fbconvenience/fbconvenience.pro b/src/platformsupport/fbconvenience/fbconvenience.pro
new file mode 100644
index 0000000000..3775906470
--- /dev/null
+++ b/src/platformsupport/fbconvenience/fbconvenience.pro
@@ -0,0 +1,24 @@
+TARGET = QtFbSupport
+MODULE = fb_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+SOURCES += \
+ qfbscreen.cpp \
+ qfbbackingstore.cpp \
+ qfbwindow.cpp \
+ qfbcursor.cpp \
+ qfbvthandler.cpp
+
+HEADERS += \
+ qfbscreen_p.h \
+ qfbbackingstore_p.h \
+ qfbwindow_p.h \
+ qfbcursor_p.h \
+ qfbvthandler_p.h
+
+load(qt_module)
diff --git a/src/platformsupport/fontdatabases/basic/basic.pri b/src/platformsupport/fontdatabases/basic/basic.pri
index 575c93fe20..c50dba3ce2 100644
--- a/src/platformsupport/fontdatabases/basic/basic.pri
+++ b/src/platformsupport/fontdatabases/basic/basic.pri
@@ -6,4 +6,4 @@ SOURCES += \
$$PWD/qbasicfontdatabase.cpp \
$$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp
-include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri)
+QMAKE_USE += freetype
diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri
index 911f0c884d..6458464870 100644
--- a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri
+++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri
@@ -3,4 +3,4 @@ HEADERS += $$PWD/qfontconfigdatabase_p.h \
SOURCES += $$PWD/qfontconfigdatabase.cpp \
$$PWD/qfontenginemultifontconfig.cpp
-QMAKE_USE += fontconfig/nolink
+QMAKE_USE += fontconfig
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
index 244558b910..f7e3172b65 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
@@ -52,7 +52,7 @@
//
#include <qpa/qplatformfontdatabase.h>
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/fontdatabases.pri b/src/platformsupport/fontdatabases/fontdatabases.pri
deleted file mode 100644
index d435359141..0000000000
--- a/src/platformsupport/fontdatabases/fontdatabases.pri
+++ /dev/null
@@ -1,15 +0,0 @@
-darwin {
- include($$PWD/mac/coretext.pri)
-} else {
- qtConfig(freetype) {
- include($$PWD/basic/basic.pri)
- }
-
- unix {
- CONFIG += qpa/genericunixfontdatabase
- include($$PWD/genericunix/genericunix.pri)
- qtConfig(fontconfig) {
- include($$PWD/fontconfig/fontconfig.pri)
- }
- }
-}
diff --git a/src/platformsupport/fontdatabases/fontdatabases.pro b/src/platformsupport/fontdatabases/fontdatabases.pro
new file mode 100644
index 0000000000..f2c0ae4d96
--- /dev/null
+++ b/src/platformsupport/fontdatabases/fontdatabases.pro
@@ -0,0 +1,29 @@
+TARGET = QtFontDatabaseSupport
+MODULE = fontdatabase_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+darwin {
+ include($$PWD/mac/coretext.pri)
+} else {
+ qtConfig(freetype) {
+ include($$PWD/basic/basic.pri)
+ }
+
+ unix {
+ include($$PWD/genericunix/genericunix.pri)
+ qtConfig(fontconfig) {
+ include($$PWD/fontconfig/fontconfig.pri)
+ }
+ }
+
+ win32:!winrt {
+ include($$PWD/windows/windows.pri)
+ }
+}
+
+load(qt_module)
diff --git a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
index 043f831530..37c667eeb3 100644
--- a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h
@@ -51,13 +51,13 @@
// We mean it.
//
-#include <QtCore/qglobal.h>
+#include <QtGui/private/qtguiglobal_p.h>
-#ifdef Q_FONTCONFIGDATABASE
-#include <QtPlatformSupport/private/qfontconfigdatabase_p.h>
+#if QT_CONFIG(fontconfig)
+#include <QtFontDatabaseSupport/private/qfontconfigdatabase_p.h>
typedef QFontconfigDatabase QGenericUnixFontDatabase;
#else
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
typedef QBasicFontDatabase QGenericUnixFontDatabase;
#endif //Q_FONTCONFIGDATABASE
diff --git a/src/platformsupport/fontdatabases/mac/coretext.pri b/src/platformsupport/fontdatabases/mac/coretext.pri
index e1132cfcbe..aed89ad8c7 100644
--- a/src/platformsupport/fontdatabases/mac/coretext.pri
+++ b/src/platformsupport/fontdatabases/mac/coretext.pri
@@ -2,7 +2,7 @@ HEADERS += $$PWD/qcoretextfontdatabase_p.h $$PWD/qfontengine_coretext_p.h
OBJECTIVE_SOURCES += $$PWD/qfontengine_coretext.mm $$PWD/qcoretextfontdatabase.mm
qtConfig(freetype) {
- include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri)
+ QMAKE_USE += freetype
HEADERS += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h
SOURCES += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp
}
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
index 4f022141cf..434aa16d16 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
@@ -37,12 +37,10 @@
**
****************************************************************************/
-#include "qwindowsfontdatabase.h"
-#include "qwindowsfontdatabase_ft.h" // for default font
-#include "qwindowscontext.h"
-#include "qwindowsintegration.h"
-#include "qwindowsfontengine.h"
-#include "qwindowsfontenginedirectwrite.h"
+#include "qwindowsfontdatabase_p.h"
+#include "qwindowsfontdatabase_ft_p.h" // for default font
+#include "qwindowsfontengine_p.h"
+#include "qwindowsfontenginedirectwrite_p.h"
#include <QtCore/qt_windows.h>
#include <QtGui/QFont>
@@ -69,6 +67,8 @@
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts")
+
#ifndef QT_NO_DIRECTWRITE
// ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711)
@@ -110,13 +110,22 @@ static void createDirectWriteFactory(IDWriteFactory **factory)
*factory = static_cast<IDWriteFactory *>(result);
}
-static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, bool isColorFont = false)
+static inline bool useDirectWrite(QFont::HintingPreference hintingPreference,
+ const QString &familyName = QString(),
+ bool isColorFont = false)
{
- const unsigned options = QWindowsIntegration::instance()->options();
- if (Q_UNLIKELY(options & QWindowsIntegration::DontUseDirectWriteFonts))
+ const unsigned options = QWindowsFontDatabase::fontOptions();
+ if (Q_UNLIKELY(options & QWindowsFontDatabase::DontUseDirectWriteFonts))
return false;
+
+ // At some scales, GDI will misrender the MingLiU font, so we force use of
+ // DirectWrite to work around the issue.
+ if (Q_UNLIKELY(familyName.startsWith(QLatin1String("MingLiU"))))
+ return true;
+
if (isColorFont)
- return (options & QWindowsIntegration::DontUseColorFonts) == 0;
+ return (options & QWindowsFontDatabase::DontUseColorFonts) == 0;
+
return hintingPreference == QFont::PreferNoHinting
|| hintingPreference == QFont::PreferVerticalHinting
|| (QHighDpiScaling::isActive() && hintingPreference == QFont::PreferDefaultHinting);
@@ -602,6 +611,19 @@ QWindowsFontEngineData::QWindowsFontEngineData()
ReleaseDC(0, displayDC);
}
+unsigned QWindowsFontDatabase::m_fontOptions = 0;
+
+void QWindowsFontDatabase::setFontOptions(unsigned options)
+{
+ m_fontOptions = options & (QWindowsFontDatabase::DontUseDirectWriteFonts |
+ QWindowsFontDatabase::DontUseColorFonts);
+}
+
+unsigned QWindowsFontDatabase::fontOptions()
+{
+ return m_fontOptions;
+}
+
QWindowsFontEngineData::~QWindowsFontEngineData()
{
if (hdc)
@@ -984,7 +1006,7 @@ static bool addFontToDatabase(const QString &familyName, const QString &styleNam
const QFont::Stretch stretch = QFont::Unstretched;
#ifndef QT_NO_DEBUG_OUTPUT
- if (QWindowsContext::verbose > 2) {
+ if (lcQpaFonts().isDebugEnabled()) {
QString message;
QTextStream str(&message);
str << __FUNCTION__ << ' ' << familyName << ' ' << charSet << " TTF=" << ttf;
@@ -1206,7 +1228,7 @@ QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine,
QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle)
{
QFontEngine *fe = QWindowsFontDatabase::createEngine(fontDef,
- QWindowsContext::instance()->defaultDPI(),
+ defaultVerticalDPI(),
sharedFontData());
qCDebug(lcQpaFonts) << __FUNCTION__ << "FONTDEF" << fontDef << fe << handle;
return fe;
@@ -1260,7 +1282,7 @@ QT_WARNING_POP
request.stretch = QFont::Unstretched;
fontEngine = QWindowsFontDatabase::createEngine(request,
- QWindowsContext::instance()->defaultDPI(),
+ defaultVerticalDPI(),
sharedFontData());
if (fontEngine) {
@@ -1875,7 +1897,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
#endif
const QFont::HintingPreference hintingPreference =
static_cast<QFont::HintingPreference>(request.hintingPreference);
- const bool useDw = useDirectWrite(hintingPreference, isColorFont);
+ const bool useDw = useDirectWrite(hintingPreference, fam, isColorFont);
qCDebug(lcQpaFonts) << __FUNCTION__ << request.family << request.pointSize
<< "pt" << "hintingPreference=" << hintingPreference << "color=" << isColorFont
<< dpi << "dpi" << "useDirectWrite=" << useDw;
@@ -1916,11 +1938,6 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
return fe;
}
-static inline int verticalDPI()
-{
- return GetDeviceCaps(QWindowsContext::instance()->displayContext(), LOGPIXELSY);
-}
-
QFont QWindowsFontDatabase::systemDefaultFont()
{
LOGFONT lf;
@@ -1936,7 +1953,7 @@ QFont QWindowsFontDatabase::systemDefaultFont()
QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int verticalDPI_In)
{
if (verticalDPI_In <= 0)
- verticalDPI_In = verticalDPI();
+ verticalDPI_In = defaultVerticalDPI();
QFont qFont(QString::fromWCharArray(logFont.lfFaceName));
qFont.setItalic(logFont.lfItalic);
if (logFont.lfWeight != FW_DONTCARE)
@@ -1949,4 +1966,41 @@ QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int vertica
return qFont;
}
+int QWindowsFontDatabase::defaultVerticalDPI()
+{
+ static int vDPI = -1;
+ if (vDPI == -1) {
+ if (HDC defaultDC = GetDC(0)) {
+ vDPI = GetDeviceCaps(defaultDC, LOGPIXELSY);
+ ReleaseDC(0, defaultDC);
+ } else {
+ // FIXME: Resolve now or return 96 and keep unresolved?
+ vDPI = 96;
+ }
+ }
+ return vDPI;
+}
+
+QString QWindowsFontDatabase::readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName)
+{
+ QString result;
+ HKEY handle = 0;
+ if (RegOpenKeyEx(parentHandle, keyPath, 0, KEY_READ, &handle) == ERROR_SUCCESS) {
+ // get the size and type of the value
+ DWORD dataType;
+ DWORD dataSize;
+ if (RegQueryValueEx(handle, keyName, 0, &dataType, 0, &dataSize) == ERROR_SUCCESS) {
+ if (dataType == REG_SZ || dataType == REG_EXPAND_SZ) {
+ dataSize += 2; // '\0' missing?
+ QVarLengthArray<unsigned char> data(dataSize);
+ data[dataSize - 2] = data[dataSize - 1] = '\0';
+ if (RegQueryValueEx(handle, keyName, 0, 0, data.data(), &dataSize) == ERROR_SUCCESS)
+ result = QString::fromWCharArray(reinterpret_cast<const wchar_t *>(data.data()));
+ }
+ }
+ RegCloseKey(handle);
+ }
+ return result;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
index f7c8dbdf23..4d973bbf17 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
@@ -37,9 +37,8 @@
**
****************************************************************************/
-#include "qwindowsfontdatabase_ft.h"
-#include "qwindowsfontdatabase.h"
-#include "qwindowscontext.h"
+#include "qwindowsfontdatabase_ft_p.h"
+#include "qwindowsfontdatabase_p.h"
#include <ft2build.h>
#include FT_TRUETYPE_TABLES_H
@@ -137,10 +136,10 @@ static FontKeys &fontKeys()
QString realKey = registryFontKey;
realKey.remove(trueType);
realKey.remove(sizeListMatch);
- const QStringList fontNames = realKey.trimmed().split(QLatin1Char('&'));
+ const auto fontNames = QStringRef(&realKey).trimmed().split(QLatin1Char('&'));
fontKey.fontNames.reserve(fontNames.size());
- foreach (const QString &fontName, fontNames)
- fontKey.fontNames.append(fontName.trimmed());
+ for (const QStringRef &fontName : fontNames)
+ fontKey.fontNames.append(fontName.trimmed().toString());
result.append(fontKey);
}
}
@@ -188,7 +187,7 @@ static bool addFontToDatabase(const QString &faceName,
const QFont::Stretch stretch = QFont::Unstretched;
#ifndef QT_NO_DEBUG_STREAM
- if (QWindowsContext::verbose > 2) {
+ if (lcQpaFonts().isDebugEnabled()) {
QString message;
QTextStream str(&message);
str << __FUNCTION__ << ' ' << faceName << "::" << fullName << ' ' << charSet << " TTF=" << ttf;
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h
index fa8f777133..3a432842e5 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h
@@ -40,7 +40,18 @@
#ifndef QWINDOWSFONTDATABASEFT_H
#define QWINDOWSFONTDATABASEFT_H
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.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 <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
#include <QtCore/QSharedPointer>
#include <QtCore/qt_windows.h>
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h
index 8b8c9c15f4..b7ebfc033f 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h
@@ -40,8 +40,20 @@
#ifndef QWINDOWSFONTDATABASE_H
#define QWINDOWSFONTDATABASE_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 <qpa/qplatformfontdatabase.h>
#include <QtCore/QSharedPointer>
+#include <QtCore/QLoggingCategory>
#include <QtCore/qt_windows.h>
#if !defined(QT_NO_DIRECTWRITE)
@@ -51,6 +63,8 @@
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts)
+
class QWindowsFontEngineData
{
Q_DISABLE_COPY(QWindowsFontEngineData)
@@ -72,6 +86,12 @@ public:
class QWindowsFontDatabase : public QPlatformFontDatabase
{
public:
+ enum FontOptions {
+ // Relevant bits from QWindowsIntegration::Options
+ DontUseDirectWriteFonts = 0x40,
+ DontUseColorFonts = 0x80
+ };
+
QWindowsFontDatabase();
~QWindowsFontDatabase();
@@ -105,6 +125,13 @@ public:
static QStringList extraTryFontsForFamily(const QString &family);
static QString familyForStyleHint(QFont::StyleHint styleHint);
+ static int defaultVerticalDPI();
+
+ static void setFontOptions(unsigned options);
+ static unsigned fontOptions();
+
+ static QString readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName);
+
private:
void populateFamily(const QString &familyName, bool registerAlias);
void removeApplicationFonts();
@@ -122,6 +149,8 @@ private:
};
QMap<QString, UniqueFontData> m_uniqueFontData;
+
+ static unsigned m_fontOptions;
};
#ifndef QT_NO_DEBUG_STREAM
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
index f5d1ed9fad..9fc6fec915 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
@@ -37,14 +37,13 @@
**
****************************************************************************/
-#include "qwindowsintegration.h"
-#include "qwindowsfontengine.h"
-#include "qwindowsnativeimage.h"
-#include "qwindowscontext.h"
-#include "qwindowsfontdatabase.h"
+#include "qwindowsfontengine_p.h"
+#include "qwindowsnativeimage_p.h"
+#include "qwindowsfontdatabase_p.h"
#include <QtCore/qt_windows.h>
-#include "qwindowsfontenginedirectwrite.h"
+#include "qwindowsfontenginedirectwrite_p.h"
+#include <QtGui/qpa/qplatformintegration.h>
#include <QtGui/private/qtextengine_p.h> // glyph_metrics_t
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/QPaintDevice>
@@ -315,8 +314,10 @@ QWindowsFontEngine::~QWindowsFontEngine()
qCDebug(lcQpaFonts) << __FUNCTION__ << _name;
if (!uniqueFamilyName.isEmpty()) {
- QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase();
- static_cast<QWindowsFontDatabase *>(pfdb)->derefUniqueFont(uniqueFamilyName);
+ if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) {
+ QPlatformFontDatabase *pfdb = pi->fontDatabase();
+ static_cast<QWindowsFontDatabase *>(pfdb)->derefUniqueFont(uniqueFamilyName);
+ }
}
}
@@ -1194,14 +1195,16 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const
QFontEngine *fontEngine =
QWindowsFontDatabase::createEngine(request,
- QWindowsContext::instance()->defaultDPI(),
+ QWindowsFontDatabase::defaultVerticalDPI(),
m_fontEngineData);
if (fontEngine) {
fontEngine->fontDef.family = actualFontName;
if (!uniqueFamilyName.isEmpty()) {
static_cast<QWindowsFontEngine *>(fontEngine)->setUniqueFamilyName(uniqueFamilyName);
- QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase();
- static_cast<QWindowsFontDatabase *>(pfdb)->refUniqueFont(uniqueFamilyName);
+ if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) {
+ QPlatformFontDatabase *pfdb = pi->fontDatabase();
+ static_cast<QWindowsFontDatabase *>(pfdb)->refUniqueFont(uniqueFamilyName);
+ }
}
}
return fontEngine;
@@ -1325,4 +1328,3 @@ bool QWindowsFontEngine::supportsTransformation(const QTransform &transform) con
}
QT_END_NAMESPACE
-
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h
index b63d8fd282..709de7d11d 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h
@@ -44,8 +44,8 @@
// 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
+// 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.
@@ -184,4 +184,3 @@ Q_DECLARE_METATYPE(HFONT)
Q_DECLARE_METATYPE(LOGFONT)
#endif // QWINDOWSFONTENGINE_H
-
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
index 66cc08f9fa..f266e85126 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
@@ -39,11 +39,9 @@
#ifndef QT_NO_DIRECTWRITE
-#include "qwindowsfontenginedirectwrite.h"
-#include "qwindowsfontdatabase.h"
-#include "qwindowscontext.h"
+#include "qwindowsfontenginedirectwrite_p.h"
+#include "qwindowsfontdatabase_p.h"
-#include <QtCore/QSettings>
#include <QtCore/QtEndian>
#include <QtCore/QVarLengthArray>
#include <QtCore/QFile>
@@ -185,6 +183,18 @@ namespace {
}
+static DWRITE_RENDERING_MODE hintingPreferenceToRenderingMode(QFont::HintingPreference hintingPreference)
+{
+ switch (hintingPreference) {
+ case QFont::PreferNoHinting:
+ return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC;
+ case QFont::PreferVerticalHinting:
+ return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL;
+ default:
+ return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC;
+ }
+}
+
/*!
\class QWindowsFontEngineDirectWrite
\brief Windows font engine using Direct Write.
@@ -661,9 +671,7 @@ QImage QWindowsFontEngineDirectWrite::imageForGlyph(glyph_t t,
transform.m22 = xform.m22();
DWRITE_RENDERING_MODE renderMode =
- fontDef.hintingPreference == QFont::PreferNoHinting
- ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC
- : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL;
+ hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference));
IDWriteGlyphRunAnalysis *glyphAnalysis = NULL;
HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis(
@@ -906,9 +914,11 @@ void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request,
QString QWindowsFontEngineDirectWrite::fontNameSubstitute(const QString &familyName)
{
- static const char keyC[] = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\"
- "FontSubstitutes";
- return QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString();
+ const wchar_t key[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes";
+ const QString substitute =
+ QWindowsFontDatabase::readRegistryString(HKEY_LOCAL_MACHINE, key,
+ reinterpret_cast<const wchar_t *>(familyName.utf16()));
+ return substitute.isEmpty() ? familyName : substitute;
}
glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph,
@@ -950,9 +960,7 @@ glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph
transform.m22 = matrix.m22();
DWRITE_RENDERING_MODE renderMode =
- fontDef.hintingPreference == QFont::PreferNoHinting
- ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC
- : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL;
+ hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference));
IDWriteGlyphRunAnalysis *glyphAnalysis = NULL;
HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis(
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h
index e4a82c6a6e..65b16b9ba7 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h
@@ -40,6 +40,17 @@
#ifndef QWINDOWSFONTENGINEDIRECTWRITE_H
#define QWINDOWSFONTENGINEDIRECTWRITE_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 <QtCore/qglobal.h>
#ifndef QT_NO_DIRECTWRITE
diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.cpp b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp
index ec9683ea8d..7022615511 100644
--- a/src/plugins/platforms/windows/qwindowsnativeimage.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp
@@ -37,8 +37,7 @@
**
****************************************************************************/
-#include "qwindowsnativeimage.h"
-#include "qwindowscontext.h"
+#include "qwindowsnativeimage_p.h"
#include <QtGui/private/qpaintengine_p.h>
#include <QtGui/private/qpaintengine_raster_p.h>
@@ -143,7 +142,17 @@ QWindowsNativeImage::~QWindowsNativeImage()
QImage::Format QWindowsNativeImage::systemFormat()
{
- static const int depth = QWindowsContext::instance()->screenDepth();
+ static int depth = -1;
+ if (depth == -1) {
+ if (HDC defaultDC = GetDC(0)) {
+ depth = GetDeviceCaps(defaultDC, BITSPIXEL);
+ ReleaseDC(0, defaultDC);
+ } else {
+ // FIXME Same remark as in QWindowsFontDatabase::defaultVerticalDPI()
+ // BONUS FIXME: Is 32 too generous/optimistic?
+ depth = 32;
+ }
+ }
return depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
}
diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.h b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h
index bfe0f07dfd..c27c0d1e98 100644
--- a/src/plugins/platforms/windows/qwindowsnativeimage.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h
@@ -40,8 +40,19 @@
#ifndef QWINDOWSNATIVEIMAGE_H
#define QWINDOWSNATIVEIMAGE_H
-#include <QtCore/qt_windows.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 <QtCore/QtGlobal>
+#include <QtCore/qt_windows.h>
#include <QtGui/QImage>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/windows/windows.pri b/src/platformsupport/fontdatabases/windows/windows.pri
new file mode 100644
index 0000000000..419c4dc6d9
--- /dev/null
+++ b/src/platformsupport/fontdatabases/windows/windows.pri
@@ -0,0 +1,33 @@
+QT *= gui-private
+
+SOURCES += \
+ $$PWD/qwindowsfontdatabase.cpp \
+ $$PWD/qwindowsfontengine.cpp \
+ $$PWD/qwindowsnativeimage.cpp
+
+HEADERS += \
+ $$PWD/qwindowsfontdatabase_p.h \
+ $$PWD/qwindowsfontengine_p.h \
+ $$PWD/qwindowsnativeimage_p.h
+
+qtConfig(freetype) {
+ SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp
+ HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h
+ qtConfig(system-freetype) {
+ include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
+ } else {
+ include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri)
+ }
+}
+
+qtConfig(directwrite) {
+ qtConfig(directwrite2): \
+ DEFINES *= QT_USE_DIRECTWRITE2
+
+ SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp
+ HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h
+} else {
+ DEFINES *= QT_NO_DIRECTWRITE
+}
+
+LIBS += -lole32 -lgdi32 -luser32
diff --git a/src/platformsupport/glxconvenience/glxconvenience.pri b/src/platformsupport/glxconvenience/glxconvenience.pri
deleted file mode 100644
index 80e79ee663..0000000000
--- a/src/platformsupport/glxconvenience/glxconvenience.pri
+++ /dev/null
@@ -1,8 +0,0 @@
-qtConfig(xlib) {
- qtConfig(opengl):!qtConfig(opengles2) {
- qtConfig(xrender): QMAKE_USE_PRIVATE += xrender
- LIBS_PRIVATE += $$QMAKE_LIBS_X11
- HEADERS += $$PWD/qglxconvenience_p.h
- SOURCES += $$PWD/qglxconvenience.cpp
- }
-}
diff --git a/src/platformsupport/glxconvenience/glxconvenience.pro b/src/platformsupport/glxconvenience/glxconvenience.pro
new file mode 100644
index 0000000000..185d6b0364
--- /dev/null
+++ b/src/platformsupport/glxconvenience/glxconvenience.pro
@@ -0,0 +1,16 @@
+TARGET = QtGlxSupport
+MODULE = glx_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+qtConfig(xrender): QMAKE_USE_PRIVATE += xrender
+LIBS_PRIVATE += $$QMAKE_LIBS_X11
+
+HEADERS += qglxconvenience_p.h
+SOURCES += qglxconvenience.cpp
+
+load(qt_module)
diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp
index 7dc29fae6d..4225bebf37 100644
--- a/src/platformsupport/glxconvenience/qglxconvenience.cpp
+++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp
@@ -386,5 +386,10 @@ bool qglx_reduceFormat(QSurfaceFormat *format)
return true;
}
+ if (format->stereo()) {
+ format->setStereo(false);
+ return true;
+ }
+
return false;
}
diff --git a/src/platformsupport/graphics/graphics.pri b/src/platformsupport/graphics/graphics.pri
deleted file mode 100644
index 43062682aa..0000000000
--- a/src/platformsupport/graphics/graphics.pri
+++ /dev/null
@@ -1,2 +0,0 @@
-HEADERS += $$PWD/qrasterbackingstore_p.h
-SOURCES += $$PWD/qrasterbackingstore.cpp
diff --git a/src/platformsupport/graphics/graphics.pro b/src/platformsupport/graphics/graphics.pro
new file mode 100644
index 0000000000..878fca7f49
--- /dev/null
+++ b/src/platformsupport/graphics/graphics.pro
@@ -0,0 +1,13 @@
+TARGET = QtGraphicsSupport
+MODULE = graphics_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+HEADERS += $$PWD/qrasterbackingstore_p.h
+SOURCES += $$PWD/qrasterbackingstore.cpp
+
+load(qt_module)
diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h
index 01f23f2542..d2e34fead3 100644
--- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h
+++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h
@@ -53,7 +53,7 @@
#include "qevdevkeyboardhandler_p.h"
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
#include <QObject>
#include <QHash>
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
index 2d96691b09..b2f3fe5787 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
@@ -44,7 +44,7 @@
#include <QScreen>
#include <QLoggingCategory>
#include <qpa/qwindowsysteminterface.h>
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
#include <private/qguiapplication_p.h>
#include <private/qinputdevicemanager_p_p.h>
#include <private/qhighdpiscaling_p.h>
diff --git a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp
index 89a60df98d..4b00424e92 100644
--- a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp
+++ b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp
@@ -43,7 +43,7 @@
#include <QStringList>
#include <QGuiApplication>
#include <QLoggingCategory>
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
#include <private/qguiapplication_p.h>
#include <private/qinputdevicemanager_p_p.h>
diff --git a/src/platformsupport/input/evdevtouch/evdevtouch.pri b/src/platformsupport/input/evdevtouch/evdevtouch.pri
index 58fafcd8f9..0ad236e882 100644
--- a/src/platformsupport/input/evdevtouch/evdevtouch.pri
+++ b/src/platformsupport/input/evdevtouch/evdevtouch.pri
@@ -12,6 +12,5 @@ qtConfig(libudev): \
QMAKE_USE_PRIVATE += libudev
qtConfig(mtdev) {
- CONFIG += link_pkgconfig
- PKGCONFIG_PRIVATE += mtdev
+ QMAKE_USE_PRIVATE += mtdev
}
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp
index d0c6c10224..ab71d08fb1 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp
@@ -43,7 +43,7 @@
#include <QStringList>
#include <QGuiApplication>
#include <QLoggingCategory>
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
#include <private/qguiapplication_p.h>
#include <private/qinputdevicemanager_p_p.h>
diff --git a/src/platformsupport/input/input.pri b/src/platformsupport/input/input.pro
index eb4d8a983d..2c2ace6780 100644
--- a/src/platformsupport/input/input.pri
+++ b/src/platformsupport/input/input.pro
@@ -1,3 +1,12 @@
+TARGET = QtInputSupport
+MODULE = input_support
+
+QT = core-private gui-private devicediscovery_support-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
qtConfig(evdev) {
include($$PWD/evdevmouse/evdevmouse.pri)
include($$PWD/evdevkeyboard/evdevkeyboard.pri)
@@ -16,3 +25,5 @@ qtConfig(libinput) {
qtConfig(evdev)|qtConfig(libinput) {
include($$PWD/shared/shared.pri)
}
+
+load(qt_module)
diff --git a/src/platformsupport/linuxaccessibility/application_p.h b/src/platformsupport/linuxaccessibility/application_p.h
index 2e6d7a78c1..9c053b253c 100644
--- a/src/platformsupport/linuxaccessibility/application_p.h
+++ b/src/platformsupport/linuxaccessibility/application_p.h
@@ -51,12 +51,13 @@
// We mean it.
//
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtCore/QPointer>
#include <QtCore/QQueue>
#include <QtDBus/QDBusConnection>
#include <QtGui/QAccessibleInterface>
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
QT_BEGIN_NAMESPACE
@@ -94,6 +95,4 @@ private:
QT_END_NAMESPACE
-#endif //QT_NO_ACCESSIBILITY
-
#endif
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index f6c126a771..70c4aa563c 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -50,7 +50,7 @@
#ifndef QT_NO_ACCESSIBILITY
#include "socket_interface.h"
#include "constant_mappings_p.h"
-#include "../accessibility/qaccessiblebridgeutils_p.h"
+#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
#include "application_p.h"
/*!
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
index 87bdbe4bb6..b5704f53ad 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
@@ -54,6 +54,7 @@
#include <atspi/atspi-constants.h>
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtCore/qsharedpointer.h>
#include <QtDBus/qdbusvirtualobject.h>
#include <QtGui/qaccessible.h>
@@ -61,7 +62,8 @@
#include "dbusconnection_p.h"
#include "struct_marshallers_p.h"
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
+
QT_BEGIN_NAMESPACE
class QAccessibleInterface;
@@ -222,6 +224,5 @@ private:
};
QT_END_NAMESPACE
-#endif //QT_NO_ACCESSIBILITY
#endif
diff --git a/src/platformsupport/linuxaccessibility/bridge_p.h b/src/platformsupport/linuxaccessibility/bridge_p.h
index 44dfa82f5d..1e435ca351 100644
--- a/src/platformsupport/linuxaccessibility/bridge_p.h
+++ b/src/platformsupport/linuxaccessibility/bridge_p.h
@@ -52,12 +52,14 @@
// We mean it.
//
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtDBus/qdbusconnection.h>
#include <qpa/qplatformaccessibility.h>
class DeviceEventControllerAdaptor;
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
+
QT_BEGIN_NAMESPACE
class DBusConnection;
@@ -89,6 +91,5 @@ private:
};
QT_END_NAMESPACE
-#endif //QT_NO_ACCESSIBILITY
#endif
diff --git a/src/platformsupport/linuxaccessibility/cache_p.h b/src/platformsupport/linuxaccessibility/cache_p.h
index f141785301..e8529b779b 100644
--- a/src/platformsupport/linuxaccessibility/cache_p.h
+++ b/src/platformsupport/linuxaccessibility/cache_p.h
@@ -52,10 +52,12 @@
// We mean it.
//
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtCore/QObject>
#include "struct_marshallers_p.h"
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
+
QT_BEGIN_NAMESPACE
class QSpiDBusCache : public QObject
@@ -76,6 +78,5 @@ public Q_SLOTS:
};
QT_END_NAMESPACE
-#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_CACHE_H */
diff --git a/src/platformsupport/linuxaccessibility/constant_mappings_p.h b/src/platformsupport/linuxaccessibility/constant_mappings_p.h
index a096261da6..4da818c8c1 100644
--- a/src/platformsupport/linuxaccessibility/constant_mappings_p.h
+++ b/src/platformsupport/linuxaccessibility/constant_mappings_p.h
@@ -58,10 +58,11 @@
#include "struct_marshallers_p.h"
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtGui/QAccessible>
#include <atspi/atspi-constants.h>
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
// interface names from at-spi2-core/atspi/atspi-misc-private.h
#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry"
@@ -141,6 +142,5 @@ QSpiUIntList spiStateSetFromSpiStates(quint64 states);
AtspiRelationType qAccessibleRelationToAtSpiRelation(QAccessible::Relation relation);
QT_END_NAMESPACE
-#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_CONSTANT_MAPPINGS_H */
diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri b/src/platformsupport/linuxaccessibility/linuxaccessibility.pri
deleted file mode 100644
index 1f36b815cf..0000000000
--- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri
+++ /dev/null
@@ -1,25 +0,0 @@
-qtConfig(accessibility-atspi-bridge) {
-
- QT_FOR_PRIVATE += dbus
- include(../../3rdparty/atspi2/atspi2.pri)
-
- INCLUDEPATH += $$PWD
-
- HEADERS += \
- $$PWD/application_p.h \
- $$PWD/bridge_p.h \
- $$PWD/cache_p.h \
- $$PWD/struct_marshallers_p.h \
- $$PWD/constant_mappings_p.h \
- $$PWD/dbusconnection_p.h \
- $$PWD/atspiadaptor_p.h
-
- SOURCES += \
- $$PWD/application.cpp \
- $$PWD/bridge.cpp \
- $$PWD/cache.cpp \
- $$PWD/struct_marshallers.cpp \
- $$PWD/constant_mappings.cpp \
- $$PWD/dbusconnection.cpp \
- $$PWD/atspiadaptor.cpp
-}
diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro
new file mode 100644
index 0000000000..6d68909047
--- /dev/null
+++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro
@@ -0,0 +1,30 @@
+TARGET = QtLinuxAccessibilitySupport
+MODULE = linuxaccessibility_support
+
+QT = core-private dbus gui-private accessibility_support-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+include(../../3rdparty/atspi2/atspi2.pri)
+
+HEADERS += \
+ application_p.h \
+ bridge_p.h \
+ cache_p.h \
+ struct_marshallers_p.h \
+ constant_mappings_p.h \
+ dbusconnection_p.h \
+ atspiadaptor_p.h
+
+SOURCES += \
+ application.cpp \
+ bridge.cpp \
+ cache.cpp \
+ struct_marshallers.cpp \
+ constant_mappings.cpp \
+ dbusconnection.cpp \
+ atspiadaptor.cpp
+
+load(qt_module)
diff --git a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
index 28d96ec5ea..c8cc05ab5b 100644
--- a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
+++ b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
@@ -52,13 +52,15 @@
// We mean it.
//
+#include <QtGui/private/qtguiglobal_p.h>
#include <QtCore/qvector.h>
#include <QtCore/qpair.h>
#include <QtDBus/QDBusArgument>
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusObjectPath>
-#ifndef QT_NO_ACCESSIBILITY
+QT_REQUIRE_CONFIG(accessibility);
+
QT_BEGIN_NAMESPACE
typedef QVector<int> QSpiIntList;
@@ -192,5 +194,4 @@ Q_DECLARE_METATYPE(QSpiAttributeSet)
Q_DECLARE_METATYPE(QSpiAppUpdate)
Q_DECLARE_METATYPE(QSpiDeviceEvent)
-#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_STRUCT_MARSHALLERS_H */
diff --git a/src/platformsupport/platformcompositor/platformcompositor.pri b/src/platformsupport/platformcompositor/platformcompositor.pri
deleted file mode 100644
index 1e908c9998..0000000000
--- a/src/platformsupport/platformcompositor/platformcompositor.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-qtConfig(opengl) {
- SOURCES += $$PWD/qopenglcompositor.cpp \
- $$PWD/qopenglcompositorbackingstore.cpp
-
- HEADERS += $$PWD/qopenglcompositor_p.h \
- $$PWD/qopenglcompositorbackingstore_p.h
-}
diff --git a/src/platformsupport/platformcompositor/platformcompositor.pro b/src/platformsupport/platformcompositor/platformcompositor.pro
new file mode 100644
index 0000000000..633e71fb9d
--- /dev/null
+++ b/src/platformsupport/platformcompositor/platformcompositor.pro
@@ -0,0 +1,18 @@
+TARGET = QtPlatformCompositorSupport
+MODULE = platformcompositor_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+SOURCES += \
+ qopenglcompositor.cpp \
+ qopenglcompositorbackingstore.cpp
+
+HEADERS += \
+ qopenglcompositor_p.h \
+ qopenglcompositorbackingstore_p.h
+
+load(qt_module)
diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro
index f9b57acaa8..b83038dbf9 100644
--- a/src/platformsupport/platformsupport.pro
+++ b/src/platformsupport/platformsupport.pro
@@ -1,27 +1,42 @@
-TARGET = QtPlatformSupport
-QT = core-private gui-private
+TEMPLATE = subdirs
+QT_FOR_CONFIG += gui-private
-CONFIG += static internal_module
-mac:LIBS_PRIVATE += -lz
+SUBDIRS = \
+ eventdispatchers \
+ devicediscovery \
+ fbconvenience \
+ themes
-DEFINES += QT_NO_CAST_FROM_ASCII
-PRECOMPILED_HEADER = ../corelib/global/qt_pch.h
+qtConfig(freetype)|darwin|win32: \
+ SUBDIRS += fontdatabases
-include(cglconvenience/cglconvenience.pri)
-include(eglconvenience/eglconvenience.pri)
-include(eventdispatchers/eventdispatchers.pri)
-include(fbconvenience/fbconvenience.pri)
-include(fontdatabases/fontdatabases.pri)
-include(glxconvenience/glxconvenience.pri)
-include(input/input.pri)
-include(devicediscovery/devicediscovery.pri)
-include(services/services.pri)
-include(themes/themes.pri)
-include(accessibility/accessibility.pri)
-include(linuxaccessibility/linuxaccessibility.pri)
-include(clipboard/clipboard.pri)
-include(platformcompositor/platformcompositor.pri)
+qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput) {
+ SUBDIRS += input
+ input.depends += devicediscovery
+}
-darwin: include(graphics/graphics.pri)
+unix:!darwin: \
+ SUBDIRS += services
-load(qt_module)
+qtConfig(opengl): \
+ SUBDIRS += platformcompositor
+qtConfig(egl): \
+ SUBDIRS += eglconvenience
+qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2): \
+ SUBDIRS += glxconvenience
+
+qtConfig(accessibility) {
+ SUBDIRS += accessibility
+ qtConfig(accessibility-atspi-bridge) {
+ SUBDIRS += linuxaccessibility
+ linuxaccessibility.depends += accessibility
+ }
+}
+
+darwin {
+ SUBDIRS += \
+ clipboard \
+ graphics
+ macos: \
+ SUBDIRS += cglconvenience
+}
diff --git a/src/platformsupport/services/services.pri b/src/platformsupport/services/services.pri
deleted file mode 100644
index adee852626..0000000000
--- a/src/platformsupport/services/services.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-unix:!mac {
- include($$PWD/genericunix/genericunix.pri)
-}
diff --git a/src/platformsupport/services/services.pro b/src/platformsupport/services/services.pro
new file mode 100644
index 0000000000..91957a0a78
--- /dev/null
+++ b/src/platformsupport/services/services.pro
@@ -0,0 +1,13 @@
+TARGET = QtServiceSupport
+MODULE = service_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+unix:!darwin: \
+ include($$PWD/genericunix/genericunix.pri)
+
+load(qt_module)
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
index a383ef86fc..234ff60584 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
@@ -52,9 +52,9 @@
// We mean it.
//
-#include <QtCore/qglobal.h>
+#include <QtGui/private/qtguiglobal_p.h>
-#ifndef QT_NO_SYSTEMTRAYICON
+QT_REQUIRE_CONFIG(systemtrayicon);
#include <QIcon>
#include <QTemporaryFile>
@@ -165,5 +165,4 @@ private:
QT_END_NAMESPACE
-#endif // QT_NO_SYSTEMTRAYICON
#endif // QDBUSTRAYICON_H
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h
index 1bdc855c3c..3f75555579 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h
@@ -52,7 +52,9 @@
// We mean it.
//
-#ifndef QT_NO_SYSTEMTRAYICON
+#include <QtGui/private/qtguiglobal_p.h>
+
+QT_REQUIRE_CONFIG(systemtrayicon);
#include <QObject>
#include <QString>
@@ -104,5 +106,4 @@ Q_DECLARE_METATYPE(QXdgDBusImageStruct)
Q_DECLARE_METATYPE(QXdgDBusImageVector)
Q_DECLARE_METATYPE(QXdgDBusToolTipStruct)
-#endif // QT_NO_SYSTEMTRAYICON
#endif // QDBUSTRAYTYPES_P_H
diff --git a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h
index 776e1b23ef..3f8fca7ac0 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h
+++ b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h
@@ -62,9 +62,9 @@
// We mean it.
//
-#include <QtCore/qglobal.h>
+#include <QtGui/private/qtguiglobal_p.h>
-#ifndef QT_NO_SYSTEMTRAYICON
+QT_REQUIRE_CONFIG(systemtrayicon);
#include <QtCore/QObject>
#include <QtDBus/QtDBus>
@@ -200,5 +200,5 @@ private:
};
QT_END_NAMESPACE
-#endif // QT_NO_SYSTEMTRAYICON
+
#endif // QSTATUSNOTIFIERITEMADAPTER_P_H
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index db264d1b22..1e1b1af4b5 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -38,7 +38,6 @@
****************************************************************************/
#include "qgenericunixthemes_p.h"
-#include "../../services/genericunix/qgenericunixservices_p.h"
#include "qpa/qplatformtheme_p.h"
@@ -61,11 +60,11 @@
#include <qpa/qplatformservices.h>
#include <qpa/qplatformdialoghelper.h>
#ifndef QT_NO_DBUS
-#include "QtPlatformSupport/private/qdbusplatformmenu_p.h"
-#include "QtPlatformSupport/private/qdbusmenubar_p.h"
+#include "qdbusplatformmenu_p.h"
+#include "qdbusmenubar_p.h"
#endif
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
-#include "QtPlatformSupport/private/qdbustrayicon_p.h"
+#include "qdbustrayicon_p.h"
#endif
#include <algorithm>
diff --git a/src/platformsupport/themes/themes.pri b/src/platformsupport/themes/themes.pri
deleted file mode 100644
index 552973431f..0000000000
--- a/src/platformsupport/themes/themes.pri
+++ /dev/null
@@ -1,9 +0,0 @@
-unix:!mac {
- include($$PWD/genericunix/genericunix.pri)
-}
-
-HEADERS += \
- $$PWD/qabstractfileiconengine_p.h
-
-SOURCES += \
- $$PWD/qabstractfileiconengine.cpp
diff --git a/src/platformsupport/themes/themes.pro b/src/platformsupport/themes/themes.pro
new file mode 100644
index 0000000000..2aeb1f89ad
--- /dev/null
+++ b/src/platformsupport/themes/themes.pro
@@ -0,0 +1,19 @@
+TARGET = QtThemeSupport
+MODULE = theme_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+DEFINES += QT_NO_CAST_FROM_ASCII
+PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
+
+unix:!darwin: \
+ include($$PWD/genericunix/genericunix.pri)
+
+HEADERS += \
+ qabstractfileiconengine_p.h
+
+SOURCES += \
+ qabstractfileiconengine.cpp
+
+load(qt_module)
diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro
index 9f3fff304b..065ed11dad 100644
--- a/src/plugins/bearer/connman/connman.pro
+++ b/src/plugins/bearer/connman/connman.pro
@@ -1,7 +1,6 @@
TARGET = qconnmanbearer
QT = core network-private dbus
-CONFIG += link_pkgconfig
HEADERS += qconnmanservice_linux_p.h \
../linux_common/qofonoservice_linux_p.h \
diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
index 23656476bd..bb43072aba 100644
--- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
+++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
@@ -459,7 +459,7 @@ void QNativeWifiEngine::disconnectFromId(const QString &id)
return;
}
- QStringList split = interface.mid(1, interface.length() - 2).split('-');
+ const QVector<QStringRef> split = interface.midRef(1, interface.length() - 2).split(QLatin1Char('-'));
GUID guid;
guid.Data1 = split.at(0).toUInt(0, 16);
diff --git a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro
index d23ad3bad0..73fddf4d26 100644
--- a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro
+++ b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro
@@ -1,6 +1,6 @@
TARGET = qevdevkeyboardplugin
-QT += core-private platformsupport-private gui-private
+QT += core-private gui-private input_support-private
SOURCES = main.cpp
diff --git a/src/plugins/generic/evdevkeyboard/main.cpp b/src/plugins/generic/evdevkeyboard/main.cpp
index 7fd6feaecc..ef08cd56ab 100644
--- a/src/plugins/generic/evdevkeyboard/main.cpp
+++ b/src/plugins/generic/evdevkeyboard/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h>
+#include <QtInputSupport/private/qevdevkeyboardmanager_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/evdevmouse/evdevmouse.pro b/src/plugins/generic/evdevmouse/evdevmouse.pro
index 1a0bc08853..f3a8558ef2 100644
--- a/src/plugins/generic/evdevmouse/evdevmouse.pro
+++ b/src/plugins/generic/evdevmouse/evdevmouse.pro
@@ -1,6 +1,6 @@
TARGET = qevdevmouseplugin
-QT += core-private platformsupport-private gui-private
+QT += core-private gui-private input_support-private
SOURCES = main.cpp
diff --git a/src/plugins/generic/evdevmouse/main.cpp b/src/plugins/generic/evdevmouse/main.cpp
index 88c29366fa..86ec7cb575 100644
--- a/src/plugins/generic/evdevmouse/main.cpp
+++ b/src/plugins/generic/evdevmouse/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qevdevmousemanager_p.h>
+#include <QtInputSupport/private/qevdevmousemanager_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/evdevtablet/evdevtablet.pro b/src/plugins/generic/evdevtablet/evdevtablet.pro
index aaf0ef4c67..1409cd83c9 100644
--- a/src/plugins/generic/evdevtablet/evdevtablet.pro
+++ b/src/plugins/generic/evdevtablet/evdevtablet.pro
@@ -2,7 +2,7 @@ TARGET = qevdevtabletplugin
SOURCES = main.cpp
-QT += core-private platformsupport-private gui-private
+QT += core-private gui-private input_support-private
OTHER_FILES += \
evdevtablet.json
diff --git a/src/plugins/generic/evdevtablet/main.cpp b/src/plugins/generic/evdevtablet/main.cpp
index cf8dc15c6e..0646d71146 100644
--- a/src/plugins/generic/evdevtablet/main.cpp
+++ b/src/plugins/generic/evdevtablet/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qevdevtabletmanager_p.h>
+#include <QtInputSupport/private/qevdevtabletmanager_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/evdevtouch/evdevtouch.pro b/src/plugins/generic/evdevtouch/evdevtouch.pro
index 4d61db4eb0..3ca646aaca 100644
--- a/src/plugins/generic/evdevtouch/evdevtouch.pro
+++ b/src/plugins/generic/evdevtouch/evdevtouch.pro
@@ -2,7 +2,7 @@ TARGET = qevdevtouchplugin
SOURCES = main.cpp
-QT += core-private platformsupport-private gui-private
+QT += core-private gui-private input_support-private
OTHER_FILES += \
evdevtouch.json
diff --git a/src/plugins/generic/evdevtouch/main.cpp b/src/plugins/generic/evdevtouch/main.cpp
index 411bf3d7a0..aa60614936 100644
--- a/src/plugins/generic/evdevtouch/main.cpp
+++ b/src/plugins/generic/evdevtouch/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qevdevtouchmanager_p.h>
+#include <QtInputSupport/private/qevdevtouchmanager_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/libinput/libinput.pro b/src/plugins/generic/libinput/libinput.pro
index 335605d354..434bf7b945 100644
--- a/src/plugins/generic/libinput/libinput.pro
+++ b/src/plugins/generic/libinput/libinput.pro
@@ -1,6 +1,6 @@
TARGET = qlibinputplugin
-QT += core-private platformsupport-private gui-private
+QT += core-private gui-private input_support-private
SOURCES = main.cpp
diff --git a/src/plugins/generic/libinput/main.cpp b/src/plugins/generic/libinput/main.cpp
index e40fdd0097..6d1e76c0f0 100644
--- a/src/plugins/generic/libinput/main.cpp
+++ b/src/plugins/generic/libinput/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qlibinputhandler_p.h>
+#include <QtInputSupport/private/qlibinputhandler_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp
index c5e0c720fc..fb9e0c35f3 100644
--- a/src/plugins/generic/tslib/main.cpp
+++ b/src/plugins/generic/tslib/main.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include <QtPlatformSupport/private/qtslib_p.h>
+#include <QtInputSupport/private/qtslib_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro
index d6a0eea3a0..7c3a0bf607 100644
--- a/src/plugins/generic/tslib/tslib.pro
+++ b/src/plugins/generic/tslib/tslib.pro
@@ -2,7 +2,7 @@ TARGET = qtslibplugin
SOURCES = main.cpp
-QT += gui-private platformsupport-private
+QT += core-private gui-private input_support-private
QMAKE_USE += tslib
diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
index a4d7e504b7..bd25992457 100644
--- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
+++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
@@ -255,6 +255,7 @@ void TableGenerator::initPossibleLocations()
// never meant for external software to parse compose tables directly. Best we
// can do is to hardcode search paths. To add an extra system path use
// the QTCOMPOSE environment variable
+ m_possibleLocations.reserve(7);
if (qEnvironmentVariableIsSet("QTCOMPOSE"))
m_possibleLocations.append(QString::fromLocal8Bit(qgetenv("QTCOMPOSE")));
m_possibleLocations.append(QStringLiteral("/usr/share/X11/locale"));
diff --git a/src/plugins/platforms/android/android.pro b/src/plugins/platforms/android/android.pro
index 045e55ec65..bd3fe5a6cc 100644
--- a/src/plugins/platforms/android/android.pro
+++ b/src/plugins/platforms/android/android.pro
@@ -6,9 +6,10 @@ DEFINES += QT_STATICPLUGIN
LIBS += -ljnigraphics -landroid
-QT += core-private gui-private platformsupport-private
-
-CONFIG += qpa/genericunixfontdatabase
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private accessibility_support-private \
+ fontdatabase_support-private egl_support-private
OTHER_FILES += $$PWD/android.json
@@ -72,7 +73,7 @@ HEADERS += $$PWD/qandroidplatformintegration.h \
$$PWD/qandroidplatformforeignwindow.h \
$$PWD/qandroideventdispatcher.h
-android-style-assets: SOURCES += $$PWD/extract.cpp
+qtConfig(android-style-assets): SOURCES += $$PWD/extract.cpp
else: SOURCES += $$PWD/extract-dummy.cpp
PLUGIN_TYPE = platforms
diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp
index e8536235d7..a987092862 100644
--- a/src/plugins/platforms/android/androidjniaccessibility.cpp
+++ b/src/plugins/platforms/android/androidjniaccessibility.cpp
@@ -41,7 +41,7 @@
#include "androidjnimain.h"
#include "qandroidplatformintegration.h"
#include "qpa/qplatformaccessibility.h"
-#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h>
+#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
#include "qguiapplication.h"
#include "qwindow.h"
#include "qrect.h"
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index c79198d7fe..df8883ab34 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -514,7 +514,7 @@ static jboolean startQtApplication(JNIEnv *env, jobject /*object*/, jstring para
if (m_applicationParams.length()) {
// Obtain a handle to the main library (the library that contains the main() function).
// This library should already be loaded, and calling dlopen() will just return a reference to it.
- m_mainLibraryHnd = dlopen(m_applicationParams.first().data(), 0);
+ m_mainLibraryHnd = dlopen(m_applicationParams.constFirst().data(), 0);
if (Q_UNLIKELY(!m_mainLibraryHnd)) {
qCritical() << "dlopen failed:" << dlerror();
return false;
@@ -635,6 +635,11 @@ static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/)
if (QGuiApplication::instance() != nullptr) {
const auto tlw = QGuiApplication::topLevelWindows();
for (QWindow *w : tlw) {
+
+ // Skip non-platform windows, e.g., offscreen windows.
+ if (!w->handle())
+ continue;
+
QRect availableGeometry = w->screen()->availableGeometry();
if (w->geometry().width() > 0 && w->geometry().height() > 0 && availableGeometry.width() > 0 && availableGeometry.height() > 0)
QWindowSystemInterface::handleExposeEvent(w, QRegion(QRect(QPoint(), w->geometry().size())));
diff --git a/src/plugins/platforms/android/qandroideventdispatcher.h b/src/plugins/platforms/android/qandroideventdispatcher.h
index 227027f3c3..86a7e460b3 100644
--- a/src/plugins/platforms/android/qandroideventdispatcher.h
+++ b/src/plugins/platforms/android/qandroideventdispatcher.h
@@ -42,7 +42,7 @@
#include <QtCore/QMutex>
#include <QtCore/QSemaphore>
-#include <QtPlatformSupport/private/qunixeventdispatcher_qpa_p.h>
+#include <QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h>
class QAndroidEventDispatcher : public QUnixEventDispatcherQPA
{
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index 06a9c8c488..2656d45d5f 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -866,7 +866,7 @@ const QAndroidInputContext::ExtractedText &QAndroidInputContext::getExtractedTex
if (composeLength > 0) {
//Qt doesn't give us the preedit text, so we have to insert it at the correct position
int localComposePos = m_composingTextStart - blockPos;
- blockText = blockText.left(localComposePos) + m_composingText + blockText.mid(localComposePos);
+ blockText = blockText.leftRef(localComposePos) + m_composingText + blockText.midRef(localComposePos);
}
int cpos = localPos + composeLength; //actual cursor pos relative to the current block
@@ -930,9 +930,8 @@ QString QAndroidInputContext::getTextAfterCursor(jint length, jint /*flags*/)
QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/)
{
QVariant textBefore = queryFocusObjectThreadSafe(Qt::ImTextBeforeCursor, QVariant(length));
- if (textBefore.isValid()) {
- return textBefore.toString().right(length) + m_composingText;
- }
+ if (textBefore.isValid())
+ return textBefore.toString().rightRef(length) + m_composingText;
//compatibility code for old controls that do not implement the new API
QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQueryThreadSafe();
@@ -946,9 +945,9 @@ QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/)
//### the preedit text does not need to be immediately before the cursor
if (cursorPos <= length)
- return text.left(cursorPos) + m_composingText;
+ return text.leftRef(cursorPos) + m_composingText;
else
- return text.mid(cursorPos - length, length) + m_composingText;
+ return text.midRef(cursorPos - length, length) + m_composingText;
}
/*
diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.h b/src/plugins/platforms/android/qandroidplatformfontdatabase.h
index a00a3730fb..b20fd75cb2 100644
--- a/src/plugins/platforms/android/qandroidplatformfontdatabase.h
+++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.h
@@ -40,7 +40,7 @@
#ifndef QANDROIDPLATFORMFONTDATABASE_H
#define QANDROIDPLATFORMFONTDATABASE_H
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index e10bd95e12..6669ee3176 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -46,7 +46,7 @@
#include <QThread>
#include <QOffscreenSurface>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformoffscreensurface.h>
diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
index 80693acf88..2644fa27f6 100644
--- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
+++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
@@ -42,7 +42,7 @@
#include "qandroidplatformopenglwindow.h"
#include "qandroidplatformintegration.h"
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
#include <QSurface>
#include <QtGui/private/qopenglcontext_p.h>
diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.h b/src/plugins/platforms/android/qandroidplatformopenglcontext.h
index c88dbf327b..d3f6cf13a4 100644
--- a/src/plugins/platforms/android/qandroidplatformopenglcontext.h
+++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.h
@@ -41,7 +41,7 @@
#ifndef QANDROIDPLATFORMOPENGLCONTEXT_H
#define QANDROIDPLATFORMOPENGLCONTEXT_H
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp
index 7801629633..3e1cfe305d 100644
--- a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp
@@ -50,7 +50,7 @@
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatformscreen.h>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <android/native_window.h>
#include <android/native_window_jni.h>
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp
index c4387c5d88..b891407c44 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.cpp
+++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp
@@ -461,9 +461,9 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const
case StyleNames:
if (qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_STYLE")
&& m_androidStyleData) {
- return QStringList("android");
+ return QStringList(QLatin1String("android"));
}
- return QStringList("fusion");
+ return QStringList(QLatin1String("fusion"));
case MouseDoubleClickDistance:
{
diff --git a/src/plugins/platforms/bsdfb/bsdfb.pro b/src/plugins/platforms/bsdfb/bsdfb.pro
index c24d8dd9e5..770145a8ff 100644
--- a/src/plugins/platforms/bsdfb/bsdfb.pro
+++ b/src/plugins/platforms/bsdfb/bsdfb.pro
@@ -1,12 +1,16 @@
TARGET = qbsdfb
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ service_support-private eventdispatcher_support-private \
+ fontdatabase_support-private fb_support-private
+
+qtHaveModule(input_support-private): \
+ QT += input_support-private
SOURCES = main.cpp qbsdfbintegration.cpp qbsdfbscreen.cpp
HEADERS = qbsdfbintegration.h qbsdfbscreen.h
-CONFIG += qpa/genericunixfontdatabase
-
OTHER_FILES += bsdfb.json
PLUGIN_TYPE = platforms
diff --git a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp
index 9c25076c9c..1fa13183f8 100644
--- a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp
+++ b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp
@@ -35,21 +35,21 @@
#include "qbsdfbintegration.h"
#include "qbsdfbscreen.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qfbvthandler_p.h>
-#include <QtPlatformSupport/private/qfbbackingstore_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
-#include <QtPlatformSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbvthandler_p.h>
+#include <QtFbSupport/private/qfbbackingstore_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatforminputcontext.h>
#include <qpa/qplatforminputcontextfactory_p.h>
#if QT_CONFIG(tslib)
-#include <QtPlatformSupport/private/qtslib_p.h>
+#include <QtInputSupport/private/qtslib_p.h>
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
index ee2dce6867..0ef57d37e5 100644
--- a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
+++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
@@ -33,8 +33,8 @@
****************************************************************************/
#include "qbsdfbscreen.h"
-#include <QtPlatformSupport/private/qfbcursor_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
#include <QtCore/QRegularExpression>
#include <QtGui/QPainter>
diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.h b/src/plugins/platforms/bsdfb/qbsdfbscreen.h
index 0d9964afd5..3e244e3460 100644
--- a/src/plugins/platforms/bsdfb/qbsdfbscreen.h
+++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.h
@@ -35,7 +35,7 @@
#ifndef QBSDFBSCREEN_H
#define QBSDFBSCREEN_H
-#include <QtPlatformSupport/private/qfbscreen_p.h>
+#include <QtFbSupport/private/qfbscreen_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro
index d9d3cb1627..0664841c2d 100644
--- a/src/plugins/platforms/cocoa/cocoa.pro
+++ b/src/plugins/platforms/cocoa/cocoa.pro
@@ -81,7 +81,10 @@ RESOURCES += qcocoaresources.qrc
LIBS += -framework AppKit -framework Carbon -framework IOKit -lcups
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ accessibility_support-private clipboard_support-private theme_support-private \
+ fontdatabase_support-private graphics_support-private cgl_support-private
qtHaveModule(widgets) {
OBJECTIVE_SOURCES += \
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index 9c410506b0..97bd402b73 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -41,7 +41,7 @@
#include "qcocoahelpers.h"
#include "qcocoawindow.h"
#include "private/qaccessiblecache_p.h"
-#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h>
+#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
#include <QtGui/qaccessible.h>
#import <AppKit/NSAccessibility.h>
diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h
index 562be2be8f..5ed455fd71 100644
--- a/src/plugins/platforms/cocoa/qcocoabackingstore.h
+++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h
@@ -40,7 +40,7 @@
#ifndef QBACKINGSTORE_COCOA_H
#define QBACKINGSTORE_COCOA_H
-#include <QtPlatformSupport/private/qrasterbackingstore_p.h>
+#include <QtGraphicsSupport/private/qrasterbackingstore_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
index cc8436dcfe..3a5a0c8e78 100644
--- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
@@ -122,7 +122,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
- (void)dealloc
{
- [self restoreOriginalContentView];
+ [mStolenContentView release];
[mColorPanel setDelegate:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self];
diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
index 214f44b548..0be931b54f 100644
--- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
@@ -150,7 +150,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate);
- (void)dealloc
{
- [self restoreOriginalContentView];
+ [mStolenContentView release];
[mFontPanel setDelegate:nil];
[[NSFontManager sharedFontManager] setDelegate:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self];
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
index 31b93be136..a7cc19b3bf 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
@@ -42,7 +42,7 @@
#include "qcocoahelpers.h"
#include <qdebug.h>
#include <QtCore/private/qcore_mac_p.h>
-#include <QtPlatformSupport/private/cglconvenience_p.h>
+#include <QtCglSupport/private/cglconvenience_p.h>
#include <QtPlatformHeaders/qcocoanativecontext.h>
#include <dlfcn.h>
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h
index d0d88994d5..5cf8e7d237 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.h
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.h
@@ -54,7 +54,7 @@
#include <QtCore/QScopedPointer>
#include <qpa/qplatformintegration.h>
-#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.h b/src/plugins/platforms/cocoa/qcocoamenubar.h
index 7ce2059450..4870ca4103 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.h
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.h
@@ -76,6 +76,7 @@ private:
static QCocoaWindow *findWindowForMenubar();
static QCocoaMenuBar *findGlobalMenubar();
+ bool needsImmediateUpdate();
bool shouldDisable(QCocoaWindow *active) const;
NSMenuItem *nativeItemForMenu(QCocoaMenu *menu) const;
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm
index 26af0d3f63..a95ffc2f9f 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm
@@ -90,6 +90,32 @@ QCocoaMenuBar::~QCocoaMenuBar()
}
}
+bool QCocoaMenuBar::needsImmediateUpdate()
+{
+ if (m_window && m_window->window()->isActive()) {
+ return true;
+ } else if (!m_window) {
+ // Only update if the focus/active window has no
+ // menubar, which means it'll be using this menubar.
+ // This is to avoid a modification in a parentless
+ // menubar to affect a window-assigned menubar.
+ QWindow *fw = QGuiApplication::focusWindow();
+ if (!fw) {
+ // Same if there's no focus window, BTW.
+ return true;
+ } else {
+ QCocoaWindow *cw = static_cast<QCocoaWindow *>(fw->handle());
+ if (cw && !cw->menubar())
+ return true;
+ }
+ }
+
+ // Either the menubar is attached to a non-active window,
+ // or the application's focus window has its own menubar
+ // (which is different from this one)
+ return false;
+}
+
void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *before)
{
QCocoaMenu *menu = static_cast<QCocoaMenu *>(platformMenu);
@@ -130,7 +156,7 @@ void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *befor
syncMenu(menu);
- if (m_window && m_window->window()->isActive())
+ if (needsImmediateUpdate())
updateMenuBarImmediately();
}
diff --git a/src/plugins/platforms/cocoa/qcocoamimetypes.mm b/src/plugins/platforms/cocoa/qcocoamimetypes.mm
index c109eb7bf4..093f86da6e 100644
--- a/src/plugins/platforms/cocoa/qcocoamimetypes.mm
+++ b/src/plugins/platforms/cocoa/qcocoamimetypes.mm
@@ -38,7 +38,7 @@
****************************************************************************/
#include "qcocoamimetypes.h"
-#include <QtPlatformSupport/private/qmacmime_p.h>
+#include <QtClipboardSupport/private/qmacmime_p.h>
#include "qcocoahelpers.h"
#include <QtGui/private/qcoregraphics_p.h>
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index 03ad15a381..4d74c11581 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -58,8 +58,8 @@
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/private/qcoregraphics_p.h>
#include <QtGui/qpainter.h>
-#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h>
-#include <QtPlatformSupport/private/qabstractfileiconengine_p.h>
+#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
+#include <QtThemeSupport/private/qabstractfileiconengine_p.h>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformnativeinterface.h>
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
index 52b3c19768..1cd4c1905a 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.h
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -354,6 +354,8 @@ public: // for QNSView
};
QHash<quintptr, BorderRange> m_contentBorderAreas; // identifer -> uppper/lower
QHash<quintptr, bool> m_enabledContentBorderAreas; // identifer -> enabled state (true/false)
+
+ bool m_hasWindowFilePath;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 43bab0d6d8..dfaed9923e 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -436,6 +436,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
, m_topContentBorderThickness(0)
, m_bottomContentBorderThickness(0)
, m_normalGeometry(QRect(0,0,-1,-1))
+ , m_hasWindowFilePath(false)
{
qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::QCocoaWindow" << window();
@@ -990,6 +991,7 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath)
QFileInfo fi(filePath);
[m_nsWindow setRepresentedFilename:fi.exists() ? filePath.toNSString() : @""];
+ m_hasWindowFilePath = fi.exists();
}
void QCocoaWindow::setWindowIcon(const QIcon &icon)
diff --git a/src/plugins/platforms/cocoa/qmacclipboard.h b/src/plugins/platforms/cocoa/qmacclipboard.h
index 2ee0cb91e4..1d229a55d2 100644
--- a/src/plugins/platforms/cocoa/qmacclipboard.h
+++ b/src/plugins/platforms/cocoa/qmacclipboard.h
@@ -41,7 +41,7 @@
#define QMACCLIPBOARD_H
#include <QtGui>
-#include <QtPlatformSupport/private/qmacmime_p.h>
+#include <QtClipboardSupport/private/qmacmime_p.h>
#import <AppKit/AppKit.h>
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 6f469ec508..73fe5d8526 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -775,11 +775,6 @@ static bool _q_dontOverrideCtrlLMB = false;
if (!(m_acceptedMouseDowns & button) == button)
return false;
- if (!(m_buttons & (m_sendUpAsRightButton ? Qt::RightButton : Qt::LeftButton))) {
- qCWarning(lcQpaCocoaWindow) << "QNSView mouseDragged: Internal mouse button tracking"
- << "invalid (missing Qt::LeftButton)";
- }
-
[self handleMouseEvent:theEvent];
return true;
}
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h
index 667e08d0c1..a465b249c5 100644
--- a/src/plugins/platforms/cocoa/qnswindowdelegate.h
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h
@@ -54,6 +54,8 @@
- (BOOL)windowShouldClose:(NSNotification *)notification;
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame;
+- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu;
+- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard;
@end
QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindowDelegate);
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
index 7e18c023e5..3781a4cc65 100644
--- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
@@ -71,4 +71,19 @@
return YES;
}
+- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu
+{
+ Q_UNUSED(window);
+ Q_UNUSED(menu);
+ return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath;
+}
+
+- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard
+{
+ Q_UNUSED(window);
+ Q_UNUSED(event);
+ Q_UNUSED(dragImageLocation);
+ Q_UNUSED(pasteboard);
+ return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath;
+}
@end
diff --git a/src/plugins/platforms/direct2d/direct2d.pro b/src/plugins/platforms/direct2d/direct2d.pro
index f4c3b5cc3b..224f122fc4 100644
--- a/src/plugins/platforms/direct2d/direct2d.pro
+++ b/src/plugins/platforms/direct2d/direct2d.pro
@@ -1,8 +1,9 @@
TARGET = qdirect2d
-QT *= core-private
-QT *= gui-private
-QT *= platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private accessibility_support-private \
+ fontdatabase_support-private theme_support-private
LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lVersion -lgdi32
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
index c8349dc408..478995ad1c 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
@@ -50,7 +50,9 @@
#include <QtCore/QCoreApplication>
#include <QtGui/private/qpixmap_raster_p.h>
#include <QtGui/qpa/qwindowsysteminterface.h>
-#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
+
+#include <QVarLengthArray>
QT_BEGIN_NAMESPACE
@@ -101,7 +103,7 @@ public:
if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) {
DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL);
if (versionInfoSize) {
- QVector<BYTE> info(static_cast<int>(versionInfoSize));
+ QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize));
if (GetFileVersionInfo(filename, NULL, versionInfoSize, info.data())) {
UINT size;
DWORD *fi;
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
index 730f91ece3..a9e66d2586 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
@@ -45,8 +45,8 @@
#include "qwindowsdirect2dbitmap.h"
#include "qwindowsdirect2ddevicecontext.h"
-#include "qwindowsfontengine.h"
-#include "qwindowsfontdatabase.h"
+#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qwindowsfontengine_p.h>
#include "qwindowsintegration.h"
#include <QtCore/QtMath>
diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro
index de0344ff5c..406b89e3b2 100644
--- a/src/plugins/platforms/directfb/directfb.pro
+++ b/src/plugins/platforms/directfb/directfb.pro
@@ -1,6 +1,9 @@
TARGET = qdirectfb
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private service_support-private \
+ fontdatabase_support-private egl_support-private
QMAKE_USE += directfb
@@ -41,9 +44,6 @@ qtConfig(directfb_egl) {
SOURCES += qdirectfbeglhooks_stub.cpp
}
-
-CONFIG += qpa/genericunixfontdatabase
-
OTHER_FILES += directfb.json
PLUGIN_TYPE = platforms
diff --git a/src/plugins/platforms/directfb/qdirectfb_egl.cpp b/src/plugins/platforms/directfb/qdirectfb_egl.cpp
index 2a04c0bba3..dad553c890 100644
--- a/src/plugins/platforms/directfb/qdirectfb_egl.cpp
+++ b/src/plugins/platforms/directfb/qdirectfb_egl.cpp
@@ -46,10 +46,10 @@
#include <qpa/qplatformopenglcontext.h>
#include <QtGui/QScreen>
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp
index 506432f886..cdf340da7a 100644
--- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp
+++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp
@@ -44,9 +44,9 @@
#include "qdirectfbcursor.h"
#include "qdirectfbwindow.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
#include <QtGui/private/qpixmap_blitter_p.h>
#include <QtGui/private/qpixmap_raster_p.h>
diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
index 1a33215295..c5cef34d8e 100644
--- a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp
@@ -39,8 +39,8 @@
#include "qeglfsglobal_p.h"
#include <QtGui/QSurface>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
#include "qeglfscontext_p.h"
#include "qeglfswindow_p.h"
diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h
index 65af3a7cee..ab5bf99c3c 100644
--- a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h
@@ -52,7 +52,7 @@
//
#include "qeglfsglobal_p.h"
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
#include <QtCore/QVariant>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
index 1b3446c4ac..2b54251a06 100644
--- a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp
@@ -341,14 +341,16 @@ void QEglFSCursor::paintOnScreen()
if (!m_visible)
return;
- QRect cr = cursorRect(); // hotspot included
+ // cr must be a QRectF, otherwise cr.right() and bottom() would be off by
+ // one in the calculations below.
+ QRectF cr = cursorRect(); // hotspot included
// Support virtual desktop too. Backends with multi-screen support (e.g. all
// variants of KMS/DRM) will enable this by default. In this case all
// screens are siblings of each other. When not enabled, the sibling list
// only contains m_screen itself.
for (QPlatformScreen *screen : m_screen->virtualSiblings()) {
- if (screen->geometry().contains(cr.topLeft() + m_cursor.hotSpot)
+ if (screen->geometry().contains(cr.topLeft().toPoint() + m_cursor.hotSpot)
&& QOpenGLContext::currentContext()->screen() == screen->screen())
{
cr.translate(-screen->geometry().topLeft());
diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
index 9f05767366..3e1e93f1e4 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
@@ -44,7 +44,7 @@
#include "qeglfsscreen_p.h"
#include "qeglfshooks_p.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <QGuiApplication>
#include <private/qguiapplication_p.h>
#include <QScreen>
@@ -199,7 +199,7 @@ void QEglFSDeviceIntegration::screenDestroy()
QEglFSIntegration *platformIntegration = static_cast<QEglFSIntegration *>(
QGuiApplicationPrivate::platformIntegration());
while (!app->screens().isEmpty())
- platformIntegration->removeScreen(app->screens().last()->handle());
+ platformIntegration->removeScreen(app->screens().constLast()->handle());
}
QSizeF QEglFSDeviceIntegration::physicalScreenSize() const
diff --git a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h
index bad5095d21..8d76ff5ee0 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h
@@ -53,7 +53,7 @@
#include <QtCore/qglobal.h>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/api/qeglfshooks.cpp b/src/plugins/platforms/eglfs/api/qeglfshooks.cpp
index b67d8fab54..d8332a94cb 100644
--- a/src/plugins/platforms/eglfs/api/qeglfshooks.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfshooks.cpp
@@ -66,7 +66,8 @@ private:
Q_GLOBAL_STATIC(DeviceIntegration, deviceIntegration)
-DeviceIntegration::DeviceIntegration() : m_integration(0)
+DeviceIntegration::DeviceIntegration()
+ : m_integration(nullptr)
{
QStringList pluginKeys = QEglFSDeviceIntegrationFactory::keys();
if (!pluginKeys.isEmpty()) {
diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
index 4974499e0a..733f0bd139 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
@@ -49,7 +49,6 @@
#include <QtCore/QLoggingCategory>
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatforminputcontextfactory_p.h>
-#include <private/qgenericunixthemes_p.h>
#include "qeglfsintegration_p.h"
#include "qeglfswindow_p.h"
@@ -58,30 +57,31 @@
#include "qeglfsoffscreenwindow_p.h"
#include "qeglfscursor_p.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qfbvthandler_p.h>
-#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
+#include <QtThemeSupport/private/qgenericunixthemes_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFbSupport/private/qfbvthandler_p.h>
+#include <QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h>
#include <QtPlatformHeaders/QEGLNativeContext>
#if QT_CONFIG(libinput)
-#include <QtPlatformSupport/private/qlibinputhandler_p.h>
+#include <QtInputSupport/private/qlibinputhandler_p.h>
#endif
#if QT_CONFIG(evdev)
-#include <QtPlatformSupport/private/qevdevmousemanager_p.h>
-#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h>
-#include <QtPlatformSupport/private/qevdevtouchmanager_p.h>
+#include <QtInputSupport/private/qevdevmousemanager_p.h>
+#include <QtInputSupport/private/qevdevkeyboardmanager_p.h>
+#include <QtInputSupport/private/qevdevtouchmanager_p.h>
#endif
#if QT_CONFIG(tslib)
-#include <QtPlatformSupport/private/qtslib_p.h>
+#include <QtInputSupport/private/qtslib_p.h>
#endif
#include <QtPlatformHeaders/qeglfsfunctions.h>
diff --git a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp
index 7de5379ae3..864271cd3a 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp
@@ -40,7 +40,7 @@
#include "qeglfsoffscreenwindow_p.h"
#include "qeglfshooks_p.h"
#include <QtGui/QOffscreenSurface>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp
index b0c32e5176..5613179041 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp
@@ -41,7 +41,7 @@
#include <QtGui/qwindow.h>
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatformcursor.h>
-#include <QtPlatformSupport/private/qopenglcompositor_p.h>
+#include <QtPlatformCompositorSupport/private/qopenglcompositor_p.h>
#include "qeglfsscreen_p.h"
#include "qeglfswindow_p.h"
diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp
index 5ce88e6bd8..e79b377d40 100644
--- a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp
@@ -43,8 +43,8 @@
#include <private/qguiapplication_p.h>
#include <QtGui/private/qopenglcontext_p.h>
#include <QtGui/QOpenGLContext>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h>
#include "qeglfswindow_p.h"
#include "qeglfscursor_p.h"
diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
index 6e752b8f79..0889f27ae3 100644
--- a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
@@ -56,7 +56,7 @@
#include "qeglfsscreen_p.h"
#include <qpa/qplatformwindow.h>
-#include <QtPlatformSupport/private/qopenglcompositor_p.h>
+#include <QtPlatformCompositorSupport/private/qopenglcompositor_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro
index 7f1e7b9f59..fee67da2de 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-brcm-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
INCLUDEPATH += $$PWD/../../api
CONFIG += egl
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
index 10571dc978..255db824b7 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
@@ -4,7 +4,7 @@ PLUGIN_TYPE = egldeviceintegrations
PLUGIN_CLASS_NAME = QEglFSKmsGbmIntegrationPlugin
load(qt_plugin)
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private
+QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private
INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
index a5ab73cca4..38419a55c8 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
@@ -45,7 +45,7 @@
#include "qeglfskmsgbmcursor.h"
#include "private/qeglfscursor_p.h"
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
#include <QtCore/QLoggingCategory>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
@@ -126,7 +126,7 @@ QEglFSKmsDevice *QEglFSKmsGbmIntegration::createDevice(const QString &devicePath
} else {
QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask);
- QStringList devices = d->scanConnectedDevices();
+ const QStringList devices = d->scanConnectedDevices();
qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices;
d->deleteLater();
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
index 75ff3ac749..bed775ff81 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
@@ -47,7 +47,7 @@
#include <QtCore/QLoggingCategory>
#include <QtGui/private/qguiapplication_p.h>
-#include <QtPlatformSupport/private/qfbvthandler_p.h>
+#include <QtFbSupport/private/qfbvthandler_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro
index 582982df76..a625021aba 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-kms-egldevice-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private
+QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private
INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
index d30963ff96..60989e2bd0 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
@@ -79,7 +79,7 @@ void QEglFSKmsEglDevice::close()
EGLNativeDisplayType QEglFSKmsEglDevice::nativeDisplay() const
{
- return static_cast<QEglFSKmsEglDeviceIntegration *>(m_integration)->eglDevice();
+ return reinterpret_cast<EGLNativeDisplayType>(static_cast<QEglFSKmsEglDeviceIntegration *>(m_integration)->eglDevice());
}
QEglFSKmsScreen *QEglFSKmsEglDevice::createScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device,
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
index ddb2499751..d0c9c9565e 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
@@ -39,7 +39,7 @@
****************************************************************************/
#include "qeglfskmsegldeviceintegration.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include "private/qeglfswindow_p.h"
#include "private/qeglfscursor_p.h"
#include "qeglfskmsegldevice.h"
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h
index 375c388548..cddfdbd5c6 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h
@@ -46,7 +46,7 @@
#include <xf86drm.h>
#include <xf86drmMode.h>
-#include <QtPlatformSupport/private/qeglstreamconvenience_p.h>
+#include <QtEglSupport/private/qeglstreamconvenience_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
index 55d5941e5f..1f672afeb4 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
@@ -88,7 +88,7 @@ void QEglFSKmsEglDeviceScreen::waitForFlip()
qCDebug(qLcEglfsKmsDebug, "Setting mode");
int ret = drmModeSetCrtc(device()->fd(), output().crtc_id,
- -1, 0, 0,
+ uint32_t(-1), 0, 0,
&output().connector_id, 1,
&output().modes[output().mode]);
if (ret)
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
index f88a7c847e..487edb569e 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
@@ -2,7 +2,7 @@ TARGET = QtEglFsKmsSupport
CONFIG += no_module_headers internal_module
load(qt_module)
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
INCLUDEPATH += $$PWD/../../api
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
index 6c30e8f930..5368a6d031 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
@@ -42,15 +42,12 @@
#include "qeglfskmsintegration.h"
#include "qeglfskmsdevice.h"
#include "qeglfskmsscreen.h"
-#include "private/qeglfswindow_p.h"
-#include "private/qeglfscursor_p.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonArray>
+#include <QtCore/QFile>
#include <QtGui/qpa/qplatformwindow.h>
-#include <QtGui/qpa/qplatformcursor.h>
#include <QtGui/QScreen>
#include <xf86drm.h>
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
index e4b6c67f28..4021609407 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
@@ -46,7 +46,7 @@
#include <QtCore/QLoggingCategory>
#include <QtGui/private/qguiapplication_p.h>
-#include <QtPlatformSupport/private/qfbvthandler_p.h>
+#include <QtFbSupport/private/qfbvthandler_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro
index e72f5bdd14..5e6f636e2b 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-mali-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
# Avoid X11 header collision, use generic EGL native types
DEFINES += QT_EGL_NO_X11
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro
index 364812ec60..f9cce8d48b 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-viv-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
INCLUDEPATH += $$PWD/../../api
CONFIG += egl
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro
index ccdf20b417..065a103376 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-viv-wl-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
INCLUDEPATH += $$PWD/../../api
CONFIG += egl
@@ -14,8 +14,7 @@ HEADERS += $$PWD/qeglfsvivwlintegration.h
OTHER_FILES += $$PWD/eglfs_viv_wl.json
-CONFIG += link_pkgconfig
-PKGCONFIG_PRIVATE += wayland-server
+QMAKE_USE_PRIVATE += wayland_server
PLUGIN_TYPE = egldeviceintegrations
PLUGIN_CLASS_NAME = QEglFSVivWaylandIntegrationPlugin
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro
index 51a026e2cf..391f63615b 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs-x11-integration
-QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private
+QT += core-private gui-private eglfsdeviceintegration-private
# Avoid X11 header collision, use generic EGL native types
DEFINES += QT_EGL_NO_X11
diff --git a/src/plugins/platforms/eglfs/eglfs-plugin.pro b/src/plugins/platforms/eglfs/eglfs-plugin.pro
index d8adc13226..cf4863975a 100644
--- a/src/plugins/platforms/eglfs/eglfs-plugin.pro
+++ b/src/plugins/platforms/eglfs/eglfs-plugin.pro
@@ -1,6 +1,6 @@
TARGET = qeglfs
-QT += platformsupport-private eglfsdeviceintegration-private
+QT += eglfsdeviceintegration-private
SOURCES += $$PWD/qeglfsmain.cpp
diff --git a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro
index 15a825a7b0..35af3615bd 100644
--- a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro
+++ b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro
@@ -8,7 +8,15 @@ TARGET = QtEglFSDeviceIntegration
CONFIG += internal_module
MODULE = eglfsdeviceintegration
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ devicediscovery_support-private eventdispatcher_support-private \
+ service_support-private theme_support-private fontdatabase_support-private \
+ fb_support-private egl_support-private platformcompositor_support-private
+
+qtHaveModule(input_support-private): \
+ QT += input_support-private
+
LIBS += $$QMAKE_LIBS_DYNLOAD
# Avoid X11 header collision, use generic EGL native types
@@ -31,7 +39,11 @@ QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
DEFINES += EGLFS_PREFERRED_PLUGIN=$$EGLFS_DEVICE_INTEGRATION
}
-CONFIG += egl qpa/genericunixfontdatabase
+CONFIG += egl
+
+# Prevent gold linker from crashing.
+# This started happening when QtPlatformSupport was modularized.
+use_gold_linker: CONFIG += no_linker_version_script
!contains(DEFINES, QT_NO_CURSOR): RESOURCES += $$PWD/cursor.qrc
diff --git a/src/plugins/platforms/haiku/haiku.pro b/src/plugins/platforms/haiku/haiku.pro
index ea5bb632db..fd1f47b963 100644
--- a/src/plugins/platforms/haiku/haiku.pro
+++ b/src/plugins/platforms/haiku/haiku.pro
@@ -1,6 +1,6 @@
TARGET = qhaiku
-QT += platformsupport-private core-private gui-private
+QT += core-private gui-private eventdistpatcher_support-private
SOURCES = \
main.cpp \
@@ -36,8 +36,6 @@ LIBS += -lbe
OTHER_FILES += haiku.json
-include (../../../platformsupport/fontdatabases/fontdatabases.pri)
-
PLUGIN_TYPE = platforms
PLUGIN_CLASS_NAME = QHaikuIntegrationPlugin
load(qt_plugin)
diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp
index d239380866..d46d77ff18 100644
--- a/src/plugins/platforms/haiku/qhaikuintegration.cpp
+++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp
@@ -49,7 +49,7 @@
#include <QCoreApplication>
#include <QFileInfo>
#include <qpa/qplatformwindow.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#include <Application.h>
diff --git a/src/plugins/platforms/integrity/integrity.pro b/src/plugins/platforms/integrity/integrity.pro
index 07dbf4093d..0fb256793d 100644
--- a/src/plugins/platforms/integrity/integrity.pro
+++ b/src/plugins/platforms/integrity/integrity.pro
@@ -1,6 +1,9 @@
TARGET = integrityfb
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private service_support-private \
+ fontdatabase_support-private fb_support-private
SOURCES = \
main.cpp \
@@ -13,8 +16,6 @@ HEADERS = \
qintegrityfbscreen.h \
qintegrityhidmanager.h
-CONFIG += qpa/genericunixfontdatabase
-
OTHER_FILES += integrity.json
PLUGIN_TYPE = platforms
diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp
index 5332718c5e..a88c85e30d 100644
--- a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp
+++ b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp
@@ -35,13 +35,13 @@
#include "qintegrityfbscreen.h"
#include "qintegrityhidmanager.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qfbbackingstore_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
-#include <QtPlatformSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbbackingstore_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatforminputcontextfactory_p.h>
diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
index e043da7786..256cc117a2 100644
--- a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
+++ b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
@@ -32,8 +32,8 @@
****************************************************************************/
#include "qintegrityfbscreen.h"
-#include <QtPlatformSupport/private/qfbcursor_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
#include <QtCore/QRegularExpression>
#include <QtGui/QPainter>
diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.h b/src/plugins/platforms/integrity/qintegrityfbscreen.h
index 2a83f3426f..5b4d900a4b 100644
--- a/src/plugins/platforms/integrity/qintegrityfbscreen.h
+++ b/src/plugins/platforms/integrity/qintegrityfbscreen.h
@@ -34,7 +34,7 @@
#ifndef QINTEGRITYFBSCREEN_H
#define QINTEGRITYFBSCREEN_H
-#include <QtPlatformSupport/private/qfbscreen_p.h>
+#include <QtFbSupport/private/qfbscreen_p.h>
#include <device/fbdriver.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/ios/ios.pro b/src/plugins/platforms/ios/ios.pro
index 35e4719955..594ccefcf1 100644
--- a/src/plugins/platforms/ios/ios.pro
+++ b/src/plugins/platforms/ios/ios.pro
@@ -1,76 +1,2 @@
-TARGET = qios
-
-# QTBUG-42937: Work around linker errors caused by circular
-# dependencies between the iOS platform plugin and the user
-# application's main() when the plugin is a shared library.
-qtConfig(shared): CONFIG += static
-
-QT += core-private gui-private platformsupport-private
-LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox
-
-OBJECTIVE_SOURCES = \
- plugin.mm \
- qiosintegration.mm \
- qioseventdispatcher.mm \
- qioswindow.mm \
- qiosscreen.mm \
- qiosbackingstore.mm \
- qiosapplicationdelegate.mm \
- qiosapplicationstate.mm \
- qiosviewcontroller.mm \
- qioscontext.mm \
- qiosinputcontext.mm \
- qiostheme.mm \
- qiosglobal.mm \
- qiosservices.mm \
- quiview.mm \
- quiaccessibilityelement.mm \
- qiosplatformaccessibility.mm \
- qiostextresponder.mm
-
-HEADERS = \
- qiosintegration.h \
- qioseventdispatcher.h \
- qioswindow.h \
- qiosscreen.h \
- qiosbackingstore.h \
- qiosapplicationdelegate.h \
- qiosapplicationstate.h \
- qiosviewcontroller.h \
- qioscontext.h \
- qiosinputcontext.h \
- qiostheme.h \
- qiosglobal.h \
- qiosservices.h \
- quiview.h \
- quiaccessibilityelement.h \
- qiosplatformaccessibility.h \
- qiostextresponder.h \
- qiosfileenginefactory.h
-
-!tvos {
- LIBS += -framework AssetsLibrary
- OBJECTIVE_SOURCES += \
- qiosclipboard.mm \
- qiosmenu.mm \
- qiosfileengineassetslibrary.mm \
- qiosfiledialog.mm \
- qiosmessagedialog.mm \
- qiostextinputoverlay.mm
- HEADERS += \
- qiosclipboard.h \
- qiosmenu.h \
- qiosfileengineassetslibrary.h \
- qiosfiledialog.h \
- qiosmessagedialog.h \
- qiostextinputoverlay.h
-}
-
-OTHER_FILES = \
- quiview_textinput.mm \
- quiview_accessibility.mm
-
-PLUGIN_TYPE = platforms
-PLUGIN_CLASS_NAME = QIOSIntegrationPlugin
-!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
-load(qt_plugin)
+TEMPLATE = subdirs
+SUBDIRS = kernel.pro optional
diff --git a/src/plugins/platforms/ios/kernel.pro b/src/plugins/platforms/ios/kernel.pro
new file mode 100644
index 0000000000..0fe012071d
--- /dev/null
+++ b/src/plugins/platforms/ios/kernel.pro
@@ -0,0 +1,77 @@
+TARGET = qios
+
+# QTBUG-42937: Work around linker errors caused by circular
+# dependencies between the iOS platform plugin and the user
+# application's main() when the plugin is a shared library.
+qtConfig(shared): CONFIG += static
+
+QT += \
+ core-private gui-private \
+ clipboard_support-private fontdatabase_support-private graphics_support-private
+
+LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox
+
+OBJECTIVE_SOURCES = \
+ plugin.mm \
+ qiosintegration.mm \
+ qioseventdispatcher.mm \
+ qioswindow.mm \
+ qiosscreen.mm \
+ qiosbackingstore.mm \
+ qiosapplicationdelegate.mm \
+ qiosapplicationstate.mm \
+ qiosviewcontroller.mm \
+ qioscontext.mm \
+ qiosinputcontext.mm \
+ qiostheme.mm \
+ qiosglobal.mm \
+ qiosservices.mm \
+ quiview.mm \
+ quiaccessibilityelement.mm \
+ qiosplatformaccessibility.mm \
+ qiostextresponder.mm
+
+HEADERS = \
+ qiosintegration.h \
+ qioseventdispatcher.h \
+ qioswindow.h \
+ qiosscreen.h \
+ qiosbackingstore.h \
+ qiosapplicationdelegate.h \
+ qiosapplicationstate.h \
+ qiosviewcontroller.h \
+ qioscontext.h \
+ qiosinputcontext.h \
+ qiostheme.h \
+ qiosglobal.h \
+ qiosservices.h \
+ quiview.h \
+ quiaccessibilityelement.h \
+ qiosplatformaccessibility.h \
+ qiostextresponder.h \
+ qiosfileenginefactory.h
+
+!tvos {
+ LIBS += -framework AssetsLibrary
+ OBJECTIVE_SOURCES += \
+ qiosclipboard.mm \
+ qiosmenu.mm \
+ qiosfiledialog.mm \
+ qiosmessagedialog.mm \
+ qiostextinputoverlay.mm
+ HEADERS += \
+ qiosclipboard.h \
+ qiosmenu.h \
+ qiosfiledialog.h \
+ qiosmessagedialog.h \
+ qiostextinputoverlay.h
+}
+
+OTHER_FILES = \
+ quiview_textinput.mm \
+ quiview_accessibility.mm
+
+PLUGIN_TYPE = platforms
+PLUGIN_CLASS_NAME = QIOSIntegrationPlugin
+!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
+load(qt_plugin)
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro
new file mode 100644
index 0000000000..f4588dda03
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro
@@ -0,0 +1,22 @@
+TARGET = qiosnsphotolibrarysupport
+
+QT += core gui gui-private
+LIBS += -framework UIKit -framework AssetsLibrary
+
+HEADERS = \
+ qiosfileengineassetslibrary.h \
+ qiosfileenginefactory.h \
+ qiosimagepickercontroller.h
+
+OBJECTIVE_SOURCES = \
+ plugin.mm \
+ qiosfileengineassetslibrary.mm \
+ qiosimagepickercontroller.mm \
+
+OTHER_FILES = \
+ plugin.json
+
+PLUGIN_CLASS_NAME = QIosOptionalPlugin_NSPhotoLibrary
+PLUGIN_EXTENDS = -
+PLUGIN_TYPE = platforms/darwin
+load(qt_plugin)
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json
new file mode 100644
index 0000000000..4491fb3d59
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "NSPhotoLibrarySupport" ]
+}
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm
new file mode 100644
index 0000000000..2ec0d33a41
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../../qiosoptionalplugininterface.h"
+#include "../../qiosfiledialog.h"
+
+#include "qiosimagepickercontroller.h"
+#include "qiosfileenginefactory.h"
+
+QT_BEGIN_NAMESPACE
+
+class QIosOptionalPlugin_NSPhotoLibrary : public QObject, QIosOptionalPluginInterface
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QIosOptionalPluginInterface_iid FILE "plugin.json")
+ Q_INTERFACES(QIosOptionalPluginInterface)
+
+public:
+ explicit QIosOptionalPlugin_NSPhotoLibrary(QObject* = 0) {};
+ ~QIosOptionalPlugin_NSPhotoLibrary() {}
+
+ UIViewController* createImagePickerController(QIOSFileDialog *fileDialog) const override
+ {
+ return [[[QIOSImagePickerController alloc] initWithQIOSFileDialog:fileDialog] autorelease];
+ }
+
+private:
+ QIOSFileEngineFactory m_fileEngineFactory;
+
+};
+
+QT_END_NAMESPACE
+
+#include "plugin.moc"
diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h
index 06f2e8d2ca..8d7cabf15b 100644
--- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h
@@ -43,6 +43,9 @@
#include <QtCore/private/qabstractfileengine_p.h>
Q_FORWARD_DECLARE_OBJC_CLASS(ALAsset);
+
+QT_BEGIN_NAMESPACE
+
class QIOSAssetData;
class QIOSFileEngineAssetsLibrary : public QAbstractFileEngine
@@ -51,20 +54,20 @@ public:
QIOSFileEngineAssetsLibrary(const QString &fileName);
~QIOSFileEngineAssetsLibrary();
- bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE;
- bool close() Q_DECL_OVERRIDE;
- FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
- bool seek(qint64 pos) Q_DECL_OVERRIDE;
- QString fileName(FileName file) const Q_DECL_OVERRIDE;
- void setFileName(const QString &file) Q_DECL_OVERRIDE;
- QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
+ bool open(QIODevice::OpenMode openMode) override;
+ bool close() override;
+ FileFlags fileFlags(FileFlags type) const override;
+ qint64 size() const override;
+ qint64 read(char *data, qint64 maxlen) override;
+ qint64 pos() const override;
+ bool seek(qint64 pos) override;
+ QString fileName(FileName file) const override;
+ void setFileName(const QString &file) override;
+ QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override;
#ifndef QT_NO_FILESYSTEMITERATOR
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE;
- Iterator *endEntryList() Q_DECL_OVERRIDE;
+ Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ Iterator *endEntryList() override;
#endif
void setError(QFile::FileError error, const QString &str) { QAbstractFileEngine::setError(error, str); }
@@ -78,5 +81,7 @@ private:
ALAsset *loadAsset() const;
};
+QT_END_NAMESPACE
+
#endif // QIOSFILEENGINEASSETSLIBRARY_H
diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
index 560c54924a..bea2897240 100644
--- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
@@ -48,6 +48,8 @@
#include <QtCore/qset.h>
#include <QtCore/qthreadstorage.h>
+QT_BEGIN_NAMESPACE
+
static QThreadStorage<QString> g_iteratorCurrentUrl;
static QThreadStorage<QPointer<QIOSAssetData> > g_assetDataCache;
@@ -472,4 +474,6 @@ QAbstractFileEngine::Iterator *QIOSFileEngineAssetsLibrary::endEntryList()
return 0;
}
+QT_END_NAMESPACE
+
#endif
diff --git a/src/plugins/platforms/ios/qiosfileenginefactory.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h
index 87665ac603..b143357aa5 100644
--- a/src/plugins/platforms/ios/qiosfileenginefactory.h
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h
@@ -44,6 +44,8 @@
#include <QtCore/private/qabstractfileengine_p.h>
#include "qiosfileengineassetslibrary.h"
+QT_BEGIN_NAMESPACE
+
class QIOSFileEngineFactory : public QAbstractFileEngineHandler
{
public:
@@ -62,4 +64,6 @@ public:
}
};
+QT_END_NAMESPACE
+
#endif // QIOSFILEENGINEFACTORY_H
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h
new file mode 100644
index 0000000000..df3f6b9fa3
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#import <UIKit/UIKit.h>
+
+#include "../../qiosfiledialog.h"
+
+@interface QIOSImagePickerController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
+ QIOSFileDialog *m_fileDialog;
+}
+- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog;
+@end
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm
new file mode 100644
index 0000000000..f9662b964a
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#import <UIKit/UIKit.h>
+
+#include "qiosimagepickercontroller.h"
+
+@implementation QIOSImagePickerController
+
+- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog
+{
+ self = [super init];
+ if (self) {
+ m_fileDialog = fileDialog;
+ [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
+ [self setDelegate:self];
+ }
+ return self;
+}
+
+- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
+{
+ Q_UNUSED(picker);
+ NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
+ QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description]));
+ m_fileDialog->selectedFilesChanged(QList<QUrl>() << fileUrl);
+ emit m_fileDialog->accept();
+}
+
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
+{
+ Q_UNUSED(picker)
+ emit m_fileDialog->reject();
+}
+
+@end
diff --git a/src/plugins/platforms/ios/optional/optional.pro b/src/plugins/platforms/ios/optional/optional.pro
new file mode 100644
index 0000000000..5e3421a025
--- /dev/null
+++ b/src/plugins/platforms/ios/optional/optional.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS = nsphotolibrarysupport
diff --git a/src/plugins/platforms/ios/qiosbackingstore.h b/src/plugins/platforms/ios/qiosbackingstore.h
index 5c37be5d38..1c072c0935 100644
--- a/src/plugins/platforms/ios/qiosbackingstore.h
+++ b/src/plugins/platforms/ios/qiosbackingstore.h
@@ -42,7 +42,7 @@
#include <qpa/qplatformbackingstore.h>
-#include <QtPlatformSupport/private/qrasterbackingstore_p.h>
+#include <QtGraphicsSupport/private/qrasterbackingstore_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm
index 960c9f39db..ef3b453bbf 100644
--- a/src/plugins/platforms/ios/qiosclipboard.mm
+++ b/src/plugins/platforms/ios/qiosclipboard.mm
@@ -41,7 +41,7 @@
#ifndef QT_NO_CLIPBOARD
-#include <QtPlatformSupport/private/qmacmime_p.h>
+#include <QtClipboardSupport/private/qmacmime_p.h>
#include <QtCore/QMimeData>
#include <QtGui/QGuiApplication>
diff --git a/src/plugins/platforms/ios/qiosfiledialog.h b/src/plugins/platforms/ios/qiosfiledialog.h
index 7fe24eaefe..0b56bd20bf 100644
--- a/src/plugins/platforms/ios/qiosfiledialog.h
+++ b/src/plugins/platforms/ios/qiosfiledialog.h
@@ -72,6 +72,8 @@ private:
QList<QUrl> m_selection;
QEventLoop m_eventLoop;
UIViewController *m_viewController;
+
+ bool showImagePickerDialog(QWindow *parent);
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/ios/qiosfiledialog.mm b/src/plugins/platforms/ios/qiosfiledialog.mm
index 70536fc5dc..c5722d33f8 100644
--- a/src/plugins/platforms/ios/qiosfiledialog.mm
+++ b/src/plugins/platforms/ios/qiosfiledialog.mm
@@ -37,52 +37,18 @@
**
****************************************************************************/
-#include "qiosfiledialog.h"
-
#import <UIKit/UIKit.h>
#include <QtCore/qstandardpaths.h>
#include <QtGui/qwindow.h>
+#include <QDebug>
-@interface QIOSImagePickerController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
- QIOSFileDialog *m_fileDialog;
-}
-@end
-
-@implementation QIOSImagePickerController
-
-- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog
-{
- self = [super init];
- if (self) {
- m_fileDialog = fileDialog;
- [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
- [self setDelegate:self];
- }
- return self;
-}
-
-- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
-{
- Q_UNUSED(picker);
- NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
- QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description]));
- m_fileDialog->selectedFilesChanged(QList<QUrl>() << fileUrl);
- emit m_fileDialog->accept();
-}
-
-- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
-{
- Q_UNUSED(picker)
- emit m_fileDialog->reject();
-}
-
-@end
-
-// --------------------------------------------------------------------------
+#include "qiosfiledialog.h"
+#include "qiosintegration.h"
+#include "qiosoptionalplugininterface.h"
QIOSFileDialog::QIOSFileDialog()
- : m_viewController(0)
+ : m_viewController(Q_NULLPTR)
{
}
@@ -104,17 +70,36 @@ bool QIOSFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality window
bool acceptOpen = options()->acceptMode() == QFileDialogOptions::AcceptOpen;
QString directory = options()->initialDirectory().toLocalFile();
- if (acceptOpen && directory.startsWith(QLatin1String("assets-library:"))) {
- m_viewController = [[QIOSImagePickerController alloc] initWithQIOSFileDialog:this];
- UIWindow *window = parent ? reinterpret_cast<UIView *>(parent->winId()).window
- : [UIApplication sharedApplication].keyWindow;
- [window.rootViewController presentViewController:m_viewController animated:YES completion:nil];
- return true;
- }
+ if (acceptOpen && directory.startsWith(QLatin1String("assets-library:")))
+ return showImagePickerDialog(parent);
return false;
}
+bool QIOSFileDialog::showImagePickerDialog(QWindow *parent)
+{
+ if (!m_viewController) {
+ QFactoryLoader *plugins = QIOSIntegration::instance()->optionalPlugins();
+ for (int i = 0; i < plugins->metaData().size(); ++i) {
+ QIosOptionalPluginInterface *plugin = qobject_cast<QIosOptionalPluginInterface *>(plugins->instance(i));
+ m_viewController = [plugin->createImagePickerController(this) retain];
+ if (m_viewController)
+ break;
+ }
+ }
+
+ if (!m_viewController) {
+ qWarning() << "QIOSFileDialog: Could not resolve Qt plugin that gives access to photos on iOS";
+ return false;
+ }
+
+ UIWindow *window = parent ? reinterpret_cast<UIView *>(parent->winId()).window
+ : [UIApplication sharedApplication].keyWindow;
+ [window.rootViewController presentViewController:m_viewController animated:YES completion:nil];
+
+ return true;
+}
+
void QIOSFileDialog::hide()
{
// QFileDialog will remember the last directory set, and open subsequent dialogs in the same
@@ -126,6 +111,8 @@ void QIOSFileDialog::hide()
emit directoryEntered(QUrl::fromLocalFile(QDir::currentPath()));
[m_viewController dismissViewControllerAnimated:YES completion:nil];
+ [m_viewController release];
+ m_viewController = Q_NULLPTR;
m_eventLoop.exit();
}
diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h
index d9a43a683e..54c1a1dcb7 100644
--- a/src/plugins/platforms/ios/qiosintegration.h
+++ b/src/plugins/platforms/ios/qiosintegration.h
@@ -44,8 +44,9 @@
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qwindowsysteminterface.h>
+#include <QtCore/private/qfactoryloader_p.h>
+
#include "qiosapplicationstate.h"
-#include "qiosfileenginefactory.h"
#ifndef Q_OS_TVOS
#include "qiostextinputoverlay.h"
#endif
@@ -106,6 +107,8 @@ public:
void setDebugWindowManagement(bool);
bool debugWindowManagement() const;
+ QFactoryLoader *optionalPlugins() { return m_optionalPlugins; }
+
private:
QPlatformFontDatabase *m_fontDatabase;
#ifndef Q_OS_TVOS
@@ -116,7 +119,7 @@ private:
QIOSApplicationState m_applicationState;
QIOSServices *m_platformServices;
mutable QPlatformAccessibility *m_accessibility;
- QIOSFileEngineFactory m_fileEngineFactory;
+ QFactoryLoader *m_optionalPlugins;
#ifndef Q_OS_TVOS
QIOSTextInputOverlay m_textInputOverlay;
#endif
diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm
index 9799e29cf2..fbf167b514 100644
--- a/src/plugins/platforms/ios/qiosintegration.mm
+++ b/src/plugins/platforms/ios/qiosintegration.mm
@@ -51,14 +51,15 @@
#include "qiosinputcontext.h"
#include "qiostheme.h"
#include "qiosservices.h"
+#include "qiosoptionalplugininterface.h"
#include <QtGui/private/qguiapplication_p.h>
#include <qoffscreensurface.h>
#include <qpa/qplatformoffscreensurface.h>
-#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h>
-#include <QtPlatformSupport/private/qmacmime_p.h>
+#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
+#include <QtClipboardSupport/private/qmacmime_p.h>
#include <QDir>
#include <QOperatingSystemVersion>
@@ -81,6 +82,7 @@ QIOSIntegration::QIOSIntegration()
, m_inputContext(0)
, m_platformServices(new QIOSServices)
, m_accessibility(0)
+ , m_optionalPlugins(new QFactoryLoader(QIosOptionalPluginInterface_iid, QLatin1String("/platforms/darwin")))
, m_debugWindowManagement(false)
{
if (Q_UNLIKELY(![UIApplication sharedApplication])) {
@@ -125,6 +127,9 @@ QIOSIntegration::QIOSIntegration()
m_touchDevice->setCapabilities(touchCapabilities);
QWindowSystemInterface::registerTouchDevice(m_touchDevice);
QMacInternalPasteboardMime::initializeMimeTypes();
+
+ for (int i = 0; i < m_optionalPlugins->metaData().size(); ++i)
+ qobject_cast<QIosOptionalPluginInterface *>(m_optionalPlugins->instance(i))->initPlugin();
}
QIOSIntegration::~QIOSIntegration()
@@ -149,6 +154,9 @@ QIOSIntegration::~QIOSIntegration()
delete m_accessibility;
m_accessibility = 0;
+
+ delete m_optionalPlugins;
+ m_optionalPlugins = 0;
}
bool QIOSIntegration::hasCapability(Capability cap) const
@@ -228,7 +236,7 @@ QPlatformClipboard *QIOSIntegration::clipboard() const
#ifndef Q_OS_TVOS
return m_clipboard;
#else
- return 0;
+ return QPlatformIntegration::clipboard();
#endif
}
#endif
diff --git a/src/plugins/platforms/ios/qiosoptionalplugininterface.h b/src/plugins/platforms/ios/qiosoptionalplugininterface.h
new file mode 100644
index 0000000000..bcb8978e02
--- /dev/null
+++ b/src/plugins/platforms/ios/qiosoptionalplugininterface.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QIOPLUGININTERFACE_H
+#define QIOPLUGININTERFACE_H
+
+#include <QtCore/QtPlugin>
+
+#include "qiosfiledialog.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_FORWARD_DECLARE_OBJC_CLASS(UIViewController);
+
+#define QIosOptionalPluginInterface_iid "org.qt-project.Qt.QPA.ios.optional"
+
+class QIosOptionalPluginInterface
+{
+public:
+ virtual ~QIosOptionalPluginInterface() {}
+ virtual void initPlugin() const {};
+ virtual UIViewController* createImagePickerController(QIOSFileDialog *) const { return Q_NULLPTR; };
+};
+
+Q_DECLARE_INTERFACE(QIosOptionalPluginInterface, QIosOptionalPluginInterface_iid)
+
+QT_END_NAMESPACE
+
+#endif // QIOPLUGININTERFACE_H
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index 86bce0d70b..49268ee076 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -215,8 +215,8 @@ QIOSScreen::QIOSScreen(UIScreen *screen)
else
m_depth = 24;
- if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2)$"))) {
- // iPhone 6 Plus or iPhone 6S Plus
+ if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2|9,2|9,4)$"))) {
+ // iPhone Plus models
m_physicalDpi = 401;
} else if (deviceIdentifier.contains(QRegularExpression("^iPad(1,1|2,[1-4]|3,[1-6]|4,[1-3]|5,[3-4]|6,[7-8])$"))) {
// All iPads except the iPad Mini series
diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm
index 462da0a978..48262dad10 100644
--- a/src/plugins/platforms/ios/qiostextinputoverlay.mm
+++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm
@@ -994,7 +994,8 @@ QIOSTextInputOverlay::QIOSTextInputOverlay()
QIOSTextInputOverlay::~QIOSTextInputOverlay()
{
- disconnect(qApp, 0, this, 0);
+ if (qApp)
+ disconnect(qApp, 0, this, 0);
}
void QIOSTextInputOverlay::updateFocusObject()
diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm
index d7b0a323ad..e8d216fbc2 100644
--- a/src/plugins/platforms/ios/qiostextresponder.mm
+++ b/src/plugins/platforms/ios/qiostextresponder.mm
@@ -236,6 +236,8 @@
self.inputView = [[[WrapperView alloc] initWithView:inputView] autorelease];
if (UIView *accessoryView = static_cast<UIView *>(platformData.value(kImePlatformDataInputAccessoryView).value<void *>()))
self.inputAccessoryView = [[[WrapperView alloc] initWithView:accessoryView] autorelease];
+
+#ifndef Q_OS_TVOS
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) {
if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) {
// According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar.
@@ -247,6 +249,7 @@
self.inputAssistantItem.trailingBarButtonGroups = @[trailing];
}
}
+#endif
self.undoManager.groupsByEvent = NO;
[self rebuildUndoStack];
diff --git a/src/plugins/platforms/ios/qiostheme.mm b/src/plugins/platforms/ios/qiostheme.mm
index 83a8176478..91980d3f35 100644
--- a/src/plugins/platforms/ios/qiostheme.mm
+++ b/src/plugins/platforms/ios/qiostheme.mm
@@ -44,7 +44,7 @@
#include <QtGui/QFont>
-#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatformintegration.h>
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.h b/src/plugins/platforms/ios/qiosviewcontroller.h
index f7b190ba22..07d5535e1a 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.h
+++ b/src/plugins/platforms/ios/qiosviewcontroller.h
@@ -53,11 +53,9 @@ QT_END_NAMESPACE
#ifndef Q_OS_TVOS
@property (nonatomic, assign) UIInterfaceOrientation lockedOrientation;
-#endif
// UIViewController
@property (nonatomic, assign) BOOL prefersStatusBarHidden;
-#ifndef Q_OS_TVOS
@property (nonatomic, assign) UIStatusBarAnimation preferredStatusBarUpdateAnimation;
@property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle;
#endif
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index 0478c5b8c8..c47b6d68b1 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -229,9 +229,11 @@
@implementation QIOSViewController
+#ifndef Q_OS_TVOS
@synthesize prefersStatusBarHidden;
@synthesize preferredStatusBarUpdateAnimation;
@synthesize preferredStatusBarStyle;
+#endif
- (id)initWithQIOSScreen:(QT_PREPEND_NAMESPACE(QIOSScreen) *)screen
{
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index 25bfa2ad90..259070216e 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -165,8 +165,7 @@
requestedGeometry : qt_window_private(m_qioswindow->window())->geometry;
QWindow *window = m_qioswindow->window();
- QWindowSystemInterface::handleGeometryChange(window, actualGeometry, previousGeometry);
- QWindowSystemInterface::flushWindowSystemEvents(window->inherits("QWidgetWindow") ? QEventLoop::ExcludeUserInputEvents : QEventLoop::AllEvents);
+ QWindowSystemInterface::handleGeometryChange<QWindowSystemInterface::SynchronousDelivery>(window, actualGeometry, previousGeometry);
if (actualGeometry.size() != previousGeometry.size()) {
// Trigger expose event on resize
@@ -198,8 +197,7 @@
region = QRect(QPoint(), bounds);
}
- QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region);
- QWindowSystemInterface::flushWindowSystemEvents();
+ QWindowSystemInterface::handleExposeEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), region);
}
// -------------------------------------------------------------------------
@@ -224,13 +222,10 @@
qImDebug() << m_qioswindow->window() << "became first responder";
- if (qGuiApp->focusWindow() != m_qioswindow->window()) {
- QWindowSystemInterface::handleWindowActivated(m_qioswindow->window());
- QWindowSystemInterface::flushWindowSystemEvents();
- } else {
- qImDebug() << m_qioswindow->window()
- << "already active, not sending window activation";
- }
+ if (qGuiApp->focusWindow() != m_qioswindow->window())
+ QWindowSystemInterface::handleWindowActivated<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window());
+ else
+ qImDebug() << m_qioswindow->window() << "already active, not sending window activation";
return YES;
}
@@ -265,10 +260,8 @@
qImDebug() << m_qioswindow->window() << "resigned first responder";
UIResponder *newResponder = FirstResponderCandidate::currentCandidate();
- if ([self responderShouldTriggerWindowDeactivation:newResponder]) {
- QWindowSystemInterface::handleWindowActivated(0);
- QWindowSystemInterface::flushWindowSystemEvents();
- }
+ if ([self responderShouldTriggerWindowDeactivation:newResponder])
+ QWindowSystemInterface::handleWindowActivated<QWindowSystemInterface::SynchronousDelivery>(0);
return YES;
}
@@ -358,10 +351,8 @@
- (void)sendTouchEventWithTimestamp:(ulong)timeStamp
{
- // Send touch event synchronously
QIOSIntegration *iosIntegration = QIOSIntegration::instance();
- QWindowSystemInterface::handleTouchEvent(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values());
- QWindowSystemInterface::flushWindowSystemEvents();
+ QWindowSystemInterface::handleTouchEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values());
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
@@ -439,10 +430,8 @@
NSTimeInterval timestamp = event ? event.timestamp : [[NSProcessInfo processInfo] systemUptime];
- // Send cancel touch event synchronously
QIOSIntegration *iosIntegration = static_cast<QIOSIntegration *>(QGuiApplicationPrivate::platformIntegration());
- QWindowSystemInterface::handleTouchCancelEvent(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice());
- QWindowSystemInterface::flushWindowSystemEvents();
+ QWindowSystemInterface::handleTouchCancelEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice());
}
- (int)mapPressTypeToKey:(UIPress*)press
@@ -465,14 +454,12 @@
// When handling the event (for example, as a back button), both press and
// release events must be handled accordingly.
- QScopedValueRollback<bool> syncRollback(QWindowSystemInterfacePrivate::synchronousWindowSystemEvents, true);
-
bool handled = false;
for (UIPress* press in presses) {
int key = [self mapPressTypeToKey:press];
if (key == Qt::Key_unknown)
continue;
- if (QWindowSystemInterface::handleKeyEvent(m_qioswindow->window(), type, key, Qt::NoModifier))
+ if (QWindowSystemInterface::handleKeyEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), type, key, Qt::NoModifier))
handled = true;
}
diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro
index db365ce739..e2fa31211d 100644
--- a/src/plugins/platforms/linuxfb/linuxfb.pro
+++ b/src/plugins/platforms/linuxfb/linuxfb.pro
@@ -2,13 +2,17 @@ TARGET = qlinuxfb
DEFINES += QT_NO_FOREACH
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ service_support-private eventdispatcher_support-private \
+ fontdatabase_support-private fb_support-private
+
+qtHaveModule(input_support-private): \
+ QT += input_support-private
SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp
HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h
-CONFIG += qpa/genericunixfontdatabase
-
OTHER_FILES += linuxfb.json
PLUGIN_TYPE = platforms
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
index 707301487d..893205177d 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
@@ -40,30 +40,30 @@
#include "qlinuxfbintegration.h"
#include "qlinuxfbscreen.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qfbvthandler_p.h>
-#include <QtPlatformSupport/private/qfbbackingstore_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
-#include <QtPlatformSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbvthandler_p.h>
+#include <QtFbSupport/private/qfbbackingstore_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatforminputcontextfactory_p.h>
#if QT_CONFIG(libinput)
-#include <QtPlatformSupport/private/qlibinputhandler_p.h>
+#include <QtInputSupport/private/qlibinputhandler_p.h>
#endif
#if QT_CONFIG(evdev) && !defined(Q_OS_ANDROID)
-#include <QtPlatformSupport/private/qevdevmousemanager_p.h>
-#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h>
-#include <QtPlatformSupport/private/qevdevtouchmanager_p.h>
+#include <QtInputSupport/private/qevdevmousemanager_p.h>
+#include <QtInputSupport/private/qevdevkeyboardmanager_p.h>
+#include <QtInputSupport/private/qevdevtouchmanager_p.h>
#endif
#if QT_CONFIG(tslib) && !defined(Q_OS_ANDROID)
-#include <QtPlatformSupport/private/qtslib_p.h>
+#include <QtInputSupport/private/qtslib_p.h>
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
index a2e09611b4..246c959fd3 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
+++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
@@ -38,8 +38,8 @@
****************************************************************************/
#include "qlinuxfbscreen.h"
-#include <QtPlatformSupport/private/qfbcursor_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
#include <QtCore/QFile>
#include <QtCore/QRegularExpression>
#include <QtGui/QPainter>
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
index ada9c4d830..1e98191569 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
+++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
@@ -40,7 +40,7 @@
#ifndef QLINUXFBSCREEN_H
#define QLINUXFBSCREEN_H
-#include <QtPlatformSupport/private/qfbscreen_p.h>
+#include <QtFbSupport/private/qfbscreen_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro
index d4627605bb..8cfb68824e 100644
--- a/src/plugins/platforms/minimal/minimal.pro
+++ b/src/plugins/platforms/minimal/minimal.pro
@@ -1,6 +1,8 @@
TARGET = qminimal
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private fontdatabase_support-private
DEFINES += QT_NO_FOREACH
@@ -12,8 +14,6 @@ HEADERS = qminimalintegration.h \
OTHER_FILES += minimal.json
-CONFIG += qpa/genericunixfontdatabase
-
PLUGIN_TYPE = platforms
PLUGIN_CLASS_NAME = QMinimalIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp
index 558089dfce..03c72502cb 100644
--- a/src/plugins/platforms/minimal/qminimalintegration.cpp
+++ b/src/plugins/platforms/minimal/qminimalintegration.cpp
@@ -45,15 +45,15 @@
#include <qpa/qplatformwindow.h>
#if defined(Q_OS_WIN)
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
#elif QT_CONFIG(fontconfig)
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
#else
#include <qpa/qplatformfontdatabase.h>
#endif
#if !defined(Q_OS_WIN)
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#elif defined(Q_OS_WINRT)
#include <QtCore/private/qeventdispatcher_winrt_p.h>
#else
diff --git a/src/plugins/platforms/minimalegl/minimalegl.pro b/src/plugins/platforms/minimalegl/minimalegl.pro
index b8a91729fd..88466e7f36 100644
--- a/src/plugins/platforms/minimalegl/minimalegl.pro
+++ b/src/plugins/platforms/minimalegl/minimalegl.pro
@@ -1,6 +1,8 @@
TARGET = qminimalegl
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private fontdatabase_support-private egl_support-private
#DEFINES += QEGL_EXTRA_DEBUG
@@ -20,7 +22,7 @@ HEADERS = qminimaleglintegration.h \
qminimaleglbackingstore.h \
qminimaleglscreen.h
-CONFIG += egl qpa/genericunixfontdatabase
+CONFIG += egl
OTHER_FILES += \
minimalegl.json
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
index b1d3691a10..c564e1e431 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
@@ -42,15 +42,15 @@
#include "qminimaleglwindow.h"
#include "qminimaleglbackingstore.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
#if defined(Q_OS_UNIX)
-# include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+# include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#elif defined(Q_OS_WINRT)
# include <QtCore/private/qeventdispatcher_winrt_p.h>
# include <QtGui/qpa/qwindowsysteminterface.h>
#elif defined(Q_OS_WIN)
-# include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+# include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
#endif
#include <qpa/qplatformwindow.h>
@@ -58,7 +58,8 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QScreen>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+// this is where EGL headers are pulled in, make sure it is last
+#include "qminimaleglscreen.h"
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.h b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
index 020fa09443..529e89f85a 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
@@ -40,8 +40,6 @@
#ifndef QMINIMALEGLINTEGRATION_H
#define QMINIMALEGLINTEGRATION_H
-#include "qminimaleglscreen.h"
-
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformscreen.h>
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
index e8a9641224..d3d091fab7 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
@@ -40,8 +40,8 @@
#include "qminimaleglscreen.h"
#include "qminimaleglwindow.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
#ifdef Q_OPENKODE
#include <KD/kd.h>
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.h b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
index 4b53bbd39a..ba605835a8 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
@@ -44,7 +44,7 @@
#include <QtCore/QTextStream>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/minimalegl/qminimaleglwindow.h b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
index 5c2955f783..b8bfd6c8d2 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglwindow.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
@@ -41,7 +41,6 @@
#define QMINIMALEGLWINDOW_H
#include "qminimaleglintegration.h"
-#include "qminimaleglscreen.h"
#include <qpa/qplatformwindow.h>
diff --git a/src/plugins/platforms/mirclient/mirclient.pro b/src/plugins/platforms/mirclient/mirclient.pro
index d5d35f1632..0ba63601a9 100644
--- a/src/plugins/platforms/mirclient/mirclient.pro
+++ b/src/plugins/platforms/mirclient/mirclient.pro
@@ -1,16 +1,16 @@
TARGET = qmirclient
-QT += core-private gui-private platformsupport-private dbus
-
-CONFIG += qpa/genericunixfontdatabase
+QT += \
+ core-private gui-private dbus \
+ theme_support-private eventdispatcher_support-private \
+ fontdatabase_support-private egl_support-private
DEFINES += MESA_EGL_NO_X11_HEADERS
# CONFIG += c++11 # only enables C++0x
QMAKE_CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -Werror -Wall
QMAKE_LFLAGS += -std=c++11 -Wl,-no-undefined
-CONFIG += link_pkgconfig
-PKGCONFIG += egl mirclient ubuntu-platform-api
+QMAKE_USE_PRIVATE += mirclient
SOURCES = \
qmirclientbackingstore.cpp \
diff --git a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp
index 4092669cfc..38eb0a4609 100644
--- a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp
@@ -41,7 +41,7 @@
#include "qmirclientglcontext.h"
#include "qmirclientwindow.h"
#include "qmirclientlogging.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <QtGui/private/qopenglcontext_p.h>
#include <dlfcn.h>
diff --git a/src/plugins/platforms/mirclient/qmirclientinput.cpp b/src/plugins/platforms/mirclient/qmirclientinput.cpp
index 4817185d41..b3b21ae0e3 100644
--- a/src/plugins/platforms/mirclient/qmirclientinput.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientinput.cpp
@@ -347,6 +347,7 @@ void QMirClientInput::dispatchTouchEvent(QMirClientWindow *window, const MirInpu
// TODO: Is it worth setting the Qt::TouchPointStationary ones? Currently they are left
// as Qt::TouchPointMoved
const unsigned int kPointerCount = mir_touch_event_point_count(tev);
+ touchPoints.reserve(int(kPointerCount));
for (unsigned int i = 0; i < kPointerCount; ++i) {
QWindowSystemInterface::TouchPoint touchPoint;
diff --git a/src/plugins/platforms/mirclient/qmirclientintegration.cpp b/src/plugins/platforms/mirclient/qmirclientintegration.cpp
index cfbcdc937e..2c8740f070 100644
--- a/src/plugins/platforms/mirclient/qmirclientintegration.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientintegration.cpp
@@ -56,8 +56,8 @@
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qplatforminputcontextfactory_p.h>
#include <qpa/qplatforminputcontext.h>
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#include <QOpenGLContext>
// platform-api
diff --git a/src/plugins/platforms/mirclient/qmirclientplatformservices.h b/src/plugins/platforms/mirclient/qmirclientplatformservices.h
index 46cf4300f8..a1cd5758ca 100644
--- a/src/plugins/platforms/mirclient/qmirclientplatformservices.h
+++ b/src/plugins/platforms/mirclient/qmirclientplatformservices.h
@@ -42,8 +42,8 @@
#define QMIRCLIENTPLATFORMSERVICES_H
#include <qpa/qplatformservices.h>
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
class QMirClientPlatformServices : public QPlatformServices {
public:
diff --git a/src/plugins/platforms/mirclient/qmirclientscreen.cpp b/src/plugins/platforms/mirclient/qmirclientscreen.cpp
index ca0c3e4733..0a2253e9e2 100644
--- a/src/plugins/platforms/mirclient/qmirclientscreen.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientscreen.cpp
@@ -51,7 +51,7 @@
#include <QScreen>
#include <QThread>
#include <qpa/qwindowsysteminterface.h>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <memory>
diff --git a/src/plugins/platforms/mirclient/qmirclienttheme.h b/src/plugins/platforms/mirclient/qmirclienttheme.h
index 19728741e3..4bab1d0ee0 100644
--- a/src/plugins/platforms/mirclient/qmirclienttheme.h
+++ b/src/plugins/platforms/mirclient/qmirclienttheme.h
@@ -41,7 +41,7 @@
#ifndef QMIRCLIENTTHEME_H
#define QMIRCLIENTTHEME_H
-#include <QtPlatformSupport/private/qgenericunixthemes_p.h>
+#include <QtThemeSupport/private/qgenericunixthemes_p.h>
class QMirClientTheme : public QGenericUnixTheme
{
diff --git a/src/plugins/platforms/offscreen/offscreen.pro b/src/plugins/platforms/offscreen/offscreen.pro
index fbaa853c41..6652cefd86 100644
--- a/src/plugins/platforms/offscreen/offscreen.pro
+++ b/src/plugins/platforms/offscreen/offscreen.pro
@@ -1,6 +1,8 @@
TARGET = qoffscreen
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private fontdatabase_support-private
DEFINES += QT_NO_FOREACH
@@ -18,6 +20,7 @@ OTHER_FILES += offscreen.json
qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2) {
SOURCES += qoffscreenintegration_x11.cpp
HEADERS += qoffscreenintegration_x11.h
+ QT += glx_support-private
system(echo "Using X11 offscreen integration with GLX")
} else {
SOURCES += qoffscreenintegration_dummy.cpp
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
index 4c3d62a53b..56e6075cb2 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp
@@ -42,14 +42,14 @@
#include "qoffscreencommon.h"
#if defined(Q_OS_UNIX)
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#if defined(Q_OS_MAC)
#include <qpa/qplatformfontdatabase.h>
#else
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
#endif
#elif defined(Q_OS_WIN)
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
#ifndef Q_OS_WINRT
#include <QtCore/private/qeventdispatcher_win_p.h>
#else
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp
index 2187eceed4..b46d94dfd3 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp
@@ -45,7 +45,7 @@
#include <X11/Xlib.h>
#include <GL/glx.h>
-#include <QtPlatformSupport/private/qglxconvenience_p.h>
+#include <QtGlxSupport/private/qglxconvenience_p.h>
#include <qpa/qplatformsurface.h>
#include <qsurface.h>
diff --git a/src/plugins/platforms/openwfd/openwf.pro b/src/plugins/platforms/openwfd/openwf.pro
index 79f349f472..6012731b65 100644
--- a/src/plugins/platforms/openwfd/openwf.pro
+++ b/src/plugins/platforms/openwfd/openwf.pro
@@ -1,8 +1,8 @@
TARGET = qopenwf
-QT += core-private gui-private platformsupport-private
-
-CONFIG += qpa/genericunixfontdatabase
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private fontdatabase_support-private
HEADERS += \
qopenwfddevice.h \
diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
index 71e2b381fc..4850ca2e45 100644
--- a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
+++ b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
@@ -51,8 +51,8 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QScreen>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
#include <stdio.h>
@@ -68,6 +68,7 @@ QOpenWFDIntegration::QOpenWFDIntegration()
int actualNumberOfDevices = wfdEnumerateDevices(devices,numberOfDevices,0);
Q_ASSERT(actualNumberOfDevices == numberOfDevices);
+ mDevices.reserve(actualNumberOfDevices);
for (int i = 0; i < actualNumberOfDevices; i++) {
mDevices.append(new QOpenWFDDevice(this,devices[i]));
}
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro
index d65b1af989..0b052adf0f 100644
--- a/src/plugins/platforms/qnx/qnx.pro
+++ b/src/plugins/platforms/qnx/qnx.pro
@@ -1,6 +1,8 @@
TARGET = qqnx
-QT += platformsupport-private core-private gui-private
+QT += \
+ core-private gui-private \
+ fontdatabase_support-private eventdispatcher_support-private egl_support-private
# Uncomment this to build with support for IMF once it becomes available in the BBNDK
#CONFIG += qqnx_imf
@@ -115,11 +117,6 @@ lgmon {
OTHER_FILES += qnx.json
-QMAKE_CXXFLAGS += -I./private
-
-include (../../../platformsupport/eglconvenience/eglconvenience.pri)
-include (../../../platformsupport/fontdatabases/fontdatabases.pri)
-
PLUGIN_TYPE = platforms
PLUGIN_CLASS_NAME = QQnxIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
diff --git a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
index 90a09d3087..a6236f2376 100644
--- a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
+++ b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
@@ -67,6 +67,7 @@ QQnxButtonEventNotifier::QQnxButtonEventNotifier(QObject *parent)
// fetch the new button ids
int enumeratorIndex = QQnxButtonEventNotifier::staticMetaObject.indexOfEnumerator(QByteArrayLiteral("ButtonId"));
QMetaEnum enumerator = QQnxButtonEventNotifier::staticMetaObject.enumerator(enumeratorIndex);
+ m_buttonKeys.reserve(ButtonCount - bid_minus);
for (int buttonId = bid_minus; buttonId < ButtonCount; ++buttonId) {
m_buttonKeys.append(enumerator.valueToKey(buttonId));
m_state[buttonId] = ButtonUp;
diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp
index f8ae5121d1..46df500330 100644
--- a/src/plugins/platforms/qnx/qqnxscreen.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreen.cpp
@@ -90,7 +90,7 @@ static QSize determineScreenSize(screen_display_t display, bool primaryScreen) {
const QString envPhySizeStr = qgetenv("QQNX_PHYSICAL_SCREEN_SIZE");
if (!envPhySizeStr.isEmpty()) {
- const QStringList envPhySizeStrList = envPhySizeStr.split(QLatin1Char(','));
+ const auto envPhySizeStrList = envPhySizeStr.splitRef(QLatin1Char(','));
const int envWidth = envPhySizeStrList.size() == 2 ? envPhySizeStrList[0].toInt() : -1;
const int envHeight = envPhySizeStrList.size() == 2 ? envPhySizeStrList[1].toInt() : -1;
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index 7b3a5ec70c..6fd0191e43 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -569,7 +569,7 @@ void QQnxWindow::requestActivateWindow()
for (int i = 1; i < windowList.size(); ++i)
windowList.at(i-1)->setFocus(windowList.at(i)->nativeHandle());
- windowList.last()->setFocus(windowList.last()->nativeHandle());
+ windowList.last()->setFocus(windowList.constLast()->nativeHandle());
}
screen_flush_context(m_screenContext, 0);
diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp
index b3613cf18f..f386be193d 100644
--- a/src/plugins/platforms/vnc/qvnc.cpp
+++ b/src/plugins/platforms/vnc/qvnc.cpp
@@ -41,6 +41,7 @@
#include "qvncclient.h"
#include "QtNetwork/qtcpserver.h"
#include "QtNetwork/qtcpsocket.h"
+#include <qendian.h>
#include <qthread.h>
#include <QtGui/qguiapplication.h>
@@ -554,7 +555,7 @@ void QVncClientCursor::write(QVncClient *client) const
htons(cursor.height()) };
socket->write((char*)tmp, sizeof(tmp));
- const quint32 encoding = htonl(-239);
+ const qint32 encoding = qToBigEndian(-239);
socket->write((char*)(&encoding), sizeof(encoding));
}
diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp
index 3227478ebe..025112c790 100644
--- a/src/plugins/platforms/vnc/qvncintegration.cpp
+++ b/src/plugins/platforms/vnc/qvncintegration.cpp
@@ -38,19 +38,19 @@
#include "qvncscreen.h"
#include "qvnc_p.h"
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qfbbackingstore_p.h>
-#include <QtPlatformSupport/private/qfbwindow_p.h>
-#include <QtPlatformSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbbackingstore_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatforminputcontextfactory_p.h>
#include <private/qinputdevicemanager_p_p.h>
#if QT_CONFIG(libinput)
-#include <QtPlatformSupport/private/qlibinputhandler_p.h>
+#include <QtInputSupport/private/qlibinputhandler_p.h>
#endif
#include <QtCore/QRegularExpression>
diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp
index 6d117c62bf..34def45767 100644
--- a/src/plugins/platforms/vnc/qvncscreen.cpp
+++ b/src/plugins/platforms/vnc/qvncscreen.cpp
@@ -39,8 +39,8 @@
#include "qvncscreen.h"
#include "qvnc_p.h"
-#include <QtPlatformSupport/private/qfbwindow_p.h>
-#include <QtPlatformSupport/private/qfbcursor_p.h>
+#include <QtFbSupport/private/qfbwindow_p.h>
+#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/QPainter>
#include <QtCore/QRegularExpression>
diff --git a/src/plugins/platforms/vnc/qvncscreen.h b/src/plugins/platforms/vnc/qvncscreen.h
index e3c6651781..785abd6dc2 100644
--- a/src/plugins/platforms/vnc/qvncscreen.h
+++ b/src/plugins/platforms/vnc/qvncscreen.h
@@ -40,7 +40,7 @@
#ifndef QVncScreen_H
#define QVncScreen_H
-#include <QtPlatformSupport/private/qfbscreen_p.h>
+#include <QtFbSupport/private/qfbscreen_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro
index 1817e15201..3cd7e9b160 100644
--- a/src/plugins/platforms/vnc/vnc.pro
+++ b/src/plugins/platforms/vnc/vnc.pro
@@ -5,7 +5,13 @@ PLUGIN_CLASS_NAME = QVncIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
load(qt_plugin)
-QT += core-private gui-private platformsupport-private network
+QT += \
+ core-private network gui-private \
+ service_support-private theme_support-private fb_support-private \
+ eventdispatcher_support-private fontdatabase_support-private
+
+qtHaveModule(input_support-private): \
+ QT += input_support-private
DEFINES += QT_NO_FOREACH
@@ -22,6 +28,4 @@ HEADERS = \
qvnc_p.h \
qvncclient.h
-CONFIG += qpa/genericunixfontdatabase
-
OTHER_FILES += vnc.json
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
index 5ba49a8a98..d5cd9ac6db 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
@@ -41,7 +41,7 @@
#include "iaccessible2.h"
#include "qwindowsaccessibility.h"
-#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h>
+#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
#include <QtGui/qaccessible.h>
#include <QtGui/qclipboard.h>
#include <QtGui/qguiapplication.h>
diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
index 7cf24421f8..aed9c94003 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
+++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
@@ -47,13 +47,13 @@
#include <QtCore/qmap.h>
#include <QtCore/qpair.h>
#include <QtCore/qpointer.h>
-#include <QtCore/qsettings.h>
#include <QtGui/qaccessible.h>
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qplatformintegration.h>
#include <QtGui/qwindow.h>
#include <QtGui/qguiapplication.h>
+#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> // registry helper
#include "qwindowsaccessibility.h"
#ifdef Q_CC_MINGW
@@ -114,6 +114,14 @@ static inline QString messageBoxAlertSound(const QObject *messageBox)
return QString();
}
+static QString soundFileName(const QString &soundName)
+{
+ const QString key = QStringLiteral("AppEvents\\Schemes\\Apps\\.Default\\")
+ + soundName + QStringLiteral("\\.Current");
+ return QWindowsFontDatabase::readRegistryString(HKEY_CURRENT_USER,
+ reinterpret_cast<const wchar_t *>(key.utf16()), L"");
+}
+
void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
{
QString soundName;
@@ -134,17 +142,9 @@ void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
break;
}
- if (!soundName.isEmpty()) {
-#ifndef QT_NO_SETTINGS
- QSettings settings(QLatin1String("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\.Default\\") + soundName,
- QSettings::NativeFormat);
- QString file = settings.value(QLatin1String(".Current/.")).toString();
-#else
- QString file;
-#endif
- if (!file.isEmpty()) {
- PlaySound(reinterpret_cast<const wchar_t *>(soundName.utf16()), 0, SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT);
- }
+ if (!soundName.isEmpty() && !soundFileName(soundName).isEmpty()) {
+ PlaySound(reinterpret_cast<const wchar_t *>(soundName.utf16()), 0,
+ SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT);
}
// An event has to be associated with a window,
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
index 5d4afe8fb2..06d481b3af 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
+++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
@@ -50,7 +50,6 @@
#include <QtCore/qdebug.h>
#include <QtCore/qmap.h>
#include <QtCore/qpair.h>
-#include <QtCore/qsettings.h>
#include <QtGui/qaccessible.h>
#include <QtGui/qguiapplication.h>
#include <qpa/qplatformnativeinterface.h>
diff --git a/src/plugins/platforms/windows/openglblacklists/default.json b/src/plugins/platforms/windows/openglblacklists/default.json
index 1e00da52eb..dd99e674ec 100644
--- a/src/plugins/platforms/windows/openglblacklists/default.json
+++ b/src/plugins/platforms/windows/openglblacklists/default.json
@@ -102,6 +102,18 @@
"features": [
"disable_desktopgl", "disable_d3d11", "disable_d3d9"
]
+ },
+ {
+ "id": 9,
+ "description": "Intel 945 crash (QTBUG-40991)",
+ "vendor_id": "0x8086",
+ "device_id": [ "0x27A2" ],
+ "os": {
+ "type": "win"
+ },
+ "features": [
+ "disable_desktopgl"
+ ]
}
]
}
diff --git a/src/plugins/platforms/windows/qwindowsbackingstore.cpp b/src/plugins/platforms/windows/qwindowsbackingstore.cpp
index 3b7374dc92..49c7144221 100644
--- a/src/plugins/platforms/windows/qwindowsbackingstore.cpp
+++ b/src/plugins/platforms/windows/qwindowsbackingstore.cpp
@@ -39,11 +39,11 @@
#include "qwindowsbackingstore.h"
#include "qwindowswindow.h"
-#include "qwindowsnativeimage.h"
#include "qwindowscontext.h"
#include <QtGui/QWindow>
#include <QtGui/QPainter>
+#include <QtFontDatabaseSupport/private/qwindowsnativeimage_p.h>
#include <private/qhighdpiscaling_p.h>
#include <private/qimage_p.h>
diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp
index 21bc9d7377..d4a7e27762 100644
--- a/src/plugins/platforms/windows/qwindowsclipboard.cpp
+++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp
@@ -53,7 +53,7 @@
#include <QtCore/QVariant>
#include <QtCore/QUrl>
-#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 10d38f2a0c..40d4cb1497 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -73,7 +73,7 @@
#include <QtCore/QScopedArrayPointer>
#include <QtCore/private/qsystemlibrary_p.h>
-#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
#include <stdlib.h>
#include <stdio.h>
@@ -85,7 +85,6 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcQpaWindows, "qt.qpa.windows")
Q_LOGGING_CATEGORY(lcQpaBackingStore, "qt.qpa.backingstore")
Q_LOGGING_CATEGORY(lcQpaEvents, "qt.qpa.events")
-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts")
Q_LOGGING_CATEGORY(lcQpaGl, "qt.qpa.gl")
Q_LOGGING_CATEGORY(lcQpaMime, "qt.qpa.mime")
Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods")
diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h
index 843f7e2ad6..9dfde67797 100644
--- a/src/plugins/platforms/windows/qwindowscontext.h
+++ b/src/plugins/platforms/windows/qwindowscontext.h
@@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(lcQpaWindows)
Q_DECLARE_LOGGING_CATEGORY(lcQpaBackingStore)
Q_DECLARE_LOGGING_CATEGORY(lcQpaEvents)
-Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts)
Q_DECLARE_LOGGING_CATEGORY(lcQpaGl)
Q_DECLARE_LOGGING_CATEGORY(lcQpaMime)
Q_DECLARE_LOGGING_CATEGORY(lcQpaInputMethods)
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index b9a63c7a89..004b03d9a9 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -47,9 +47,8 @@
#include "qwindowstheme.h"
#include "qwindowsservices.h"
#ifndef QT_NO_FREETYPE
-# include "qwindowsfontdatabase_ft.h"
+# include <QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h>
#endif
-#include "qwindowsfontdatabase.h"
#ifndef QT_NO_CLIPBOARD
# include "qwindowsclipboard.h"
# ifndef QT_NO_DRAGANDDROP
@@ -72,7 +71,7 @@
#include <QtGui/private/qhighdpiscaling_p.h>
#include <QtGui/qpa/qplatforminputcontextfactory_p.h>
-#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
#include <QtCore/QDebug>
#include <QtCore/QVariant>
@@ -220,6 +219,7 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList &paramL
// are connected to Windows 8.1
QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware;
m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness);
+ QWindowsFontDatabase::setFontOptions(m_options);
if (tabletAbsoluteRange >= 0)
m_context.setTabletAbsoluteRange(tabletAbsoluteRange);
if (!dpiAwarenessSet) { // Set only once in case of repeated instantiations of QGuiApplication.
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index 4258f908e7..a668470993 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -43,6 +43,7 @@
#include <qpa/qplatformintegration.h>
#include <QtCore/QScopedPointer>
+#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h>
QT_BEGIN_NAMESPACE
@@ -61,8 +62,9 @@ public:
NoNativeDialogs = 0x8,
XpNativeDialogs = 0x10,
DontPassOsMouseEventsSynthesizedFromTouch = 0x20, // Do not pass OS-generated mouse events from touch.
- DontUseDirectWriteFonts = 0x40,
- DontUseColorFonts = 0x80
+ // Keep in sync with QWindowsFontDatabase::FontOptions
+ DontUseDirectWriteFonts = QWindowsFontDatabase::DontUseDirectWriteFonts,
+ DontUseColorFonts = QWindowsFontDatabase::DontUseColorFonts
};
explicit QWindowsIntegration(const QStringList &paramList);
diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp
index fd7eca9e32..b8c4f0b736 100644
--- a/src/plugins/platforms/windows/qwindowskeymapper.cpp
+++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp
@@ -49,7 +49,7 @@
#include <private/qguiapplication_p.h>
#include <private/qhighdpiscaling_p.h>
#include <QtGui/QKeyEvent>
-#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h>
+#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
#if defined(WM_APPCOMMAND)
# ifndef FAPPCOMMAND_MOUSE
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
index e0ae111b9a..eaa6e45b9f 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -41,7 +41,6 @@
#include "qwindowswindow.h"
#include "qwindowscontext.h"
#include "qwindowscursor.h"
-#include "qwindowsfontdatabase.h"
#include "qwindowsopenglcontext.h"
#include "qwindowsopengltester.h"
#include "qwindowsintegration.h"
@@ -51,6 +50,7 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QScreen>
#include <qpa/qplatformscreen.h>
+#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp
index 841464391d..ed12c8124e 100644
--- a/src/plugins/platforms/windows/qwindowstheme.cpp
+++ b/src/plugins/platforms/windows/qwindowstheme.cpp
@@ -48,7 +48,6 @@
#include "qwindowscontext.h"
#include "qwindowsintegration.h"
#include "qt_windows.h"
-#include "qwindowsfontdatabase.h"
#include <commctrl.h>
#include <objbase.h>
#ifndef Q_CC_MINGW
@@ -68,7 +67,8 @@
#include <QtGui/QPainter>
#include <QtGui/QPixmapCache>
#include <qpa/qwindowsysteminterface.h>
-#include <QtPlatformSupport/private/qabstractfileiconengine_p.h>
+#include <QtThemeSupport/private/qabstractfileiconengine_p.h>
+#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h>
#include <private/qhighdpiscaling_p.h>
#include <private/qsystemlibrary_p.h>
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 7289f8de6d..a9b061ad73 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -38,7 +38,6 @@
****************************************************************************/
#include "qwindowswindow.h"
-#include "qwindowsnativeimage.h"
#include "qwindowscontext.h"
#include "qwindowsdrag.h"
#include "qwindowsscreen.h"
@@ -424,11 +423,9 @@ static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags)
|Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint;
break;
case Qt::Dialog:
- flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint;
- break;
case Qt::Tool:
- flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;
- break;
+ flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint;
+ break;
default:
break;
}
diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri
index 35d4c85a73..5071cd8e21 100644
--- a/src/plugins/platforms/windows/windows.pri
+++ b/src/plugins/platforms/windows/windows.pri
@@ -9,24 +9,12 @@ LIBS += -lshlwapi -lshell32 -ladvapi32
DEFINES *= QT_NO_CAST_FROM_ASCII
-qtConfig(directwrite) {
- qtConfig(directwrite2): \
- DEFINES *= QT_USE_DIRECTWRITE2
-
- SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp
- HEADERS += $$PWD/qwindowsfontenginedirectwrite.h
-} else {
- DEFINES *= QT_NO_DIRECTWRITE
-}
-
SOURCES += \
$$PWD/qwindowswindow.cpp \
$$PWD/qwindowsintegration.cpp \
$$PWD/qwindowscontext.cpp \
$$PWD/qwindowsscreen.cpp \
$$PWD/qwindowskeymapper.cpp \
- $$PWD/qwindowsfontengine.cpp \
- $$PWD/qwindowsfontdatabase.cpp \
$$PWD/qwindowsmousehandler.cpp \
$$PWD/qwindowsole.cpp \
$$PWD/qwindowsmime.cpp \
@@ -36,7 +24,6 @@ SOURCES += \
$$PWD/qwindowstheme.cpp \
$$PWD/qwindowsdialoghelpers.cpp \
$$PWD/qwindowsservices.cpp \
- $$PWD/qwindowsnativeimage.cpp \
$$PWD/qwindowsnativeinterface.cpp \
$$PWD/qwindowsopengltester.cpp
@@ -46,8 +33,6 @@ HEADERS += \
$$PWD/qwindowscontext.h \
$$PWD/qwindowsscreen.h \
$$PWD/qwindowskeymapper.h \
- $$PWD/qwindowsfontengine.h \
- $$PWD/qwindowsfontdatabase.h \
$$PWD/qwindowsmousehandler.h \
$$PWD/qtwindowsglobal.h \
$$PWD/qwindowsole.h \
@@ -58,7 +43,6 @@ HEADERS += \
$$PWD/qwindowstheme.h \
$$PWD/qwindowsdialoghelpers.h \
$$PWD/qwindowsservices.h \
- $$PWD/qwindowsnativeimage.h \
$$PWD/qwindowsnativeinterface.h \
$$PWD/qwindowsopengltester.h \
$$PWD/qwindowsthreadpoolrunner.h
@@ -111,16 +95,6 @@ qtConfig(dynamicgl) {
RESOURCES += $$PWD/openglblacklists.qrc
-qtConfig(freetype) {
- HEADERS += $$PWD/qwindowsfontdatabase_ft.h
- SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp
- qtConfig(system-freetype) {
- include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri)
- } else {
- include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri)
- }
-}
-
qtConfig(accessibility): include($$PWD/accessible/accessible.pri)
DEFINES *= LIBEGL_NAME=$${LIBQTANGLE_NAME}
diff --git a/src/plugins/platforms/windows/windows.pro b/src/plugins/platforms/windows/windows.pro
index adafa830d5..23168c10dc 100644
--- a/src/plugins/platforms/windows/windows.pro
+++ b/src/plugins/platforms/windows/windows.pro
@@ -1,8 +1,9 @@
TARGET = qwindows
-QT *= core-private
-QT *= gui-private
-QT *= platformsupport-private
+QT += \
+ core-private gui-private \
+ eventdispatcher_support-private accessibility_support-private \
+ fontdatabase_support-private theme_support-private
LIBS += -lgdi32 -ldwmapi
diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.cpp b/src/plugins/platforms/winrt/qwinrteglcontext.cpp
index 5c3ecd8726..8a250c516a 100644
--- a/src/plugins/platforms/winrt/qwinrteglcontext.cpp
+++ b/src/plugins/platforms/winrt/qwinrteglcontext.cpp
@@ -51,8 +51,8 @@
#include <QOffscreenSurface>
#include <QOpenGLContext>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/winrt/qwinrtfontdatabase.h b/src/plugins/platforms/winrt/qwinrtfontdatabase.h
index 8539bcb9db..8fed4a3fa7 100644
--- a/src/plugins/platforms/winrt/qwinrtfontdatabase.h
+++ b/src/plugins/platforms/winrt/qwinrtfontdatabase.h
@@ -40,7 +40,7 @@
#ifndef QWINRTFONTDATABASE_H
#define QWINRTFONTDATABASE_H
-#include <QtPlatformSupport/private/qbasicfontdatabase_p.h>
+#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h>
#include <QtCore/QLoggingCategory>
struct IDWriteFontFile;
diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp
index 32edf2b1a2..7a0c95e6c1 100644
--- a/src/plugins/platforms/winrt/qwinrtintegration.cpp
+++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp
@@ -56,7 +56,7 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QSurface>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformoffscreensurface.h>
diff --git a/src/plugins/platforms/winrt/qwinrtwindow.cpp b/src/plugins/platforms/winrt/qwinrtwindow.cpp
index 5b82183d40..297e6618d1 100644
--- a/src/plugins/platforms/winrt/qwinrtwindow.cpp
+++ b/src/plugins/platforms/winrt/qwinrtwindow.cpp
@@ -50,7 +50,7 @@
#include <QtGui/QGuiApplication>
#include <QtGui/QOpenGLContext>
#include <QtGui/QWindow>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <functional>
#include <wrl.h>
diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro
index 28456f66ec..8fd2a83a16 100644
--- a/src/plugins/platforms/winrt/winrt.pro
+++ b/src/plugins/platforms/winrt/winrt.pro
@@ -2,12 +2,13 @@ TARGET = qwinrt
CONFIG -= precompile_header
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ fontdatabase_support-private egl_support-private
DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__
LIBS += $$QMAKE_LIBS_CORE -ldwrite -ld3d11
-INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/freetype/include
SOURCES = \
main.cpp \
diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri
index a3813ef993..4ab406acb9 100644
--- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri
+++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri
@@ -1,4 +1,4 @@
-QT += core-private gui-private platformsupport-private xcb_qpa_lib-private
+QT += core-private gui-private xcb_qpa_lib-private
INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/../
@@ -18,14 +18,9 @@ qtConfig(xcb-sm) {
DEFINES += XCB_USE_SM
}
-CONFIG += qpa/genericunixfontdatabase
-
!qtConfig(system-xcb) {
DEFINES += XCB_USE_RENDER
- XCB_DIR = $$clean_path($$PWD/../../../../3rdparty/xcb)
- INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude
- LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix()
- QMAKE_USE += xcb
+ QMAKE_USE += xcb-static xcb
} else {
qtConfig(xkb): QMAKE_USE += xcb_xkb
# to support custom cursors with depth > 1
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
index 64e9bec6db..48e774bbb2 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
@@ -41,8 +41,8 @@
#define QXCBEGLCONTEXT_H
#include "qxcbeglwindow.h"
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
+#include <QtEglSupport/private/qeglpbuffer_p.h>
#include <QtPlatformHeaders/QEGLNativeContext>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
index 7c6524c8ee..a5a47dd0bb 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
@@ -46,7 +46,7 @@
#include <QtGui/private/qcssparser_p.h>
#include <QtGui/private/qtextengine_p.h>
-#include <QtPlatformSupport/private/qt_egl_p.h>
+#include <QtEglSupport/private/qt_egl_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
index 00f64e3c40..4852d38f7e 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
@@ -42,7 +42,7 @@
#include "qxcbeglcontext.h"
#include <QtGui/QOffscreenSurface>
-#include <QtPlatformSupport/private/qeglstreamconvenience_p.h>
+#include <QtEglSupport/private/qeglstreamconvenience_p.h>
#include "qxcbeglnativeinterfacehandler.h"
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
index 69b7dfbdbf..3f7ef94238 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
@@ -41,8 +41,8 @@
#include "qxcbeglintegration.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qxlibeglintegration_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qxlibeglintegration_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro
index 6b3f9b171a..1c193849ca 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro
@@ -1,6 +1,7 @@
TARGET = qxcb-egl-integration
include(../gl_integrations_plugin_base.pri)
+QT += egl_support-private
CONFIG += egl
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
index 5580f81a7a..dc720c090f 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
@@ -51,7 +51,7 @@
#include <QtGui/QOffscreenSurface>
#include "qglxintegration.h"
-#include <QtPlatformSupport/private/qglxconvenience_p.h>
+#include <QtGlxSupport/private/qglxconvenience_p.h>
#include <QtPlatformHeaders/QGLXNativeContext>
#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4)
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
index 8ae83b8084..8df8b28f72 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
@@ -40,7 +40,7 @@
#include "qxcbglxwindow.h"
#include "qxcbscreen.h"
-#include <QtPlatformSupport/private/qglxconvenience_p.h>
+#include <QtGlxSupport/private/qglxconvenience_p.h>
QT_BEGIN_NAMESPACE
@@ -59,6 +59,10 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual()
if (!scr)
return Q_NULLPTR;
XVisualInfo *visualInfo = qglx_findVisualInfo(DISPLAY_FROM_XCB(scr), scr->screenNumber(), &m_format);
+ if (!visualInfo) {
+ qWarning() << "No XVisualInfo for format" << m_format;
+ return Q_NULLPTR;
+ }
const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid);
XFree(visualInfo);
return xcb_visualtype;
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro
index e52677d091..8aa6e1febd 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro
@@ -1,6 +1,7 @@
TARGET = qxcb-glx-integration
include(../gl_integrations_plugin_base.pri)
+QT += glx_support-private
#should be removed from the sources
DEFINES += XCB_USE_GLX XCB_USE_XLIB
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
index 130ae9be0c..3d09b1c139 100644
--- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp
+++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
@@ -168,12 +168,13 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
return;
int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600);
- if (id == -1)
+ if (id == -1) {
qWarning("QXcbShmImage: shmget() failed (%d: %s) for size %d (%dx%d)",
errno, strerror(errno), segmentSize, size.width(), size.height());
- else
- m_shm_info.shmid = id;
- m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat (m_shm_info.shmid, 0, 0);
+ } else {
+ m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat(id, 0, 0);
+ }
+ m_shm_info.shmid = id;
m_shm_info.shmseg = xcb_generate_id(xcb_connection());
const xcb_query_extension_reply_t *shm_reply = xcb_get_extension_data(xcb_connection(), &xcb_shm_id);
@@ -184,9 +185,10 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
if (!shm_present || error || id == -1) {
free(error);
- shmdt(m_shm_info.shmaddr);
- shmctl(m_shm_info.shmid, IPC_RMID, 0);
-
+ if (id != -1) {
+ shmdt(m_shm_info.shmaddr);
+ shmctl(m_shm_info.shmid, IPC_RMID, 0);
+ }
m_shm_info.shmaddr = 0;
m_xcb_image->data = (uint8_t *)malloc(segmentSize);
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index d1d7be123d..57ce357a17 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -116,6 +116,7 @@ Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen")
#define XCB_GE_GENERIC 35
#endif
+#if defined(XCB_USE_XINPUT2)
// Starting from the xcb version 1.9.3 struct xcb_ge_event_t has changed:
// - "pad0" became "extension"
// - "pad1" and "pad" became "pad0"
@@ -133,6 +134,7 @@ static inline bool isXIEvent(xcb_generic_event_t *event, int opCode)
qt_xcb_ge_event_t *e = reinterpret_cast<qt_xcb_ge_event_t *>(event);
return e->extension == opCode;
}
+#endif // XCB_USE_XINPUT2
#ifdef XCB_USE_XLIB
static const char * const xcbConnectionErrors[] = {
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index b0c5ac79f9..f4da7ba033 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -55,9 +55,9 @@
#include <xcb/xcb.h>
-#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
-#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
-#include <QtPlatformSupport/private/qgenericunixservices_p.h>
+#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
+#include <QtServiceSupport/private/qgenericunixservices_p.h>
#include <stdio.h>
@@ -77,7 +77,7 @@
#ifndef QT_NO_ACCESSIBILITY
#include <qpa/qplatformaccessibility.h>
#ifndef QT_NO_ACCESSIBILITY_ATSPI_BRIDGE
-#include "../../../platformsupport/linuxaccessibility/bridge_p.h"
+#include <QtLinuxAccessibilitySupport/private/bridge_p.h>
#endif
#endif
diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp
index f71c5464d0..7592eb2887 100644
--- a/src/plugins/platforms/xcb/qxcbmime.cpp
+++ b/src/plugins/platforms/xcb/qxcbmime.cpp
@@ -208,10 +208,11 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
reinterpret_cast<const ushort *>(data.constData()), data.size() / 2);
if (!str.isNull()) {
if (format == QLatin1String("text/uri-list")) {
- const QStringList urls = str.split(QLatin1Char('\n'));
+ const auto urls = str.splitRef(QLatin1Char('\n'));
QList<QVariant> list;
- for (const QString &s : urls) {
- const QUrl url(s.trimmed());
+ list.reserve(urls.size());
+ for (const QStringRef &s : urls) {
+ const QUrl url(s.trimmed().toString());
if (url.isValid())
list.append(url);
}
@@ -219,7 +220,7 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
// The atomName variable is not used because mimeAtomToString()
// converts "text/x-moz-url" to "text/uri-list".
if (!list.isEmpty() && connection->atomName(a) == "text/x-moz-url")
- return list.first();
+ return list.constFirst();
return list;
} else {
return str;
diff --git a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
index 8744fcba3e..2303ccf806 100644
--- a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
+++ b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
@@ -146,7 +146,7 @@ static void sm_setProperty(const QString &name, const QStringList &value)
for (QStringList::ConstIterator it = value.begin(); it != value.end(); ++it) {
prop[count].length = (*it).length();
vl.append((*it).toUtf8());
- prop[count].value = (char*)vl.last().data();
+ prop[count].value = (char*)vl.constLast().data();
++count;
}
sm_setProperty(name.toLatin1().data(), SmLISTofARRAY8, count, prop);
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index ee7bfd6c53..0c8e78491e 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -1691,9 +1691,11 @@ void QXcbWindow::requestActivateWindow()
m_deferredActivation = false;
updateNetWmUserTime(connection()->time());
+ QWindow *focusWindow = QGuiApplication::focusWindow();
if (window()->isTopLevel()
&& !(window()->flags() & Qt::X11BypassWindowManagerHint)
+ && (!focusWindow || !window()->isAncestorOf(focusWindow))
&& connection()->wmSupport()->isSupportedByWM(atom(QXcbAtom::_NET_ACTIVE_WINDOW))) {
xcb_client_message_event_t event;
@@ -1704,7 +1706,6 @@ void QXcbWindow::requestActivateWindow()
event.type = atom(QXcbAtom::_NET_ACTIVE_WINDOW);
event.data.data32[0] = 1;
event.data.data32[1] = connection()->time();
- QWindow *focusWindow = QGuiApplication::focusWindow();
event.data.data32[2] = focusWindow ? focusWindow->winId() : XCB_NONE;
event.data.data32[3] = 0;
event.data.data32[4] = 0;
diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro
index d7f150f276..01d493156d 100644
--- a/src/plugins/platforms/xcb/xcb-plugin.pro
+++ b/src/plugins/platforms/xcb/xcb-plugin.pro
@@ -1,6 +1,6 @@
TARGET = qxcb
-QT += core-private gui-private platformsupport-private xcb_qpa_lib-private
+QT += core-private gui-private xcb_qpa_lib-private
DEFINES += QT_NO_FOREACH
diff --git a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro
index a1dec2b0b5..f3e54813ee 100644
--- a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro
+++ b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro
@@ -5,11 +5,11 @@
# libxcb-xinerama
#
CONFIG += static
-load(qt_helper_lib)
XCB_DIR = ../../../../3rdparty/xcb
-INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude
+MODULE_INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude
+INCLUDEPATH += $$XCB_DIR/include/xcb
QMAKE_USE += xcb/nolink
@@ -75,3 +75,5 @@ SOURCES += \
OTHER_FILES = $$XCB_DIR/README
TR_EXCLUDE += $$XCB_DIR/*
+
+load(qt_helper_lib)
diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro
index 246bb1f118..6db0c76dea 100644
--- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro
+++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro
@@ -2,7 +2,13 @@ TARGET = QtXcbQpa
CONFIG += no_module_headers internal_module
DEFINES += QT_NO_FOREACH
-QT += core-private gui-private platformsupport-private
+QT += \
+ core-private gui-private \
+ service_support-private theme_support-private \
+ eventdispatcher_support-private fontdatabase_support-private
+
+qtHaveModule(linuxaccessibility_support-private): \
+ QT += linuxaccessibility_support-private
SOURCES = \
qxcbclipboard.cpp \
@@ -64,14 +70,9 @@ qtConfig(xcb-sm) {
include(gl_integrations/gl_integrations.pri)
-CONFIG += qpa/genericunixfontdatabase
-
!qtConfig(system-xcb) {
DEFINES += XCB_USE_RENDER
- XCB_DIR = ../../../3rdparty/xcb
- INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude
- LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix()
- QMAKE_USE += xcb
+ QMAKE_USE += xcb-static xcb
} else {
LIBS += -lxcb-xinerama ### there is no configure test for this!
qtConfig(xkb): QMAKE_USE += xcb_xkb
diff --git a/src/plugins/platformthemes/gtk3/gtk3.pro b/src/plugins/platformthemes/gtk3/gtk3.pro
index 12364b0b57..c291ac56a0 100644
--- a/src/plugins/platformthemes/gtk3/gtk3.pro
+++ b/src/plugins/platformthemes/gtk3/gtk3.pro
@@ -5,7 +5,7 @@ PLUGIN_EXTENDS = -
PLUGIN_CLASS_NAME = QGtk3ThemePlugin
load(qt_plugin)
-QT += core-private gui-private platformsupport-private
+QT += core-private gui-private theme_support-private
CONFIG += X11
QMAKE_USE += gtk3
diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
index 42d3c1f193..2030732e4b 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
@@ -463,10 +463,10 @@ void QGtk3FileDialogHelper::setNameFilters(const QStringList &filters)
foreach (const QString &filter, filters) {
GtkFileFilter *gtkFilter = gtk_file_filter_new();
- const QString name = filter.left(filter.indexOf(QLatin1Char('(')));
+ const QStringRef name = filter.leftRef(filter.indexOf(QLatin1Char('(')));
const QStringList extensions = cleanFilterList(filter);
- gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QStringLiteral(", ")).toUtf8() : name.toUtf8());
+ gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QLatin1String(", ")).toUtf8() : name.toUtf8());
foreach (const QString &ext, extensions)
gtk_file_filter_add_pattern(gtkFilter, ext.toUtf8());
diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp
index caa7382462..9efa83d409 100644
--- a/src/plugins/printsupport/cups/qppdprintdevice.cpp
+++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp
@@ -63,7 +63,7 @@ QPpdPrintDevice::QPpdPrintDevice(const QString &id)
if (!id.isEmpty()) {
// TODO For now each dest is an individual device
- QStringList parts = id.split(QLatin1Char('/'));
+ const auto parts = id.splitRef(QLatin1Char('/'));
m_cupsName = parts.at(0).toUtf8();
if (parts.size() > 1)
m_cupsInstance = parts.at(1).toUtf8();
diff --git a/src/plugins/sqldrivers/db2/qsql_db2.cpp b/src/plugins/sqldrivers/db2/qsql_db2.cpp
index 9408f464e0..27d0e7001a 100644
--- a/src/plugins/sqldrivers/db2/qsql_db2.cpp
+++ b/src/plugins/sqldrivers/db2/qsql_db2.cpp
@@ -59,8 +59,6 @@
#define SQL_BIGUINT_TYPE quint64
#endif
-#define UNICODE
-
#include <sqlcli1.h>
#include <string.h>
@@ -1187,8 +1185,8 @@ QDB2Driver::QDB2Driver(Qt::HANDLE env, Qt::HANDLE con, QObject* parent)
: QSqlDriver(*new QDB2DriverPrivate, parent)
{
Q_D(QDB2Driver);
- d->hEnv = reinterpret_cast<intptr_t>(env);
- d->hDbc = reinterpret_cast<intptr_t>(con);
+ d->hEnv = reinterpret_cast<SQLHANDLE>(env);
+ d->hDbc = reinterpret_cast<SQLHANDLE>(con);
if (env && con) {
setOpen(true);
setOpenError(false);
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
index ef4ef2e93c..1cb0f10494 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
@@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE
static QString _q_escapeIdentifier(const QString &identifier)
{
QString res = identifier;
- if(!identifier.isEmpty() && identifier.left(1) != QString(QLatin1Char('"')) && identifier.right(1) != QString(QLatin1Char('"')) ) {
+ if (!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('"')) && !identifier.endsWith(QLatin1Char('"'))) {
res.replace(QLatin1Char('"'), QLatin1String("\"\""));
res.prepend(QLatin1Char('"')).append(QLatin1Char('"'));
res.replace(QLatin1Char('.'), QLatin1String("\".\""));
diff --git a/src/printsupport/dialogs/qpagesetupdialog.cpp b/src/printsupport/dialogs/qpagesetupdialog.cpp
index 81cbf87777..911c0ecdf7 100644
--- a/src/printsupport/dialogs/qpagesetupdialog.cpp
+++ b/src/printsupport/dialogs/qpagesetupdialog.cpp
@@ -116,7 +116,7 @@ void QPageSetupDialogPrivate::setPrinter(QPrinter *newPrinter)
printer = new QPrinter;
ownsPrinter = true;
}
-#ifndef Q_DEAD_CODE_FROM_QT4_X11
+#if 1 // Used to be excluded in Qt4 for Q_WS_X11
if (printer->outputFormat() != QPrinter::NativeFormat)
qWarning("QPageSetupDialog: Cannot be used on non-native printers");
#endif
diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp
index ad5207cf6e..bf98f82087 100644
--- a/src/sql/kernel/qsqldriver.cpp
+++ b/src/sql/kernel/qsqldriver.cpp
@@ -671,6 +671,7 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const
break;
}
}
+ // fall through
default:
r = field.value().toString();
break;
diff --git a/src/src.pro b/src/src.pro
index 541053eba5..87391eab5b 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -4,6 +4,9 @@ QT_FOR_CONFIG += gui-private
include($$OUT_PWD/corelib/qtcore-config.pri)
include($$OUT_PWD/gui/qtgui-config.pri)
+force_bootstrap|!qtConfig(commandlineparser): \
+ CONFIG += force_dbus_bootstrap
+
src_qtzlib.file = $$PWD/corelib/qtzlib.pro
src_qtzlib.target = sub-zlib
@@ -34,7 +37,7 @@ src_tools_bootstrap_dbus.depends = src_tools_bootstrap
src_tools_qdbusxml2cpp.subdir = tools/qdbusxml2cpp
src_tools_qdbusxml2cpp.target = sub-qdbusxml2cpp
-force_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus
+force_dbus_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus
else: src_tools_qdbusxml2cpp.depends = src_dbus
src_tools_qdbuscpp2xml.subdir = tools/qdbuscpp2xml
@@ -57,7 +60,7 @@ src_xml.depends = src_corelib
src_dbus.subdir = $$PWD/dbus
src_dbus.target = sub-dbus
src_dbus.depends = src_corelib
-force_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race
+force_dbus_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race
src_concurrent.subdir = $$PWD/concurrent
src_concurrent.target = sub-concurrent
@@ -143,7 +146,7 @@ TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr
win32:SUBDIRS += src_winmain
SUBDIRS += src_network src_sql src_xml src_testlib
qtConfig(dbus) {
- force_bootstrap|qtConfig(private_tests): \
+ force_dbus_bootstrap|qtConfig(private_tests): \
SUBDIRS += src_tools_bootstrap_dbus
SUBDIRS += src_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml
TOOLS += src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml
diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp
index c884d5d740..c933a16c35 100644
--- a/src/testlib/qbenchmark.cpp
+++ b/src/testlib/qbenchmark.cpp
@@ -40,6 +40,7 @@
#include <QtTest/qbenchmark.h>
#include <QtTest/private/qbenchmark_p.h>
#include <QtTest/private/qbenchmarkmetric_p.h>
+#include <QtTest/private/qbenchmarktimemeasurers_p.h>
#include <QtCore/qprocess.h>
#include <QtCore/qdir.h>
diff --git a/src/testlib/qbenchmarkmeasurement.cpp b/src/testlib/qbenchmarkmeasurement.cpp
index ac4d75ce3b..228ab15f99 100644
--- a/src/testlib/qbenchmarkmeasurement.cpp
+++ b/src/testlib/qbenchmarkmeasurement.cpp
@@ -37,7 +37,7 @@
**
****************************************************************************/
-#include <QtTest/private/qbenchmarkmeasurement_p.h>
+#include <QtTest/private/qbenchmarktimemeasurers_p.h>
#include <QtTest/private/qbenchmark_p.h>
#include <QtTest/private/qbenchmarkmetric_p.h>
#include <QtTest/qbenchmark.h>
diff --git a/src/testlib/qbenchmarkmeasurement_p.h b/src/testlib/qbenchmarkmeasurement_p.h
index 1444439e11..8dbfd4b618 100644
--- a/src/testlib/qbenchmarkmeasurement_p.h
+++ b/src/testlib/qbenchmarkmeasurement_p.h
@@ -51,8 +51,6 @@
// We mean it.
//
-#include <QtCore/qelapsedtimer.h>
-#include <QtTest/private/cycle_p.h>
#include <QtTest/qbenchmark.h>
QT_BEGIN_NAMESPACE
@@ -73,40 +71,6 @@ public:
virtual QTest::QBenchmarkMetric metricType() = 0;
};
-class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase
-{
-public:
- void start();
- qint64 checkpoint();
- qint64 stop();
- bool isMeasurementAccepted(qint64 measurement);
- int adjustIterationCount(int sugestion);
- int adjustMedianCount(int suggestion);
- bool needsWarmupIteration();
- QTest::QBenchmarkMetric metricType();
-private:
- QElapsedTimer time;
-};
-
-#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h
-
-class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase
-{
-public:
- void start();
- qint64 checkpoint();
- qint64 stop();
- bool isMeasurementAccepted(qint64 measurement);
- int adjustIterationCount(int);
- int adjustMedianCount(int suggestion);
- bool needsWarmupIteration();
- QTest::QBenchmarkMetric metricType();
-private:
- CycleCounterTicks startTicks;
-};
-
-#endif
-
QT_END_NAMESPACE
#endif // QBENCHMARKMEASUREMENT_P_H
diff --git a/src/corelib/kernel/qcrashhandler_p.h b/src/testlib/qbenchmarktimemeasurers_p.h
index 64c15ce66c..e5ffb1157d 100644
--- a/src/corelib/kernel/qcrashhandler_p.h
+++ b/src/testlib/qbenchmarktimemeasurers_p.h
@@ -3,7 +3,7 @@
** 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.
+** This file is part of the QtTest module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
@@ -37,8 +37,8 @@
**
****************************************************************************/
-#ifndef QCRASHHANDLER_P_H
-#define QCRASHHANDLER_P_H
+#ifndef QBENCHMARKTIMEMEASURERS_P_H
+#define QBENCHMARKTIMEMEASURERS_P_H
//
// W A R N I N G
@@ -51,29 +51,46 @@
// We mean it.
//
-#include <QtCore/private/qglobal_p.h>
-
-#ifndef QT_NO_CRASHHANDLER
+#include <QtTest/private/qbenchmarkmeasurement_p.h>
+#include <QtCore/qelapsedtimer.h>
+#include <QtTest/private/cycle_p.h>
QT_BEGIN_NAMESPACE
-typedef void (*QtCrashHandler)();
-
-class Q_CORE_EXPORT QSegfaultHandler
+class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase
{
- friend void qt_signal_handler(int);
- static QtCrashHandler callback;
public:
- static void initialize(char **, int);
+ void start();
+ qint64 checkpoint();
+ qint64 stop();
+ bool isMeasurementAccepted(qint64 measurement);
+ int adjustIterationCount(int sugestion);
+ int adjustMedianCount(int suggestion);
+ bool needsWarmupIteration();
+ QTest::QBenchmarkMetric metricType();
+private:
+ QElapsedTimer time;
+};
- inline static void installCrashHandler(QtCrashHandler h) { callback = h; }
- inline static QtCrashHandler crashHandler() { return callback; }
+#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h
+class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase
+{
+public:
+ void start();
+ qint64 checkpoint();
+ qint64 stop();
+ bool isMeasurementAccepted(qint64 measurement);
+ int adjustIterationCount(int);
+ int adjustMedianCount(int suggestion);
+ bool needsWarmupIteration();
+ QTest::QBenchmarkMetric metricType();
private:
+ CycleCounterTicks startTicks;
};
-QT_END_NAMESPACE
+#endif // HAVE_TICK_COUNTER
-#endif // QT_NO_CRASHHANDLER
+QT_END_NAMESPACE
-#endif // QCRASHHANDLER_P_H
+#endif // QBENCHMARKTIMEMEASURERS_P_H
diff --git a/src/testlib/qtestcase.qdoc b/src/testlib/qtestcase.qdoc
index bee8a0ad93..8f3d140add 100644
--- a/src/testlib/qtestcase.qdoc
+++ b/src/testlib/qtestcase.qdoc
@@ -124,7 +124,7 @@
\relates QTest
The QTRY_VERIFY_WITH_TIMEOUT() macro is similar to QVERIFY(), but checks the \a condition
- repeatedly, until either the condition becomes true or the \a timeout is
+ repeatedly, until either the condition becomes true or the \a timeout (in milliseconds) is
reached. Between each evaluation, events will be processed. If the timeout
is reached, a failure is recorded in the test log and the test won't be
executed further.
@@ -156,7 +156,7 @@
The QTRY_VERIFY2_WITH_TIMEOUT macro is similar to QTRY_VERIFY_WITH_TIMEOUT()
except that it outputs a verbose \a message when \a condition is still false
- after the specified \a timeout. The \a message is a plain C string.
+ after the specified \a timeout (in milliseconds). The \a message is a plain C string.
Example:
\code
@@ -196,7 +196,7 @@
The QTRY_COMPARE_WITH_TIMEOUT() macro is similar to QCOMPARE(), but performs the comparison
of the \a actual and \a expected values repeatedly, until either the two values
- are equal or the \a timeout is reached. Between each comparison, events
+ are equal or the \a timeout (in milliseconds) is reached. Between each comparison, events
will be processed. If the timeout is reached, a failure is recorded in the
test log and the test won't be executed further.
diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro
index d76dbb8c75..5b2205e875 100644
--- a/src/testlib/testlib.pro
+++ b/src/testlib/testlib.pro
@@ -14,6 +14,7 @@ QMAKE_DOCS = $$PWD/doc/qttestlib.qdocconf
HEADERS = qbenchmark.h \
qbenchmark_p.h \
qbenchmarkmeasurement_p.h \
+ qbenchmarktimemeasurers_p.h \
qbenchmarkvalgrind_p.h \
qbenchmarkevent_p.h \
qbenchmarkperfevents_p.h \
diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
index cb14db5fef..d9ee5de0be 100644
--- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
+++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro
@@ -1,4 +1,6 @@
option(host_build)
+!force_bootstrap:!qtConfig(commandlineparser): \
+ CONFIG += force_bootstrap
QT = core-private
force_bootstrap: QT += bootstrap_dbus-private
else: QT += dbus-private
diff --git a/src/tools/uic/uic.pro b/src/tools/uic/uic.pro
index 8008dde07a..9afb2d847f 100644
--- a/src/tools/uic/uic.pro
+++ b/src/tools/uic/uic.pro
@@ -1,4 +1,6 @@
option(host_build)
+!force_bootstrap:if(!qtConfig(commandlineparser)|!qtConfig(textcodec)): \
+ CONFIG += force_bootstrap
DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH
diff --git a/src/widgets/configure.json b/src/widgets/configure.json
index c1931d9d80..b241fcdf11 100644
--- a/src/widgets/configure.json
+++ b/src/widgets/configure.json
@@ -8,7 +8,6 @@
"commandline": {
"options": {
- "android-style-assets": "boolean",
"gtk": { "type": "boolean", "name": "gtk3" },
"style-windows": "boolean",
"style-windowsxp": "boolean",
@@ -78,11 +77,6 @@
"condition": "features.style-windows && features.properties && features.cssparser",
"output": [ "publicFeature", "feature" ]
},
- "android-style-assets": {
- "label": "Android Style Assets",
- "condition": "features.style-android",
- "output": [ "privateConfig" ]
- },
"effects": {
"label": "Effects",
"purpose": "Provides special widget effects (e.g. fading and scrolling).",
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index 879f085f11..74875faf21 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -892,6 +892,9 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url)
{QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()},
a native image picker dialog will be used for accessing the user's photo album.
The filename returned can be loaded using QFile and related APIs.
+ For this to be enabled, the Info.plist assigned to QMAKE_INFO_PLIST in the
+ project file must contain the key \c NSPhotoLibraryUsageDescription. See
+ Info.plist documentation from Apple for more information regarding this key.
This feature was added in Qt 5.5.
*/
void QFileDialog::setDirectory(const QString &directory)
@@ -2034,10 +2037,12 @@ QString QFileDialog::labelText(DialogLabel label) const
button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Save);
if (button)
return button->text();
+ break;
case Reject:
button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Cancel);
if (button)
return button->text();
+ break;
}
return QString();
}
diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp
index 6e1bee94c4..db1ce3fe0e 100644
--- a/src/widgets/dialogs/qfilesystemmodel.cpp
+++ b/src/widgets/dialogs/qfilesystemmodel.cpp
@@ -904,16 +904,14 @@ bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, in
int visibleLocation = parentNode->visibleLocation(parentNode->children.value(indexNode->fileName)->fileName);
parentNode->visibleChildren.removeAt(visibleLocation);
- QFileSystemModelPrivate::QFileSystemNode * oldValue = parentNode->children.value(oldName);
- parentNode->children[newName] = oldValue;
- oldValue->fileName = newName;
- oldValue->parent = parentNode;
+ QScopedPointer<QFileSystemModelPrivate::QFileSystemNode> nodeToRename(parentNode->children.take(oldName));
+ nodeToRename->fileName = newName;
+ nodeToRename->parent = parentNode;
#ifndef QT_NO_FILESYSTEMWATCHER
- oldValue->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName)));
+ nodeToRename->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName)));
#endif
- oldValue->isVisible = true;
-
- parentNode->children.remove(oldName);
+ nodeToRename->isVisible = true;
+ parentNode->children[newName] = nodeToRename.take();
parentNode->visibleChildren.insert(visibleLocation, newName);
d->delayedSort();
diff --git a/src/widgets/doc/snippets/code/doc_src_styles.cpp b/src/widgets/doc/snippets/code/doc_src_styles.cpp
index b10c875111..a70ed6b11d 100644
--- a/src/widgets/doc/snippets/code/doc_src_styles.cpp
+++ b/src/widgets/doc/snippets/code/doc_src_styles.cpp
@@ -81,7 +81,7 @@
state |= QStyle::State_MouseOver;
if (widget->window()->isActiveWindow())
state |= QStyle::State_Active;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp
if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget))
state &= ~QStyle::State_Enabled;
diff --git a/src/widgets/doc/snippets/macmainwindow.mm b/src/widgets/doc/snippets/macmainwindow.mm
index f74f8453c7..d848e6442d 100644
--- a/src/widgets/doc/snippets/macmainwindow.mm
+++ b/src/widgets/doc/snippets/macmainwindow.mm
@@ -41,7 +41,7 @@
#include <QtGui>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <Carbon/Carbon.h>
@@ -289,4 +289,4 @@ QAbstractItemModel *MacMainWindow::createDocumentModel()
return model;
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 5492862287..6124796073 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -7492,7 +7492,7 @@ void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints)
*/
void QGraphicsItem::updateMicroFocus()
{
-#if !defined(QT_NO_IM) && defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if !defined(QT_NO_IM) && 0 /* Used to be included in Qt4 for Q_WS_X11 */
if (QWidget *fw = QApplication::focusWidget()) {
if (scene()) {
for (int i = 0 ; i < scene()->views().count() ; ++i) {
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index 5b46eb35be..e6726285d9 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -4160,7 +4160,7 @@ void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)
wheelEvent->scenePos(),
wheelEvent->widget());
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// On Mac, ignore the event if the first item under the mouse is not the last opened
// popup (or one of its descendant)
if (!d->popupWidgets.isEmpty() && !wheelCandidates.isEmpty() && wheelCandidates.first() != d->popupWidgets.back() && !d->popupWidgets.back()->isAncestorOf(wheelCandidates.first())) {
@@ -4399,7 +4399,7 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
// Render directly, using no cache.
if (cacheMode == QGraphicsItem::NoCache
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
|| !X11->use_xrender
#endif
) {
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index 3f7d2d1cd1..41f5eddd99 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -3490,7 +3490,7 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
// Draw background
if ((d->cacheMode & CacheBackground)
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
&& X11->use_xrender
#endif
) {
@@ -3689,7 +3689,7 @@ void QGraphicsView::scrollContentsBy(int dx, int dy)
d->updateLastCenterPoint();
if ((d->cacheMode & CacheBackground)
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
&& X11->use_xrender
#endif
) {
diff --git a/src/widgets/graphicsview/qgraphicsview_p.h b/src/widgets/graphicsview/qgraphicsview_p.h
index 9065650216..10103a1809 100644
--- a/src/widgets/graphicsview/qgraphicsview_p.h
+++ b/src/widgets/graphicsview/qgraphicsview_p.h
@@ -184,7 +184,7 @@ public:
inline void dispatchPendingUpdateRequests()
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// QWidget::update() works slightly different on the Mac without the raster engine;
// it's not part of our backing store so it needs special threatment.
if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) {
@@ -195,7 +195,7 @@ public:
extern void qt_mac_dispatchPendingUpdateRequests(QWidget *);
qt_mac_dispatchPendingUpdateRequests(viewport->window());
} else
-#endif // !Q_DEAD_CODE_FROM_QT4_MAC
+#endif
{
if (qt_widget_private(viewport)->paintOnScreen())
QCoreApplication::sendPostedEvents(viewport, QEvent::UpdateRequest);
diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp
index e1ba3759e0..d153915ae6 100644
--- a/src/widgets/graphicsview/qgraphicswidget.cpp
+++ b/src/widgets/graphicsview/qgraphicswidget.cpp
@@ -708,7 +708,7 @@ void QGraphicsWidget::initStyleOption(QStyleOption *option) const
option->state |= QStyle::State_Window;
/*
###
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern bool qt_mac_can_clickThrough(const QGraphicsWidget *w); //qwidget_mac.cpp
if (!(option->state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget))
option->state &= ~QStyle::State_Enabled;
diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp
index faf1a4c49a..4beb64a254 100644
--- a/src/widgets/graphicsview/qgraphicswidget_p.cpp
+++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp
@@ -52,7 +52,7 @@
#include <QtWidgets/qstyleoption.h>
#include <QtWidgets/QStyleOptionTitleBar>
#include <QtWidgets/QGraphicsSceneMouseEvent>
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC)
# include <private/qmacstyle_mac_p.h>
#endif
@@ -704,7 +704,7 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent
case Qt::TitleBarArea:
windowData->buttonRect = q->style()->subControlRect(
QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarCloseButton, 0);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// On mac we should hover if we are in the 'area' of the buttons
windowData->buttonRect |= q->style()->subControlRect(
QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarMinButton, 0);
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index fff09b46d0..6ecf5a664f 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -3698,7 +3698,7 @@ QStyleOptionViewItem QAbstractItemView::viewOptions() const
option.state &= ~QStyle::State_MouseOver;
option.font = font();
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
// On mac the focus appearance follows window activation
// not widget activation
if (!hasFocus())
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
index 85bd3003e1..837383f016 100644
--- a/src/widgets/itemviews/qheaderview.cpp
+++ b/src/widgets/itemviews/qheaderview.cpp
@@ -2450,7 +2450,7 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
if (pos < 0 && d->state != QHeaderViewPrivate::SelectSections)
return;
if (e->buttons() == Qt::NoButton) {
-#if !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
// Under Cocoa, when the mouse button is released, may include an extra
// simulated mouse moved event. The state of the buttons when this event
// is generated is already "no button" and the code below gets executed
diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp
index bab8436dce..e4115c9e60 100644
--- a/src/widgets/itemviews/qstyleditemdelegate.cpp
+++ b/src/widgets/itemviews/qstyleditemdelegate.cpp
@@ -366,7 +366,7 @@ void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option,
if it is enabled or selected.
After painting, you should ensure that the painter is returned to
- its the state it was supplied in when this function was called.
+ the state it was supplied in when this function was called.
For example, it may be useful to call QPainter::save() before
painting and QPainter::restore() afterwards.
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index cfe68d6b6a..2d1d1f43d0 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -2194,7 +2194,7 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie
return QModelIndex();
}
int vi = -1;
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC)
// Selection behavior is slightly different on the Mac.
if (d->selectionMode == QAbstractItemView::ExtendedSelection
&& d->selectionModel
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index b94aa826d3..89eff898fe 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -4160,13 +4160,10 @@ void QApplication::beep()
\relates QApplication
A global pointer referring to the unique application object. It is
- equivalent to the pointer returned by the QCoreApplication::instance()
- function except that, in GUI applications, it is a pointer to a
- QApplication instance.
+ equivalent to QCoreApplication::instance(), but cast as a QApplication pointer,
+ so only valid when the unique application object is a QApplication.
- Only one application object can be created.
-
- \sa QCoreApplication::instance()
+ \sa QCoreApplication::instance(), qGuiApp
*/
/*!
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 02079fb8d5..2a7859b056 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -112,7 +112,7 @@ public:
virtual bool shouldQuit() Q_DECL_OVERRIDE;
bool tryCloseAllWindows() Q_DECL_OVERRIDE;
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
#ifndef QT_NO_SETTINGS
static bool x11_apply_settings();
#endif
@@ -132,7 +132,7 @@ public:
static bool isBlockedByModal(QWidget *widget);
static bool modalState();
static bool tryModalHelper(QWidget *widget, QWidget **rettop = 0);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
static QWidget *tryModalHelper_sys(QWidget *top);
bool canQuit();
#endif
@@ -146,14 +146,14 @@ public:
bool notify_helper(QObject *receiver, QEvent * e);
void init(
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
Display *dpy = 0, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0
#endif
);
void initialize();
void process_cmdline();
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
static void x11_initialize_style();
#endif
@@ -208,7 +208,7 @@ public:
static void initializeWidgetFontHash();
static void setSystemFont(const QFont &font);
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
static void applyX11SpecificCommandLineArguments(QWidget *main_widget);
#endif
@@ -219,7 +219,7 @@ public:
static Qt::NavigationMode navigationMode;
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) || defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */
void _q_alertTimeOut();
QHash<QWidget *, QTimer *> alertTimerHash;
#endif
@@ -259,12 +259,12 @@ public:
QGestureManager *gestureManager;
QWidget *gestureWidget;
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_WIN */
QPixmap *move_cursor;
QPixmap *copy_cursor;
QPixmap *link_cursor;
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
QPixmap *ignore_cursor;
#endif
@@ -295,9 +295,9 @@ private:
static bool isAlien(QWidget *);
};
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
extern void qt_win_set_cursor(QWidget *, bool);
-#elif defined(Q_DEAD_CODE_FROM_QT4_X11)
+#elif 0 // Used to be included in Qt4 for Q_WS_X11
extern void qt_x11_enforce_cursor(QWidget *, bool);
extern void qt_x11_enforce_cursor(QWidget *);
#else
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp
index c901285d1a..2e5c2c53bd 100644
--- a/src/widgets/kernel/qgesturemanager.cpp
+++ b/src/widgets/kernel/qgesturemanager.cpp
@@ -52,7 +52,7 @@
#ifdef Q_OS_OSX
#include "qmacgesturerecognizer_p.h"
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_NATIVE_GESTURES)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_NATIVE_GESTURES)
#include "qwinnativepangesturerecognizer_win_p.h"
#endif
@@ -100,7 +100,7 @@ QGestureManager::QGestureManager(QObject *parent)
registerGestureRecognizer(new QSwipeGestureRecognizer);
registerGestureRecognizer(new QTapGestureRecognizer);
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
#if !defined(QT_NO_NATIVE_GESTURES)
if (QApplicationPrivate::HasTouchSupport)
registerGestureRecognizer(new QWinNativePanGestureRecognizer);
diff --git a/src/widgets/kernel/qt_widgets_pch.h b/src/widgets/kernel/qt_widgets_pch.h
index f30202d89e..924a68d62e 100644
--- a/src/widgets/kernel/qt_widgets_pch.h
+++ b/src/widgets/kernel/qt_widgets_pch.h
@@ -50,7 +50,7 @@
#include <qtwidgetsglobal.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
# define _POSIX_
# include <limits.h>
# undef _POSIX_
diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp
index 78929d8cd5..a92dc2cbf7 100644
--- a/src/widgets/kernel/qtooltip.cpp
+++ b/src/widgets/kernel/qtooltip.cpp
@@ -36,7 +36,7 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include <private/qcore_mac_p.h>
#endif
@@ -56,7 +56,7 @@
#include <private/qstylesheetstyle_p.h>
#ifndef QT_NO_TOOLTIP
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include <private/qcore_mac_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
#endif
@@ -284,7 +284,7 @@ void QTipLabel::timerEvent(QTimerEvent *e)
|| e->timerId() == expireTimer.timerId()){
hideTimer.stop();
expireTimer.stop();
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS)
if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)){
// Fade out tip on mac (makes it invisible).
// The tip will not be deleted until a new tip is shown.
@@ -304,7 +304,7 @@ void QTipLabel::timerEvent(QTimerEvent *e)
bool QTipLabel::eventFilter(QObject *o, QEvent *e)
{
switch (e->type()) {
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
case QEvent::KeyPress:
case QEvent::KeyRelease: {
int key = static_cast<QKeyEvent *>(e)->key();
@@ -386,7 +386,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w)
#endif //QT_NO_STYLE_STYLESHEET
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// When in full screen mode, there is no Dock nor Menu so we can use
// the whole screen for displaying the tooltip. However when not in
// full screen mode we need to save space for the dock, so we use
@@ -403,7 +403,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w)
QPoint p = pos;
p += QPoint(2,
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
21
#else
16
@@ -492,7 +492,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons
}
if (!text.isEmpty()){ // no tip can be reused, create new tip:
-#ifndef Q_DEAD_CODE_FROM_QT4_WIN
+#if 1 // Used to be excluded in Qt4 for Q_WS_WIN
new QTipLabel(text, w, msecDisplayTime); // sets QTipLabel::instance to itself
#else
// On windows, we can't use the widget as parent otherwise the window will be
@@ -504,7 +504,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons
QTipLabel::instance->setObjectName(QLatin1String("qtooltip_label"));
-#if !defined(QT_NO_EFFECTS) && !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if !defined(QT_NO_EFFECTS) && !0 /* Used to be included in Qt4 for Q_WS_MAC */
if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip))
qFadeEffect(QTipLabel::instance);
else if (QApplication::isEffectEnabled(Qt::UI_AnimateTooltip))
diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp
index 32fe5f5e64..6061af5f38 100644
--- a/src/widgets/kernel/qwhatsthis.cpp
+++ b/src/widgets/kernel/qwhatsthis.cpp
@@ -570,7 +570,7 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y)
// make a fresh widget, and set it up
QWhatsThat *whatsThat = new QWhatsThat(
text,
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR)
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR)
QApplication::desktop()->screen(widget ? widget->x11Info().screen() : QCursor::x11Screen()),
#else
0,
@@ -583,11 +583,11 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y)
int scr = (widget ?
QApplication::desktop()->screenNumber(widget) :
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR)
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR)
QCursor::x11Screen()
#else
QApplication::desktop()->screenNumber(QPoint(x,y))
-#endif // Q_DEAD_CODE_FROM_QT4_X11
+#endif
);
QRect screen = QApplication::desktop()->screenGeometry(scr);
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 51e1ef9aaf..dc04bfb632 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -59,7 +59,7 @@
#ifndef QT_NO_ACCESSIBILITY
# include "qaccessible.h"
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include "qt_mac_p.h"
# include "qt_cocoa_helpers_mac_p.h"
# include "qmainwindow.h"
@@ -85,7 +85,7 @@
#include <private/qgraphicseffect_p.h>
#include <qbackingstore.h>
#include <private/qwidgetbackingstore_p.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include <private/qpaintengine_mac_p.h>
#endif
#include <private/qpaintengine_raster_p.h>
@@ -118,7 +118,7 @@
QT_BEGIN_NAMESPACE
static bool qt_enable_backingstore = true;
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
// for compatibility with Qt 4.0
Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable)
{
@@ -126,7 +126,7 @@ Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable)
}
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false;
#endif
@@ -141,7 +141,7 @@ static inline bool hasBackingStoreSupport()
return true;
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# define QT_NO_PAINT_DEBUG
#endif
@@ -288,13 +288,13 @@ QWidgetPrivate::QWidgetPrivate(int version)
#if defined(Q_OS_WIN)
, noPaintOnScreen(0)
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
, picture(0)
-#elif defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#elif 0 // Used to be included in Qt4 for Q_WS_WIN
#ifndef QT_NO_GESTURES
, nativeGesturePanEnabled(0)
#endif
-#elif defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#elif 0 // Used to be included in Qt4 for Q_WS_MAC
, needWindowChange(0)
, window_event(0)
, qd_hd(0)
@@ -317,7 +317,7 @@ QWidgetPrivate::QWidgetPrivate(int version)
isWidget = true;
memset(high_attributes, 0, sizeof(high_attributes));
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
drawRectOriginalAdded = false;
originalDrawMethod = true;
changeMethods = false;
@@ -326,7 +326,7 @@ QWidgetPrivate::QWidgetPrivate(int version)
toolbar_ancestor = 0;
flushRequested = false;
touchEventsEnabled = false;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
qDebug() << "widgets" << ++count;
@@ -809,6 +809,10 @@ void QWidget::setAutoFillBackground(bool enabled)
parentWidget(), window(), setParent(), winId(),
find(), metric().
+ \row \li Context menu \li
+ contextMenuPolicy, contextMenuEvent(),
+ customContextMenuRequested(), actions()
+
\row \li Interactive help \li
setToolTip(), setWhatsThis()
@@ -1087,7 +1091,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w)
// Only enable this on non-Mac platforms. Since the old way of doing this would
// interpret WindowSystemMenuHint as a close button and we can't change that behavior
// we can't just add this in.
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint))
# ifdef Q_OS_WIN
&& type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs.
@@ -1147,7 +1151,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
}
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (desktopWidget) {
// make sure the widget is created on the same screen as the
// programmer specified desktop widget
@@ -1181,7 +1185,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
mustHaveWindowHandle = 1;
q->setAttribute(Qt::WA_NativeWindow);
}
-//#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+//#if 0 // Used to be included in Qt4 for Q_WS_MAC
// q->setAttribute(Qt::WA_NativeWindow);
//#endif
@@ -1206,9 +1210,9 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque());
}
data.fnt = QFont(data.fnt, q);
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
data.fnt.x11SetScreen(xinfo.screen());
-#endif // Q_DEAD_CODE_FROM_QT4_X11
+#endif
q->setAttribute(Qt::WA_PendingMoveEvent);
q->setAttribute(Qt::WA_PendingResizeEvent);
@@ -1225,7 +1229,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
extraPaintEngine = 0;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// If we add a child to the unified toolbar, we have to redirect the painting.
if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) {
if (parentWidget->d_func()->unifiedSurface) {
@@ -1233,7 +1237,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset);
}
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
}
@@ -1323,14 +1327,14 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow)
<< "Alien?" << !testAttribute(Qt::WA_NativeWindow);
#endif
-#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_DRAGANDDROP)
// Unregister the dropsite (if already registered) before we
// re-create the widget with a native window.
if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow)
&& d->extra && d->extra->dropTarget) {
d->registerDropSite(false);
}
-#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP)
+#endif
d->updateIsOpaque();
@@ -1630,7 +1634,7 @@ QWidget::~QWidget()
}
}
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */|| 0 /* Used to be included in Qt4 for Q_WS_MAC */
else if (!internalWinId() && isVisible()) {
qApp->d_func()->sendSyntheticEnterLeave(this);
}
@@ -1677,7 +1681,7 @@ QWidget::~QWidget()
d->blockSig = blocked;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// QCocoaView holds a pointer back to this widget. Clear it now
// to make sure it's not followed later on. The lifetime of the
// QCocoaView might exceed the lifetime of this widget in cases
@@ -1728,7 +1732,7 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier
const WId oldWinId = data.winid;
data.winid = id;
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
hd = id; // X11: hd == ident
#endif
if (mapper && id && !userDesktopWidget) {
@@ -1764,9 +1768,9 @@ void QWidgetPrivate::createTLExtra()
x->window = 0;
x->shareContext = 0;
x->initialScreenIndex = -1;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
x->wasMaximized = false;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
qDebug() << "tlextra" << ++count;
@@ -2191,10 +2195,10 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt
if (disableSubtractOpaqueSiblings || q->isWindow())
return;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (q->d_func()->isInUnifiedToolbar)
return;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
QRect clipBoundingRect;
bool dirtyClipBoundingRect = true;
@@ -2328,7 +2332,7 @@ void QWidgetPrivate::updateIsOpaque()
#endif //QT_NO_GRAPHICSEFFECT
Q_Q(QWidget);
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (q->testAttribute(Qt::WA_X11OpenGLOverlay)) {
setOpaque(false);
return;
@@ -2387,7 +2391,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus
Q_ASSERT(painter);
if (brush.style() == Qt::TexturePattern) {
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// Optimize pattern filling on mac by using HITheme directly
// when filling with the standard widget background.
// Defined in qmacstyle_mac.cpp
@@ -2399,7 +2403,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus
painter->setClipRegion(rgn);
painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft());
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
} else if (brush.gradient()
&& brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode) {
@@ -2470,7 +2474,7 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int
visible widgets.
*/
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern QPointer<QWidget> qt_button_down;
#else
extern QWidget *qt_button_down;
@@ -2750,7 +2754,7 @@ void QWidget::setStyle(QStyle *style)
}
void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
metalHack
#endif
)
@@ -2761,7 +2765,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
QPointer<QStyle> origStyle;
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// the metalhack boolean allows Qt/Mac to do a proper re-polish depending
// on how the Qt::WA_MacBrushedMetal attribute is set. It is only ever
// set when changing that attribute and passes the widget's CURRENT style.
@@ -2781,12 +2785,12 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
if (q->windowType() != Qt::Desktop) {
if (polished) {
oldStyle->unpolish(q);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (metalHack)
macUpdateMetalAttribute();
#endif
q->style()->polish(q);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
} else if (metalHack) {
macUpdateMetalAttribute();
#endif
@@ -3151,7 +3155,7 @@ bool QWidget::isFullScreen() const
*/
void QWidget::showFullScreen()
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// If the unified toolbar is enabled, we have to disable it before going fullscreen.
QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) {
@@ -3159,7 +3163,7 @@ void QWidget::showFullScreen()
QMainWindowLayout *mainLayout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
mainLayout->activateUnifiedToolbarAfterFullScreen = true;
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
ensurePolished();
setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized))
@@ -3187,7 +3191,7 @@ void QWidget::showMaximized()
setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen))
| Qt::WindowMaximized);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// If the unified toolbar was enabled before going fullscreen, we have to enable it back.
QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
if (mainWindow)
@@ -3198,7 +3202,7 @@ void QWidget::showMaximized()
mainLayout->activateUnifiedToolbarAfterFullScreen = false;
}
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
setVisible(true);
}
@@ -3216,7 +3220,7 @@ void QWidget::showNormal()
setWindowState(windowState() & ~(Qt::WindowMinimized
| Qt::WindowMaximized
| Qt::WindowFullScreen));
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// If the unified toolbar was enabled before going fullscreen, we have to enable it back.
QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
if (mainWindow)
@@ -3227,7 +3231,7 @@ void QWidget::showNormal()
mainLayout->activateUnifiedToolbarAfterFullScreen = false;
}
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
setVisible(true);
}
@@ -3443,7 +3447,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable)
if (w && !w->testAttribute(attribute))
w->d_func()->setEnabled_helper(enable);
}
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (q->testAttribute(Qt::WA_SetCursor) || q->isWindow()) {
// enforce the windows behavior of clearing the cursor on
// disabled widgets
@@ -3457,7 +3461,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable)
qt_qpa_set_cursor(q, false);
}
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
setEnabled_helper_sys(enable);
#endif
#ifndef QT_NO_IM
@@ -4561,7 +4565,7 @@ const QPalette &QWidget::palette() const
) {
data->pal.setCurrentColorGroup(QPalette::Active);
} else {
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern bool qt_mac_can_clickThrough(const QWidget *); //qwidget_mac.cpp
if (qt_mac_can_clickThrough(this))
data->pal.setCurrentColorGroup(QPalette::Active);
@@ -4819,7 +4823,7 @@ void QWidgetPrivate::updateFont(const QFont &font)
#endif
data.fnt = QFont(font, q);
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
// make sure the font set on this widget is associated with the correct screen
data.fnt.x11SetScreen(xinfo.screen());
#endif
@@ -4992,7 +4996,7 @@ void QWidget::setCursor(const QCursor &cursor)
{
Q_D(QWidget);
// On Mac we must set the cursor even if it is the ArrowCursor.
-#if !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
if (cursor.shape() != Qt::ArrowCursor
|| (d->extra && d->extra->curs))
#endif
@@ -5424,7 +5428,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset
Q_ASSERT(!toBePainted.isEmpty());
Q_Q(QWidget);
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
const QTransform originalTransform = painter->worldTransform();
const bool useDeviceCoordinates = originalTransform.isScaling();
if (!useDeviceCoordinates) {
@@ -5451,7 +5455,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset
if (restore)
painter->setRenderHints(QPainter::SmoothPixmapTransform, false);
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
} else {
// Render via a pixmap in device coordinates (to avoid pixmap scaling).
QTransform transform = originalTransform;
@@ -5560,7 +5564,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
if (paintEngine) {
setRedirected(pdev, -offset);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// (Alien support) Special case for Mac when redirecting: If the paint device
// is of the Widget type we need to set WA_WState_InPaintEvent since painting
// outside the paint event is not supported on QWidgets. The attributeis
@@ -5646,7 +5650,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
//restore
if (paintEngine) {
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (pdev->devType() == QInternal::Widget)
static_cast<QWidget *>(pdev)->setAttribute(Qt::WA_WState_InPaintEvent, false);
#endif
@@ -5720,7 +5724,7 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset,
if (paintRegion.isEmpty())
return;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
QPainter *oldSharedPainter = inRenderWithPainter ? sharedPainter() : 0;
// Use the target's shared painter if set (typically set when doing
@@ -6501,7 +6505,7 @@ void QWidget::setFocus(Qt::FocusReason reason)
f = f->d_func()->extra->focus_proxy;
if (QApplication::focusWidget() == f
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
&& GetFocus() == f->internalWinId()
#endif
)
@@ -6686,7 +6690,7 @@ void QWidget::clearFocus()
if (hasFocus()) {
// Update proxy state
QApplicationPrivate::setFocusWidget(0, Qt::OtherFocusReason);
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
if (!(windowType() == Qt::Popup) && GetFocus() == internalWinId())
SetFocus(0);
else
@@ -7318,7 +7322,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove)
*/
QByteArray QWidget::saveGeometry() const
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// We check if the window was maximized during this invocation. If so, we need to record the
// starting position as 0,0.
Q_D(const QWidget);
@@ -7329,7 +7333,7 @@ QByteArray QWidget::saveGeometry() const
newFramePosition.moveTo(0, 0);
newNormalPosition.moveTo(0, 0);
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
QByteArray array;
QDataStream stream(&array, QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_4_0);
@@ -7343,13 +7347,13 @@ QByteArray QWidget::saveGeometry() const
stream << magicNumber
<< majorVersion
<< minorVersion
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
<< newFramePosition
<< newNormalPosition
#else
<< frameGeometry()
<< normalGeometry()
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
<< qint32(screenNumber)
<< quint8(windowState() & Qt::WindowMaximized)
<< quint8(windowState() & Qt::WindowFullScreen)
@@ -7457,7 +7461,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry)
// - The title bar is outside the available geometry.
// - (Mac only) The window is higher than the available geometry. It must
// be possible to bring the size grip on screen by moving the window.
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
restoredFrameGeometry.setHeight(qMin(restoredFrameGeometry.height(), availableGeometry.height()));
restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight));
#endif
@@ -7506,7 +7510,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry)
d_func()->topData()->normalGeometry = restoredNormalGeometry;
} else {
QPoint offset;
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (isFullScreen())
offset = d_func()->topData()->fullScreenOffset;
#endif
@@ -7904,7 +7908,7 @@ void QWidgetPrivate::show_helper()
// On Windows, show the popup now so that our own focus handling
// stores the correct old focus widget even if it's stolen in the
// showevent
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */
if (!isEmbedded && q->windowType() == Qt::Popup)
qApp->d_func()->openPopup(q);
#endif
@@ -8033,7 +8037,7 @@ void QWidgetPrivate::hide_helper()
if (!isEmbedded && (q->windowType() == Qt::Popup))
qApp->d_func()->closePopup(q);
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
if (q->isWindow() && !(q->windowType() == Qt::Popup) && q->parentWidget()
&& !q->parentWidget()->isHidden() && q->isActiveWindow())
q->parentWidget()->activateWindow(); // Activate parent
@@ -8217,7 +8221,7 @@ void QWidget::setVisible(bool visible)
} else { // hide
if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden))
return;
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
// reset WS_DISABLED style in a Blocked window
if(isWindow() && testAttribute(Qt::WA_WState_Created)
&& QApplicationPrivate::isBlockedByModal(this))
@@ -8302,7 +8306,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous)
QWidget *widget = qobject_cast<QWidget*>(childList.at(i));
if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden))
continue;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// Before doing anything we need to make sure that we don't leave anything in a non-consistent state.
// When hiding a widget we need to make sure that no mouse_down events are active, because
// the mouse_up event will never be received by a hidden widget or one of its descendants.
@@ -8318,7 +8322,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous)
// supposed to trigger because it is not visible.
if(widget == qt_button_down)
qt_button_down = 0;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
if (spontaneous)
widget->setAttribute(Qt::WA_Mapped, false);
else
@@ -8553,7 +8557,7 @@ QSize QWidgetPrivate::adjustedSize() const
s.setWidth(qMax(s.width(), 200));
if (exp & Qt::Vertical)
s.setHeight(qMax(s.height(), 100));
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen());
#else // all others
QRect screen = QApplication::desktop()->screenGeometry(q->pos());
@@ -8682,7 +8686,7 @@ bool QWidget::isAncestorOf(const QWidget *child) const
return false;
}
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
inline void setDisabledStyle(QWidget *w, bool setStyle)
{
// set/reset WS_DISABLED style.
@@ -9114,7 +9118,7 @@ bool QWidget::event(QEvent *event)
}
}
}
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
setDisabledStyle(this, (event->type() == QEvent::WindowBlocked));
#endif
break;
@@ -9141,7 +9145,7 @@ bool QWidget::event(QEvent *event)
case QEvent::EmbeddingControl:
d->topData()->frameStrut.setCoords(0 ,0, 0, 0);
data->fstrut_dirty = false;
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */
d->topData()->embedded = 1;
#endif
break;
@@ -9166,7 +9170,7 @@ bool QWidget::event(QEvent *event)
}
break;
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
case QEvent::MacGLWindowChange:
d->needWindowChange = false;
break;
@@ -9280,7 +9284,7 @@ void QWidget::changeEvent(QEvent * event)
case QEvent::MacSizeChange:
updateGeometry();
break;
-#elif defined Q_DEAD_CODE_FROM_QT4_MAC
+#elif 0 // Used to be included in Qt4 for Q_WS_MAC
case QEvent::ToolTipChange:
case QEvent::MouseTrackingChange:
qt_mac_update_mouseTracking(this);
@@ -10561,7 +10565,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
// (f & Qt::MSWindowsOwnDC) clause (which is set on QGLWidgets on all
// platforms).
if (newParent
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(QT_OPENGL_ES)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || defined(QT_OPENGL_ES)
|| (f & Qt::MSWindowsOwnDC)
#endif
) {
@@ -10581,7 +10585,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
}
//### already hidden above ---> must probably do something smart on the mac
-// #ifdef Q_DEAD_CODE_FROM_QT4_MAC
+// #if 0 // Used to be included in Qt4 for Q_WS_MAC
// extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp
// if(!qt_mac_is_macdrawer(q)) //special case
// q->setAttribute(Qt::WA_WState_Hidden);
@@ -11109,7 +11113,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
d->receiveChildEvents = !on;
break;
case Qt::WA_MacBrushedMetal:
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly.
// fall through since changing the metal attribute affects the opaque size grip.
case Qt::WA_MacOpaqueSizeGrip:
@@ -11126,7 +11130,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
break;
#endif
case Qt::WA_MacAlwaysShowToolWindow:
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->macUpdateHideOnSuspend();
#endif
break;
@@ -11203,7 +11207,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
}
case Qt::WA_PaintOnScreen:
d->updateIsOpaque();
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */
// Recreate the widget if it's already created as an alien widget and
// WA_PaintOnScreen is enabled. Paint on screen widgets must have win id.
// So must their children.
@@ -11223,7 +11227,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
d->updateSystemBackground();
break;
case Qt::WA_TransparentForMouseEvents:
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->macUpdateIgnoreMouseEvents();
#endif
break;
@@ -11242,7 +11246,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
d->resolveFont();
d->resolveLocale();
break;
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
case Qt::WA_NoX11EventCompression:
if (!d->extra)
d->createExtra();
@@ -11299,7 +11303,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
break;
case Qt::WA_AcceptTouchEvents:
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */
if (on)
d->registerTouchWindow();
#endif
@@ -11918,7 +11922,7 @@ QRect QWidgetPrivate::frameStrut() const
}
if (data.fstrut_dirty
-#ifndef Q_DEAD_CODE_FROM_QT4_WIN
+#if 1 // Used to be excluded in Qt4 for Q_WS_WIN
// ### Fix properly for 4.3
&& q->isVisible()
#endif
@@ -12854,7 +12858,7 @@ void QWidget::setMask(const QRegion &newMask)
d->extra->mask = newMask;
d->extra->hasMask = !newMask.isEmpty();
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
if (!testAttribute(Qt::WA_WState_Created))
return;
#endif
@@ -13050,45 +13054,6 @@ QDebug operator<<(QDebug debug, const QWidget *widget)
}
#endif // !QT_NO_DEBUG_STREAM
-/*! \fn Qt::HANDLE QWidget::macCGHandle() const
- \internal
-
- Returns the CoreGraphics handle of the widget. Use of this function is not portable.
- This function will return 0 if no painter context can be established, or if the handle
- could not be created.
-
- \warning This function is only available on \macos.
-*/
-/*! \fn Qt::HANDLE QWidget::macQDHandle() const
- \internal
-
- Returns the QuickDraw handle of the widget. Use of this function is not portable.
- This function will return 0 if QuickDraw is not supported, or if the handle could
- not be created.
-
- \warning This function is only available on \macos.
-*/
-/*! \fn const QX11Info &QWidget::x11Info() const
- \internal
-
- Returns information about the configuration of the X display used to display
- the widget.
-
- \warning This function is only available on X11.
-*/
-
-/*! \fn Qt::HANDLE QWidget::x11PictureHandle() const
- \internal
-
- Returns the X11 picture handle of the widget for XRender
- support. Use of this function is not portable. This function will
- return 0 if XRender support is not compiled into Qt, if the
- XRender extension is not supported on the X11 display, or if the
- handle could not be created.
-
- \warning This function is only available on X11.
-
-*/
QT_END_NAMESPACE
#include "moc_qwidget.cpp"
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index bca89fe2c5..5edf2c62da 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -570,12 +570,12 @@ public:
inline QWidget *childAt(int x, int y) const;
QWidget *childAt(const QPoint &p) const;
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
const QX11Info &x11Info() const;
Qt::HANDLE x11PictureHandle() const;
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
Qt::HANDLE macQDHandle() const;
Qt::HANDLE macCGHandle() const;
#endif
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index 3e57f9de41..68e063c25a 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -189,7 +189,7 @@ struct QTLWExtra {
uint embedded : 1;
// *************************** Platform specific values (bit fields first) **********
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11
uint spont_unmapped: 1; // window was spontaneously unmapped
uint dnd : 1; // DND properties installed
uint validWMState : 1; // is WM_STATE valid?
@@ -203,11 +203,11 @@ struct QTLWExtra {
qint32 newCounterValueHi;
quint32 newCounterValueLo;
#endif
-#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN
+#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN
uint hotkeyRegistered: 1; // Hot key from the STARTUPINFO has been registered.
HICON winIconBig; // internal big Windows icon
HICON winIconSmall; // internal small Windows icon
-#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC
+#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC
uint resizer : 4;
uint isSetGeometry : 1;
uint isMove : 1;
@@ -262,15 +262,15 @@ struct QWExtra {
uint hasWindowContainer : 1;
// *************************** Platform specific values (bit fields first) **********
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN) // <----------------------------------------------------------- WIN
+#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <----------------------------------------------------------- WIN
#ifndef QT_NO_DRAGANDDROP
QOleDropTarget *dropTarget; // drop target
QList<QPointer<QWidget> > oleDropWidgets;
#endif
-#elif defined(Q_DEAD_CODE_FROM_QT4_X11) // <--------------------------------------------------------- X11
+#elif 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <--------------------------------------------------------- X11
uint compress_events : 1;
WId xDndProxy; // XDND forwarding to embedded windows
-#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <------------------------------------------------------ MAC
+#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <------------------------------------------------------ MAC
// Cocoa Mask stuff
QImage maskBits;
CGImageRef imageMask;
@@ -402,9 +402,6 @@ public:
const QRegion &rgn, const QPoint &offset, int flags,
QPainter *sharedPainter, QWidgetBackingStore *backingStore);
-
- QPainter *beginSharedPainter();
- bool endSharedPainter();
#ifndef QT_NO_GRAPHICSVIEW
static QGraphicsProxyWidget * nearestGraphicsProxyWidget(const QWidget *origin);
#endif
@@ -761,7 +758,7 @@ public:
#if defined(Q_OS_WIN)
uint noPaintOnScreen : 1; // see qwidget.cpp ::paintEngine()
#endif
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11
Qt::HANDLE picture;
static QWidget *mouseGrabber;
static QWidget *keyboardGrabber;
@@ -773,7 +770,7 @@ public:
void updateX11AcceptFocus();
QPoint mapToGlobal(const QPoint &pos) const;
QPoint mapFromGlobal(const QPoint &pos) const;
-#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN
+#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN
#ifndef QT_NO_GESTURES
uint nativeGesturePanEnabled : 1;
#endif
@@ -789,7 +786,7 @@ public:
void winSetupGestures();
#elif defined(Q_OS_MAC) // <--------------------------------------------------------- MAC
void macUpdateSizeAttribute();
-#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC (old stuff)
+#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC (old stuff)
// This is new stuff
uint needWindowChange : 1;
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index 81fbe49a43..910704498c 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -112,6 +112,7 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion &region, QBack
if (widget != tlw)
offset += widget->mapTo(tlw, QPoint());
+ QRegion effectiveRegion = region;
#ifndef QT_NO_OPENGL
const bool compositionWasActive = widget->d_func()->renderToTextureComposeActive;
if (!widgetTextures) {
@@ -125,6 +126,11 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion &region, QBack
} else {
widget->d_func()->renderToTextureComposeActive = true;
}
+ // When changing the composition status, make sure the dirty region covers
+ // the entire widget. Just having e.g. the shown/hidden render-to-texture
+ // widget's area marked as dirty is incorrect when changing flush paths.
+ if (compositionWasActive != widget->d_func()->renderToTextureComposeActive)
+ effectiveRegion = widget->rect();
// re-test since we may have been forced to this path via the dummy texture list above
if (widgetTextures) {
@@ -136,12 +142,12 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion &region, QBack
const bool translucentBackground = widget->testAttribute(Qt::WA_TranslucentBackground);
// Use the tlw's context, not widget's. The difference is important with native child
// widgets where tlw != widget.
- backingStore->handle()->composeAndFlush(widget->windowHandle(), region, offset, widgetTextures,
+ backingStore->handle()->composeAndFlush(widget->windowHandle(), effectiveRegion, offset, widgetTextures,
tlw->d_func()->shareContext(), translucentBackground);
widget->window()->d_func()->sendComposeStatus(widget->window(), true);
} else
#endif
- backingStore->flush(region, widget->windowHandle(), offset);
+ backingStore->flush(effectiveRegion, widget->windowHandle(), offset);
}
#ifndef QT_NO_PAINT_DEBUG
@@ -699,7 +705,7 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion &region, QWidget *widg
if (!widget || widget->d_func()->paintOnScreen() || region.isEmpty())
return;
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (!widget->testAttribute(Qt::WA_WState_InPaintEvent))
dirtyOnScreen += region.translated(topLevelOffset);
return;
@@ -1624,7 +1630,7 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn)
&& (usesDoubleBufferedGLContext || q->autoFillBackground());
QRegion toBePainted(noPartialUpdateSupport ? q->rect() : rgn);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// No difference between update() and repaint() on the Mac.
update_sys(toBePainted);
return;
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index f3fbe13763..3e15b6977a 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -535,7 +535,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
// activate window of the widget under mouse pointer
if (!w->isActiveWindow()) {
w->activateWindow();
- w->raise();
+ w->window()->raise();
}
QWindow *win = w->windowHandle();
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index 140f0ad2f3..690c811140 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -5246,6 +5246,8 @@ static QPixmap cachedPixmapFromXPM(const char * const *xpm)
return result;
}
+static inline QPixmap titleBarMenuCachedPixmapFromXPM() { return cachedPixmapFromXPM(qt_menu_xpm); }
+
#ifndef QT_NO_IMAGEFORMAT_PNG
static inline QString clearText16IconPath()
{
@@ -5590,7 +5592,7 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti
#ifndef QT_NO_IMAGEFORMAT_XPM
switch (sp) {
case SP_TitleBarMenuButton:
- return cachedPixmapFromXPM(qt_menu_xpm);
+ return titleBarMenuCachedPixmapFromXPM();
case SP_TitleBarShadeButton:
return cachedPixmapFromXPM(qt_shade_xpm);
case SP_TitleBarUnshadeButton:
@@ -6130,6 +6132,12 @@ QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption
case SP_MediaVolumeMuted:
icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16));
break;
+ case SP_TitleBarMenuButton:
+# ifndef QT_NO_IMAGEFORMAT_XPM
+ icon.addPixmap(titleBarMenuCachedPixmapFromXPM());
+# endif
+ icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png"));
+ break;
#endif // QT_NO_IMAGEFORMAT_PNG
default:
icon.addPixmap(proxy()->standardPixmap(standardIcon, option, widget));
diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp
index 06c3101643..3473ec7fb0 100644
--- a/src/widgets/styles/qfusionstyle.cpp
+++ b/src/widgets/styles/qfusionstyle.cpp
@@ -1080,8 +1080,8 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
painter->setPen(innerLine);
painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1);
painter->restore();
- return;
}
+ break;
case CE_SizeGrip:
painter->save();
{
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index 6fbc7c9eea..2d1de790c4 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -950,6 +950,8 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg
#if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT)
static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSize small, QSize mini)
{
+ Q_UNUSED(widg);
+
if (large == QSize(-1, -1)) {
if (small != QSize(-1, -1))
return QAquaSizeSmall;
@@ -965,7 +967,7 @@ static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSiz
}
#ifndef QT_NO_MAINWINDOW
- if (qobject_cast<QDockWidget *>(widg->window()) || qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) {
+ if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) {
//if (small.width() != -1 || small.height() != -1)
return QAquaSizeSmall;
} else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) {
@@ -4214,10 +4216,6 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
bool verticalTabs = ttd == kThemeTabWest || ttd == kThemeTabEast;
bool selected = (myTab.state & QStyle::State_Selected);
- if (selected && !myTab.documentMode
- && (!usingYosemiteOrLater || myTab.state & State_Active))
- myTab.palette.setColor(QPalette::WindowText, Qt::white);
-
// Check to see if we use have the same as the system font
// (QComboMenuItem is internal and should never be seen by the
// outside world, unless they read the source, in which case, it's
diff --git a/src/widgets/styles/qmacstyle_mac_p.h b/src/widgets/styles/qmacstyle_mac_p.h
index fdc22794b4..459784c538 100644
--- a/src/widgets/styles/qmacstyle_mac_p.h
+++ b/src/widgets/styles/qmacstyle_mac_p.h
@@ -134,7 +134,7 @@ private:
friend bool qt_mac_buttonIsRenderedFlat(const QPushButton *pushButton, const QStyleOptionButton *option);
};
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
QT_END_NAMESPACE
diff --git a/src/widgets/styles/qpixmapstyle.cpp b/src/widgets/styles/qpixmapstyle.cpp
index ee5fd704dc..b51860045d 100644
--- a/src/widgets/styles/qpixmapstyle.cpp
+++ b/src/widgets/styles/qpixmapstyle.cpp
@@ -108,7 +108,7 @@ QPixmapStyle::~QPixmapStyle()
void QPixmapStyle::polish(QApplication *application)
{
QCommonStyle::polish(application);
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false);
#endif
}
@@ -170,7 +170,7 @@ void QPixmapStyle::polish(QWidget *widget)
frame->setContentsMargins(pix.margins.left(), desc.margins.top(),
pix.margins.right(), desc.margins.bottom());
frame->setAttribute(Qt::WA_TranslucentBackground);
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
// FramelessWindowHint is needed on windows to make
// WA_TranslucentBackground work properly
frame->setWindowFlags(widget->windowFlags() | Qt::FramelessWindowHint);
diff --git a/src/widgets/styles/qstylefactory.cpp b/src/widgets/styles/qstylefactory.cpp
index bb849c148f..09cccff4e8 100644
--- a/src/widgets/styles/qstylefactory.cpp
+++ b/src/widgets/styles/qstylefactory.cpp
@@ -131,7 +131,7 @@ QStyle *QStyleFactory::create(const QString& key)
#ifndef QT_NO_STYLE_MAC
if (style.startsWith(QLatin1String("macintosh"))) {
ret = new QMacStyle;
-# ifdef Q_DEAD_CODE_FROM_QT4_MAC
+# if 0 // Used to be included in Qt4 for Q_WS_MAC
if (style == QLatin1String("macintosh"))
style += QLatin1String(" (aqua)");
# endif
@@ -184,7 +184,7 @@ QStringList QStyleFactory::keys()
#endif
#ifndef QT_NO_STYLE_MAC
QString mstyle = QLatin1String("Macintosh");
-# ifdef Q_DEAD_CODE_FROM_QT4_MAC
+# if 0 // Used to be included in Qt4 for Q_WS_MAC
mstyle += QLatin1String(" (aqua)");
# endif
if (!list.contains(mstyle))
diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp
index 71cf2fb267..83739655af 100644
--- a/src/widgets/styles/qstyleoption.cpp
+++ b/src/widgets/styles/qstyleoption.cpp
@@ -199,7 +199,7 @@ void QStyleOption::init(const QWidget *widget)
state |= QStyle::State_Active;
if (widget->isWindow())
state |= QStyle::State_Window;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp
if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget))
state &= ~QStyle::State_Enabled;
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index b214dae154..8e77ae0e44 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -5045,7 +5045,7 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op
sz = csz + QSize(vertical ? 0 : spaceForIcon, vertical ? spaceForIcon : 0);
return subRule.boxSize(subRule.adjustSize(sz));
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (baseStyle()->inherits("QMacStyle")) {
//adjust the size after the call to the style because the mac style ignore the size arguments anyway.
//this might cause the (max-){width,height} property to include the native style border while they should not.
diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp
index 9d764d2a41..4ce359a7c4 100644
--- a/src/widgets/styles/qwindowsxpstyle.cpp
+++ b/src/widgets/styles/qwindowsxpstyle.cpp
@@ -699,7 +699,7 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData)
bool translucentToplevel = false;
const QPaintDevice *paintDevice = painter->device();
- const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatio() : 1;
+ const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatioF() : qreal(1);
if (paintDevice->devType() == QInternal::Widget) {
const QWidget *window = static_cast<const QWidget *>(paintDevice)->window();
translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground);
@@ -727,28 +727,28 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData)
const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : HDC(0);
const bool result = dc
- ? drawBackgroundDirectly(dc, themeData, qRound(aditionalDevicePixelRatio))
- : drawBackgroundThruNativeBuffer(themeData, qRound(aditionalDevicePixelRatio));
+ ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio)
+ : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio);
painter->restore();
return result;
}
-static inline QRect scaleRect(const QRect &r, int factor)
+static inline QRectF scaleRect(const QRectF &r, qreal factor)
{
return r.isValid() && factor > 1
- ? QRect(r.topLeft() * factor, r.size() * factor)
+ ? QRectF(r.topLeft() * factor, r.size() * factor)
: r;
}
-static QRegion scaleRegion(const QRegion &region, int factor)
+static QRegion scaleRegion(const QRegion &region, qreal factor)
{
- if (region.isEmpty() || factor == 1)
+ if (region.isEmpty() || qFuzzyCompare(factor, qreal(1)))
return region;
if (region.rectCount() == 1)
- return QRegion(scaleRect(region.boundingRect(), factor));
+ return QRegion(scaleRect(QRectF(region.boundingRect()), factor).toRect());
QRegion result;
foreach (const QRect &rect, region.rects())
- result += QRect(rect.topLeft() * factor, rect.size() * factor);
+ result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect();
return result;
}
@@ -757,13 +757,12 @@ static QRegion scaleRegion(const QRegion &region, int factor)
Do not use this if you need to perform other transformations on the
resulting data.
*/
-bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int additionalDevicePixelRatio)
+bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio)
{
QPainter *painter = themeData.painter;
- QPoint redirectionDelta(int(painter->deviceMatrix().dx()),
- int(painter->deviceMatrix().dy()));
- QRect area = scaleRect(themeData.rect, additionalDevicePixelRatio).translated(redirectionDelta);
+ const QPointF redirectionDelta(painter->deviceMatrix().dx(), painter->deviceMatrix().dy());
+ const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect();
QRegion sysRgn = painter->paintEngine()->systemClip();
if (sysRgn.isEmpty())
@@ -771,7 +770,7 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa
else
sysRgn &= area;
if (painter->hasClipping())
- sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta);
+ sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint());
HRGN hrgn = qt_hrgn_from_qregion(sysRgn);
SelectClipRgn(dc, hrgn);
@@ -806,15 +805,16 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa
engine).
*/
bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData,
- int additionalDevicePixelRatio)
+ qreal additionalDevicePixelRatio)
{
QPainter *painter = themeData.painter;
- QRect rect = scaleRect(themeData.rect, additionalDevicePixelRatio);
+ QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio);
if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips.
- rect = QRect(0, 0, rect.height(), rect.width());
+ rectF = QRectF(0, 0, rectF.height(), rectF.width());
}
- rect.moveTo(0,0);
+ rectF.moveTo(0, 0);
+ QRect rect = rectF.toRect();
int partId = themeData.partId;
int stateId = themeData.stateId;
int w = rect.width();
diff --git a/src/widgets/styles/qwindowsxpstyle_p_p.h b/src/widgets/styles/qwindowsxpstyle_p_p.h
index 7cbccdaf67..d6702c8803 100644
--- a/src/widgets/styles/qwindowsxpstyle_p_p.h
+++ b/src/widgets/styles/qwindowsxpstyle_p_p.h
@@ -240,8 +240,8 @@ public:
void setTransparency(QWidget *widget, XPThemeData &themeData);
bool drawBackground(XPThemeData &themeData);
- bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, int aditionalDevicePixelRatio);
- bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int aditionalDevicePixelRatio);
+ bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio);
+ bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio);
bool hasAlphaChannel(const QRect &rect);
bool fixAlphaChannel(const QRect &rect);
diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp
index 57db9ff7fc..10e92e04e1 100644
--- a/src/widgets/util/qflickgesture.cpp
+++ b/src/widgets/util/qflickgesture.cpp
@@ -460,7 +460,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state,
}
break;
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// the only way to distinguish between real mouse wheels and wheel
// events generated by the native 2 finger swipe gesture is to listen
// for these events (according to Apple's Cocoa Event-Handling Guide)
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index 9973940c16..a348327c92 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -1011,12 +1011,12 @@ bool QScroller::handleInput(Input input, const QPointF &position, qint64 timesta
return false;
}
-#if !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
// the Mac version is implemented in qscroller_mac.mm
QPointF QScrollerPrivate::realDpi(int screen) const
{
-# if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_XRANDR)
+# if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_XRANDR)
if (X11 && X11->use_xrandr && X11->ptrXRRSizes && X11->ptrXRRRootToScreen) {
int nsizes = 0;
// QDesktopWidget is based on Xinerama screens, which do not always
@@ -1042,7 +1042,7 @@ QPointF QScrollerPrivate::realDpi(int screen) const
return QPointF(w->physicalDpiX(), w->physicalDpiY());
}
-#endif // !Q_DEAD_CODE_FROM_QT4_MAC
+#endif
/*! \internal
diff --git a/src/widgets/util/qscroller_mac.mm b/src/widgets/util/qscroller_mac.mm
index 31316f5518..6dbb483089 100644
--- a/src/widgets/util/qscroller_mac.mm
+++ b/src/widgets/util/qscroller_mac.mm
@@ -39,7 +39,7 @@
#include <QtCore/qglobal.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#import <AppKit/AppKit.h>
diff --git a/src/widgets/util/qscrollerproperties.cpp b/src/widgets/util/qscrollerproperties.cpp
index 35e1be15db..c26fba2cd3 100644
--- a/src/widgets/util/qscrollerproperties.cpp
+++ b/src/widgets/util/qscrollerproperties.cpp
@@ -40,7 +40,7 @@
#include <QPointer>
#include <QObject>
#include <QtCore/qmath.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
# include <QLibrary>
#endif
@@ -73,7 +73,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults()
spp.overshootDragDistanceFactor = qreal(1);
spp.overshootScrollDistanceFactor = qreal(0.5);
spp.overshootScrollTime = qreal(0.7);
-# ifdef Q_DEAD_CODE_FROM_QT4_WIN
+# if 0 // Used to be included in Qt4 for Q_WS_WIN
if (QLibrary::resolve(QLatin1String("UxTheme"), "BeginPanningFeedback"))
spp.overshootScrollTime = qreal(0.35);
# endif
diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp
index e44207301b..64daad87ae 100644
--- a/src/widgets/util/qsystemtrayicon.cpp
+++ b/src/widgets/util/qsystemtrayicon.cpp
@@ -586,7 +586,7 @@ void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow)
}
QPainterPath path;
-#if defined(QT_NO_XSHAPE) && defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if defined(QT_NO_XSHAPE) && 0 /* Used to be included in Qt4 for Q_WS_X11 */
// XShape is required for setting the mask, so we just
// draw an ugly square when its not available
path.moveTo(0, 0);
diff --git a/src/widgets/util/qundostack.cpp b/src/widgets/util/qundostack.cpp
index 18f85ca505..59d517e77b 100644
--- a/src/widgets/util/qundostack.cpp
+++ b/src/widgets/util/qundostack.cpp
@@ -633,7 +633,7 @@ void QUndoStack::push(QUndoCommand *cmd)
commands, it emits the signal cleanChanged(). This signal is also
emitted when the stack leaves the clean state.
- \sa isClean(), cleanIndex()
+ \sa isClean(), resetClean(), cleanIndex()
*/
void QUndoStack::setClean()
@@ -648,6 +648,30 @@ void QUndoStack::setClean()
}
/*!
+ \since 5.8
+
+ Leaves the clean state and emits cleanChanged() if the stack was clean.
+ This method resets the clean index to -1.
+
+ This is typically called in the following cases, when a document has been:
+ \li created basing on some template and has not been saved,
+ so no filename has been associated with the document yet.
+ \li restored from a backup file.
+ \li changed outside of the editor and the user did not reload it.
+
+ \sa isClean(), setClean(), cleanIndex()
+*/
+
+void QUndoStack::resetClean()
+{
+ Q_D(QUndoStack);
+ const bool was_clean = isClean();
+ d->clean_index = -1;
+ if (was_clean)
+ emit cleanChanged(false);
+}
+
+/*!
If the stack is in the clean state, returns \c true; otherwise returns \c false.
\sa setClean(), cleanIndex()
@@ -668,6 +692,7 @@ bool QUndoStack::isClean() const
some commands are undone, then a new command is pushed. Since
push() deletes all the undone commands before pushing the new command, the stack
can't return to the clean state again. In this case, this function returns -1.
+ The -1 may also be returned after an explicit call to resetClean().
\sa isClean(), setClean()
*/
diff --git a/src/widgets/util/qundostack.h b/src/widgets/util/qundostack.h
index f4db78300b..ca918b0618 100644
--- a/src/widgets/util/qundostack.h
+++ b/src/widgets/util/qundostack.h
@@ -128,6 +128,7 @@ public:
public Q_SLOTS:
void setClean();
+ void resetClean();
void setIndex(int idx);
void undo();
void redo();
diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp
index 2587a7a03b..5b31e4467f 100644
--- a/src/widgets/widgets/qabstractscrollarea.cpp
+++ b/src/widgets/widgets/qabstractscrollarea.cpp
@@ -60,7 +60,7 @@
#include <private/qapplication_p.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <private/qt_mac_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
#endif
@@ -168,7 +168,7 @@ QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate()
shownOnce(false), inResize(false), sizeAdjustPolicy(QAbstractScrollArea::AdjustIgnored),
viewport(0), cornerWidget(0), left(0), top(0), right(0), bottom(0),
xoffset(0), yoffset(0), viewportFilter(0)
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
, singleFingerPanEnabled(false)
#endif
{
@@ -321,7 +321,7 @@ void QAbstractScrollAreaPrivate::init()
#endif
}
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on)
{
singleFingerPanEnabled = on;
@@ -329,7 +329,7 @@ void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on)
if (dd)
dd->winSetupGestures();
}
-#endif // Q_DEAD_CODE_FROM_QT4_WIN
+#endif
void QAbstractScrollAreaPrivate::layoutChildren()
{
@@ -350,7 +350,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
const int hscrollOverlap = hbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, hbar);
const int vscrollOverlap = vbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, vbar);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
QWidget * const window = q->window();
// Use small scroll bars for tool windows, to match the native size grip.
@@ -393,7 +393,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
// If the scroll bars are at the very right and bottom of the window we
// move their positions to be aligned with the size grip.
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// Check if a native sizegrip is present.
bool hasMacReverseSizeGrip = false;
bool hasMacSizeGrip = false;
@@ -446,7 +446,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
if (hasCornerWidget && ((needv && vscrollOverlap == 0) || (needh && hscrollOverlap == 0)))
cornerOffset = extPoint;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// Also move the scroll bars if they are covered by the native Mac size grip.
if (hasMacSizeGrip)
cornerOffset = extPoint;
@@ -463,7 +463,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
else
cornerPaintingRect = QRect();
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (hasMacReverseSizeGrip)
reverseCornerPaintingRect = QRect(controlsRect.bottomRight() + QPoint(1, 1) - extPoint, extSize);
else
@@ -488,7 +488,7 @@ void QAbstractScrollAreaPrivate::layoutChildren()
if (needh) {
QRect horizontalScrollBarRect(QPoint(controlsRect.left() + vHeaderRight, cornerPoint.y()), QPoint(cornerPoint.x() - 1, controlsRect.bottom()));
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (hasMacReverseSizeGrip)
horizontalScrollBarRect.adjust(vsbExt, 0, 0, 0);
#endif
@@ -602,7 +602,7 @@ void QAbstractScrollArea::setViewport(QWidget *widget)
d->viewport->setParent(this);
d->viewport->setFocusProxy(this);
d->viewport->installEventFilter(d->viewportFilter.data());
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
#ifndef QT_NO_GESTURES
d->viewport->grabGesture(Qt::PanGesture);
#endif
@@ -1029,7 +1029,7 @@ bool QAbstractScrollArea::event(QEvent *e)
QPainter p(this);
style()->drawPrimitive(QStyle::PE_PanelScrollAreaCorner, &option, &p, this);
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (d->reverseCornerPaintingRect.isValid()) {
option.rect = d->reverseCornerPaintingRect;
QPainter p(this);
@@ -1108,7 +1108,7 @@ bool QAbstractScrollArea::event(QEvent *e)
hBar->setValue(se->contentPos().x());
vBar->setValue(se->contentPos().y());
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
typedef BOOL (*PtrBeginPanningFeedback)(HWND);
typedef BOOL (*PtrUpdatePanningFeedback)(HWND, LONG, LONG, BOOL);
typedef BOOL (*PtrEndPanningFeedback)(HWND, BOOL);
@@ -1532,13 +1532,13 @@ void QAbstractScrollAreaPrivate::_q_vslide(int y)
void QAbstractScrollAreaPrivate::_q_showOrHideScrollBars()
{
layoutChildren();
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
// Need to re-subscribe to gestures as the content changes to make sure we
// enable/disable panning when needed.
QWidgetPrivate *dd = static_cast<QWidgetPrivate *>(QObjectPrivate::get(viewport));
if (dd)
dd->winSetupGestures();
-#endif // Q_DEAD_CODE_FROM_QT4_WIN
+#endif
}
QPoint QAbstractScrollAreaPrivate::contentsOffset() const
diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h
index 600c834c29..a3af77b11b 100644
--- a/src/widgets/widgets/qabstractscrollarea_p.h
+++ b/src/widgets/widgets/qabstractscrollarea_p.h
@@ -85,7 +85,7 @@ public:
QWidget *viewport;
QWidget *cornerWidget;
QRect cornerPaintingRect;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
QRect reverseCornerPaintingRect;
#endif
int left, top, right, bottom; // viewport margin
@@ -112,7 +112,7 @@ public:
{ return q_func()->viewportEvent(event); }
QScopedPointer<QObject> viewportFilter;
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
bool singleFingerPanEnabled;
void setSingleFingerPanEnabled(bool on = true);
#endif
diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp
index e85d82edb8..cc6a407bf8 100644
--- a/src/widgets/widgets/qabstractslider.cpp
+++ b/src/widgets/widgets/qabstractslider.cpp
@@ -721,7 +721,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb
offset_accumulated = 0;
offset_accumulated += stepsToScrollF;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
// Don't scroll more than one page in any case:
stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep);
#else
diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp
index caeabb660b..b0ded70c4a 100644
--- a/src/widgets/widgets/qcalendarwidget.cpp
+++ b/src/widgets/widgets/qcalendarwidget.cpp
@@ -213,10 +213,9 @@ QString QCalendarDayValidator::text(const QDate &date, int repeat) const
return formatNumber(date.day(), 2);
} else if (repeat == 3) {
return m_locale.dayName(date.dayOfWeek(), QLocale::ShortFormat);
- } else if (repeat >= 4) {
+ } else /* repeat >= 4 */ {
return m_locale.dayName(date.dayOfWeek(), QLocale::LongFormat);
}
- return QString();
}
//////////////////////////////////
@@ -1579,7 +1578,7 @@ protected:
{
Q_UNUSED(e)
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
QStyleOptionToolButton opt;
initStyleOption(&opt);
@@ -3030,6 +3029,7 @@ bool QCalendarWidget::event(QEvent *event)
switch (event->type()) {
case QEvent::LayoutDirectionChange:
d->updateButtonIcons();
+ break;
case QEvent::LocaleChange:
d->m_model->setFirstColumnDay(locale().firstDayOfWeek());
d->cachedSizeHint = QSize();
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 693d5f9e93..52e7962109 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -66,7 +66,7 @@
#include <private/qabstractitemmodel_p.h>
#include <private/qabstractscrollarea_p.h>
#include <qdebug.h>
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC)
#include <private/qcore_mac_p.h>
#include <private/qmacstyle_mac_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
@@ -415,7 +415,7 @@ void QComboBoxPrivateContainer::leaveEvent(QEvent *)
{
// On Mac using the Mac style we want to clear the selection
// when the mouse moves outside the popup.
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
QStyleOptionComboBox opt = comboStyleOption();
if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo))
view->clearSelection();
@@ -1684,6 +1684,9 @@ void QComboBox::setIconSize(const QSize &size)
By default, this property is \c false. The effect of editing depends
on the insert policy.
+ \note When disabling the \a editable state, the validator and
+ completer are removed.
+
\sa InsertPolicy
*/
bool QComboBox::isEditable() const
@@ -1837,6 +1840,8 @@ QLineEdit *QComboBox::lineEdit() const
\fn void QComboBox::setValidator(const QValidator *validator)
Sets the \a validator to use instead of the current validator.
+
+ \note The validator is removed when the editable property becomes \c false.
*/
void QComboBox::setValidator(const QValidator *v)
@@ -1870,6 +1875,8 @@ const QValidator *QComboBox::validator() const
By default, for an editable combo box, a QCompleter that
performs case insensitive inline completion is automatically created.
+
+ \note The completer is removed when the \a editable property becomes \c false.
*/
void QComboBox::setCompleter(QCompleter *c)
{
@@ -3126,6 +3133,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
case Qt::Key_Up:
if (e->modifiers() & Qt::ControlModifier)
break; // pass to line edit for auto completion
+ // fall through
case Qt::Key_PageUp:
#ifdef QT_KEYPAD_NAVIGATION
if (QApplication::keypadNavigationEnabled())
@@ -3168,6 +3176,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
showPopup();
return;
}
+ break;
case Qt::Key_Enter:
case Qt::Key_Return:
case Qt::Key_Escape:
@@ -3212,6 +3221,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
switch (move) {
case MoveFirst:
newIndex = -1;
+ // fall through
case MoveDown:
newIndex++;
while (newIndex < rowCount && !(d->model->index(newIndex, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled))
@@ -3219,6 +3229,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
break;
case MoveLast:
newIndex = rowCount;
+ // fall through
case MoveUp:
newIndex--;
while ((newIndex >= 0) && !(d->model->flags(d->model->index(newIndex,d->modelColumn,d->root)) & Qt::ItemIsEnabled))
diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp
index 54094de765..c5eab55a53 100644
--- a/src/widgets/widgets/qdatetimeedit.cpp
+++ b/src/widgets/widgets/qdatetimeedit.cpp
@@ -1125,7 +1125,7 @@ void QDateTimeEdit::keyPressEvent(QKeyEvent *event)
select = false;
break;
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
else
#ifdef QT_KEYPAD_NAVIGATION
if (!QApplication::keypadNavigationEnabled())
@@ -2350,7 +2350,9 @@ void QDateTimeEditPrivate::interpret(EmitPolicy ep)
const QValidator::State state = q->validate(tmp, pos);
if (state != QValidator::Acceptable
&& correctionMode == QAbstractSpinBox::CorrectToPreviousValue
- && (state == QValidator::Invalid || !(fieldInfo(currentSectionIndex) & AllowPartial))) {
+ && (state == QValidator::Invalid
+ || currentSectionIndex < 0
+ || !(fieldInfo(currentSectionIndex) & AllowPartial))) {
setValue(value, ep);
updateTimeSpec();
} else {
diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp
index 657eda3c68..23158cf82f 100644
--- a/src/widgets/widgets/qdialogbuttonbox.cpp
+++ b/src/widgets/widgets/qdialogbuttonbox.cpp
@@ -411,7 +411,7 @@ QPushButton *QDialogButtonBoxPrivate::createButton(QDialogButtonBox::StandardBut
else
addButton(button, static_cast<QDialogButtonBox::ButtonRole>(role), doLayout);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
// Since mnemonics is off by default on Mac, we add a Cmd-D
// shortcut here to e.g. make the "Don't Save" button work nativly:
if (sbutton == QDialogButtonBox::Discard)
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index a7e865ff05..63f8172bf6 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -1935,7 +1935,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*>
QDockAreaLayoutItem item(new QDockWidgetItem(widget));
if (flags & StateFlagFloating) {
bool drawer = false;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support
+#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support
extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp
extern bool qt_mac_set_drawer_preferred_edge(QWidget *, Qt::DockWidgetArea); //qwidget_mac.cpp
drawer = qt_mac_is_macdrawer(widget);
@@ -1950,7 +1950,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*>
int x, y, w, h;
stream >> x >> y >> w >> h;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support
+#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support
if (drawer) {
mainWindow->window()->createWinId();
widget->window()->createWinId();
@@ -2050,7 +2050,7 @@ void QDockAreaLayoutInfo::updateSeparatorWidgets() const
}
j++;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
sepWidget->raise();
#endif
QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2);
@@ -3085,7 +3085,7 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget)
dockWidget->d_func()->setWindowState(true, true, r);
}
dockWidget->setVisible(!placeHolder->hidden);
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (placeHolder->window) // gets rid of the X11BypassWindowManager window flag
dockWidget->d_func()->setWindowState(true);
#endif
@@ -3316,7 +3316,7 @@ void QDockAreaLayout::updateSeparatorWidgets() const
}
j++;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
sepWidget->raise();
#endif
QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2);
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 5059616870..1df7259aba 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -58,7 +58,7 @@
#include "qdockwidget_p.h"
#include "qmainwindowlayout_p.h"
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <private/qapplication_p.h>
#include <private/qt_mac_p.h>
#include <private/qmacstyle_mac_p.h>
@@ -916,7 +916,7 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event)
&& (event->pos() - state->pressPos).manhattanLength()
> QApplication::startDragDistance()) {
startDrag();
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
grabMouseWhileInWindow();
#else
q->grabMouse();
@@ -966,7 +966,7 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
QWidget *tl = q->topLevelWidget();
QRect geo = tl->geometry();
QRect titleRect = tl->frameGeometry();
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if ((features & QDockWidget::DockWidgetVerticalTitleBar)) {
titleRect.setTop(geo.top());
titleRect.setBottom(geo.bottom());
@@ -1508,7 +1508,7 @@ bool QDockWidget::event(QEvent *event)
if (d->mouseMoveEvent(static_cast<QMouseEvent *>(event)))
return true;
break;
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
case QEvent::Leave:
if (d->state != 0 && d->state->dragging && !d->state->nca) {
// This is a workaround for loosing the mouse on Vista.
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index 2bc715724d..dd5f5325b1 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -87,7 +87,7 @@
QT_BEGIN_NAMESPACE
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
extern void qt_mac_secure_keyboard(bool); //qapplication_mac.cpp
#endif
@@ -573,7 +573,7 @@ void QLineEdit::setEchoMode(EchoMode mode)
setInputMethodHints(imHints);
d->control->setEchoMode(mode);
update();
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (hasFocus())
qt_mac_secure_keyboard(mode == Password || mode == NoEcho);
#endif
@@ -1810,7 +1810,7 @@ void QLineEdit::focusInEvent(QFocusEvent *e)
if((!hasSelectedText() && d->control->preeditAreaText().isEmpty())
|| style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected, &opt, this))
d->setCursorVisible(true);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho)
qt_mac_secure_keyboard(true);
#endif
@@ -1858,7 +1858,7 @@ void QLineEdit::focusOutEvent(QFocusEvent *e)
if (hasAcceptableInput() || d->control->fixup())
emit editingFinished();
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho)
qt_mac_secure_keyboard(false);
#endif
diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp
index 2477510520..e32e379198 100644
--- a/src/widgets/widgets/qmainwindow.cpp
+++ b/src/widgets/widgets/qmainwindow.cpp
@@ -61,7 +61,7 @@
#ifdef Q_OS_OSX
#include <qpa/qplatformnativeinterface.h>
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <private/qt_mac_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
QT_BEGIN_NAMESPACE
@@ -80,7 +80,7 @@ public:
#ifdef Q_OS_OSX
, useUnifiedToolBar(false)
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
, useHIToolBar(false)
, activateUnifiedToolbarAfterFullScreen(false)
#endif
@@ -95,7 +95,7 @@ public:
#ifdef Q_OS_OSX
bool useUnifiedToolBar;
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
bool useHIToolBar;
bool activateUnifiedToolbarAfterFullScreen;
#endif
@@ -682,8 +682,10 @@ QWidget *QMainWindow::takeCentralWidget()
{
Q_D(QMainWindow);
QWidget *oldcentralwidget = d->layout->centralWidget();
- oldcentralwidget->setParent(0);
- d->layout->setCentralWidget(0);
+ if (oldcentralwidget) {
+ oldcentralwidget->setParent(0);
+ d->layout->setCentralWidget(0);
+ }
return oldcentralwidget;
}
@@ -1110,7 +1112,7 @@ void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget
d_func()->layout->removeWidget(dockwidget); // in case it was already in here
addDockWidget(area, dockwidget, orientation);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC //drawer support
+#if 0 // Used to be included in Qt4 for Q_WS_MAC //drawer support
QMacAutoReleasePool pool;
extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp
if (qt_mac_is_macdrawer(dockwidget)) {
@@ -1514,7 +1516,7 @@ bool QMainWindow::event(QEvent *event)
if (!d->explicitIconSize)
setIconSize(QSize());
break;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
case QEvent::Show:
if (unifiedTitleAndToolBarOnMac())
d->layout->syncUnifiedToolbarVisibility();
@@ -1533,7 +1535,7 @@ bool QMainWindow::event(QEvent *event)
}
}
break;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
#if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR)
case QEvent::CursorChange:
// CursorChange events are triggered as mouse moves to new widgets even
@@ -1589,7 +1591,7 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
}
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
Q_D(QMainWindow);
if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3)
return;
@@ -1624,7 +1626,7 @@ bool QMainWindow::unifiedTitleAndToolBarOnMac() const
#ifdef Q_OS_OSX
return d_func()->useUnifiedToolBar;
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
return d_func()->useHIToolBar && !testAttribute(Qt::WA_MacBrushedMetal) && !(windowFlags() & Qt::FramelessWindowHint);
#endif
return false;
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index 939453473a..8df197e05c 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -70,7 +70,7 @@
#include <private/qapplication_p.h>
#include <private/qlayoutengine_p.h>
#include <private/qwidgetresizehandler_p.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include <private/qcore_mac_p.h>
# include <private/qt_cocoa_helpers_mac_p.h>
#endif
@@ -1129,11 +1129,11 @@ void QMainWindowLayout::removeToolBar(QToolBar *toolbar)
QObject::disconnect(parentWidget(), SIGNAL(toolButtonStyleChanged(Qt::ToolButtonStyle)),
toolbar, SLOT(_q_updateToolButtonStyle(Qt::ToolButtonStyle)));
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (usesHIToolBar(toolbar)) {
removeFromMacToolbar(toolbar);
} else
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
{
removeWidget(toolbar);
}
@@ -1148,7 +1148,7 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area,
bool)
{
validateToolBarArea(area);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if ((area == Qt::TopToolBarArea)
&& layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) {
insertIntoMacToolbar(0, toolbar);
@@ -1174,11 +1174,11 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area,
*/
void QMainWindowLayout::insertToolBar(QToolBar *before, QToolBar *toolbar)
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (usesHIToolBar(before)) {
insertIntoMacToolbar(before, toolbar);
} else
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
{
addChildWidget(toolbar);
QLayoutItem * item = layoutState.toolBarAreaLayout.insertToolBar(before, toolbar);
@@ -1207,7 +1207,7 @@ Qt::ToolBarArea QMainWindowLayout::toolBarArea(QToolBar *toolbar) const
case QInternal::BottomDock: return Qt::BottomToolBarArea;
default: break;
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (pos == QInternal::DockCount) {
if (qtoolbarsInUnifiedToolbarList.contains(toolbar))
return Qt::TopToolBarArea;
@@ -1230,7 +1230,7 @@ void QMainWindowLayout::getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar
void QMainWindowLayout::toggleToolBarsVisible()
{
bool updateNonUnifiedParts = true;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) {
// If we hit this case, someone has pressed the "toolbar button" which will
// toggle the unified toolbar visibility, because that's what the user wants.
@@ -1876,7 +1876,7 @@ QSize QMainWindowLayout::minimumSize() const
const QSize sbMin = statusbar ? statusbar->minimumSize() : QSize(0, 0);
minSize = QSize(qMax(sbMin.width(), minSize.width()),
sbMin.height() + minSize.height());
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
const QSize storedSize = minSize;
int minWidth = 0;
foreach (QToolBar *toolbar, qtoolbarsInUnifiedToolbarList) {
@@ -2186,7 +2186,7 @@ QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLay
#endif // QT_NO_DOCKWIDGET
, widgetAnimator(this)
, pluggingWidget(0)
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
, blockVisiblityCheck(false)
#endif
{
@@ -2213,7 +2213,7 @@ QMainWindowLayout::~QMainWindowLayout()
layoutState.deleteAllLayoutItems();
layoutState.deleteCentralWidgetItem();
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
cleanUpMacToolbarItems();
#endif
@@ -2581,7 +2581,7 @@ bool QMainWindowLayout::restoreState(QDataStream &stream)
// HIToolbar.
bool QMainWindowLayout::usesHIToolBar(QToolBar *toolbar) const
{
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
Q_UNUSED(toolbar);
return false;
#else
diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h
index c06122b9c7..6e8b965431 100644
--- a/src/widgets/widgets/qmainwindowlayout_p.h
+++ b/src/widgets/widgets/qmainwindowlayout_p.h
@@ -325,7 +325,7 @@ private:
#ifndef QT_NO_TABBAR
void updateTabBarShapes();
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
static OSStatus qtmacToolbarDelegate(EventHandlerCallRef, EventRef , void *);
static OSStatus qtoolbarInHIToolbarHandler(EventHandlerCallRef inCallRef, EventRef event,
void *data);
@@ -358,7 +358,7 @@ public:
QUnifiedToolbarSurface *unifiedSurface;
void updateUnifiedToolbarOffset();
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
};
#if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_DEBUG_STREAM)
diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp
index 5f3aff5e10..183f1c2848 100644
--- a/src/widgets/widgets/qmdiarea.cpp
+++ b/src/widgets/widgets/qmdiarea.cpp
@@ -160,7 +160,7 @@
#include <QApplication>
#include <QStyle>
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC)
+#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC)
#include <private/qmacstyle_mac_p.h>
#endif
#include <QChildEvent>
@@ -2493,7 +2493,7 @@ bool QMdiArea::event(QEvent *event)
{
Q_D(QMdiArea);
switch (event->type()) {
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
// QWidgetPrivate::hide_helper activates another sub-window when closing a
// modal dialog on Windows (see activateWindow() inside the ifdef).
case QEvent::WindowUnblocked:
@@ -2557,7 +2557,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event)
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
// Ingore key events without a Ctrl modifier (except for press/release on the modifier itself).
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (!(keyEvent->modifiers() & Qt::MetaModifier) && keyEvent->key() != Qt::Key_Meta)
#else
if (!(keyEvent->modifiers() & Qt::ControlModifier) && keyEvent->key() != Qt::Key_Control)
@@ -2576,7 +2576,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event)
// 3) Ctrl-Shift-Tab (Tab, Tab, ...) -> iterate through all windows in the opposite
// direction (activatePreviousSubWindow())
switch (keyEvent->key()) {
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
case Qt::Key_Meta:
#else
case Qt::Key_Control:
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index afe87c6af9..2fff2fc729 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -280,7 +280,7 @@ static inline bool isHoverControl(QStyle::SubControl control)
return control != QStyle::SC_None && control != QStyle::SC_TitleBarLabel;
}
-#if defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
static inline QRgb colorref2qrgb(COLORREF col)
{
return qRgb(GetRValue(col),GetGValue(col),GetBValue(col));
@@ -1932,7 +1932,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const
QPalette newPalette = q->palette();
bool colorsInitialized = false;
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN // ask system properties on windows
+#if 0 // Used to be included in Qt4 for Q_WS_WIN // ask system properties on windows
#ifndef SPI_GETGRADIENTCAPTIONS
#define SPI_GETGRADIENTCAPTIONS 0x1008
#endif
@@ -1968,7 +1968,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const
newPalette.color(QPalette::Inactive, QPalette::Highlight));
}
}
-#endif // Q_DEAD_CODE_FROM_QT4_WIN
+#endif
if (!colorsInitialized) {
newPalette.setColor(QPalette::Active, QPalette::Highlight,
newPalette.color(QPalette::Active, QPalette::Highlight));
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index d957dda162..36a8a96b79 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -153,12 +153,19 @@ void QMenuPrivate::init()
scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone;
}
- setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu());
sloppyState.initialize(q);
delayState.initialize(q);
mousePopupDelay = q->style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q);
}
+QPlatformMenu *QMenuPrivate::createPlatformMenu()
+{
+ Q_Q(QMenu);
+ if (platformMenu.isNull())
+ q->setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu());
+ return platformMenu.data();
+}
+
void QMenuPrivate::setPlatformMenu(QPlatformMenu *menu)
{
Q_Q(QMenu);
@@ -809,6 +816,93 @@ void QMenuPrivate::updateLayoutDirection()
}
}
+void QMenuPrivate::drawScroller(QPainter *painter, QMenuPrivate::ScrollerTearOffItem::Type type, const QRect &rect)
+{
+ if (!painter || rect.isEmpty())
+ return;
+
+ if (!scroll || !(scroll->scrollFlags & (QMenuPrivate::QMenuScroller::ScrollUp
+ | QMenuPrivate::QMenuScroller::ScrollDown)))
+ return;
+
+ Q_Q(QMenu);
+ QStyleOptionMenuItem menuOpt;
+ menuOpt.initFrom(q);
+ menuOpt.state = QStyle::State_None;
+ menuOpt.checkType = QStyleOptionMenuItem::NotCheckable;
+ menuOpt.maxIconWidth = 0;
+ menuOpt.tabWidth = 0;
+ menuOpt.rect = rect;
+ menuOpt.menuItemType = QStyleOptionMenuItem::Scroller;
+ menuOpt.state |= QStyle::State_Enabled;
+ if (type == QMenuPrivate::ScrollerTearOffItem::ScrollDown)
+ menuOpt.state |= QStyle::State_DownArrow;
+
+ painter->setClipRect(menuOpt.rect);
+ q->style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, painter, q);
+}
+
+void QMenuPrivate::drawTearOff(QPainter *painter, const QRect &rect)
+{
+ if (!painter || rect.isEmpty())
+ return;
+
+ if (!tearoff)
+ return;
+
+ Q_Q(QMenu);
+ QStyleOptionMenuItem menuOpt;
+ menuOpt.initFrom(q);
+ menuOpt.state = QStyle::State_None;
+ menuOpt.checkType = QStyleOptionMenuItem::NotCheckable;
+ menuOpt.maxIconWidth = 0;
+ menuOpt.tabWidth = 0;
+ menuOpt.rect = rect;
+ menuOpt.menuItemType = QStyleOptionMenuItem::TearOff;
+ if (tearoffHighlighted)
+ menuOpt.state |= QStyle::State_Selected;
+
+ painter->setClipRect(menuOpt.rect);
+ q->style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, painter, q);
+}
+
+QMenuPrivate::ScrollerTearOffItem::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::Type type, QMenuPrivate *mPrivate, QWidget *parent, Qt::WindowFlags f)
+ : QWidget(parent, f), menuPrivate(mPrivate), scrollType(type)
+{
+ if (parent)
+ setMouseTracking(parent->style()->styleHint(QStyle::SH_Menu_MouseTracking, 0, parent));
+}
+
+void QMenuPrivate::ScrollerTearOffItem::paintEvent(QPaintEvent *e)
+{
+ if (!e->rect().intersects(rect()))
+ return;
+
+ QPainter p(this);
+ QWidget *parent = parentWidget();
+
+ //paint scroll up / down arrows
+ menuPrivate->drawScroller(&p, scrollType, QRect(0, 0, width(), menuPrivate->scrollerHeight()));
+ //paint the tear off
+ if (scrollType == QMenuPrivate::ScrollerTearOffItem::ScrollUp) {
+ QRect rect(0, 0, width(), parent->style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, parent));
+ if (menuPrivate->scroll && menuPrivate->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp)
+ rect.translate(0, menuPrivate->scrollerHeight());
+ menuPrivate->drawTearOff(&p, rect);
+ }
+}
+
+void QMenuPrivate::ScrollerTearOffItem::updateScrollerRects(const QRect &rect)
+{
+ if (rect.isEmpty())
+ setVisible(false);
+ else {
+ setGeometry(rect);
+ raise();
+ setVisible(true);
+ }
+}
+
/*!
Returns the action associated with this menu.
@@ -2532,58 +2626,78 @@ void QMenu::paintEvent(QPaintEvent *e)
menuOpt.tabWidth = 0;
style()->drawPrimitive(QStyle::PE_PanelMenu, &menuOpt, &p, this);
+ //calculate the scroll up / down rect
+ const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this);
+ QRect scrollUpRect, scrollDownRect;
+ if (d->scroll) {
+ if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp)
+ scrollUpRect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight());
+
+ if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown)
+ scrollDownRect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2),
+ d->scrollerHeight());
+ }
+
+ //calculate the tear off rect
+ QRect tearOffRect;
+ if (d->tearoff) {
+ tearOffRect.setRect(fw, fw, width() - (fw * 2),
+ style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this));
+ if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp)
+ tearOffRect.translate(0, d->scrollerHeight());
+ }
+
//draw the items that need updating..
+ QRect scrollUpTearOffRect = scrollUpRect.united(tearOffRect);
for (int i = 0; i < d->actions.count(); ++i) {
QAction *action = d->actions.at(i);
- QRect adjustedActionRect = d->actionRects.at(i);
- if (!e->rect().intersects(adjustedActionRect)
+ QRect actionRect = d->actionRects.at(i);
+ if (!e->rect().intersects(actionRect)
|| d->widgetItems.value(action))
continue;
//set the clip region to be extra safe (and adjust for the scrollers)
+ emptyArea -= QRegion(actionRect);
+
+ QRect adjustedActionRect = actionRect;
+ if (adjustedActionRect.intersects(scrollUpTearOffRect)) {
+ if (adjustedActionRect.bottom() <= scrollUpTearOffRect.bottom())
+ continue;
+ else
+ adjustedActionRect.setTop(scrollUpTearOffRect.bottom()+1);
+ }
+
+ if (adjustedActionRect.intersects(scrollDownRect)) {
+ if (adjustedActionRect.top() >= scrollDownRect.top())
+ continue;
+ else
+ adjustedActionRect.setBottom(scrollDownRect.top()-1);
+ }
+
QRegion adjustedActionReg(adjustedActionRect);
- emptyArea -= adjustedActionReg;
p.setClipRegion(adjustedActionReg);
QStyleOptionMenuItem opt;
initStyleOption(&opt, action);
- opt.rect = adjustedActionRect;
+ opt.rect = actionRect;
style()->drawControl(QStyle::CE_MenuItem, &opt, &p, this);
}
- const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this);
- //draw the scroller regions..
- if (d->scroll) {
- menuOpt.menuItemType = QStyleOptionMenuItem::Scroller;
- menuOpt.state |= QStyle::State_Enabled;
- if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) {
- menuOpt.rect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight());
- emptyArea -= QRegion(menuOpt.rect);
- p.setClipRect(menuOpt.rect);
- style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this);
- }
- if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown) {
- menuOpt.rect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2),
- d->scrollerHeight());
- emptyArea -= QRegion(menuOpt.rect);
- menuOpt.state |= QStyle::State_DownArrow;
- p.setClipRect(menuOpt.rect);
- style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this);
- }
- }
- //paint the tear off..
- if (d->tearoff) {
- menuOpt.menuItemType = QStyleOptionMenuItem::TearOff;
- menuOpt.rect.setRect(fw, fw, width() - (fw * 2),
- style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this));
- if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp)
- menuOpt.rect.translate(0, d->scrollerHeight());
- emptyArea -= QRegion(menuOpt.rect);
- p.setClipRect(menuOpt.rect);
- menuOpt.state = QStyle::State_None;
- if (d->tearoffHighlighted)
- menuOpt.state |= QStyle::State_Selected;
- style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, &p, this);
+ emptyArea -= QRegion(scrollUpTearOffRect);
+ emptyArea -= QRegion(scrollDownRect);
+
+ if (d->scrollUpTearOffItem || d->scrollDownItem) {
+ if (d->scrollUpTearOffItem)
+ d->scrollUpTearOffItem->updateScrollerRects(scrollUpTearOffRect);
+ if (d->scrollDownItem)
+ d->scrollDownItem->updateScrollerRects(scrollDownRect);
+ } else {
+ //paint scroll up /down
+ d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollUp, scrollUpRect);
+ d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollDown, scrollDownRect);
+ //paint the tear off..
+ d->drawTearOff(&p, tearOffRect);
}
+
//draw border
if (fw) {
QRegion borderReg;
@@ -2602,7 +2716,7 @@ void QMenu::paintEvent(QPaintEvent *e)
style()->drawPrimitive(QStyle::PE_FrameMenu, &frame, &p, this);
}
- //finally the rest of the space
+ //finally the rest of the spaces
p.setClipRegion(emptyArea);
menuOpt.state = QStyle::State_None;
menuOpt.menuItemType = QStyleOptionMenuItem::EmptyArea;
@@ -3314,8 +3428,17 @@ void QMenu::actionEvent(QActionEvent *e)
}
if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action())) {
QWidget *widget = wa->requestWidget(this);
- if (widget)
+ if (widget) {
d->widgetItems.insert(wa, widget);
+ if (d->scroll) {
+ if (!d->scrollUpTearOffItem)
+ d->scrollUpTearOffItem =
+ new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollUp, d, this);
+ if (!d->scrollDownItem)
+ d->scrollDownItem =
+ new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollDown, d, this);
+ }
+ }
}
} else if (e->type() == QEvent::ActionRemoved) {
e->action()->disconnect(this);
diff --git a/src/widgets/widgets/qmenu_mac.mm b/src/widgets/widgets/qmenu_mac.mm
index fef1eb2cf4..f9f3ad08dc 100644
--- a/src/widgets/widgets/qmenu_mac.mm
+++ b/src/widgets/widgets/qmenu_mac.mm
@@ -80,11 +80,12 @@ inline QPlatformNativeInterface::NativeResourceForIntegrationFunction resolvePla
*/
NSMenu *QMenu::toNSMenu()
{
+ Q_D(QMenu);
// Call into the cocoa platform plugin: qMenuToNSMenu(platformMenu())
QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("qmenutonsmenu");
if (function) {
typedef void* (*QMenuToNSMenuFunction)(QPlatformMenu *platformMenu);
- return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuToNSMenuFunction>(function)(platformMenu()));
+ return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuToNSMenuFunction>(function)(d->createPlatformMenu()));
}
return nil;
}
@@ -98,11 +99,12 @@ NSMenu *QMenu::toNSMenu()
*/
void QMenu::setAsDockMenu()
{
+ Q_D(QMenu);
// Call into the cocoa platform plugin: setDockMenu(platformMenu())
QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("setdockmenu");
if (function) {
typedef void (*SetDockMenuFunction)(QPlatformMenu *platformMenu);
- reinterpret_cast<SetDockMenuFunction>(function)(platformMenu());
+ reinterpret_cast<SetDockMenuFunction>(function)(d->createPlatformMenu());
}
}
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index 2b0dc482da..64291e842f 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -276,7 +276,8 @@ public:
cancelAction(0),
#endif
scroll(0), eventLoop(0), tearoff(0), tornoff(0), tearoffHighlighted(0),
- hasCheckableItems(0), doChildEffects(false), platformMenu(0)
+ hasCheckableItems(0), doChildEffects(false), platformMenu(0),
+ scrollUpTearOffItem(nullptr), scrollDownItem(nullptr)
{ }
~QMenuPrivate()
@@ -286,6 +287,7 @@ public:
delete platformMenu.data();
}
void init();
+ QPlatformMenu *createPlatformMenu();
void setPlatformMenu(QPlatformMenu *menu);
void syncPlatformMenu();
#ifdef Q_OS_OSX
@@ -444,6 +446,24 @@ public:
QPointer<QAction> actionAboutToTrigger;
QPointer<QWidget> noReplayFor;
+
+ class ScrollerTearOffItem : public QWidget {
+ public:
+ enum Type { ScrollUp, ScrollDown };
+ ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate,
+ QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ void updateScrollerRects(const QRect &rect);
+
+ private:
+ QMenuPrivate *menuPrivate;
+ Type scrollType;
+ };
+ ScrollerTearOffItem *scrollUpTearOffItem;
+ ScrollerTearOffItem *scrollDownItem;
+
+ void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect);
+ void drawTearOff(QPainter *painter, const QRect &rect);
};
#endif // QT_NO_MENU
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index ce43740524..6b0c2fd621 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -1192,6 +1192,10 @@ QPlatformMenu *QMenuBarPrivate::getPlatformMenu(QAction *action)
QPlatformMenu *platformMenu = action->menu()->platformMenu();
if (!platformMenu && platformMenuBar) {
platformMenu = platformMenuBar->createMenu();
+ // QPlatformMenuBar::createMenu() was introduced in Qt 5.7. Not all third party
+ // platform themes are using it, so fallback to QPlatformTheme::createPlatformMenu().
+ if (!platformMenu)
+ platformMenu = QGuiApplicationPrivate::platformTheme()->createPlatformMenu();
if (platformMenu)
action->menu()->setPlatformMenu(platformMenu);
}
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 27f1b16f60..7e01f6f3d5 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -811,7 +811,7 @@ void QPlainTextEditPrivate::init(const QString &txt)
viewport->setCursor(Qt::IBeamCursor);
#endif
originalOffsetY = 0;
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
setSingleFingerPanEnabled(true);
#endif
}
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index bf10b9fb75..3b1440edb6 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -56,10 +56,10 @@
#include "qdebug.h"
#include "qlayoutitem.h"
#include "qdialogbuttonbox.h"
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include "private/qmacstyle_mac_p.h"
#include "private/qmacstyle_mac_p_p.h"
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
#ifndef QT_NO_ACCESSIBILITY
#include "qaccessible.h"
@@ -675,7 +675,7 @@ bool QPushButton::event(QEvent *e)
return QAbstractButton::event(e);
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
/*! \reimp */
bool QPushButton::hitButton(const QPoint &pos) const
{
@@ -704,7 +704,7 @@ bool QPushButtonPrivate::hitButton(const QPoint &pos)
q->rect().height() - QMacStylePrivate::PushButtonBottomOffset);
return roundedRect.contains(pos);
}
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
QT_END_NAMESPACE
diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h
index 56d4d1de20..859ac247fb 100644
--- a/src/widgets/widgets/qpushbutton.h
+++ b/src/widgets/widgets/qpushbutton.h
@@ -87,9 +87,9 @@ public Q_SLOTS:
protected:
bool event(QEvent *e) Q_DECL_OVERRIDE;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
bool hitButton(const QPoint &pos) const;
-#endif // Q_DEAD_CODE_FROM_QT4_MAC
+#endif
void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE;
diff --git a/src/widgets/widgets/qpushbutton_p.h b/src/widgets/widgets/qpushbutton_p.h
index cd453a1339..ee41c345c8 100644
--- a/src/widgets/widgets/qpushbutton_p.h
+++ b/src/widgets/widgets/qpushbutton_p.h
@@ -71,7 +71,7 @@ public:
inline void init() { resetLayoutItemMargins(); }
static QPushButtonPrivate* get(QPushButton *b) { return b->d_func(); }
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
bool hitButton(const QPoint &pos);
#endif
#ifndef QT_NO_MENU
diff --git a/src/widgets/widgets/qrubberband.cpp b/src/widgets/widgets/qrubberband.cpp
index 123c955684..c91f837093 100644
--- a/src/widgets/widgets/qrubberband.cpp
+++ b/src/widgets/widgets/qrubberband.cpp
@@ -47,7 +47,7 @@
#include "qstyle.h"
#include "qstyleoption.h"
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
# include <private/qt_mac_p.h>
# include <private/qt_cocoa_helpers_mac_p.h>
#endif
@@ -142,12 +142,12 @@ QRubberBand::QRubberBand(Shape s, QWidget *p)
Q_D(QRubberBand);
d->shape = s;
setAttribute(Qt::WA_TransparentForMouseEvents);
-#ifndef Q_DEAD_CODE_FROM_QT4_WIN
+#if 1 // Used to be excluded in Qt4 for Q_WS_WIN
setAttribute(Qt::WA_NoSystemBackground);
-#endif //Q_DEAD_CODE_FROM_QT4_WIN
+#endif
setAttribute(Qt::WA_WState_ExplicitShowHide);
setVisible(false);
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (isWindow()) {
createWinId();
extern OSWindowRef qt_mac_window_for(const QWidget *); //qwidget_mac.cpp
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp
index dd0b383d2b..5150601366 100644
--- a/src/widgets/widgets/qsizegrip.cpp
+++ b/src/widgets/widgets/qsizegrip.cpp
@@ -52,7 +52,7 @@
#include "qdebug.h"
#include <QDesktopWidget>
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <private/qt_mac_p.h>
#endif
@@ -82,7 +82,7 @@ public:
Qt::Corner m_corner;
bool gotMousePress;
QPointer<QWidget> tlw;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
void updateMacSizer(bool hide) const;
#endif
Qt::Corner corner() const;
@@ -120,7 +120,7 @@ public:
updateTopLevelWidget();
if (tlw && showSizeGrip) {
Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
sizeGripNotVisibleState |= Qt::WindowMaximized;
#endif
// Don't show the size grip if the tlw is maximized or in full screen mode.
@@ -142,7 +142,7 @@ QSizeGripPrivate::QSizeGripPrivate()
{
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
void QSizeGripPrivate::updateMacSizer(bool hide) const
{
Q_Q(const QSizeGrip);
@@ -225,7 +225,7 @@ void QSizeGripPrivate::init()
Q_Q(QSizeGrip);
m_corner = q->isLeftToRight() ? Qt::BottomRightCorner : Qt::BottomLeftCorner;
-#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */
q->setCursor(m_corner == Qt::TopLeftCorner || m_corner == Qt::BottomRightCorner
? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor);
#endif
@@ -438,7 +438,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/)
return;
d->m_corner = d->corner();
-#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */
setCursor(d->m_corner == Qt::TopLeftCorner || d->m_corner == Qt::BottomRightCorner
? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor);
#endif
@@ -449,7 +449,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/)
*/
void QSizeGrip::showEvent(QShowEvent *showEvent)
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d_func()->updateMacSizer(false);
#endif
QWidget::showEvent(showEvent);
@@ -460,7 +460,7 @@ void QSizeGrip::showEvent(QShowEvent *showEvent)
*/
void QSizeGrip::hideEvent(QHideEvent *hideEvent)
{
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d_func()->updateMacSizer(true);
#endif
QWidget::hideEvent(hideEvent);
@@ -484,7 +484,7 @@ bool QSizeGrip::eventFilter(QObject *o, QEvent *e)
return QWidget::eventFilter(o, e);
}
Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen;
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
sizeGripNotVisibleState |= Qt::WindowMaximized;
#endif
// Don't show the size grip if the tlw is maximized or in full screen mode.
diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp
index 5f1c373bb1..bdf728ead2 100644
--- a/src/widgets/widgets/qstatusbar.cpp
+++ b/src/widgets/widgets/qstatusbar.cpp
@@ -87,7 +87,7 @@ public:
int savedStrut;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
QPoint dragStart;
#endif
@@ -746,7 +746,7 @@ bool QStatusBar::event(QEvent *e)
// On Mac OS X Leopard it is possible to drag the window by clicking
// on the tool bar on most applications.
-#ifndef Q_DEAD_CODE_FROM_QT4_MAC
+#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
return QWidget::event(e);
#else
// Enable drag-click only if the status bar is the status bar for a
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index b6a3ef7eb8..6e34198f67 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -63,7 +63,7 @@
#ifndef QT_NO_TABBAR
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
#include <private/qt_mac_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
#endif
@@ -176,7 +176,12 @@ void QTabBarPrivate::initBasicStyleOption(QStyleOptionTab *option, int tabIndex)
if (tab.textColor.isValid())
option->palette.setColor(q->foregroundRole(), tab.textColor);
-
+#ifdef Q_OS_MACOS
+ else if (isCurrent && !documentMode
+ && (QSysInfo::MacintoshVersion < QSysInfo::MV_10_10 || q->isActiveWindow())) {
+ option->palette.setColor(QPalette::WindowText, Qt::white);
+ }
+#endif
option->icon = tab.icon;
option->iconSize = q->iconSize(); // Will get the default value then.
@@ -1922,7 +1927,7 @@ void QTabBar::mousePressEvent(QMouseEvent *event)
d->moveTabFinished(d->pressedIndex);
d->pressedIndex = d->indexAtPos(event->pos());
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->previousPressedIndex = d->pressedIndex;
#endif
if (d->validIndex(d->pressedIndex)) {
@@ -2004,7 +2009,7 @@ void QTabBar::mouseMoveEvent(QMouseEvent *event)
update();
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
} else if (!d->documentMode && event->buttons() == Qt::LeftButton && d->previousPressedIndex != -1) {
int newPressedIndex = d->indexAtPos(event->pos());
if (d->pressedIndex == -1 && d->previousPressedIndex == newPressedIndex) {
@@ -2102,7 +2107,7 @@ void QTabBar::mouseReleaseEvent(QMouseEvent *event)
event->ignore();
return;
}
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->previousPressedIndex = -1;
#endif
if (d->movable && d->dragInProgress && d->validIndex(d->pressedIndex)) {
diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h
index 0e9dce84b3..e8d5503fdf 100644
--- a/src/widgets/widgets/qtabbar_p.h
+++ b/src/widgets/widgets/qtabbar_p.h
@@ -91,7 +91,7 @@ public:
selectionBehaviorOnRemove(QTabBar::SelectRightTab), paintWithOffsets(true), movable(false),
dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false),
switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0)
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
, previousPressedIndex(-1)
#endif
{}
@@ -228,7 +228,7 @@ public:
int switchTabTimerId;
QMovableTabWidget *movingTab;
-#ifdef Q_DEAD_CODE_FROM_QT4_MAC
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
int previousPressedIndex;
#endif
// shared by tabwidget and qtabbar
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index f354495e70..66bf2919eb 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -184,7 +184,7 @@ void QTextEditPrivate::init(const QString &html)
#ifndef QT_NO_CURSOR
viewport->setCursor(Qt::IBeamCursor);
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
setSingleFingerPanEnabled(true);
#endif
}
diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp
index 61bc6d19cf..2a0912df0a 100644
--- a/src/widgets/widgets/qtoolbar.cpp
+++ b/src/widgets/widgets/qtoolbar.cpp
@@ -322,7 +322,7 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event)
startDrag(moving);
if (!moving && !wasDragging) {
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
grabMouseWhileInWindow();
#else
q->grabMouse();
diff --git a/src/widgets/widgets/qtoolbararealayout.cpp b/src/widgets/widgets/qtoolbararealayout.cpp
index 05564bb6b1..0c57d9251d 100644
--- a/src/widgets/widgets/qtoolbararealayout.cpp
+++ b/src/widgets/widgets/qtoolbararealayout.cpp
@@ -604,16 +604,21 @@ int QToolBarAreaLayoutInfo::distance(const QPoint &pos) const
case QInternal::LeftDock:
if (pos.y() < rect.bottom())
return pos.x() - rect.right();
+ break;
case QInternal::RightDock:
if (pos.y() < rect.bottom())
return rect.left() - pos.x();
+ break;
case QInternal::TopDock:
if (pos.x() < rect.right())
return pos.y() - rect.bottom();
+ break;
case QInternal::BottomDock:
if (pos.x() < rect.right())
return rect.top() - pos.y();
- default:
+ break;
+
+ case QInternal::DockCount:
break;
}
return -1;
diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp
index 66f17dbe33..9b65dc43d1 100644
--- a/src/widgets/widgets/qwidgetlinecontrol.cpp
+++ b/src/widgets/widgets/qwidgetlinecontrol.cpp
@@ -72,7 +72,7 @@ int QWidgetLineControl::redoTextLayout() const
QTextLine l = m_textLayout.createLine();
m_textLayout.endLayout();
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (m_threadChecks)
m_textLayoutThread = QThread::currentThread();
#endif
diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h
index db9039e302..d4a4534fb5 100644
--- a/src/widgets/widgets/qwidgetlinecontrol_p.h
+++ b/src/widgets/widgets/qwidgetlinecontrol_p.h
@@ -91,7 +91,7 @@ public:
m_selstart(0), m_selend(0), m_passwordEchoEditing(false)
, m_passwordEchoTimer(0)
, m_passwordMaskDelay(-1)
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
, m_threadChecks(false)
, m_textLayoutThread(0)
#endif
@@ -382,14 +382,14 @@ public:
QTextLayout *textLayout() const
{
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
if (m_threadChecks && QThread::currentThread() != m_textLayoutThread)
redoTextLayout();
#endif
return &m_textLayout;
}
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
void setThreadChecks(bool threadChecks)
{
m_threadChecks = threadChecks;
@@ -512,7 +512,7 @@ private:
}
int redoTextLayout() const;
-#if defined(Q_DEAD_CODE_FROM_QT4_MAC)
+#if 0 // Used to be included in Qt4 for Q_WS_MAC
bool m_threadChecks;
mutable QThread *m_textLayoutThread;
#endif
diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp
index 2a7b1eeecc..016598849b 100644
--- a/src/widgets/widgets/qwidgetresizehandler.cpp
+++ b/src/widgets/widgets/qwidgetresizehandler.cpp
@@ -120,7 +120,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos())))
return false;
if (e->button() == Qt::LeftButton) {
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
/*
Implicit grabs do not stop the X server from changing
the cursor in children, which looks *really* bad when
@@ -134,7 +134,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee)
# else
widget->grabMouse();
# endif // QT_NO_CURSOR
-#endif // Q_DEAD_CODE_FROM_QT4_X11
+#endif
buttonDown = false;
emit activate();
bool me = movingEnabled;
diff --git a/sync.profile b/sync.profile
index 4da3499667..2f6c5399d4 100644
--- a/sync.profile
+++ b/sync.profile
@@ -10,7 +10,21 @@
"QtTest" => "$basedir/src/testlib",
"QtDBus" => "$basedir/src/dbus",
"QtConcurrent" => "$basedir/src/concurrent",
- "QtPlatformSupport" => "$basedir/src/platformsupport",
+ "QtAccessibilitySupport" => "$basedir/src/platformsupport/accessibility",
+ "QtLinuxAccessibilitySupport" => "$basedir/src/platformsupport/linuxaccessibility",
+ "QtClipboardSupport" => "$basedir/src/platformsupport/clipboard",
+ "QtDeviceDiscoverySupport" => "$basedir/src/platformsupport/devicediscovery",
+ "QtEventDispatcherSupport" => "$basedir/src/platformsupport/eventdispatchers",
+ "QtFontDatabaseSupport" => "$basedir/src/platformsupport/fontdatabases",
+ "QtInputSupport" => "$basedir/src/platformsupport/input",
+ "QtPlatformCompositorSupport" => "$basedir/src/platformsupport/platformcompositor",
+ "QtServiceSupport" => "$basedir/src/platformsupport/services",
+ "QtThemeSupport" => "$basedir/src/platformsupport/themes",
+ "QtGraphicsSupport" => "$basedir/src/platformsupport/graphics",
+ "QtCglSupport" => "$basedir/src/platformsupport/cglconvenience",
+ "QtEglSupport" => "$basedir/src/platformsupport/eglconvenience",
+ "QtFbSupport" => "$basedir/src/platformsupport/fbconvenience",
+ "QtGlxSupport" => "$basedir/src/platformsupport/glxconvenience",
"QtPlatformHeaders" => "$basedir/src/platformheaders",
"QtANGLE/KHR" => "!$basedir/src/3rdparty/angle/include/KHR",
"QtANGLE/GLES2" => "!$basedir/src/3rdparty/angle/include/GLES2",
diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp
index 021d581aac..eeba882c70 100644
--- a/tests/auto/corelib/io/qfile/tst_qfile.cpp
+++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp
@@ -3389,7 +3389,7 @@ void tst_QFile::autocloseHandle()
//file is closed, read should fail
char buf;
QCOMPARE((int)QT_READ(fd, &buf, 1), -1);
- QVERIFY(errno = EBADF);
+ QVERIFY(errno == EBADF);
}
{
diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
index b3527f5d27..7bdebd1593 100644
--- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
@@ -756,6 +756,19 @@ void tst_QFileInfo::canonicalFilePath()
QDir::current().rmdir(linkTarget);
}
#endif
+
+#ifdef Q_OS_DARWIN
+ {
+ // Check if canonicalFilePath's result is in Composed normalization form.
+ QString path = QString::fromLatin1("caf\xe9");
+ QDir dir(QDir::tempPath());
+ dir.mkdir(path);
+ QString canonical = QFileInfo(dir.filePath(path)).canonicalFilePath();
+ QString roundtrip = QFile::decodeName(QFile::encodeName(canonical));
+ QCOMPARE(canonical, roundtrip);
+ dir.rmdir(path);
+ }
+#endif
}
void tst_QFileInfo::fileName_data()
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
index fe2a1a562d..0ee7599b2c 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
+++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
@@ -73,6 +73,8 @@ private slots:
void signalsEmittedAfterFileMoved();
+ void watchUnicodeCharacters();
+
private:
QString m_tempDirPattern;
#endif // QT_NO_FILESYSTEMWATCHER
@@ -748,6 +750,25 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved()
QVERIFY2(changedSpy.count() <= fileCount, changedSpy.receivedFilesMessage());
QTRY_COMPARE(changedSpy.count(), fileCount);
}
+
+void tst_QFileSystemWatcher::watchUnicodeCharacters()
+{
+ QTemporaryDir temporaryDirectory(m_tempDirPattern);
+ QVERIFY2(temporaryDirectory.isValid(), qPrintable(temporaryDirectory.errorString()));
+
+ QDir testDir(temporaryDirectory.path());
+ const QString subDir(QString::fromLatin1("caf\xe9"));
+ QVERIFY(testDir.mkdir(subDir));
+ testDir = QDir(temporaryDirectory.path() + QDir::separator() + subDir);
+
+ QFileSystemWatcher watcher;
+ QVERIFY(watcher.addPath(testDir.path()));
+
+ FileSystemWatcherSpy changedSpy(&watcher, FileSystemWatcherSpy::SpyOnDirectoryChanged);
+ QCOMPARE(changedSpy.count(), 0);
+ QVERIFY(testDir.mkdir("creme"));
+ QTRY_COMPARE(changedSpy.count(), 1);
+}
#endif // QT_NO_FILESYSTEMWATCHER
QTEST_MAIN(tst_QFileSystemWatcher)
diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
index 7642604cfe..6ab24d2480 100644
--- a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
+++ b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
@@ -35,7 +35,7 @@
# include <chrono>
#endif
-static const int minResolution = 100; // the minimum resolution for the tests
+static const int minResolution = 400; // the minimum resolution for the tests
Q_DECLARE_METATYPE(Qt::TimerType)
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index 28df01cc16..fe97695d19 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -216,6 +216,16 @@ void tst_QTimer::remainingTimeDuringActivation()
}
}
+namespace {
+
+#if QT_HAS_INCLUDE(<chrono>)
+ template <typename T>
+ std::chrono::milliseconds to_ms(T t)
+ { return std::chrono::duration_cast<std::chrono::milliseconds>(t); }
+#endif
+
+} // unnamed namespace
+
void tst_QTimer::basic_chrono()
{
#if !QT_HAS_INCLUDE(<chrono>)
@@ -225,7 +235,7 @@ void tst_QTimer::basic_chrono()
using namespace std::chrono;
TimerHelper helper;
QTimer timer;
- timer.setInterval(nanoseconds(0));
+ timer.setInterval(to_ms(nanoseconds(0)));
timer.start();
QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(0));
QCOMPARE(timer.remainingTimeAsDuration().count(), milliseconds::rep(0));
@@ -248,7 +258,7 @@ void tst_QTimer::basic_chrono()
QVERIFY(helper.count > oldCount);
helper.count = 0;
- timer.start(microseconds(200000));
+ timer.start(to_ms(microseconds(200000)));
QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(200));
QTest::qWait(50);
QCOMPARE(helper.count, 0);
@@ -864,7 +874,7 @@ void tst_QTimer::singleShot_chrono()
QCOMPARE(nhelper.count, 1);
int count = 0;
- QTimer::singleShot(microseconds(0), CountedStruct(&count));
+ QTimer::singleShot(to_ms(microseconds(0)), CountedStruct(&count));
QCoreApplication::processEvents();
QCOMPARE(count, 1);
diff --git a/tests/auto/corelib/tools/qdate/tst_qdate.cpp b/tests/auto/corelib/tools/qdate/tst_qdate.cpp
index f22138b795..0e189ba7aa 100644
--- a/tests/auto/corelib/tools/qdate/tst_qdate.cpp
+++ b/tests/auto/corelib/tools/qdate/tst_qdate.cpp
@@ -1145,6 +1145,7 @@ void tst_QDate::toStringDateFormat_data()
QTest::newRow("year < 0") << QDate(-1,1,1) << Qt::ISODate << QString();
QTest::newRow("year > 9999") << QDate(-1,1,1) << Qt::ISODate << QString();
QTest::newRow("RFC2822Date") << QDate(1974,12,1) << Qt::RFC2822Date << QString("01 Dec 1974");
+ QTest::newRow("ISODateWithMs") << QDate(1974,12,1) << Qt::ISODateWithMs << QString("1974-12-01");
}
void tst_QDate::toStringDateFormat()
diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
index 0404a276ff..4604e664b0 100644
--- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
@@ -732,46 +732,56 @@ void tst_QDateTime::fromMSecsSinceEpoch()
void tst_QDateTime::toString_isoDate_data()
{
QTest::addColumn<QDateTime>("datetime");
+ QTest::addColumn<Qt::DateFormat>("format");
QTest::addColumn<QString>("expected");
QTest::newRow("localtime")
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34))
- << QString("1978-11-09T13:28:34");
+ << Qt::ISODate << QString("1978-11-09T13:28:34");
QTest::newRow("UTC")
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), Qt::UTC)
- << QString("1978-11-09T13:28:34Z");
+ << Qt::ISODate << QString("1978-11-09T13:28:34Z");
QDateTime dt(QDate(1978, 11, 9), QTime(13, 28, 34));
dt.setOffsetFromUtc(19800);
QTest::newRow("positive OffsetFromUTC")
- << dt
+ << dt << Qt::ISODate
<< QString("1978-11-09T13:28:34+05:30");
dt.setUtcOffset(-7200);
QTest::newRow("negative OffsetFromUTC")
- << dt
+ << dt << Qt::ISODate
<< QString("1978-11-09T13:28:34-02:00");
dt.setUtcOffset(-900);
QTest::newRow("negative non-integral OffsetFromUTC")
- << dt
+ << dt << Qt::ISODate
<< QString("1978-11-09T13:28:34-00:15");
QTest::newRow("invalid")
<< QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), Qt::UTC)
- << QString();
+ << Qt::ISODate << QString();
+ QTest::newRow("without-ms")
+ << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34, 20))
+ << Qt::ISODate << QString("1978-11-09T13:28:34");
+ QTest::newRow("with-ms")
+ << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34, 20))
+ << Qt::ISODateWithMs << QString("1978-11-09T13:28:34.020");
}
void tst_QDateTime::toString_isoDate()
{
QFETCH(QDateTime, datetime);
+ QFETCH(Qt::DateFormat, format);
QFETCH(QString, expected);
QLocale oldLocale;
QLocale::setDefault(QLocale("en_US"));
- QString result = datetime.toString(Qt::ISODate);
+ QString result = datetime.toString(format);
QCOMPARE(result, expected);
- QDateTime resultDatetime = QDateTime::fromString(result, Qt::ISODate);
+ QDateTime resultDatetime = QDateTime::fromString(result, format);
// If expecting invalid result the datetime may still be valid, i.e. year < 0 or > 9999
if (!expected.isEmpty()) {
+ QEXPECT_FAIL("without-ms", "Qt::ISODate truncates milliseconds (QTBUG-56552)", Abort);
+
QCOMPARE(resultDatetime, datetime);
QCOMPARE(resultDatetime.date(), datetime.date());
QCOMPARE(resultDatetime.time(), datetime.time());
diff --git a/tests/auto/corelib/tools/qtime/tst_qtime.cpp b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
index 45af10c3ab..059e1e519b 100644
--- a/tests/auto/corelib/tools/qtime/tst_qtime.cpp
+++ b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
@@ -675,6 +675,9 @@ void tst_QTime::toStringDateFormat_data()
QTest::newRow("Text 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::TextDate << QString("10:12:34");
QTest::newRow("ISO 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::ISODate << QString("10:12:34");
QTest::newRow("RFC2822Date") << QTime(10, 12, 34, 999) << Qt::RFC2822Date << QString("10:12:34");
+ QTest::newRow("ISOWithMs 10:12:34.000") << QTime(10, 12, 34, 0) << Qt::ISODateWithMs << QString("10:12:34.000");
+ QTest::newRow("ISOWithMs 10:12:34.020") << QTime(10, 12, 34, 20) << Qt::ISODateWithMs << QString("10:12:34.020");
+ QTest::newRow("ISOWithMs 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::ISODateWithMs << QString("10:12:34.999");
}
void tst_QTime::toStringDateFormat()
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
index c349d0df09..895f68bbd7 100644
--- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
@@ -262,7 +262,7 @@ void tst_QPixmap::fromImage()
image.fill(0x7f7f7f7f);
const QPixmap pixmap = QPixmap::fromImage(image);
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle())
QSKIP("Requires XRender support");
#endif
@@ -486,7 +486,7 @@ void tst_QPixmap::fill()
else
pm = QPixmap(400, 400);
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (!bitmap && pm.handle()->classId() == QPlatformPixmap::X11Class && !pm.x11PictureHandle())
QSKIP("Requires XRender support");
#endif
@@ -516,7 +516,7 @@ void tst_QPixmap::fill()
void tst_QPixmap::fill_transparent()
{
QPixmap pixmap(10, 10);
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle())
QSKIP("Requires XRender support");
#endif
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index 45be8bf099..a08f1896bb 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -803,6 +803,24 @@ void tst_QWindow::isActive()
// child has focus
QVERIFY(window.isActive());
+ // test focus back to parent and then back to child (QTBUG-39362)
+ // also verify the cumulative FocusOut and FocusIn counts
+ // activate parent
+ window.requestActivate();
+ QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
+ QVERIFY(window.isActive());
+ QCoreApplication::processEvents();
+ QTRY_COMPARE(child.received(QEvent::FocusOut), 1);
+ QTRY_COMPARE(window.received(QEvent::FocusIn), 2);
+
+ // activate child again
+ child.requestActivate();
+ QTRY_COMPARE(QGuiApplication::focusWindow(), &child);
+ QVERIFY(child.isActive());
+ QCoreApplication::processEvents();
+ QTRY_COMPARE(window.received(QEvent::FocusOut), 2);
+ QTRY_COMPARE(child.received(QEvent::FocusIn), 2);
+
Window dialog;
dialog.setTransientParent(&window);
dialog.setGeometry(QRect(m_availableTopLeft + QPoint(110, 100), m_testWindowSize));
@@ -827,7 +845,7 @@ void tst_QWindow::isActive()
QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
QCoreApplication::processEvents();
QTRY_COMPARE(dialog.received(QEvent::FocusOut), 1);
- QTRY_COMPARE(window.received(QEvent::FocusIn), 2);
+ QTRY_COMPARE(window.received(QEvent::FocusIn), 3);
QVERIFY(window.isActive());
diff --git a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
index ab893385e3..9dd9ab05e8 100644
--- a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
+++ b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
@@ -107,7 +107,7 @@ private slots:
void qrgba64Premultiply();
void qrgba64Equivalence();
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
void setallowX11ColorNames();
#endif
};
@@ -1403,7 +1403,7 @@ void tst_QColor::achromaticHslHue()
QCOMPARE(hsl.hslHue(), -1);
}
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
void tst_QColor::setallowX11ColorNames()
{
#if defined(Q_OS_IRIX)
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 1bd7f67810..254ab1f8ad 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -298,6 +298,8 @@ private slots:
void rotateImage_data();
void rotateImage();
+ void QTBUG56252();
+
private:
void fillData();
void setPenColor(QPainter& p);
@@ -497,7 +499,7 @@ void tst_QPainter::drawPixmap_comp()
destPm.fill(c1);
srcPm.fill(c2);
-#if defined(Q_DEAD_CODE_FROM_QT4_X11)
+#if 0 // Used to be included in Qt4 for Q_WS_X11
if (!destPm.x11PictureHandle())
QSKIP("Requires XRender support");
#endif
@@ -5120,6 +5122,23 @@ void tst_QPainter::rotateImage()
}
+void tst_QPainter::QTBUG56252()
+{
+ QImage sourceImage(1770, 1477, QImage::Format_RGB32);
+ QImage rotatedImage(1478, 1771, QImage::Format_RGB32);
+ QTransform transformCenter;
+ transformCenter.translate(739.0, 885.5);
+ transformCenter.rotate(270.0);
+ transformCenter.translate(-885.0, -738.5);
+ QPainter painter;
+ painter.begin(&rotatedImage);
+ painter.setTransform(transformCenter);
+ painter.drawImage(QPoint(0, 0),sourceImage);
+ painter.end();
+
+ // If no crash or illegal memory read, all is fine
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp
index 6a297dbfc2..b20ad0f33c 100644
--- a/tests/auto/gui/painting/qregion/tst_qregion.cpp
+++ b/tests/auto/gui/painting/qregion/tst_qregion.cpp
@@ -33,7 +33,7 @@
#include <qbitmap.h>
#include <qpainter.h>
#include <qpolygon.h>
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
#include <private/qt_x11_p.h>
#endif
@@ -79,7 +79,7 @@ private slots:
void isEmpty_data();
void isEmpty();
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) && defined(QT_BUILD_INTERNAL)
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && defined(QT_BUILD_INTERNAL)
void clipRectangles();
#endif
@@ -893,7 +893,7 @@ void tst_QRegion::isEmpty()
QVERIFY(region.rects().isEmpty());
}
-#if defined(Q_DEAD_CODE_FROM_QT4_X11) && defined(QT_BUILD_INTERNAL)
+#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && defined(QT_BUILD_INTERNAL)
void tst_QRegion::clipRectangles()
{
QRegion region(30, 30, 30, 30);
diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp
index ed48a4978a..44921f68aa 100644
--- a/tests/auto/gui/qopengl/tst_qopengl.cpp
+++ b/tests/auto/gui/qopengl/tst_qopengl.cpp
@@ -109,6 +109,7 @@ private slots:
void vaoCreate();
void bufferCreate();
void bufferMapRange();
+ void defaultQGLCurrentBuffer();
};
struct SharedResourceTracker
@@ -1520,6 +1521,33 @@ void tst_QOpenGL::bufferMapRange()
ctx->doneCurrent();
}
+void tst_QOpenGL::defaultQGLCurrentBuffer()
+{
+ QScopedPointer<QSurface> surface(createSurface(QSurface::Window));
+ QScopedPointer<QOpenGLContext> ctx(new QOpenGLContext);
+ ctx->create();
+ ctx->makeCurrent(surface.data());
+
+ // Bind default FBO on the current context, and record what's the current QGL FBO. It should
+ // be Q_NULLPTR because the default platform OpenGL FBO is not backed by a
+ // QOpenGLFramebufferObject.
+ QOpenGLFramebufferObject::bindDefault();
+ QOpenGLFramebufferObject *defaultQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo;
+
+ // Create new FBO, bind it, and see that the QGL FBO points to the newly created FBO.
+ QScopedPointer<QOpenGLFramebufferObject> obj(new QOpenGLFramebufferObject(128, 128));
+ obj->bind();
+ QOpenGLFramebufferObject *customQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo;
+ QVERIFY(defaultQFBO != customQFBO);
+
+ // Bind the default FBO, and check that the QGL FBO points to the original FBO object.
+ QOpenGLFramebufferObject::bindDefault();
+ QOpenGLFramebufferObject *finalQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo;
+ QCOMPARE(defaultQFBO, finalQFBO);
+
+ ctx->doneCurrent();
+}
+
void tst_QOpenGL::nullTextureInitializtion()
{
QScopedPointer<QSurface> surface(createSurface(QSurface::Window));
diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
index 45cfd6f43a..dbe5bf7cc6 100644
--- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
+++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
@@ -844,6 +844,7 @@ void tst_QCssParser::colorValue_data()
QTest::newRow("hsla") << "color: hsva(10, 20, 30, 40)" << QColor::fromHsv(10, 20, 30, 40);
QTest::newRow("invalid1") << "color: rgb(why, does, it, always, rain, on, me)" << QColor();
QTest::newRow("invalid2") << "color: rgba(i, meant, norway)" << QColor();
+ QTest::newRow("invalid3") << "color: rgb(21)" << QColor();
QTest::newRow("role") << "color: palette(base)" << qApp->palette().color(QPalette::Base);
QTest::newRow("role2") << "color: palette( window-text ) " << qApp->palette().color(QPalette::WindowText);
QTest::newRow("transparent") << "color: transparent" << QColor(Qt::transparent);
diff --git a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
index 8a08cdc182..9d357a35f2 100644
--- a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
+++ b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
@@ -4,7 +4,5 @@ SOURCES += tst_qfontdatabase.cpp
QT += testlib core-private gui-private
TESTDATA += LED_REAL.TTF
-android {
- RESOURCES += testdata.qrc
-}
+RESOURCES += testdata.qrc
diff --git a/tests/auto/gui/text/qfontdatabase/testdata.qrc b/tests/auto/gui/text/qfontdatabase/testdata.qrc
index 8a8670bf17..81a0b5b0bf 100644
--- a/tests/auto/gui/text/qfontdatabase/testdata.qrc
+++ b/tests/auto/gui/text/qfontdatabase/testdata.qrc
@@ -1,5 +1,7 @@
<RCC>
<qresource prefix="/">
<file>LED_REAL.TTF</file>
+ <file alias="testfont.ttf">../../../shared/resources/testfont.ttf</file>
+ <file alias="testfont_condensed.ttf">../../../shared/resources/testfont_condensed.ttf</file>
</qresource>
</RCC>
diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index f71d808390..c53792da99 100644
--- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
@@ -64,20 +64,27 @@ private slots:
void aliases();
void fallbackFonts();
- void liberationFont();
+ void condensedFontWidth();
+ void condensedFontMatching();
private:
- const QString m_testFont;
+ QString m_ledFont;
+ QString m_testFont;
+ QString m_testFontCondensed;
};
tst_QFontDatabase::tst_QFontDatabase()
- : m_testFont(QFINDTESTDATA("LED_REAL.TTF"))
{
}
void tst_QFontDatabase::initTestCase()
{
+ m_ledFont = QFINDTESTDATA("LED_REAL.TTF");
+ m_testFont = QFINDTESTDATA("testfont.ttf");
+ m_testFontCondensed = QFINDTESTDATA("testfont_condensed.ttf");
+ QVERIFY(!m_ledFont.isEmpty());
QVERIFY(!m_testFont.isEmpty());
+ QVERIFY(!m_testFontCondensed.isEmpty());
}
void tst_QFontDatabase::styles_data()
@@ -209,13 +216,13 @@ void tst_QFontDatabase::addAppFont()
int id;
if (useMemoryFont) {
- QFile fontfile(m_testFont);
+ QFile fontfile(m_ledFont);
fontfile.open(QIODevice::ReadOnly);
QByteArray fontdata = fontfile.readAll();
QVERIFY(!fontdata.isEmpty());
id = QFontDatabase::addApplicationFontFromData(fontdata);
} else {
- id = QFontDatabase::addApplicationFont(m_testFont);
+ id = QFontDatabase::addApplicationFont(m_ledFont);
}
#if defined(Q_OS_HPUX) && defined(QT_NO_FONTCONFIG)
// Documentation says that X11 systems that don't have fontconfig
@@ -277,22 +284,54 @@ void tst_QFontDatabase::fallbackFonts()
}
}
-void tst_QFontDatabase::liberationFont()
+static QString testString()
{
- QString libSans("Liberation Sans");
- QString libSansNarrow("Liberation Sans Narrow");
+ return QStringLiteral("foo bar");
+}
+void tst_QFontDatabase::condensedFontWidth()
+{
QFontDatabase db;
- if (!db.hasFamily(libSans) || !db.hasFamily(libSansNarrow))
- QSKIP("Requires Liberation Sans installed");
+ QFontDatabase::addApplicationFont(m_testFont);
+ QFontDatabase::addApplicationFont(m_testFontCondensed);
+
+ QVERIFY(db.hasFamily("QtBidiTestFont"));
+ if (!db.hasFamily("QtBidiTestFontCondensed"))
+ QSKIP("This platform doesn't support font sub-family names (QTBUG-55625)");
- QFont fontLS(libSans);
- QFont fontLSN(libSansNarrow);
+ // Test we really get a condensed font, and a not renormalized one (QTBUG-48043):
+ QFont testFont("QtBidiTestFont");
+ QFont testFontCondensed("QtBidiTestFontCondensed");
+ QFontMetrics fmTF(testFont);
+ QFontMetrics fmTFC(testFontCondensed);
+ QVERIFY(fmTF.width(testString()) > fmTFC.width(testString()));
- QFontMetrics fmLS(fontLS);
- QFontMetrics fmLSN(fontLSN);
+}
- QVERIFY(fmLS.width(QStringLiteral("foo bar")) > fmLSN.width(QStringLiteral("foo bar")));
+void tst_QFontDatabase::condensedFontMatching()
+{
+ QFontDatabase db;
+ QFontDatabase::removeAllApplicationFonts();
+ QFontDatabase::addApplicationFont(m_testFontCondensed);
+ if (!db.hasFamily("QtBidiTestFont"))
+ QSKIP("This platform doesn't support preferred font family names (QTBUG-53478)");
+ QFontDatabase::addApplicationFont(m_testFont);
+
+ // Test we correctly get the condensed font using different font matching methods:
+ QFont tfcByStretch("QtBidiTestFont");
+ tfcByStretch.setStretch(QFont::Condensed);
+ QFont tfcByStyleName("QtBidiTestFont");
+ tfcByStyleName.setStyleName("Condensed");
+
+ QCOMPARE(QFontMetrics(tfcByStretch).width(testString()),
+ QFontMetrics(tfcByStyleName).width(testString()));
+
+ if (!db.hasFamily("QtBidiTestFontCondensed"))
+ QSKIP("This platform doesn't support font sub-family names (QTBUG-55625)");
+
+ QFont tfcBySubfamilyName("QtBidiTestFontCondensed");
+ QCOMPARE(QFontMetrics(tfcByStyleName).width(testString()),
+ QFontMetrics(tfcBySubfamilyName).width(testString()));
}
QTEST_MAIN(tst_QFontDatabase)
diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp
index f919937fc3..9d68b5c798 100644
--- a/tests/auto/network/access/http2/http2srv.cpp
+++ b/tests/auto/network/access/http2/http2srv.cpp
@@ -63,6 +63,16 @@ inline bool is_valid_client_stream(quint32 streamID)
return (streamID & 0x1) && streamID <= std::numeric_limits<qint32>::max();
}
+void fill_push_header(const HttpHeader &originalRequest, HttpHeader &promisedRequest)
+{
+ for (const auto &field : originalRequest) {
+ if (field.name == QByteArray(":authority") ||
+ field.name == QByteArray(":scheme")) {
+ promisedRequest.push_back(field);
+ }
+ }
+}
+
}
Http2Server::Http2Server(bool h2c, const Http2Settings &ss, const Http2Settings &cs)
@@ -96,6 +106,12 @@ Http2Server::~Http2Server()
{
}
+void Http2Server::enablePushPromise(bool pushEnabled, const QByteArray &path)
+{
+ pushPromiseEnabled = pushEnabled;
+ pushPath = path;
+}
+
void Http2Server::setResponseBody(const QByteArray &body)
{
responseBody = body;
@@ -112,7 +128,6 @@ void Http2Server::startServer()
emit serverStarted(serverPort());
}
-
void Http2Server::sendServerSettings()
{
Q_ASSERT(socket);
@@ -206,7 +221,7 @@ void Http2Server::incomingConnection(qintptr socketDescriptor)
if (clearTextHTTP2) {
socket.reset(new QTcpSocket);
const bool set = socket->setSocketDescriptor(socketDescriptor);
- Q_UNUSED(set) Q_ASSERT(set);
+ Q_ASSERT(set);
// Stop listening:
close();
QMetaObject::invokeMethod(this, "connectionEstablished",
@@ -531,6 +546,48 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody)
{
Q_ASSERT(activeRequests.find(streamID) != activeRequests.end());
+ const quint32 maxFrameSize(clientSetting(Settings::MAX_FRAME_SIZE_ID,
+ Http2::maxFrameSize));
+
+ if (pushPromiseEnabled) {
+ // A real server supporting PUSH_PROMISE will probably first send
+ // PUSH_PROMISE and then a normal response (to a real request),
+ // so that a client parsing this response and discovering another
+ // resource it needs, will _already_ have this additional resource
+ // in PUSH_PROMISE.
+ lastPromisedStream += 2;
+
+ writer.start(FrameType::PUSH_PROMISE, FrameFlag::END_HEADERS, streamID);
+ writer.append(lastPromisedStream);
+
+ HttpHeader pushHeader;
+ fill_push_header(activeRequests[streamID], pushHeader);
+ pushHeader.push_back(HeaderField(":method", "GET"));
+ pushHeader.push_back(HeaderField(":path", pushPath));
+
+ // Now interesting part, let's make it into 'stream':
+ activeRequests[lastPromisedStream] = pushHeader;
+
+ HPack::BitOStream ostream(writer.outboundFrame().buffer);
+ const bool result = encoder.encodeRequest(ostream, pushHeader);
+ Q_ASSERT(result);
+
+ // Well, it's not HEADERS, it's PUSH_PROMISE with ... HEADERS block.
+ // Should work.
+ writer.writeHEADERS(*socket, maxFrameSize);
+ qDebug() << "server sent a PUSH_PROMISE on" << lastPromisedStream;
+
+ if (responseBody.isEmpty())
+ responseBody = QByteArray("I PROMISE (AND PUSH) YOU ...");
+
+ // Now we send this promised data as a normal response on our reserved
+ // stream (disabling PUSH_PROMISE for the moment to avoid recursion):
+ pushPromiseEnabled = false;
+ sendResponse(lastPromisedStream, false);
+ pushPromiseEnabled = true;
+ // Now we'll continue with _normal_ response.
+ }
+
writer.start(FrameType::HEADERS, FrameFlag::END_HEADERS, streamID);
if (emptyBody)
writer.addFlag(FrameFlag::END_STREAM);
@@ -544,9 +601,7 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody)
HPack::BitOStream ostream(writer.outboundFrame().buffer);
const bool result = encoder.encodeResponse(ostream, header);
Q_ASSERT(result);
- Q_UNUSED(result)
- const quint32 maxFrameSize(clientSetting(Settings::MAX_FRAME_SIZE_ID, Http2::maxFrameSize));
writer.writeHEADERS(*socket, maxFrameSize);
if (!emptyBody) {
diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h
index 73b1d80f8e..15a4f212c9 100644
--- a/tests/auto/network/access/http2/http2srv.h
+++ b/tests/auto/network/access/http2/http2srv.h
@@ -68,6 +68,7 @@ public:
~Http2Server();
// To be called before server started:
+ void enablePushPromise(bool enabled, const QByteArray &path = QByteArray());
void setResponseBody(const QByteArray &body);
// Invokables, since we can call them from the main thread,
@@ -157,6 +158,9 @@ private:
QByteArray responseBody;
bool clearTextHTTP2 = false;
+ bool pushPromiseEnabled = false;
+ quint32 lastPromisedStream = 0;
+ QByteArray pushPath;
protected slots:
void ignoreErrorSlot();
diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp
index 582a103b2e..771ddb01be 100644
--- a/tests/auto/network/access/http2/tst_http2.cpp
+++ b/tests/auto/network/access/http2/tst_http2.cpp
@@ -44,8 +44,8 @@
#endif // NO_OPENSSL
#endif // NO_SSL
-
#include <cstdlib>
+#include <string>
// At the moment our HTTP/2 imlpementation requires ALPN and this means OpenSSL.
#if !defined(QT_NO_OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_TLSEXT)
@@ -68,6 +68,7 @@ private slots:
void multipleRequests();
void flowControlClientSide();
void flowControlServerSide();
+ void pushPromise();
protected slots:
// Slots to listen to our in-process server:
@@ -90,8 +91,8 @@ private:
// small payload.
void runEventLoop(int ms = 5000);
void stopEventLoop();
- // TODO: different parameters like client/server settings ...
- Http2Server *newServer(const Http2Settings &serverSettings);
+ Http2Server *newServer(const Http2Settings &serverSettings,
+ const Http2Settings &clientSettings = defaultClientSettings);
// Send a get or post request, depending on a payload (empty or not).
void sendRequest(int streamNumber,
QNetworkRequest::Priority priority = QNetworkRequest::NormalPriority,
@@ -105,15 +106,57 @@ private:
QTimer timer;
int nRequests = 0;
+ int nSentRequests = 0;
int windowUpdates = 0;
bool prefaceOK = false;
bool serverGotSettingsACK = false;
static const Http2Settings defaultServerSettings;
+ static const Http2Settings defaultClientSettings;
};
const Http2Settings tst_Http2::defaultServerSettings{{Http2::Settings::MAX_CONCURRENT_STREAMS_ID, 100}};
+const Http2Settings tst_Http2::defaultClientSettings{{Http2::Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)},
+ {Http2::Settings::ENABLE_PUSH_ID, quint32(0)}};
+
+namespace {
+
+// Our server lives/works on a different thread so we invoke its 'deleteLater'
+// instead of simple 'delete'.
+struct ServerDeleter
+{
+ static void cleanup(Http2Server *srv)
+ {
+ if (srv)
+ QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection);
+ }
+};
+
+using ServerPtr = QScopedPointer<Http2Server, ServerDeleter>;
+
+struct EnvVarGuard
+{
+ EnvVarGuard(const char *name, const QByteArray &value)
+ : varName(name),
+ prevValue(qgetenv(name))
+ {
+ Q_ASSERT(name);
+ qputenv(name, value);
+ }
+ ~EnvVarGuard()
+ {
+ if (prevValue.size())
+ qputenv(varName.c_str(), prevValue);
+ else
+ qunsetenv(varName.c_str());
+ }
+
+ const std::string varName;
+ const QByteArray prevValue;
+};
+
+} // unnamed namespace
tst_Http2::tst_Http2()
: workerThread(new QThread)
@@ -146,9 +189,9 @@ void tst_Http2::singleRequest()
serverPort = 0;
nRequests = 1;
- auto srv = newServer(defaultServerSettings);
+ ServerPtr srv(newServer(defaultServerSettings));
- QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
runEventLoop();
QVERIFY(serverPort != 0);
@@ -174,8 +217,6 @@ void tst_Http2::singleRequest()
QCOMPARE(reply->error(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
-
- QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection);
}
void tst_Http2::multipleRequests()
@@ -185,9 +226,9 @@ void tst_Http2::multipleRequests()
serverPort = 0;
nRequests = 10;
- auto srv = newServer(defaultServerSettings);
+ ServerPtr srv(newServer(defaultServerSettings));
- QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
runEventLoop();
QVERIFY(serverPort != 0);
@@ -198,8 +239,6 @@ void tst_Http2::multipleRequests()
QNetworkRequest::NormalPriority,
QNetworkRequest::LowPriority};
-
-
for (int i = 0; i < nRequests; ++i)
sendRequest(i, priorities[std::rand() % 3]);
@@ -208,8 +247,6 @@ void tst_Http2::multipleRequests()
QVERIFY(nRequests == 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
-
- QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection);
}
void tst_Http2::flowControlClientSide()
@@ -230,12 +267,12 @@ void tst_Http2::flowControlClientSide()
const Http2Settings serverSettings = {{Settings::MAX_CONCURRENT_STREAMS_ID, 3}};
- auto srv = newServer(serverSettings);
+ ServerPtr srv(newServer(serverSettings));
const QByteArray respond(int(Http2::defaultSessionWindowSize * 50), 'x');
srv->setResponseBody(respond);
- QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
runEventLoop();
QVERIFY(serverPort != 0);
@@ -249,8 +286,6 @@ void tst_Http2::flowControlClientSide()
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
QVERIFY(windowUpdates > 0);
-
- QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection);
}
void tst_Http2::flowControlServerSide()
@@ -270,11 +305,11 @@ void tst_Http2::flowControlServerSide()
const Http2Settings serverSettings = {{Settings::MAX_CONCURRENT_STREAMS_ID, 7}};
- auto srv = newServer(serverSettings);
+ ServerPtr srv(newServer(serverSettings));
const QByteArray payload(int(Http2::defaultSessionWindowSize * 500), 'x');
- QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
runEventLoop();
QVERIFY(serverPort != 0);
@@ -287,9 +322,73 @@ void tst_Http2::flowControlServerSide()
QVERIFY(nRequests == 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
+}
+
+void tst_Http2::pushPromise()
+{
+ // We will first send some request, the server should reply and also emulate
+ // PUSH_PROMISE sending us another response as promised.
+ using namespace Http2;
+
+ clearHTTP2State();
+
+ serverPort = 0;
+ nRequests = 1;
+
+ const EnvVarGuard env("QT_HTTP2_ENABLE_PUSH_PROMISE", "1");
+ const Http2Settings clientSettings{{Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)},
+ {Settings::ENABLE_PUSH_ID, quint32(1)}};
+
+ ServerPtr srv(newServer(defaultServerSettings, clientSettings));
+ srv->enablePushPromise(true, QByteArray("/script.js"));
- QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection);
- srv = nullptr;
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
+ runEventLoop();
+
+ QVERIFY(serverPort != 0);
+
+ const QString urlAsString((clearTextHTTP2 ? QString("http://127.0.0.1:%1/")
+ : QString("https://127.0.0.1:%1/")).arg(serverPort));
+ const QUrl requestUrl(urlAsString + "index.html");
+
+ QNetworkRequest request(requestUrl);
+ request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, QVariant(true));
+
+ auto reply = manager.get(request);
+ connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished);
+ // Since we're using self-signed certificates, ignore SSL errors:
+ reply->ignoreSslErrors();
+
+ runEventLoop();
+
+ QVERIFY(nRequests == 0);
+ QVERIFY(prefaceOK);
+ QVERIFY(serverGotSettingsACK);
+
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QVERIFY(reply->isFinished());
+
+ // Now, the most interesting part!
+ nSentRequests = 0;
+ nRequests = 1;
+ // Create an additional request (let's say, we parsed reply and realized we
+ // need another resource):
+
+ const QUrl promisedUrl(urlAsString + "script.js");
+ QNetworkRequest promisedRequest(promisedUrl);
+ promisedRequest.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, QVariant(true));
+ reply = manager.get(promisedRequest);
+ connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished);
+ reply->ignoreSslErrors();
+
+ runEventLoop();
+
+ // Let's check that NO request was actually made:
+ QCOMPARE(nSentRequests, 0);
+ // Decreased by replyFinished():
+ QCOMPARE(nRequests, 0);
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QVERIFY(reply->isFinished());
}
void tst_Http2::serverStarted(quint16 port)
@@ -318,12 +417,10 @@ void tst_Http2::stopEventLoop()
eventLoop.quit();
}
-Http2Server *tst_Http2::newServer(const Http2Settings &serverSettings)
+Http2Server *tst_Http2::newServer(const Http2Settings &serverSettings,
+ const Http2Settings &clientSettings)
{
using namespace Http2;
- // Client's settings are fixed by qhttp2protocolhandler.
- const Http2Settings clientSettings = {{Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)},
- {Settings::ENABLE_PUSH_ID, quint32(0)}};
auto srv = new Http2Server(clearTextHTTP2, serverSettings, clientSettings);
using Srv = Http2Server;
@@ -397,6 +494,7 @@ void tst_Http2::decompressionFailed(quint32 streamID)
void tst_Http2::receivedRequest(quint32 streamID)
{
+ ++nSentRequests;
qDebug() << " server got a request on stream" << streamID;
Http2Server *srv = qobject_cast<Http2Server *>(sender());
Q_ASSERT(srv);
diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
index f9cc33fb26..a0459021be 100644
--- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
+++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
@@ -160,16 +160,16 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data()
result += cookie;
QTest::newRow("effective-tld1-accepted") << preset << cookie << "http://something.co.uk" << result << true;
- // 2. anything .mz is an effective TLD ('*.mz'), but 'teledata.mz' is an exception
+ // 2. anything .ck is an effective TLD ('*.ck'), but 'www.ck' is an exception
result.clear();
preset.clear();
- cookie.setDomain(".farmacia.mz");
- QTest::newRow("effective-tld2-denied") << preset << cookie << "http://farmacia.mz" << result << false;
- QTest::newRow("effective-tld2-denied2") << preset << cookie << "http://www.farmacia.mz" << result << false;
- QTest::newRow("effective-tld2-denied3") << preset << cookie << "http://www.anything.farmacia.mz" << result << false;
- cookie.setDomain(".teledata.mz");
+ cookie.setDomain(".foo.ck");
+ QTest::newRow("effective-tld2-denied") << preset << cookie << "http://foo.ck" << result << false;
+ QTest::newRow("effective-tld2-denied2") << preset << cookie << "http://www.foo.ck" << result << false;
+ QTest::newRow("effective-tld2-denied3") << preset << cookie << "http://www.anything.foo.ck" << result << false;
+ cookie.setDomain(".www.ck");
result += cookie;
- QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.teledata.mz" << result << true;
+ QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.www.ck" << result << true;
result.clear();
preset.clear();
diff --git a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp
index b60be15754..ce895f734a 100644
--- a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp
+++ b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp
@@ -726,7 +726,7 @@ void tst_QGLThreads::painterOnPixmapInThread()
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL)
|| !QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedPixmaps))
QSKIP("No platformsupport for ThreadedOpenGL or ThreadedPixmaps");
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
QSKIP("Drawing text in threads onto X11 drawables currently crashes on some X11 servers.");
#endif
PaintThreadManager<PixmapWrapper> painterThreads(5);
diff --git a/tests/auto/other/lancelot/paintcommands.cpp b/tests/auto/other/lancelot/paintcommands.cpp
index 8d6886a6c6..2e6cb09aa5 100644
--- a/tests/auto/other/lancelot/paintcommands.cpp
+++ b/tests/auto/other/lancelot/paintcommands.cpp
@@ -2393,7 +2393,7 @@ void PaintCommands::command_surface_begin(QRegExp re)
m_painter->fillRect(QRect(0, 0, qRound(w), qRound(h)), Qt::transparent);
m_painter->restore();
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
} else if (m_type == WidgetType) {
m_surface_pixmap = QPixmap(qRound(w), qRound(h));
m_surface_pixmap.fill(Qt::transparent);
@@ -2444,7 +2444,7 @@ void PaintCommands::command_surface_end(QRegExp)
m_painter->beginNativePainting();
m_painter->endNativePainting();
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
} else if (m_type == WidgetType) {
m_painter->drawPixmap(m_surface_rect.topLeft(), m_surface_pixmap);
m_surface_pixmap = QPixmap();
diff --git a/tests/auto/other/macnativeevents/BLACKLIST b/tests/auto/other/macnativeevents/BLACKLIST
index 4129868022..3e68ba0cf0 100644
--- a/tests/auto/other/macnativeevents/BLACKLIST
+++ b/tests/auto/other/macnativeevents/BLACKLIST
@@ -2,8 +2,7 @@
[testDragWindow]
osx
[testMouseEnter]
-osx-10.9
-osx-10.8
+osx
[testChildDialogInFrontOfModalParent]
osx
[testChildWindowInFrontOfStaysOnTopParentWindow]
diff --git a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro
index 10d950541a..5cb3f5902a 100644
--- a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro
+++ b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro
@@ -1,12 +1,7 @@
CONFIG += testcase
-include($$QT_SOURCE_TREE/src/platformsupport/accessibility/accessibility.pri)
-include($$QT_SOURCE_TREE/src/platformsupport/linuxaccessibility/linuxaccessibility.pri)
-
TARGET = tst_qaccessibilitylinux
SOURCES += tst_qaccessibilitylinux.cpp
-CONFIG += gui
-
-QT += gui-private widgets dbus testlib
+QT += gui-private widgets dbus testlib accessibility_support-private linuxaccessibility_support-private
diff --git a/tests/auto/shared/resources/testfont_condensed.ttf b/tests/auto/shared/resources/testfont_condensed.ttf
new file mode 100644
index 0000000000..6a6c536202
--- /dev/null
+++ b/tests/auto/shared/resources/testfont_condensed.ttf
Binary files differ
diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
index 016835f142..2a629c3ff0 100644
--- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
+++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
@@ -1598,28 +1598,44 @@ class SetPage : public Operation
wizard->next();
}
QString describe() const { return QLatin1String("set page ") + QString::number(page); }
- const int page;
+ int page;
public:
- SetPage(int page) : page(page) {}
+ static QSharedPointer<SetPage> create(int page)
+ {
+ QSharedPointer<SetPage> o = QSharedPointer<SetPage>::create();
+ o->page = page;
+ return o;
+ }
};
class SetStyle : public Operation
{
void apply(QWizard *wizard) const { wizard->setWizardStyle(style); }
QString describe() const { return QLatin1String("set style ") + QString::number(style); }
- const QWizard::WizardStyle style;
+ QWizard::WizardStyle style;
public:
- SetStyle(QWizard::WizardStyle style) : style(style) {}
+ static QSharedPointer<SetStyle> create(QWizard::WizardStyle style)
+ {
+ QSharedPointer<SetStyle> o = QSharedPointer<SetStyle>::create();
+ o->style = style;
+ return o;
+ }
};
class SetOption : public Operation
{
void apply(QWizard *wizard) const { wizard->setOption(option, on); }
QString describe() const;
- const QWizard::WizardOption option;
- const bool on;
+ QWizard::WizardOption option;
+ bool on;
public:
- SetOption(QWizard::WizardOption option, bool on) : option(option), on(on) {}
+ static QSharedPointer<SetOption> create(QWizard::WizardOption option, bool on)
+ {
+ QSharedPointer<SetOption> o = QSharedPointer<SetOption>::create();
+ o->option = option;
+ o->on = on;
+ return o;
+ }
};
class OptionInfo
@@ -1644,16 +1660,16 @@ class OptionInfo
tags[QWizard::HaveCustomButton3] = "15/CB3";
for (int i = 0; i < 2; ++i) {
- QMap<QWizard::WizardOption, Operation *> operations_;
+ QMap<QWizard::WizardOption, QSharedPointer<Operation> > operations_;
foreach (QWizard::WizardOption option, tags.keys())
- operations_[option] = new SetOption(option, i == 1);
+ operations_[option] = SetOption::create(option, i == 1);
operations << operations_;
}
}
OptionInfo(OptionInfo const&);
OptionInfo& operator=(OptionInfo const&);
QMap<QWizard::WizardOption, QString> tags;
- QList<QMap<QWizard::WizardOption, Operation *> > operations;
+ QList<QMap<QWizard::WizardOption, QSharedPointer<Operation> > > operations;
public:
static OptionInfo &instance()
{
@@ -1662,7 +1678,7 @@ public:
}
QString tag(QWizard::WizardOption option) const { return tags.value(option); }
- Operation * operation(QWizard::WizardOption option, bool on) const
+ QSharedPointer<Operation> operation(QWizard::WizardOption option, bool on) const
{ return operations.at(on).value(option); }
QList<QWizard::WizardOption> options() const { return tags.keys(); }
};
@@ -1673,10 +1689,7 @@ QString SetOption::describe() const
+ QLatin1Char(on ? '1' : '0');
}
-Q_DECLARE_METATYPE(Operation *)
-Q_DECLARE_METATYPE(SetPage *)
-Q_DECLARE_METATYPE(SetStyle *)
-Q_DECLARE_METATYPE(SetOption *)
+Q_DECLARE_METATYPE(QVector<QSharedPointer<Operation> >)
class TestGroup
{
@@ -1693,14 +1706,17 @@ public:
combinations.clear();
}
- QList<Operation *> &add()
- { combinations << new QList<Operation *>; return *(combinations.last()); }
+ QVector<QSharedPointer<Operation> > &add()
+ {
+ combinations.resize(combinations.size() + 1);
+ return combinations.last();
+ }
void createTestRows()
{
for (int i = 0; i < combinations.count(); ++i) {
QTest::newRow((name.toLatin1() + ", row " + QByteArray::number(i)).constData())
- << (i == 0) << (type == Equality) << *(combinations.at(i));
+ << (i == 0) << (type == Equality) << combinations.at(i);
++nRows_;
}
}
@@ -1711,7 +1727,7 @@ private:
QString name;
Type type;
int nRows_;
- QList<QList<Operation *> *> combinations;
+ QVector<QVector<QSharedPointer<Operation> > > combinations;
};
class IntroPage : public QWizardPage
@@ -1795,9 +1811,9 @@ public:
}
}
- void applyOperations(const QList<Operation *> &operations)
+ void applyOperations(const QVector<QSharedPointer<Operation> > &operations)
{
- foreach (Operation * op, operations) {
+ foreach (const QSharedPointer<Operation> &op, operations) {
if (op) {
op->apply(this);
opsDescr += QLatin1Char('(') + op->describe() + QLatin1String(") ");
@@ -1817,31 +1833,29 @@ public:
class CombinationsTestData
{
TestGroup testGroup;
- QList<Operation *> pageOps;
- QList<Operation *> styleOps;
- QMap<bool, QList<Operation *> *> setAllOptions;
+ QVector<QSharedPointer<Operation> > pageOps;
+ QVector<QSharedPointer<Operation> > styleOps;
+ QMap<bool, QVector<QSharedPointer<Operation> > > setAllOptions;
public:
CombinationsTestData()
{
QTest::addColumn<bool>("ref");
QTest::addColumn<bool>("testEquality");
- QTest::addColumn<QList<Operation *> >("operations");
- pageOps << new SetPage(0) << new SetPage(1) << new SetPage(2);
- styleOps << new SetStyle(QWizard::ClassicStyle) << new SetStyle(QWizard::ModernStyle)
- << new SetStyle(QWizard::MacStyle);
+ QTest::addColumn<QVector<QSharedPointer<Operation> > >("operations");
+ pageOps << SetPage::create(0) << SetPage::create(1) << SetPage::create(2);
+ styleOps << SetStyle::create(QWizard::ClassicStyle) << SetStyle::create(QWizard::ModernStyle)
+ << SetStyle::create(QWizard::MacStyle);
#define SETPAGE(page) pageOps.at(page)
#define SETSTYLE(style) styleOps.at(style)
#define OPT(option, on) OptionInfo::instance().operation(option, on)
#define CLROPT(option) OPT(option, false)
#define SETOPT(option) OPT(option, true)
- setAllOptions[false] = new QList<Operation *>;
- setAllOptions[true] = new QList<Operation *>;
foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- *setAllOptions.value(false) << CLROPT(option);
- *setAllOptions.value(true) << SETOPT(option);
+ setAllOptions[false] << CLROPT(option);
+ setAllOptions[true] << SETOPT(option);
}
-#define CLRALLOPTS *setAllOptions.value(false)
-#define SETALLOPTS *setAllOptions.value(true)
+#define CLRALLOPTS setAllOptions.value(false)
+#define SETALLOPTS setAllOptions.value(true)
}
int nRows() const { return testGroup.nRows(); }
@@ -1893,7 +1907,7 @@ public:
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<Operation *> setOptions = *setAllOptions.value(i == 1);
+ QVector<QSharedPointer<Operation> > setOptions = setAllOptions.value(i == 1);
testGroup.reset("testAll 3.1");
testGroup.add() << setOptions;
@@ -1910,21 +1924,21 @@ public:
testGroup.createTestRows();
}
- foreach (Operation *pageOp, pageOps) {
+ foreach (const QSharedPointer<Operation> &pageOp, pageOps) {
testGroup.reset("testAll 4.1");
testGroup.add() << pageOp;
testGroup.add() << pageOp << pageOp;
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<Operation *> optionOps = *setAllOptions.value(i == 1);
+ QVector<QSharedPointer<Operation> > optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 4.2");
testGroup.add() << optionOps << pageOp;
testGroup.add() << pageOp << optionOps;
testGroup.createTestRows();
foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- Operation *optionOp = OPT(option, i == 1);
+ QSharedPointer<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 4.3");
testGroup.add() << optionOp << pageOp;
testGroup.add() << pageOp << optionOp;
@@ -1933,21 +1947,21 @@ public:
}
}
- foreach (Operation *styleOp, styleOps) {
+ foreach (const QSharedPointer<Operation> &styleOp, styleOps) {
testGroup.reset("testAll 5.1");
testGroup.add() << styleOp;
testGroup.add() << styleOp << styleOp;
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<Operation *> optionOps = *setAllOptions.value(i == 1);
+ QVector<QSharedPointer<Operation> > optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 5.2");
testGroup.add() << optionOps << styleOp;
testGroup.add() << styleOp << optionOps;
testGroup.createTestRows();
foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- Operation *optionOp = OPT(option, i == 1);
+ QSharedPointer<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 5.3");
testGroup.add() << optionOp << styleOp;
testGroup.add() << styleOp << optionOp;
@@ -1956,8 +1970,8 @@ public:
}
}
- foreach (Operation *pageOp, pageOps) {
- foreach (Operation *styleOp, styleOps) {
+ foreach (const QSharedPointer<Operation> &pageOp, pageOps) {
+ foreach (const QSharedPointer<Operation> &styleOp, styleOps) {
testGroup.reset("testAll 6.1");
testGroup.add() << pageOp;
@@ -1975,7 +1989,7 @@ public:
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<Operation *> optionOps = *setAllOptions.value(i == 1);
+ QVector<QSharedPointer<Operation> > optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 6.4");
testGroup.add() << optionOps << pageOp << styleOp;
testGroup.add() << pageOp << optionOps << styleOp;
@@ -1986,7 +2000,7 @@ public:
testGroup.createTestRows();
foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- Operation *optionOp = OPT(option, i == 1);
+ QSharedPointer<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 6.5");
testGroup.add() << optionOp << pageOp << styleOp;
testGroup.add() << pageOp << optionOp << styleOp;
@@ -2048,7 +2062,7 @@ void tst_QWizard::combinations()
{
QFETCH(bool, ref);
QFETCH(bool, testEquality);
- QFETCH(QList<Operation *>, operations);
+ QFETCH(QVector<QSharedPointer<Operation> >, operations);
TestWizard wizard;
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 76e3b43ce2..96a76d885d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -833,14 +833,14 @@ void tst_QGraphicsItem::parentItem()
void tst_QGraphicsItem::setParentItem()
{
QGraphicsScene scene;
- QGraphicsItem *item = scene.addRect(QRectF(0, 0, 10, 10));
+ const QScopedPointer<QGraphicsItem> item(scene.addRect(QRectF(0, 0, 10, 10)));
QCOMPARE(item->scene(), &scene);
- QGraphicsRectItem *child = new QGraphicsRectItem;
+ const QScopedPointer<QGraphicsRectItem> child(new QGraphicsRectItem);
QCOMPARE(child->scene(), (QGraphicsScene *)0);
// This implicitly adds the item to the parent's scene
- child->setParentItem(item);
+ child->setParentItem(item.data());
QCOMPARE(child->scene(), &scene);
// This just makes it a toplevel
@@ -848,8 +848,8 @@ void tst_QGraphicsItem::setParentItem()
QCOMPARE(child->scene(), &scene);
// Add the child back to the parent, then remove the parent from the scene
- child->setParentItem(item);
- scene.removeItem(item);
+ child->setParentItem(item.data());
+ scene.removeItem(item.data());
QCOMPARE(child->scene(), (QGraphicsScene *)0);
}
@@ -947,19 +947,19 @@ void tst_QGraphicsItem::flags()
QCOMPARE(item->pos(), QPointF(10, 10));
}
{
- QGraphicsItem* clippingParent = new QGraphicsRectItem;
+ const QScopedPointer<QGraphicsItem> clippingParent(new QGraphicsRectItem);
clippingParent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
- QGraphicsItem* nonClippingParent = new QGraphicsRectItem;
+ const QScopedPointer<QGraphicsItem> nonClippingParent(new QGraphicsRectItem);
nonClippingParent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
- QGraphicsItem* child = new QGraphicsRectItem(nonClippingParent);
+ QGraphicsItem* child = new QGraphicsRectItem(nonClippingParent.data());
QVERIFY(!child->isClipped());
- child->setParentItem(clippingParent);
+ child->setParentItem(clippingParent.data());
QVERIFY(child->isClipped());
- child->setParentItem(nonClippingParent);
+ child->setParentItem(nonClippingParent.data());
QVERIFY(!child->isClipped());
}
}
@@ -3118,7 +3118,8 @@ void tst_QGraphicsItem::isAncestorOf()
void tst_QGraphicsItem::commonAncestorItem()
{
- QGraphicsItem *ancestor = new QGraphicsRectItem;
+ QGraphicsRectItem ancestorItem;
+ QGraphicsItem *ancestor = &ancestorItem;
QGraphicsItem *grandMa = new QGraphicsRectItem;
QGraphicsItem *grandPa = new QGraphicsRectItem;
QGraphicsItem *brotherInLaw = new QGraphicsRectItem;
@@ -3618,7 +3619,7 @@ void tst_QGraphicsItem::setGroup()
QGraphicsItemGroup group1;
QGraphicsItemGroup group2;
- QGraphicsRectItem *rect = new QGraphicsRectItem;
+ const QScopedPointer<QGraphicsRectItem> rect(new QGraphicsRectItem);
QCOMPARE(rect->group(), (QGraphicsItemGroup *)0);
QCOMPARE(rect->parentItem(), (QGraphicsItem *)0);
rect->setGroup(&group1);
@@ -6813,8 +6814,8 @@ void tst_QGraphicsItem::opacity()
QFETCH(qreal, c2_effectiveOpacity);
QFETCH(qreal, c3_effectiveOpacity);
- QGraphicsRectItem *p = new QGraphicsRectItem;
- QGraphicsRectItem *c1 = new QGraphicsRectItem(p);
+ const QScopedPointer<QGraphicsRectItem> p(new QGraphicsRectItem);
+ QGraphicsRectItem *c1 = new QGraphicsRectItem(p.data());
QGraphicsRectItem *c2 = new QGraphicsRectItem(c1);
QGraphicsRectItem *c3 = new QGraphicsRectItem(c2);
@@ -7202,11 +7203,12 @@ void tst_QGraphicsItem::sceneTransformCache()
// Test that an item's scene transform is updated correctly when the
// parent is transformed.
QGraphicsScene scene;
- QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100);
+
+ const QScopedPointer<QGraphicsRectItem> rect(scene.addRect(0, 0, 100, 100));
rect->setPen(QPen(Qt::black, 0));
QGraphicsRectItem *rect2 = scene.addRect(0, 0, 100, 100);
rect2->setPen(QPen(Qt::black, 0));
- rect2->setParentItem(rect);
+ rect2->setParentItem(rect.data());
rect2->setTransform(QTransform().rotate(90), true);
rect->setTransform(QTransform::fromTranslate(0, 50), true);
QGraphicsView view(&scene);
@@ -7218,7 +7220,7 @@ void tst_QGraphicsItem::sceneTransformCache()
x.rotate(90);
QCOMPARE(rect2->sceneTransform(), x);
- scene.removeItem(rect);
+ scene.removeItem(rect.data());
//Crazy use case : rect4 child of rect3 so the transformation of rect4 will be cached.Good!
//We remove rect4 from the scene, then the validTransform bit flag is set to 0 and the index of the cache
@@ -10674,7 +10676,7 @@ void tst_QGraphicsItem::scenePosChange()
{
ScenePosChangeTester* root = new ScenePosChangeTester;
ScenePosChangeTester* child1 = new ScenePosChangeTester(root);
- ScenePosChangeTester* grandChild1 = new ScenePosChangeTester(child1);
+ const QScopedPointer<ScenePosChangeTester> grandChild1(new ScenePosChangeTester(child1));
ScenePosChangeTester* child2 = new ScenePosChangeTester(root);
ScenePosChangeTester* grandChild2 = new ScenePosChangeTester(child2);
@@ -10726,7 +10728,7 @@ void tst_QGraphicsItem::scenePosChange()
QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 3);
// remove
- scene.removeItem(grandChild1);
+ scene.removeItem(grandChild1.data());
delete grandChild2; grandChild2 = 0;
QCoreApplication::processEvents(); // QGraphicsScenePrivate::_q_updateScenePosDescendants()
root->moveBy(1.0, 1.0);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
index 01708d526c..d99c056abe 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
@@ -2775,7 +2775,7 @@ void tst_QGraphicsProxyWidget::windowOpacity()
// disabled on platforms without alpha channel support in QPixmap (e.g.,
// X11 without XRender).
int paints = 0;
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
paints = !X11->use_xrender;
#endif
QTRY_COMPARE(eventSpy.counts[QEvent::UpdateRequest], 0);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 2ecc1120b9..2e76ea3bb3 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -2900,6 +2900,9 @@ void tst_QGraphicsView::scrollBarRanges()
if (useStyledPanel && style == QStringLiteral("Macintosh") && platformName == QStringLiteral("cocoa"))
QSKIP("Insignificant on OSX");
+
+ QScopedPointer<QStyle> stylePtr;
+
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setRenderHint(QPainter::Antialiasing);
@@ -2907,9 +2910,10 @@ void tst_QGraphicsView::scrollBarRanges()
view.setFrameStyle(useStyledPanel ? QFrame::StyledPanel : QFrame::NoFrame);
if (style == QString("motif"))
- view.setStyle(new FauxMotifStyle);
+ stylePtr.reset(new FauxMotifStyle);
else
- view.setStyle(QStyleFactory::create(style));
+ stylePtr.reset(QStyleFactory::create(style));
+ view.setStyle(stylePtr.data());
view.setStyleSheet(" "); // enables style propagation ;-)
int adjust = 0;
@@ -3476,7 +3480,7 @@ void tst_QGraphicsView::task245469_itemsAtPointWithClip()
static QGraphicsView *createSimpleViewAndScene()
{
QGraphicsView *view = new QGraphicsView;
- QGraphicsScene *scene = new QGraphicsScene;
+ QGraphicsScene *scene = new QGraphicsScene(view);
view->setScene(scene);
view->setBackgroundBrush(Qt::blue);
@@ -3604,7 +3608,7 @@ void tst_QGraphicsView::moveItemWhileScrolling()
MoveItemScrollView()
{
setWindowFlags(Qt::X11BypassWindowManagerHint);
- setScene(new QGraphicsScene(0, 0, 1000, 1000));
+ setScene(new QGraphicsScene(0, 0, 1000, 1000, this));
rect = scene()->addRect(0, 0, 10, 10);
rect->setPos(50, 50);
rect->setPen(QPen(Qt::black, 0));
@@ -3670,7 +3674,7 @@ void tst_QGraphicsView::centerOnDirtyItem()
toplevel.setWindowFlags(view.windowFlags() | Qt::WindowStaysOnTopHint);
view.resize(200, 200);
- QGraphicsScene *scene = new QGraphicsScene;
+ QGraphicsScene *scene = new QGraphicsScene(&view);
view.setScene(scene);
view.setSceneRect(-1000, -1000, 2000, 2000);
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 30c1b9c44b..5567641dde 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -1000,7 +1000,7 @@ void tst_QAbstractItemView::setItemDelegate()
centerOnScreen(&v);
moveCursorAway(&v);
v.show();
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
QCursor::setPos(v.geometry().center());
#endif
QApplication::setActiveWindow(&v);
diff --git a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
index 7796627bd9..83e1850524 100644
--- a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
+++ b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
@@ -315,7 +315,7 @@ void tst_QAction::enabledVisibleInteraction()
void tst_QAction::task200823_tooltip()
{
- QAction *action = new QAction("foo", 0);
+ const QScopedPointer<QAction> action(new QAction("foo", Q_NULLPTR));
QString shortcut("ctrl+o");
action->setShortcut(shortcut);
@@ -329,8 +329,8 @@ void tst_QAction::task200823_tooltip()
void tst_QAction::task229128TriggeredSignalWithoutActiongroup()
{
// test without a group
- QAction *actionWithoutGroup = new QAction("Test", qApp);
- QSignalSpy spyWithoutGroup(actionWithoutGroup, SIGNAL(triggered(bool)));
+ const QScopedPointer<QAction> actionWithoutGroup(new QAction("Test", Q_NULLPTR));
+ QSignalSpy spyWithoutGroup(actionWithoutGroup.data(), SIGNAL(triggered(bool)));
QCOMPARE(spyWithoutGroup.count(), 0);
actionWithoutGroup->trigger();
// signal should be emitted
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 411b925adb..d6f3728663 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -2155,8 +2155,8 @@ void tst_QApplication::noQuitOnHide()
{
int argc = 0;
QApplication app(argc, 0);
- QWidget *window1 = new NoQuitOnHideWidget;
- window1->show();
+ NoQuitOnHideWidget window1;
+ window1.show();
QCOMPARE(app.exec(), 1);
}
@@ -2190,12 +2190,12 @@ void tst_QApplication::abortQuitOnShow()
{
int argc = 0;
QApplication app(argc, 0);
- QWidget *window1 = new ShowCloseShowWidget(false);
- window1->show();
+ ShowCloseShowWidget window1(false);
+ window1.show();
QCOMPARE(app.exec(), 0);
- QWidget *window2 = new ShowCloseShowWidget(true);
- window2->show();
+ ShowCloseShowWidget window2(true);
+ window2.show();
QCOMPARE(app.exec(), 1);
}
diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
index b7ca5d21c7..01e3d7bac0 100644
--- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
+++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
@@ -51,6 +51,44 @@ static inline void setFrameless(QWidget *w)
w->setWindowFlags(flags);
}
+struct QFormLayoutTakeRowResultHolder {
+ QFormLayoutTakeRowResultHolder(QFormLayout::TakeRowResult result) Q_DECL_NOTHROW
+ : labelItem(result.labelItem),
+ fieldItem(result.fieldItem)
+ {
+ }
+ ~QFormLayoutTakeRowResultHolder()
+ {
+ // re-use a QFormLayout to recursively reap the QLayoutItems:
+ QFormLayout disposer;
+ if (labelItem)
+ disposer.setItem(0, QFormLayout::LabelRole, labelItem);
+ if (fieldItem)
+ disposer.setItem(0, QFormLayout::FieldRole, fieldItem);
+ }
+ QFormLayoutTakeRowResultHolder(QFormLayoutTakeRowResultHolder &&other) Q_DECL_NOTHROW
+ : labelItem(other.labelItem),
+ fieldItem(other.fieldItem)
+ {
+ other.labelItem = nullptr;
+ other.fieldItem = nullptr;
+ }
+ QFormLayoutTakeRowResultHolder &operator=(QFormLayoutTakeRowResultHolder &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ void swap(QFormLayoutTakeRowResultHolder &other) Q_DECL_NOTHROW
+ {
+ qSwap(labelItem, other.labelItem);
+ qSwap(fieldItem, other.fieldItem);
+ }
+
+ QLayoutItem *labelItem;
+ QLayoutItem *fieldItem;
+};
+
class tst_QFormLayout : public QObject
{
Q_OBJECT
@@ -396,7 +434,8 @@ void tst_QFormLayout::setFormStyle()
QCOMPARE(layout.rowWrapPolicy(), QFormLayout::DontWrapRows);
#endif
- widget.setStyle(QStyleFactory::create("windows"));
+ const QScopedPointer<QStyle> windowsStyle(QStyleFactory::create("windows"));
+ widget.setStyle(windowsStyle.data());
QCOMPARE(layout.labelAlignment(), Qt::AlignLeft);
QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop));
@@ -407,14 +446,16 @@ void tst_QFormLayout::setFormStyle()
this test is cross platform.. so create dummy styles that
return all the right stylehints.
*/
- widget.setStyle(new DummyMacStyle());
+ DummyMacStyle macStyle;
+ widget.setStyle(&macStyle);
QCOMPARE(layout.labelAlignment(), Qt::AlignRight);
QVERIFY(layout.formAlignment() == (Qt::AlignHCenter | Qt::AlignTop));
QCOMPARE(layout.fieldGrowthPolicy(), QFormLayout::FieldsStayAtSizeHint);
QCOMPARE(layout.rowWrapPolicy(), QFormLayout::DontWrapRows);
- widget.setStyle(new DummyQtopiaStyle());
+ DummyQtopiaStyle qtopiaStyle;
+ widget.setStyle(&qtopiaStyle);
QCOMPARE(layout.labelAlignment(), Qt::AlignRight);
QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop));
@@ -814,7 +855,7 @@ void tst_QFormLayout::takeRow()
QCOMPARE(layout->count(), 3);
QCOMPARE(layout->rowCount(), 2);
- QFormLayout::TakeRowResult result = layout->takeRow(1);
+ QFormLayoutTakeRowResultHolder result = layout->takeRow(1);
QVERIFY(w2);
QVERIFY(result.fieldItem);
@@ -853,7 +894,7 @@ void tst_QFormLayout::takeRow_QWidget()
QCOMPARE(layout->count(), 3);
QCOMPARE(layout->rowCount(), 2);
- QFormLayout::TakeRowResult result = layout->takeRow(w1);
+ QFormLayoutTakeRowResultHolder result = layout->takeRow(w1);
QVERIFY(w1);
QVERIFY(result.fieldItem);
@@ -898,7 +939,7 @@ void tst_QFormLayout::takeRow_QLayout()
QCOMPARE(layout->count(), 3);
QCOMPARE(layout->rowCount(), 2);
- QFormLayout::TakeRowResult result = layout->takeRow(l1);
+ QFormLayoutTakeRowResultHolder result = layout->takeRow(l1);
QVERIFY(l1);
QVERIFY(w1);
@@ -1123,7 +1164,7 @@ void tst_QFormLayout::takeAt()
QCOMPARE(layout->count(), 7);
for (int i = 6; i >= 0; --i) {
- layout->takeAt(0);
+ delete layout->takeAt(0);
QCOMPARE(layout->count(), i);
}
}
@@ -1215,7 +1256,7 @@ void tst_QFormLayout::replaceWidget()
QFormLayout::ItemRole role;
// replace editor
- layout->replaceWidget(edit1, edit3);
+ delete layout->replaceWidget(edit1, edit3);
edit1->hide(); // Not strictly needed for the test, but for normal usage it is.
QCOMPARE(layout->indexOf(edit1), -1);
QCOMPARE(layout->indexOf(edit3), editIndex);
@@ -1226,7 +1267,7 @@ void tst_QFormLayout::replaceWidget()
QCOMPARE(rownum, 0);
QCOMPARE(role, QFormLayout::FieldRole);
- layout->replaceWidget(label1, label2);
+ delete layout->replaceWidget(label1, label2);
label1->hide();
QCOMPARE(layout->indexOf(label1), -1);
QCOMPARE(layout->indexOf(label2), labelIndex);
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 5f3fed1f66..0c25a01ba0 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -10245,14 +10245,13 @@ public slots:
bool eventFilter(QObject *o, QEvent *e)
{
- if (modal && modal->button && o == modal->button) {
- switch (e->type()) {
- case QEvent::Enter:
+ switch (e->type()) {
+ case QEvent::Enter:
+ if (modal && modal->button && o == modal->button)
enters++;
- break;
- default:
- break;
- }
+ break;
+ default:
+ break;
}
return QDialog::eventFilter(o, e);
}
diff --git a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp
index 8573cea35f..a3e7219892 100644
--- a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp
+++ b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp
@@ -1200,6 +1200,150 @@ void tst_QUndoStack::setClean()
true, // undoChanged
true); // redoChanged
QCOMPARE(stack.cleanIndex(), -1);
+
+ stack.setClean();
+ QCOMPARE(str, QString());
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ true, // clean
+ 1, // count
+ 0, // index
+ false, // canUndo
+ "", // undoText
+ true, // canRedo
+ "insert", // redoText
+ true, // cleanChanged
+ false, // indexChanged
+ false, // undoChanged
+ false); // redoChanged
+ QCOMPARE(stack.cleanIndex(), 0);
+
+ stack.resetClean();
+ QCOMPARE(str, QString());
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ false, // clean
+ 1, // count
+ 0, // index
+ false, // canUndo
+ "", // undoText
+ true, // canRedo
+ "insert", // redoText
+ true, // cleanChanged
+ false, // indexChanged
+ false, // undoChanged
+ false); // redoChanged
+ QCOMPARE(stack.cleanIndex(), -1);
+
+ stack.redo();
+ QCOMPARE(str, QString("foo"));
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ false, // clean
+ 1, // count
+ 1, // index
+ true, // canUndo
+ "insert", // undoText
+ false, // canRedo
+ "", // redoText
+ false, // cleanChanged
+ true, // indexChanged
+ true, // undoChanged
+ true); // redoChanged
+ QCOMPARE(stack.cleanIndex(), -1);
+
+ stack.setClean();
+ QCOMPARE(str, QString("foo"));
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ true, // clean
+ 1, // count
+ 1, // index
+ true, // canUndo
+ "insert", // undoText
+ false, // canRedo
+ "", // redoText
+ true, // cleanChanged
+ false, // indexChanged
+ false, // undoChanged
+ false); // redoChanged
+ QCOMPARE(stack.cleanIndex(), 1);
+
+ stack.undo();
+ QCOMPARE(str, QString());
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ false, // clean
+ 1, // count
+ 0, // index
+ false, // canUndo
+ "", // undoText
+ true, // canRedo
+ "insert", // redoText
+ true, // cleanChanged
+ true, // indexChanged
+ true, // undoChanged
+ true); // redoChanged
+ QCOMPARE(stack.cleanIndex(), 1);
+
+ stack.resetClean();
+ QCOMPARE(str, QString());
+ checkState(redoTextChangedSpy,
+ canRedoChangedSpy,
+ undoTextChangedSpy,
+ redoAction,
+ undoAction,
+ canUndoChangedSpy,
+ cleanChangedSpy,
+ indexChangedSpy,
+ stack,
+ false, // clean
+ 1, // count
+ 0, // index
+ false, // canUndo
+ "", // undoText
+ true, // canRedo
+ "insert", // redoText
+ false, // cleanChanged
+ false, // indexChanged
+ false, // undoChanged
+ false); // redoChanged
+ QCOMPARE(stack.cleanIndex(), -1);
}
void tst_QUndoStack::clear()
diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
index 30e4f63aa1..680fea27dd 100644
--- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
@@ -861,6 +861,10 @@ void tst_QMainWindow::takeCentralWidget() {
QVERIFY(!mw.centralWidget());
+ // verify that we don't crash when trying to take a non-set
+ // central widget but just return a null pointer instead
+ QVERIFY(!mw.takeCentralWidget());
+
mw.setCentralWidget(w1);
QWidget *oldCentralWidget = mw.takeCentralWidget();
diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
index 2b8f3032bf..52d7a39406 100644
--- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
+++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
@@ -474,7 +474,7 @@ void tst_QMdiArea::subWindowActivated2()
// Check that we only emit _one_ signal and the active window
// is unchanged after hide/show.
mdiArea.hide();
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
qt_x11_wait_for_window_manager(&mdiArea);
#endif
QTest::qWait(100);
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index 76c3ac4143..a9d8c48d63 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -49,7 +49,7 @@
#include <QSizeGrip>
QT_BEGIN_NAMESPACE
-#if !defined(Q_DEAD_CODE_FROM_QT4_WIN)
+#if 1 // Used to be excluded in Qt4 for Q_WS_WIN
extern bool qt_tab_all_widgets();
#endif
QT_END_NAMESPACE
diff --git a/tests/auto/widgets/widgets/qmenubar/BLACKLIST b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
index 4f9508266c..d5c3bdb93f 100644
--- a/tests/auto/widgets/widgets/qmenubar/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
@@ -5,3 +5,5 @@ ubuntu-14.04
redhatenterpriselinuxworkstation-6.6
[task256322_highlight]
osx
+[taskQTBUG46812_doNotLeaveMenubarHighlighted]
+osx
diff --git a/tests/auto/widgets/widgets/qmenubar/qmenubar.pro b/tests/auto/widgets/widgets/qmenubar/qmenubar.pro
index 3fb6ae61a8..e680cf4d7d 100644
--- a/tests/auto/widgets/widgets/qmenubar/qmenubar.pro
+++ b/tests/auto/widgets/widgets/qmenubar/qmenubar.pro
@@ -2,3 +2,8 @@ CONFIG += testcase
TARGET = tst_qmenubar
QT += widgets testlib
SOURCES += tst_qmenubar.cpp
+
+macos: {
+ OBJECTIVE_SOURCES += tst_qmenubar_mac.mm
+ LIBS += -framework AppKit
+}
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 5e27f5e80f..52e631ef57 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -131,6 +131,11 @@ private slots:
void cornerWidgets();
void taskQTBUG53205_crashReparentNested();
void taskQTBUG46812_doNotLeaveMenubarHighlighted();
+#ifdef Q_OS_MACOS
+ void taskQTBUG56275_reinsertMenuInParentlessQMenuBar();
+#endif
+
+ void platformMenu();
protected slots:
void onSimpleActivated( QAction*);
@@ -1493,6 +1498,25 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested()
testMenus.actions[0]->trigger();
}
+// QTBUG-56526
+void tst_QMenuBar::platformMenu()
+{
+ QMenuBar menuBar;
+ QPlatformMenuBar *platformMenuBar = menuBar.platformMenuBar();
+ if (!platformMenuBar)
+ QSKIP("No platform menubar implementation available on this platform.");
+
+ // QMenu must not create a platform menu instance at creation time, because
+ // on Unity the type of the platform menu instance must be different (QGtk3Menu
+ // vs. QDbusPlatformMenu) depending on whether the menu is in the global menubar
+ // or a standalone context menu.
+ QMenu *menu = new QMenu(&menuBar);
+ QVERIFY(!menu->platformMenu());
+
+ menuBar.addMenu(menu);
+ QVERIFY(menu->platformMenu());
+}
+
void tst_QMenuBar::slotForTaskQTBUG53205()
{
QWidget *parent = taskQTBUG53205MenuBar->parentWidget();
@@ -1532,6 +1556,28 @@ void tst_QMenuBar::taskQTBUG46812_doNotLeaveMenubarHighlighted()
QCOMPARE(m_simpleActivatedCount, 2);
}
+#ifdef Q_OS_MACOS
+extern bool tst_qmenubar_taskQTBUG56275(QMenuBar *);
+
+void tst_QMenuBar::taskQTBUG56275_reinsertMenuInParentlessQMenuBar()
+{
+ QMenuBar menubar;
+
+ QMenu *menu = new QMenu("menu", &menubar);
+ QMenu* submenu = menu->addMenu("submenu");
+ submenu->addAction("action1");
+ submenu->addAction("action2");
+ menu->addAction("action3");
+ menubar.addMenu(menu);
+
+ QTest::qWait(100);
+ menubar.clear();
+ menubar.addMenu(menu);
+ QTest::qWait(100);
+
+ QVERIFY(tst_qmenubar_taskQTBUG56275(&menubar));
+}
+#endif // Q_OS_MACOS
QTEST_MAIN(tst_QMenuBar)
#include "tst_qmenubar.moc"
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm
new file mode 100644
index 0000000000..4645de4d7a
--- /dev/null
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+#include <QMenuBar>
+#include <QTest>
+
+bool tst_qmenubar_taskQTBUG56275(QMenuBar *menubar)
+{
+ NSMenu *mainMenu = menubar->toNSMenu();
+ return mainMenu.numberOfItems == 2
+ && [[mainMenu itemAtIndex:1].title isEqualToString:@"menu"];
+}
diff --git a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp
index da38ed254b..8a5c8ec1df 100644
--- a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp
+++ b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp
@@ -770,22 +770,22 @@ void tst_QXmlSimpleReader::dtdRecursionLimit()
QVERIFY(file.open(QIODevice::ReadOnly));
QXmlSimpleReader xmlReader;
{
- QXmlInputSource *source = new QXmlInputSource(&file);
+ QXmlInputSource source(&file);
TestHandler handler;
xmlReader.setDeclHandler(&handler);
xmlReader.setErrorHandler(&handler);
- QVERIFY(!xmlReader.parse(source));
+ QVERIFY(!xmlReader.parse(&source));
}
file.close();
file.setFileName(QFINDTESTDATA("xmldocs/1-levels-nested-dtd.xml"));
QVERIFY(file.open(QIODevice::ReadOnly));
{
- QXmlInputSource *source = new QXmlInputSource(&file);
+ QXmlInputSource source(&file);
TestHandler handler;
xmlReader.setDeclHandler(&handler);
xmlReader.setErrorHandler(&handler);
- QVERIFY(!xmlReader.parse(source));
+ QVERIFY(!xmlReader.parse(&source));
// The error wasn't because of the recursion limit being reached,
// it was because the document is not valid.
QVERIFY(handler.recursionCount < 2);
@@ -795,11 +795,11 @@ void tst_QXmlSimpleReader::dtdRecursionLimit()
file.setFileName(QFINDTESTDATA("xmldocs/internal-entity-polynomial-attribute.xml"));
QVERIFY(file.open(QIODevice::ReadOnly));
{
- QXmlInputSource *source = new QXmlInputSource(&file);
+ QXmlInputSource source(&file);
TestHandler handler;
xmlReader.setDeclHandler(&handler);
xmlReader.setErrorHandler(&handler);
- QVERIFY(!xmlReader.parse(source));
+ QVERIFY(!xmlReader.parse(&source));
QCOMPARE(handler.recursionCount, 2);
}
}
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
index 70b9134718..de4e9e5ad7 100644
--- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
@@ -30,7 +30,7 @@
#include <QtGui>
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
#define CALLGRIND_START_INSTRUMENTATION {}
#define CALLGRIND_STOP_INSTRUMENTATION {}
#else
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp
index 957ad06783..6c97f94683 100644
--- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp
@@ -27,14 +27,14 @@
****************************************************************************/
#include <QtGui>
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
#define CALLGRIND_START_INSTRUMENTATION {}
#define CALLGRIND_STOP_INSTRUMENTATION {}
#else
#include "valgrind/callgrind.h"
#endif
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
extern void qt_x11_wait_for_window_manager(QWidget *);
#endif
@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
View view(&scene, item);
view.resize(300, 300);
view.show();
-#ifdef Q_DEAD_CODE_FROM_QT4_X11
+#if 0 // Used to be included in Qt4 for Q_WS_X11
qt_x11_wait_for_window_manager(&view);
#endif
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp
index 5b6083d5ac..1fbb229cd8 100644
--- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp
@@ -27,7 +27,7 @@
****************************************************************************/
#include <QtGui>
-#ifdef Q_DEAD_CODE_FROM_QT4_WIN
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
#define CALLGRIND_START_INSTRUMENTATION {}
#define CALLGRIND_STOP_INSTRUMENTATION {}
#else
diff --git a/tests/manual/lance/main.cpp b/tests/manual/lance/main.cpp
index 5d7edc0a99..c1ace138f9 100644
--- a/tests/manual/lance/main.cpp
+++ b/tests/manual/lance/main.cpp
@@ -327,7 +327,7 @@ int main(int argc, char **argv)
checkers_background = false;
}
} else {
-#if defined (Q_DEAD_CODE_FROM_QT4_WIN)
+#if 0 // Used to be included in Qt4 for Q_WS_WIN
QString input = QString::fromLocal8Bit(argv[i]);
if (input.indexOf('*') >= 0) {
QFileInfo info(input);
diff --git a/tests/manual/qopenglcontext/qopenglcontext.pro b/tests/manual/qopenglcontext/qopenglcontext.pro
index c5943809c6..08a9ab407c 100644
--- a/tests/manual/qopenglcontext/qopenglcontext.pro
+++ b/tests/manual/qopenglcontext/qopenglcontext.pro
@@ -1,7 +1,7 @@
TEMPLATE = app
TARGET = qopenglcontext
-QT += gui-private platformsupport-private
+QT += gui-private egl_support-private
HEADERS += $$PWD/qopenglcontextwindow.h
diff --git a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp b/tests/manual/qopenglcontext/qopenglcontextwindow.cpp
index f49908ca28..0763d7244c 100644
--- a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp
+++ b/tests/manual/qopenglcontext/qopenglcontextwindow.cpp
@@ -33,7 +33,7 @@
#include <QtGui/QMatrix4x4>
#include <qpa/qplatformnativeinterface.h>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
#include <QtPlatformHeaders/QEGLNativeContext>
QOpenGLContextWindow::QOpenGLContextWindow()
diff --git a/tests/manual/textrendering/glyphshaping/main.cpp b/tests/manual/textrendering/glyphshaping/main.cpp
index 62d2475462..c3acda953d 100644
--- a/tests/manual/textrendering/glyphshaping/main.cpp
+++ b/tests/manual/textrendering/glyphshaping/main.cpp
@@ -160,7 +160,7 @@ bool dumpHtml(const QString &pathName)
QString platformName = QString::fromLatin1(
#if defined(Q_OS_WIN)
"Win32"
-#elif defined(Q_DEAD_CODE_FROM_QT4_X11)
+#elif 0 // Used to be included in Qt4 for Q_WS_X11
"X11"
#else
""
diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp
index 78298f1068..6cc350acc5 100644
--- a/tools/configure/environment.cpp
+++ b/tools/configure/environment.cpp
@@ -36,6 +36,7 @@
#include <qfile.h>
#include <qfileinfo.h>
#include <qstandardpaths.h>
+#include <qtemporaryfile.h>
#include <process.h>
#include <errno.h>